Kontrola toka programa

Slides:



Advertisements
Similar presentations
1 Lekcija 6 - Nizovi Pregled 6.1Uvod 6.2Nizovi 6.3Deklaracija niza 6.4Primjeri upotrebe nizova 6.5Nizovi kao argumenti funkcije 6.6Sortiranje niza 6.7Primjer:
Advertisements

Prof: doc.dr. Samir Lemeš student: Samir Hrnjić. System restore je komponenta Microsoftovih operativnih sistema Windows Serveri ne podržavaju opciju System.
KAKO IZRADITI IGRU: Izrežite tabele, sličice, kartice, žetone. Ostavite 1mm bijelog ruba oko okvira. Nalijepite ih na karton u boji (hamer), jako lijepo.
Zašto Python? Najbolje od QBasic-a i LOGO-a
Uvod u programiranje - matematika – VI predavanje
Petlje WHILE – WEND.
Ponavljanje gradiva 2. razreda
RP3/predavanje08 Ugniježdeni tipovi Iznimke 10/11/2018
Java Hello world !.
Algoritamske/programske strukture
Programiranje - Blokovi naredbi i logički tipovi –
OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU
Struktura petlje.
Java Petlje i logika - 1.
Naredbe ciklusa.
Programiranje u VB Uvod
IF NAREDBA – naredba grananja
Dvodimenzionalno polje
Petlje FOR - NEXT.
REPEAT…UNTIL Naredbe ciklusa.
Programi,Podaci,Varijable,Računanje - 2
PROGRAMSKE PETLJE Milenković Gabrijela.
Објектно орјентисано програмирање
KREIRANJE OBJEKATA.
RAZGRANATA STRUKTURA Zadaci i rešenja
RAZGRANATA STRUKTURA Zadaci i rešenja
Arrays and strings -2 (nizovi i znakovni nizovi)
Binarne datoteke u Pascalu
Elementi programskog jezika PASCAL
Programi,Podaci,Varijable,Računanje - 1
Arrays and strings -1 (nizovi i znakovni nizovi)
OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU
Naredba Case Višestruko grananje.
MessageBox.
Programski jezik C++ - Vježbe - 2. dio
PROGRAMSKI JEZIK PASCAL
Visual Basic – Prvi primjer
Osnovni simboli jezika Pascal
Do While ... Loop struktura
TEST II razredi.
Objektno-orijentirano programiranje
Programiranje – Small Basic
Programiranje - Uvod - Kolegij: Programski jezik C++
Analiza varijance prof. dr. sc. Nikola Šakić.
OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU
Strukture podataka i algoritmi 5. VRIJEME IZVRŠAVANJA ALGORITMA
Nizovi.
C++ WORKSHOP Šimec Tino - FOI.
Skup instrukcija procesora
- metodom zamjene susjednih elemenata niza
Naredbe u php-u.
Programski jezik C++ - Vježbe - 5. dio
Programski jezik Python
Vježba- grananje-naredba if
Programiranje - Naredbe za kontrolu toka programa – 1. dio
INPUT, PRINT P1 PMF Split.
Programski jezik C++ - Vježbe - 4. dio
Naredbe u php-u.
Programiranje - Naredbe za kontrolu toka programa – 3. dio
Mehanizmi agregacije *.
Programski jezik C++ - Vježbe - 1. dio
Analiza varijance prof. dr. sc. Nikola Šakić.
Ponavljanje Pisana provjera
Programiranje - Naredbe za kontrolu toka programa – 1. dio
Vježbenica 2: struktura grananja – 2.dio
Programiranje - Osnovni tipovi podataka i operatori -
Uvjetne petlje.
Višestruko grananje.
Programski jezik C++ - Vježbe - 2. dio
Programiranje1 ALGORITMI 1. Programiranje2Algoritam Precizno opisan način rješenja nekog problema Jednoznačno određuje što treba napraviti Kao ishod algoritma.
Presentation transcript:

Kontrola toka programa *

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

Sekvencija Blok naredbi *

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

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

goto return Skokovi continue break exit *

Sekvencija *

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; } *

Osnovne selekcije *

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; } *

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; *

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

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 *

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 *

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 *

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 *

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 *

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’ *

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

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 } *

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; } *

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; } *

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!!! *

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) *

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

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; } *

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! *

Iteracije *

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 *

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 *

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 *

Naredbe skoka *

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 *

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

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. *

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! *

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; } *

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; *

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; *

Cjeloviti primjer: aproksimacija baze prirodnog logaritma *

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. *

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 *

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 *

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 *

* //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 *