if else czy swich - problem ze zrozumieniem jednej różnicy
Ostatnio zmodyfikowano 2014-05-20 23:08
antonio12 Temat założony przez niniejszego użytkownika |
if else czy swich - problem ze zrozumieniem jednej różnicy » 2014-05-20 13:58:58 Są 3 różnice pomiędzy użyciem switch or if else: 1.switch tylko porównywany do obiektu całkowitego 2.w sytuacji, gdy operacja porównania jest inna niż "czy a jest równe b" używamy instrukcji if else. 3.to, z czym porównujemy, nie jest wartością stałą znaną już w czasie kompilacji - używamy if else. Z tą 3 różnicą mam problem, ponieważ nie mogę jej zrozumieć. W Symfonii C++ Standard jest podany przykład: "Załóżmy, że obiekt wybierający reprezentuje ilość przejechanych kilometrów przez samochód wyścigowy. Trzeba zdecydować o wykonaniu tych lub innych działań: przegląd techniczny: 'pobieżny', 'normalny', czy 'generalny' ?" Mógłby ktoś pokazać jak powinien taki program wyglądać w kodzie c++ ? Bo ja to rozumiem tak: #include <iostream> using namespace std; int main() { int kilometry; cout << "Podaj ilosc kilometrow: "; cin >> kilometry; if( kilometry == 1000 ) cout << "przeglad pobiezny\n"; if( kilometry == 2000 ) cout << "przeglad normalny\n"; if( kilometry == 3000 ) cout << "przeglad generalny\n"; system( "pause" ); return 0; } Ale to samo mógłby napisać za pomocą switch, nie mogę do końca zrozumieć o co w tej sytuacji chodzi. |
|
kubawal |
» 2014-05-20 14:15:39 switch możesz stosować tylko do wartości liczbowych (int i podobnych). Poza tym jest bardziej intuicyjne i łatwo dodać następną opcję. if... else... może używać róznych typów danych i pozwala wybrać nie tylko same pasujące wartości, ale grupy wartości. Co do wydajności, nie jestem pewien, ale chyba nia ma między nimi różnicy |
|
michal11 |
» 2014-05-20 17:00:18 Switch jest trochę szybszy i dodatkowo, bardzo przyjemnie się go używa z enum. |
|
kubawal |
» 2014-05-20 17:03:01 Switch jest trochę szybszy |
skąd wiesz? |
|
Jacob99 |
» 2014-05-20 17:22:19 @kubawal Switch jest szybszy ponieważ tylko porównuje zmienną ze stałymi całkowitymi, które już zna(Zresztą jeśli czytałeś Symfonię to było tam napisane), ale jest tylko minimalnie szybszy od if. Co do pytania to ten przykład, który podałeś musisz zrozumieć jako: int droga = 0;
if( droga <= 1000 || droga >= 1000 && droga < 2000 ) cout << "przeglad pobiezny\n";
if( droga >= 2000 ) cout << "przeglad normalny\n";
if( kilometry >= 3000 ) cout << "przeglad generalny\n";
|
|
MrPoxipol |
» 2014-05-20 17:34:20 Jedna czy dwie instrukcje asma więcej. Who cares. |
|
pekfos |
» 2014-05-20 18:59:07 Różnicy nie ma, jeśli porównać kody które ogólnie robią to samo. Nie padł w tym temacie jeszcze zapis z if, równoważny switch. Switch jest szybszy ponieważ tylko porównuje zmienną ze stałymi całkowitymi, które już zna |
Aha? Znaczy if musi najpierw odebrać transmisję z marsa, bo inaczej nie wiedziałby, co z czym ma porównać? |
|
Moorfox |
» 2014-05-20 23:08:31 #include <iostream> using namespace std; int main() { int kilometry; cout << "Podaj ilosc kilometrow: "; cin >> kilometry; if( kilometry == 1000 ) cout << "przeglad pobiezny\n"; if( kilometry == 2000 ) cout << "przeglad normalny\n"; if( kilometry == 3000 ) cout << "przeglad generalny\n"; system( "pause" ); return 0; }
nie rob w takim wypadku gołych 3x if Lepiej uzyc konstrukcji if(..) else if(...) else if(...) Poniewaz jezeli robisz 3 gołe if'y to kazdy warunek jest sprawdzany po koleji nawet jesli juz pierwszy okaze sie prawdziwy jezeli w konstrukcji if else if pierwszy warunek if jest prawidzwy kolejne nie sa sprawzdzane co wplywa na szybkosc dzialania programu. sprobuj zrobic: #include <iostream>
using namespace std; int main() { int a = 5, b = 4; if( a == 5 ) cout << "a=5 "; if( a > 4 ) cout << "a>4 "; if( b == 4 ) cout << "b=4 "; else if( b > 3 ) cout << "b>3 "; return 0; }
wynik programu powinien byc a=5 a>4 b=4 P.S. w tym wypadku po za tym lepiej uzyc switch P.S.2. nie uzywaj system("pause"); |
|
« 1 » |