Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

if else czy swich - problem ze zrozumieniem jednej różnicy

Ostatnio zmodyfikowano 2014-05-20 23:08
Autor Wiadomość
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:

C/C++
#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.


P-110464
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
P-110466
michal11
» 2014-05-20 17:00:18
Switch jest trochę szybszy i dodatkowo, bardzo przyjemnie się go używa z enum.
P-110476
kubawal
» 2014-05-20 17:03:01
Switch jest trochę szybszy
skąd wiesz?
P-110477
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:
C/C++
int droga = 0;
// jakies operacje nadające zmiennej droga wartosc koncową

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";
//...
 
P-110478
MrPoxipol
» 2014-05-20 17:34:20
Jedna czy dwie instrukcje asma więcej. Who cares.
P-110480
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ć?
P-110486
Moorfox
» 2014-05-20 23:08:31
C/C++
#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:
C/C++
#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");
P-110525
« 1 »
  Strona 1 z 1