GRANANJE U PROGRAMU U C JEZIKU
Uslov je zapravo logička promenljiva ili izraz koja može imati dve vrednosti:
- Vrednost 1, što predstavlja logičku istinu (TRUE)
- Vrednost 0, što predstavlja logičku neistinu (FALSE)
if (uslov) {
// izvršava se naredba 2
} else {
// izvršava se naredba 3
}
Zadatak: Uneti vrednost stranice kvadrata a i proveriti da li je podatak ispravan, tj. da li je pozitivan broj.
Objašnjenje:
Da bi vrednost stranice bila ispravan broj znači da treba da bude pozitivan, jer dužina stranice ne može biti negativan broj, a i vrednost nula takođe nema smisla jer bi onda kvadrat bio samo jedna tačka.
Pogledajmo sada algoritam i primenu naredbe if za ovaj zadatak, na sledećoj slici (slika 4).
scanf("%d", &a);
if (a > 0) {
printf("Ispravna duzina stranice.");
} else {
printf("Neispravan podatak!");
}
scanf("%d", &a);
printf("a=%d\n", a);
}
int a;
// Unos vrednosti promenljive a od strane korisnika
scanf("%d", &a);
// Provera da li je a veće od 0
if(a > 0) {
// Ispis vrednosti promenljive a ako je uslov ispunjen
printf("a=%d\n", a);
}
Zadatak: Uneti vrednost stranice kvadrata a i proveriti da li je podatak ispravan, tj. da li je pozitivan broj. Ako nije, ispisati poruku: "Neispravan podatak".
Objašnjenje:
Da bi dobili alternativno izvršavanje druge naredbe u slučaju da uslov nije ispunjen, onda se if naredba mora proširiti klauzulom else, kao što prikazuje dijagram na slici 5.
scanf("%d", &a); /* Unos vrednosti za promenljivu a */
if(a > 0) { /* Provera da li je a pozitivno */
printf("a=%d\n", a); /* Ispis vrednosti a ako je uslov ispunjen */
} else { /* Alternativna grana - uslov nije ispunjen */
printf("Uslov nije zadovoljen\n"); /* Ispis poruke kada uslov nije ispunjen */
}
printf("a=%d\n", a); /* Ispis vrednosti a */
else /* Alternativna grana */
printf("a=%d\n", a); /* Ispis kada uslov nije zadovoljen */
Zadatak: Za unete brojeve a i b, izračunati vrednost razlomka a/b. Pre izračunavanja potrebno je proveriti da li je b različito od nule, jer deljenje sa nulom nije dozvoljeno.
Objašnjenje:
Nakon deklaracije promenljivih i unosa a i b, računa se razlomak. Pre nego što se napiše formula c = a / b, proverava se da li je b različito od nule. Ako jeste, rezultat se računa i ispisuje. U suprotnom, ispisuje se poruka o grešci.
Grananje u ovom primeru zavisi od vrednosti promenljive b.
Napomena: Za rezultat razlomka koristi se tip float kako bi rezultat imao decimalne vrednosti. Ako se koriste samo celobrojni tipovi, rezultat bi bio zaokružen i bez ostatka.
int main() {
int a, b; /* Deklaracija promenljivih a i b */
float c; /* Rezultat razlomka */
printf("Unesite broj a: ");
scanf("%d", &a);
printf("Unesite broj b: ");
scanf("%d", &b);
if(b != 0) {
c = (float)a / b;
printf("Vrednost razlomka je: %.2f\n", c);
} else {
printf("Deljenje sa nulom nije dozvoljeno.\n");
}
return 0;
}
Logički podaci
To su podaci čija vrednost je rezultat nekog logičkog izraza i može imati dva stanja: true – tačno false – netačno
U C jeziku logičke vrednosti se obično predstavljaju korišćenjem int tipa, gde nula znači false (logička neistina), a bilo koja nenulta vrednost znači true (logička istina).
U modernom C-u (C99 i kasnije) možete koristiti _Bool tip ili uključiti <stdbool.h> da biste koristili bool, true i false.
Logički podaci i izrazi
Logičke relacije tj. izrazi su rezultati nekih poređenja i koriste sledeće operatore:
<, >, <=, >=, !, !=, ==
Značenja: “manje od”, “veće od”, “manje ili jednako”, “veće ili jednako”, “negacija”, “nije jednako”, “jednako”.
Primer logičkih izraza u programskom jeziku C
Za logičke vrednosti u C jeziku koristi se int tip podatka, s tim što važe pravila:
- nula predstavlja logičku neistinu (false),
- bilo koja nenulta vrednost predstavlja logičku istinu (true, obično 1 za preglednost).
int d; // logička promenljiva
c = a+b; // aritmetički izraz
c = a>b; // c=1 (true)
d = a>b; // ispravno, d=1 (true)
d = !(a>b); // d=!(1), d=0 (false)
Logički podaci i složeniji izrazi
Da bismo povezali više manjih logičkih izraza koristimo operatore: && – Logičko “i” || – Logičko “ili”
Pretpostavimo da imamo sledeći kod:
a=10, b=4; c=2;
int d,e; // za rezultate logičkih izraza
d = (a==0) && (b>c); /* d=0 && 1 → d=0 (false) */
e = (a==0) || (b>c); /* e=0 || 1 → e=1 (true) */
Tabela istinitosti za operator &&
true && true = true
true && false = false
false && true = false
false && false = false
Tabela istinitosti za operator ||
true || true = true
true || false = true
false || true = true
false || false = false
Grananje u programu i logički podaci
Logički podaci se koriste kao uslovi kod grananja u programu. Ako imamo logičku promenljivu uslov, njena vrednost se koristi za odlučivanje da li će određeni blok koda biti izvršen.
int a, x, uslov;
// Učitavanje vrednosti promenljive x sa standardnog ulaza
scanf("%d", &x);
// Učitavanje vrednosti promenljive a sa standardnog ulaza
scanf("%d", &a);
// Provera uslova: da li je vrednost promenljive a veća od x
uslov = a > x;
// Učitavanje vrednosti promenljive x i a sa standardnog ulaza
scanf("%d", &x);
scanf("%d", &a);
uslov = a > x;
if(uslov)
{
else
{
Grananje u programu i uslov
Logički izraz a > x u sledećem primeru daje false, tako da se naredba1 neće izvršiti.
Logički izraz se može napisati direktno u zagradi bez uvodjenja promenljive koja čuva vrednost uslova.
int a = 3, x = 5;
if (a > x) {
naredba1;
}
Ovde je a > x netačno, pa se naredba1 neće izvršiti.
Primer: Uneti ceo broj i odrediti da li je deljiv sa 3
Broj je deljiv sa 3 ako je ostatak deljenja tog broja i broja 3 jednak nuli. Za izračunavanje ostatka koristi se operator %.
Dakle uslov za grananje biće: a % 3 == 0.
Ako je uslov ispunjen, ispisuje se poruka „Broj je deljiv sa 3“, u suprotnom poruka „Broj nije deljiv sa 3“.
/* Uneti ceo broj i odrediti da li je deljiv sa 3 */
int main() {
int a;
printf("Unesi ceo broj\n");
scanf("%d", &a);
if((a % 3) == 0)
printf("Broj %d je deljiv sa 3\n", a);
else
printf("Broj %d nije deljiv sa 3\n", a);
return 0;
}
Primer izlaza (unos: 9)
Unesi ceo broj 9 Broj 9 je deljiv sa 3
Napomena
Uslov u if naredbi može biti bilo koji logički izraz (npr. kombinacija poređenja i logičkih operatora).
Ako je izraz tačan (nenula), izvršiće se prvi blok; ako nije tačan (nula), izvršiće se else grana (ako postoji).
Video rešenje
Grananje u programu sa 3 grane
if(uslov1)
{
else if(uslov2)
{
else
{
- Prva grana (if): Kada je uslov uslov1 tačan, izvršava se naredbe 1 (označene zelenom bojom).
- Druga grana (else if): Ako je prvi uslov netačan, ali je uslov uslov2 tačan, izvršava se naredbe 2 (označene crvenom bojom).
- Treća grana (else): Ako su oba prethodna uslova netačna, izvršava se naredbe 3 (označene plavom bojom).
- Naredbe pre grananja (Naredbe 0): Ove naredbe su nezavisne od grananja i izvršavaju se pre nego što se proveri bilo koji uslov.
Ako pravimo 3 grane sa 3 uslova
Dakle, da bi se program delio na 3 grane potrebna su najmanje 2, a može i 3 grane. Na dijagramu se program zapravo deli na 4 grane, s tim što u 4 grani nema naredbi.
Opis dijagrama:
Prvo se naredbe izvršavaju u 1 toku(naredbe 0), a zatim se postavi uslov 1 i ako je on tačan izvršiće se naredbe 1, tj. 1. grana. Ako je uslov 1 netačan, onda se postavlja uslov 2. Ako je on tačan izvršiće se naredbe 2, tj. druga grana. Ako ni on nije tačan postavlja se 3. uslov, tj. uslov 3. Ako je on tačan izvršiće se naredbe 3, a ako nije, sve naredbe se preskaču. Kružić na dijagramu predstavlja tačku gde se svi tokovi ponovo vraćaju u 1 tok.
Primer 2: Uneti dva realna broja preko standardnog ulaza i uporediti njihove vrednosti
Posle unosa broja a i b sa tastature, program se grana na 3 grane, jer postoje 3 varijante da se program izvrši. Varijante su u stvari poruke koje će biti ispisane pomoću printf naredbe:
- " a je veće od b"
- " a je jednako b"
- " a je manje od b"
Za prvi uslov tačan izvršava se prva varijanta
Za prvi uslov netačan, a drugi uslov tačan, druga varijanta i
Za prvi i drugi uslov netačan, treća varijanta
Takođe treba uočiti da else klausula, koja može biti samo poslednja, ne zahteva eksplicitno pisanje uslova, nego se on podrazumeva: Ako nije a > b i ako nije tačno da je a == b, onda zakljucujemo da je a < b.
Ovo se može rešiti i sa else if naredbom na poslednjem mestu, ali ona zahteva uslov eksplicitno(zaokruženo crvenim- vidi sliku ispod).
Primer 3: Odabir Figura
Omogućiti prvo korisniku, da odabere jednu od tri geometrijske figure:
1-Kvadrat, 2-Krug, 3-Paralelogram,
a zatim da unese potrebne ulazne podatke za odabranu figuru i izračuna njenu površinu
| grananjeuprogramu.pdf |
|
Prethodno
|< Operatori u C jeziku |
Sledeće
Petlje u programskom jeziku C >| |

