Programiranje - Naredbe za kontrolu toka programa – 1. dio Kolegij: Programski jezik C++ Ak. god. 2018/19 Izv. Prof. Dr. Sc. Marko Maliković
Grananje toka programa naredbom if Prvi oblik naredbe if: if (logicki_izraz) { blok_naredbi } Ako je vrijednost izraza logicki_izraz jednak: true – onda se izvodi blok_naredbi false – onda se blok_naredbi preskače i izvođenje programa se nastavlja od prve naredbe iza bloka
Grananje toka programa naredbom if Iako se u slučaju samo jedne naredbe u bloku naredbi vitičaste zagrade mogu izostaviti, ipak se preporučuju stavljati: if (a >= 0) { korijen = sqrt(a); }
Primjer: Dijeljenje s nulom Ako se u kôdu pojavi dijeljenje s nulom, program će se “srušiti” Rješenje je prije naredbe u kojoj može doći do dijeljenja s nulom umetnuti ispitivanje i omogučiti tu operaciju samo ako je nazivnik različit od nule: if (nazivnik!=0) { rezultat = brojnik/nazivnik; }
Grananje toka programa naredbom if Drugi oblik naredbe: if (logicki_izraz) {blok_naredbi_1} else {blok_naredbi_2} Ako je vrijednost izraza logicki_izraz jednaka true - izvodi se blok_naredbi_1 false – izvodi se blok_naredbi_2 if (a < 0) {cout << "Broj je negativan!" << endl;} {cout << "Broj je pozitivan ili nula!" << endl;}
Primjer: Dijeljenje s nulom if (nazivnik!=0) { rezultat = brojnik/nazivnik; } else cout << "Ne smijete dijeliti s 0!";
Nadovezivanje if naredbi if (logicki_izraz_1) {prvi_blok_naredbi} else if (logicki_izraz_2) {drugi_blok_naredbi} if (logicki_izraz_3) {treci_blok_naredbi} ... else {n_ti_blok_naredbi}
Nadovezivanje if naredbi int a; cin >> a; if (a < 0) { cout << "Broj je negativan!" << endl; } else if (a > 0) cout << "Broj je pozitivan!" << endl; cout << "Broj je jednak nuli!" << endl;
Primjer - Program za rješavanje kvadratne jednadžbe #include <iostream> #include <cmath> using namespace std; int main() { double a, b, c; cout << "Unesi koeficijente kvadratne jednadzbe:" << endl; cout << "a = "; cin >> a; cout << "b = "; cin >> b; cout << "c = "; cin >> c; double diskriminanta = b * b - 4. * a * c; if (diskriminanta == 0) cout << "Jednadzba ima dva jednaka realna rjesenja:" << endl << endl; cout << "x = " << -b/(2*a) << endl; } else if (diskriminanta > 0) cout << "Jednadzba ima dva razlicita realna rjesenja:" << endl << endl; cout << "x1 = " << (-b+sqrt(pow(b,2)-4*a*c))/(2*a) << endl; cout << "x2 = " << (-b-sqrt(pow(b,2)-4*a*c))/(2*a) << endl; cout << "Jednadzba ima dva razlicita kompleksna rjesenja:" << endl << endl; cout << "x1 = " << -b/(2*a) << "+i*" << sqrt(abs(pow(b,2)-4*a*c))/(2*a) << endl; cout << "x2 = " << -b/(2*a) << "-i*" << sqrt(abs(pow(b,2)-4*a*c))/(2*a) << endl; return 0; Deklaracije i unos varijabli Blok koji se izvodi ako je diskriminanta jednaka 0 Blok koji se izvodi ako je diskriminanta veća od 0 Blok koji se izvodi ako je diskriminanta manja od 0
Ugnježđivanje naredbi if if (logicki izraz 1) { naredbe; if (logicki izraz 2) ... } else naredbe;
Što će ispisati: if (6<5) if (5<6) cout << "1"; else Ispisati će broj 3
Što će ispisati: if (6<5) if (5<6) cout << "1"; else Neće ispisati ništa! Što to znači?
Dakle, na koji if se odnosi else: if (uvjet1) if (uvjet2) cout << "1"; else cout << "2";
Dakle, trebalo bi pisati ovako: if (uvjet1) if (uvjet2) cout << "1"; else cout << "2";
Opasnost (== a ne =) #include <iostream> #include <conio.h> using namespace std; int main() { float x; cout << "x = "; cin >> x; if (x=0) cout << "Hmm,..."; } else cout << "Hmm, Hmm,..."; getch(); return 0; Program se izvodi ali neispravno! Uvijek se ispisuje "Hmm, Hmm,…" - bez obzira na vrijednost x Neki prevoditelji javljaju samo upozorenje ali ne i grešku Neki prevoditelji ne javljaju ni upozorenje