Grananje - naredba if i if..else

3. Jednostruko uvjetno grananje

3.1. Primjeri

Primjer 1.

Program od korisnika traži učitavanje jednoga cijelog broja. Nakon upisivanja, na zaslonu se ispisuje je li učitani broj pozitivan, negativan ili je nula.

Rješenje:

#include<stdio.h>
int main()
{
     int a;
     printf("Upisite jedan broj: ");
     scanf("%d",&a);
     if (a>0) printf("Ucitani broj je veci od nule.\n");
     if (a<0) printf("Ucitani broj je manji od nule.\n");
     if (a==0) printf("Ucitani broj je nula.\n");
     return 0;
}

 

Primjer 2.

Koje će vrijednosti imati varijable x = 5 i y = 0 nakon izvršavanja naredbi?             

      if (x == x + y)
           x += 7;
   y = 2 * x;


Rješenje

x = 12
y = 24

/* Dani je uvjet zadovoljen (5==5+0), pa se izvršavaju obje naredbe. Zamijetite da je druga naredba (y = 2 * x;) neovisna o naredbi grananja */


Što ako nam je uvjet u naredbi if napisan ovako?

if (x += y)
     x += 7;
y = 2 * x;

U tako napisanom zadatku uvjet je naredba pridruživanja s aritmetičkim operatorom i znači x = x + y, dakle varijabla x trebala bi promijeniti vrijednost (x = 5 + 0 = 5). S obzirom na to da je nova vrijednost varijable x različita od 0, smatra se istinom i naredbe unutar if će se izvršiti (x = 12, y = 24). Dakle, uvjet ne mora nužno biti relacijski ili logički izraz!


Primjer 3.

Što će se ispisati na zaslonu nakon izvođenja sljedećeg programa ako je vrijednost varijable a:

a)       a = 15
b)      a = ‒32?

 

#include<stdio.h>
int main()
{
     int a;
     printf("Upisite jedan broj: ");
     scanf("%d",&a);
     if (a%2!=0) printf("Broj %d nije djeljiv s 2",a);
     if (a%2==0) printf("Broj %d je djeljiv s 2",a);
    return 0;
}

Kako biste definirali tekst zadatka za ovaj program?

Rješenje

a)       Za a = 15 ispis na zaslon bio bi „Broj 15 nije djeljiv s 2“.

b)      Za a = -32 ispis na zaslon bio bi „Broj -32 je djeljiv s 2“.

Ovaj program ispisuje na zaslonu je li broj djeljiv s 2 ili nije.

Uočite da se ovaj zadataka samo promjenom ispisanog tekst može primjeniti tako da provjerava je li broj paran ili ne!

 

Primjer 4.

Napišite program koji će tražiti upisivanje tri broja. Program treba pronaći i ispisati na zaslonu najveći od njih.

Uputa: Sličan zadatak ovome (tražio se najmanji element) imali ste u video lekciji u kojoj je dan jedan od načina rješavanja određivanja najmanjeg / najvećeg od tri učitana broja. No način opisan u video lekciji prilično je kompliciran ako trebamo odrediti najmanji (ili najveći) između više od tri broja. Upravo zato se češće upotrebljava algoritam opisan malo niže. Ovo je jedan od najbitnih algoritama koji svakako treba upamtiti!

Najjednostavniji način pronalaska najvećeg (ili najmanjeg) elementa u nizu svodi se na to da jedan element (bilo koji, ali uobičajeno je da to bude prvi element) proglasimo najvećim (ili najmanjim) i dalje redom usporedimo sve elemente s tim pretpostavljenim. Ako pronađemo element veći (ili manji) od pretpostavljenog, on postaje pretpostavljeni, a postupak nastavljamo dok ne dođemo do kraja niza. Pseudokodom bi to izgledalo ovako:

Algoritam koji ispisuje najmanji od tri unesena broja

Objašnjenje
Na početku jednostavno pretpostavimo da je jedan od tri broja (npr. a) najmanji. Njegovu vrijednost pridružimo novoj varijabli (najmanji). Sad provjerimo je li možda vrijednost varijable b manja od vrijednosti varijable najmanji. Ako jest, vrijednost varijable b pridružimo varijabli najmanji i prijeđemo na sljedeću naredbu (provjera varijable c). Ako vrijednost varijable b nije manja od vrijednosti varijable najmanji, samo prijeđemo na sljedeću naredbu. Sad to isto napravimo s varijablom c. Na kraju algoritma zasigurno će najmanja vrijednost biti pridružena varijabli najmanji!
Provjerimo na konkretnom primjeru:


Rješenje

#include<stdio.h>
int main()
{
     int a,b,c,max;
     printf("Upisite tri broja: ");
     scanf("%d %d %d",&a,&b,&c);
     max=a;
     if (b>max) max=b;
     if (c>max) max=c;

     printf("Najveci je %d\n",max);
     return 0;
}

 

Testni primjeri

Ulaz:      5  1  2  
Izlaz:     Najveci je 5

Ulaz:      12  21  8  
Izlaz:     Najveci je 21

Ulaz:      15  8  15  
Izlaz:     Najveci je 15

 

U trećem testnom primjeru upisana su dva broja iste vrijednosti. Izvršavanjem programa u varijabli max bit će pohranjena najveća vrijednost  koja je zadnja upisana.

Isto tako, uočite da izvršavanjem ovog programa ne znamo koji učitani broj a, b ili c je najveći. Znamo samo koja je vrijednost najvećeg upisanog broja, jer je ona pohranjena u varijablu max.