Presentation is loading. Please wait.

Presentation is loading. Please wait.

Kontrola toka programa

Similar presentations


Presentation on theme: "Kontrola toka programa"— Presentation transcript:

1 Kontrola toka programa
*

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

3 Sekvencija Blok naredbi *

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

5 Na vrhu while S uvjetnim izlazom Na dnu do-while Iteracije S eksplicitnim brojačem for *

6 goto return Skokovi continue break exit *

7 Sekvencija *

8 Blok naredbi primjer * 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 Osnovne selekcije *

10 Grananje: if da ne ? I. II. * 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 ? I. II. III. *
if (logički_izraz) // prvi_blok_naredbi else // 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”; else cout << “D”; *

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

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

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

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

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

18 Prvi prethodni slobodni ‘if’
Pravilo!!! else pripada prvom prethodnom slobodnom if-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 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: << 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 | 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 dobro cout<<“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 | 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
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) Prekid ponavljanja 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) prekid ponavljanja *

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 prekid ponavljanja 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 prijevremeni prekid ponavljanja ispis: a ne Rezultat izvođenja 1.primjer: 2.primjer: a=2 a=2 a=3 a=5 a=3 <prijevremeni a=0 prekid> <regularni prekid> a!=0 da regularni prekid ponavljanja *

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: 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 prekid ponavljanja *

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 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; prestupna godina 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’ ( e+000), baze prirodnih logaritama. Analiza Vrijednost ‘e’ može se približno odrediti izračunavanjem niza 1 + 1/1! +1/2! + 1/3! /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 *


Download ppt "Kontrola toka programa"

Similar presentations


Ads by Google