Jednostrano uvjetno grananje Kristijana Paskvali 15 52 16
- Slides: 32
Jednostrano uvjetno grananje { Kristijana Paskvali 15: 52: 16
Ponavljane: Primjer slijeda 15: 52: 18
Logički izraz omogućuje usporedbe numeričkih vrijednosti, niza znakova i logičkih vrijednosti Za usporedbu se služimo relacijskim operatorima (<, >, <=, >=, ==, !=) npr. a != b Logički izraz 15: 52: 22
u pseudokodu: „Ako je izraz onda“, u kodu: naredba. . if (izraz) blok naredbi. . U struktogramu: U dijagramu toka: izraz (u kodu izraz smještamo unutar oblih zagrada) Logički uvjet sadrži logički izraz 15: 52: 24
Jednostrano uvjetno grananje -> programski blok se ili izvodi ili preskače 0 if (uvjet) 1 { blok naredbi } naredba iza bloka Oblik jednostranog uvjetnog grananja 15: 52: 26
Ako je vrijednost uvjeta logička istina (true, 1), izvodi se blok naredbi koji se nalazi iza naredbe if. o o Ako je vrijednost uvjeta logička neistina (false, 0), blok naredbi iza naredbe if se preskače i izvođenje se nastavlja od prve naredbe iza bloka. 15: 52: 30
Prezentiranje jednostranog uvjetnog grananja dijagramom toka 15: 52: 33
… Uvjet false true Blok naredbi … Naredbe iza bloka Prezentiranje jednostranog uvjetnog grananja struktogramom 15: 52: 37
Primjer 1: Unesite broj litara goriva u automobilu. Ako je broj manji od 3, ispiši: ”Natoči gorivo”. Ispiši: ”Produži prema Solinu. ” 15: 52: 39
Struktogram 15: 52: 42
Dijagram toka 15: 52: 45
int main() { int br; scanf("%d", &br); if (br <3) printf("Natoci gorivo n"); printf("n Produzi prema Solinu. n"); return 0; } Kod 15: 52: 48
Primjer 2. Osmislite program koji provjerava mogu li tri unesene duljine stranica tvoriti trokut. 15: 52: 50
Ako su ispunjeni svi navedeni uvjeti trokut se može načiniti Ugniježđeno jednostrano grananje 15: 52: 53
Ako su ispunjeni svi navedeni uvjeti trokut se može načiniti Ugniježđeno jednostrano grananje 15: 52: 56
Ako su ispunjeni svi navedeni uvjeti trokut se može načiniti int main() { int a, b, c, trokut; trokut = 0; printf("Unesite duljine stranica trokuta a, b i c: "); scanf("%d%d%d", &a, &b, &c); if (a + b >= c) if (a + c >= b) if (b + c >= a) trokut=1; if(trokut==0) printf("NIJE"); if(trokut==1) printf("JE"); return 0; } Ugniježđeno jednostrano grananje 15: 53: 00
Ako je ispunjen barem jedan uvjet trokut NIJE moguće načiniti Niz uvjeta jednake posljedice 15: 53: 03
Ako je ispunjen barem jedan uvjet, NIJE moguće načiniti trokut. Niz uvjeta jednake posljedice 15: 53: 09
Ako je ispunjen barem jedan uvjet trokut se ne može načiniti { int a, b, c, trokut; trokut =1; printf("Unesite duljine stranica trokuta a, b i c: "); scanf("%d%d%d", &a, &b, &c); if (a + b < c) trokut =0; if (a + c < b) trokut =0; if (b + c < a) trokut =0; if(trokut==0) printf("NIJE"); if(trokut==1) printf("JE"); return 0; } Niz uvjeta jednake posljedice 15: 53: 12
Operator > < >= <= == != Suprotni operator <= >= < > != == De Morgan-ova pravila : _____ _ _ A+B=A*B _____ _ _ A*B=A+B Podsjetimo se svojstava negacije logičkih i relacijskih operatora: 15: 53: 15
• Navedeni prvi primjer ugniježđenih serijskih uvjeta možemo pojednostaviti logičkim izrazom : (a + b >= c && a + c >= b && c + b >= a) • Navedeni drugi primjer paralelnih uvjeta možemo zamijeniti pojednostavljenim logičkim izrazom: (a + b < c || a + c < b || c + b < a) Rješenje zadatka uz korištenje jednog logičkog uvjeta sa složenijim logičkim izrazom: 15: 53: 16
int main() { int a, b, c, trokut; trokut = 0; printf("Unesite duljine stranica trokuta a, b i c: "); scanf("%d%d%d", &a, &b, &c); if (a + b >= c && a + c >= b && c + b >= a) trokut = 1; int main() { int a, b, c, trokut; trokut = 1; printf("Unesite duljine stranica trokuta a, b i c: "); scanf("%d%d%d", &a, &b, &c); if (a + b < c || a + c < b || c + b <a) trokut = 0; if(trokut==0) printf("NIJE"); if(trokut==1) printf("JE"); return 0; } Kodovi izgledaju dosta slično uz naglasak na razliku u logičkim izrazima 15: 53: 18
! (a + b >= c && a + c >= b && c + b >= a) = (a + b < c || a + c <b || c + b < a) ! (a + b < c || a + c < b || c + b < a) = (a + b >= c && a + c >= b &&c + b >= a) Uvjet može biti jednostavan relacijski izraz ili kombinacija izraza spojenih s logičkim operatorima. 15: 53: 21
Primjer 3. Ispiši površinu trokuta nakon unosa duljina stranica. Ako duljine stranica ne zadovoljava uvjet konstrukcije trokuta, ispiši „Takav trokut ne postoji. ” 15: 53: 23
Primjer 4: Ispiši najmanju vrijednost broja od dvaju unesenih 15: 53: 27 brojeva:
int main() { int a, b, min; printf("Unesi dva broja: "); scanf("%d %d ", &a, &b, ); min=a; if (b<min) min=b; printf ("n manji je %dn", min); return 0; } Primjer 4: Ispiši najmanju vrijednost broja od dvaju unesenih 15: 53: 35 brojeva:
Od unesena tri broja (a, b, c) ispiši najmanji (min). Zadatak 1. 15: 53: 36
int main() { int a, b, c, min; printf("Unesi tri broja: "); scanf("%d %d %d", &a, &b, &c); min=a; if (b<min) min=b; if (c<min) min=c; printf ("n Najmanji je %dn", min); return 0; } Prijedlog rješenja 1. 15: 53: 39
Ako učenik ima manje od 5 neopravdanih izostanaka i odličan uspjeh, ispiši 1 kao znak dopuštenja za ispis pohvalnice. Zadana vrijednost nek je 0. Zadatak 2. 15: 53: 42
int main() { int uspjeh, izostanci, p; p=0; printf("Unesite opci uspjeh ucenika: "); scanf("%d", &uspjeh); printf("Unesite broj neopravdanih izostanaka ucenika: "); scanf("%d", &izostanci); // Testiranje uvjeta if (uspjeh ==5 && izostanci < 5) p=1; if (p ==1) printf(„Ispisi uceniku pohvalnicu "); return 0; } Prijedlog rješenja 2. 15: 53: 47
Unesite dvije vrijednosti od 1 do 6 kao rezultat bacanja kockice Mirka, zatim Slavka. Igrač može odabrati i onu bodovnu vrijednost koja je okrenuta prema stolu (za 1 to je 6, za 2 to je 5, za 3 to je 4). Program ispisuje pobjednika. Ulaz : 2 4 Izlaz: Mirko Zadatak 3. 15: 53: 49
int main() { int m, s; scanf("%d%d", &s, &m); if (m<7 -m) m=7 -m; if (s<7 -s) s=7 -s; if(s<m) printf("Mirkon"); if(m<s) printf("Slavkon"); if(m==s) printf("Nerijesenon"); return 0; } Prijedlog rješenja zadatka 3. 15: 53: 52