Zagadka if/else czy if if ?

0

Zastanawiam się i nie wiem, czy:

if( a == 2)
 //coś tam 1
else 
  //coś tam 2

jest równoważne:

if(a == 2)
 //cos tam 1

if(a = 3) //na przyklad 3, cokolwiek innego niz 2
 //cos tam 2
0

Ajj, oczywiście :

if(a == 2)
 //cos tam 1
 
if(a == 3) //na przyklad 3, cokolwiek innego niz 2
 //cos tam 2
0
if( a == 2) // == to jest operator porównania wiec sprawdzasz czy a jest równe 2 jak tak to wykonujesz kod zawarty w if jeżeli nie jest równe wykonujesz else
 //coś tam 1
else 
  //coś tam 2

Czyli wniosek że nie jest to samo co tu napisałeś

if(a == 2)
 //cos tam 1
 
if(a = 3) //na przyklad 3, cokolwiek innego niz 2
 //cos tam 2
0

Jest podobne, ale nierównoważne. Porównaj sobie z tym, a sam się domyślisz w czym rzecz:

int a = 4;

//----------------

if(a < 5)
   //coś tam 1
else if(a < 6)
   //coś tam 2

//----------------

if(a < 5)
   //coś tam 1
if(a < 6)
   //coś tam 2

Ogólnie rzecz w tym, że jak mamy same ify to jest sprawdzany każdy warunek po kolei i jest wykonywane tyle warunków ile pasuje. Jak mamy ify wewnątrz elsów to jeżeli pasuje warunek z ifa to te wewnątrz elsów w ogóle nie są sprawdzane.

Ale jest jeszcze inna kwestia...

int a = 10;

//----------------

if(a == 5)
   //coś tam 1
else
   //coś tam 2

//----------------

if(a == 5)
   //coś tam 1
if(a == 6)
   //coś tam 2

Czyli, że jak mamy elsa to on pasuje pod wszystko inne. Jak mamy same Ify to jest problem. Oczywiście można też tak...

if(a == 5)
   //coś tam 1
if(a != 5)
   //coś tam 2

Możliwości jest wiele i wszystko zależy od nas...

Opolski Portal Programistyczny
http://programowanie.opole.pl

0

To jest prawdziwe dla True/False, ale po co używać dwóch if'ów skoro można else?

0

Podobne, ale zdecydowanie nie równoważne:

//1
int a = 5;
if (a == 5) {
    a = 6;
    cerr << 1;
} else {
    cerr << 2;
}
// wyświetli "1"

//2
int a = 5;
if (a == 5) {
    a = 6;
    cerr << 1;
}
if (a != 5) { // lub np  if (a == 6) {
    cerr << 2;
}
//wyświetli "12"
0
if(a == 2)
   // cos tam 1
else
   // cos tam 2

jest równoważne

if(a == 2)
   // cos tam 1
if(!(a == 2))
   // cos tam 2
0

@MJay guzik prawda. W przypadku dwóch ifów masz DWA porównania, w przypadku if..else masz JEDNO porównanie. To jest różnica między:

cmp coś,coś
je prawda
jmp falsz

;a czymś takim
cmp coś,coś
je prawda
cmp coś,coś
jne fałsz

Oczywiście jak to optymalizator potem przerobi to inna bajka, ale po co mu utrudniać życie?

0
if(a == 2)
 //cos tam 1
 
if(a == 3) //na przyklad 3, cokolwiek innego niz 2
 //cos tam 2

w sytuacji, gdy przeciążony jest operator ==, oba warunki mogą być spełnione. w wariancie z else – nigdy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1