1 / 45

Kontrola toka programa

Kontrola toka programa. *. Osnovne logičke strukture. Sekvencija (slijed) Selekcija (odabir) Iteracija (ponavljanje) Skokovi. *. Sekvencija. Blok naredbi. *. if. Preskok. Selekcije. Grananje. if-else, switch, ?. *. Na vrhu. while. S uvjetnim izlazom. Na dnu. do-while.

ganya
Download Presentation

Kontrola toka programa

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Kontrola toka programa *

  2. Osnovne logičke strukture Sekvencija (slijed) Selekcija (odabir) Iteracija (ponavljanje) Skokovi *

  3. Sekvencija Blok naredbi *

  4. if Preskok Selekcije Grananje if-else, switch, ? *

  5. Na vrhu while S uvjetnimizlazom Na dnu do-while Iteracije S eksplicitnim brojačem for *

  6. goto return Skokovi continue break exit *

  7. Sekvencija *

  8. Blok naredbi • format • { naredba_1; naredba_2; naredba_3; .... } primjer { cout << “Ovo je prva naredba u bloku” << endl; cout << “Ovo je druga naredba u bloku”<< endl; cout << “Ovo je treća naredba u bloku” << endl; } *

  9. Osnovneselekcije *

  10. Grananje: if da ne ? • format • if (logički_izraz) // blok_naredbi I. II. • primjer • if (a < 0){ • cout << “a je negativan” << endl; • cout << “a nije pozitivan” << endl; • cout << “a nije nula” << endl; • } *

  11. Grananje: if-else da ne format if (logički_izraz) // prvi_blok_naredbielse // drugi_blok_naredbi ? I. II. III. primjer if (a < 0)cout << “a je negativan” << endl;else cout << “a je pozitivan ili nula” << endl; *

  12. Grananje: if-else • Kako radi sljedeći program? if(A = 0)if (B = 0)cout << “C”; elsecout << “D”; *

  13. Grananje: if-else • Kako radi sljedeći program? if(A = 0)if (B = 0)cout << “C”; elsecout << “D”; A=0B=0 *

  14. Grananje: if-else • Kako radi sljedeći program? if(A = 0)if (B = 0)cout << “C”; elsecout << “D”; A=0B=0 C *

  15. Grananje: if-else • Kako radi sljedeći program? if(A = 0)if (B = 0)cout << “C”; elsecout << “D”; A=0B=0 C A=1B=0 *

  16. Grananje: if-else • Kako radi sljedeći program? if(A = 0)if (B = 0)cout << “C”; elsecout << “D”; A=0B=0 C A=1B=0 A=0B=1 *

  17. Grananje: if-else • Kako radi sljedeći program? if(A = 0)if (B = 0)cout << “C”; elsecout << “D”; A=0B=0 C A=1B=0 A=0B=1 D *

  18. Pravilo!!! else pripada prvom prethodnom slobodnomif-u (računajući od najniže razine): if (a<b) if (c<d) if (e<f) akc_1 else akc_2 else akc_3 else akc_4 Prvi prethodni slobodni ‘if’ *

  19. Grananje: switch (dijagram toka) default 1 cjelobrojni_izraz 0 3 2 blok_0 blok_2 blok_3 blok_1 blok_4 break break break *

  20. Grananje: switch (format) switch (cjelobrojni_izraz) { case konstanta_0: // prvi_blok_naredbi; //slučaj 0 case konstanta_1: // drugi_blok_naredbi; break; //slučaj 0 i 1 case konstanta_2: case konstanta_3: // treći_blok_naredbi; break; //slučaj 2 i 3 . . . . . case konstanta_n // n_ti_blok_naredbi break; //slučaj n default: // m_ti_blok_naredbi; //ostalo} *

  21. Grananje: switch (primjer) Izračunavanje prijestupne godine (1) int god; cout << “Unesi godinu (GGGG): ”; cin >> god; cout << endl; switch (god % 4) { case 0: cout << “Godina je prijestupna!” << endl;break; case 1: case 2: cout << “Godina nije prijestupna!” << endl;break; default: cout << “Godina nije prijestupna!” << endl;} *

  22. Isto, samo malo drugačije: Izračunavanje prestupne godine (2) int god; cout << “Unesi godinu (GGGG: ”; cin >> god; cout << endl; switch (god % 4) { case 0: cout << “Prijestupna je!” << endl;break; case 1: case 2: case 3: cout << “Nije!” << endl;} *

  23. Grananje: switch (primjer) Rezultat izvođenja Unesi godinu (GGGG): 1999 Godina nije prijestupna! Unesi godinu (GGGG): 2000 Godina je prijestupna! Unesi godinu (GGGG): 1900 Godina je prijestupna! | Prestupne godine su one koje sudjeljive s 4, a nisu sa 100 i one koje su djeljive sa 400!!! *

  24. Grananje: uvjetni operator (?) format uvjet ? izraz_1: izraz_2; TRUE: izračunava se izraz_1 FALSE: izračunava se izraz_2 primjer x = (x < 0) ? -x: x; // x=abs(x) *

  25. Sada možemo pravilno riješiti primjer s prijestupnom godinom *

  26. int god; cout << “Unesi godinu (GGGG: ”; cin >> god; cout << endl; if ((god%400)==0) cout<<“Godina je prijestupna!”; //iznimka else if ((god%100)==0) //obrnuto ne bi bilo dobrocout<<“Godina nije prijestupna!”;else switch (god%4){ case 0: cout<<“Godina je prijestupna!”<<endl;break; case 1: case 2: cout<<“Godina nije prijestupna!”<<endl;break; default: cout << “Godina nije prijestupna!” << endl;} *

  27. Rezultat izvođenja Unesi godinu (GGGG): 1999 Godina nije prijestupna! Unesi godinu (GGGG): 2000 Godina je prijestupna! Unesi godinu (GGGG): 1900 Godina nije prijestupna! | Pravilo Najprije valja isključiti iznimke: 2000 je djeljivo bez ostatka i s 4 i sa 100 i s 400! *

  28. Iteracije *

  29. S izlazom na vrhu: while a = 5 • format • while (uvjet_izvođenja) // blok_naredbi ne a != 0 primjer int a = 5; int b; while (a != 0) { cin >> b >> endl; a -= b; } da učitaj:b (a = 0) Prekidponavljanja a = a -b *

  30. S izlazom na dnu: do_while učitaj:b • format • do // blok_naredbi while (uvjet_izvođenja) a = a -b ne primjer int a = 5; int b; do { cin >> b >> endl; a -= b; } while (a != 0); a != 0 da (a = 0) prekidponavljanja *

  31. S eksplicitnim brojačem: for format for (početni_izraz; uvjet_izvođenja; izraz_prirasta) // blok_naredbi n = 10 Primjer int n=10; cout << “i=“; for (int i=1; i<=n; i++) cout << i << “,“; cout << endl; i = 1 ne i <= n da Rezultat izvođenja i=1,2,3,4,5,6,7,8,9,10| ispis prekidponavljanja i = i + 1 *

  32. Naredbe skoka *

  33. Prijevremeni prekid ponavljanja: break Zadatak Program opetovano učitava varijablu a. Regularni prekid petlje: (a==0). Prijevremeni prekid petlje: (a= =5). učitaj: a Primjer int a; do { cout<<“a=“; cin >>a; cout<<endl; if (a==5) break; //prekida petlju cout<<“a= “<<a<<endl;} while (a!=0); da a= =5 ne prijevremeniprekidponavljanja ispis: a ne Rezultat izvođenja 1.primjer: 2.primjer: a=2 a=2 a=2 a=2 a=3 a=5 a=3 <prijevremeni a=0 prekid> <regularni prekid> a!=0 da regularniprekidponavljanja *

  34. Skok na kraj petlje: continue Zadatak Program opetovano učitava varijablu a. Prekid ponavljanja: (a>100). Preskok akcije:a negativno ili nula. učitaj: a Primjer int a; do{ cout<<“a=“; cin >>a; cout<<endl; if (a<=0) continue; //preskok ispisa cout<<“a= “<<a<<endl;} while (a<=100); da a<=0 ne ispis: a ne Rezultat izvođenja 1.primjer: 2.primjer: a=2 <unos> a=2 <unos> a=2 <ispis> a=2 <ispis> a=0 <unos> a=5 <unos> <preskok ispisa>a=5 <ispis> a=101 <unos> a=101 <unos> a=101 <ispis> a=101 <ispis> <prekid><prekid> a<=100 da prekidponavljanja *

  35. Zadatak Potrebno je izraditi program koji će izračunavati koliko je dana prošlo od 1. siječnja do nekog određenog dana u bilo kojoj godini između 1901. i 1999. Ulaz podataka: učitavanje cjelobrojnih varijabli GG (godina), MM (mjesec) i DD (dan). Izlaz: poruka na zaslonu računala. Izgled poruke: Od 1. siječnja do DD.MM.GG. prošlo je Suma dana. Napomene: (1) voditi računa o prestupnim godinama (veljača!); (2) omogućiti učitavanje podataka i izračunavanje za neodređeni broj slučajeva. *

  36. Izračunavanje broja dana; obično rješenje #include<iostream>using namespace std;int main () { početak int Sij,Velj,Ozu,Tra,Svi,Lip; int Srp,Kol,Ruj,Lis,Stu,DD,MM,GG,i; deklaracija Sij=Ozu=Svi=Srp=Kol=Lis=31; Tra=Lip=Ruj=Stu=30; inicijalizacija ponavljanje do{ veljača! int Velj=28; cout<<“unesi godinu(GG): “; cin>> GG; cout<<“ unesi mjesec(MM): “; cin>> MM; cout<<“ unesi dan(DD): “; cin>> DD; cout<<endl; učitavanje if((GG%400==0) || ((GG%100!=0) && (GG%4=0))) Velj=29; prestupnagodina int Suma=0; suma dana! *

  37. Izračunavanje broja dana; obično rješenje if (MM==1) Suma=DD; if (MM==2) Suma=Sij+DD; if (MM==3) Suma=Sij+Velj+DD; ... if (MM=12) Suma=Sij+Velj+ … +Stu+DD; izračunavanje cout<<“Od 1.siječnja do “<<DD<<“.” <<MM<<“.19”<<GG<<“.”<<“ prošlo je “ <<Suma<<“ dana.”<<endl; ispis cout<<“Za nastavak unesi 1, za prekid 0: “; cin>> i; cout<<endl; indikacija kraja kraj ponavljanja i programa } while (i==1); return 0; } *

  38. Izračunavanje broja dana; switch-rješenje include<iostream> using namespace std; int main { //deklaracija mjeseci //inicijalizacija mjeseci do { //učitavanje datuma //prestupna godina int Suma=0; switch (MM) { case 12: Suma+=Stu; case 11: Suma+=Lis; case 10: Suma+=Ruj; case 9: Suma+=Kol; case 8: Suma+=Srp; case 7: Suma+=Lip; case 6: Suma+=Svi; case 5: Suma+=Tra; *

  39. Rješenje br. 2 case 4: Suma+=Ozu; case 3: Suma+=Velj; case 2: Suma+=Sij; case 1: Suma+=DD; } //ispis //indikacija kraja } while (i==1); return 0; } *

  40. Cjeloviti primjer: aproksimacija baze prirodnog logaritma *

  41. Problem Mnoge matematičke veličine mogu se prikazati nizom aproksimacija (približnih vrijednosti) koji nastaje beskonačnim zbrajanjem članova niza. Ova se tehnika može upotrijebiti i za izračunavanje ‘e’ (2.718282e+000), baze prirodnih logaritama. Analiza Vrijednost ‘e’ može se približno odrediti izračunavanjem niza 1 + 1/1! +1/2! + 1/3! + ... + 1/N! gdje je N! faktorijel N: ako (N = 0) tada (N! = 1.0) ako (N =1) tada (N! = 1.0) ako (N > 1) tada (N! = N * (N-1)!) To se može prikazati kao N  1 / i! i=0 Što je veći N, više će članova biti uključeno u niz, pa će i rezultat biti precizniji. *

  42. Podaci • Ulaz • int N: broj članova; granica zbrajanja • Izlaz • long double E: aproksimativna vrijednost ‘e’ • Varijable • long double ItiClan: i-ti član niza • int i: varijabla za kontrolu ponavljanja *

  43. Oblikovanje algoritma Za izračunavanje će se upotrijebiti struktura iteracije tipa for (iteracija s eksplicitnim brojačem). Algoritam 1. Učitaj vrijednost N. 2. Inicijaliziraj: E = 1.0 3. Inicijaliziraj: ItiClan = 1.0 4. Ponavljanje (i=1; i<=N; i++) 4.1 Izračunavanje ( ItiClan u nizu): ItiClan=ItiClan/i 4.2 Zbroji: E=E+ItiClan 5. Ispiši vrijednost E *

  44. Program #include<iostream> #include<iomanip>using namespace std; int main() { int Kraj=1; cout<<"Program izracunava 'e' (baza prirodnog logaritma)"<<endl; while(Kraj==1) { long double E=1.0; //baza prirodnog logaritma 'e' long double ItiClan=1.0; //i-ti int N; //ulaz - broj clanova niza int i; //eksplicitni brojac cout<<endl<<"Unesi broj clanova niza> "; cin>>N; //izracunavanje for(i=1;i<=N;i++) { ItiClan/=i; E+=ItiClan; } //for *

  45. //ispis rezultata: znanstvena notacija cout<< setprecision(8)<< "Priblizna vrijednost e je "<<E<<endl; //kraj cout<<endl<<"Za nastavak <1>, za kraj <0>: "; cin>>Kraj; } //while return 0; } //main P5_2.exe *

More Related