OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU C 6 dio

  • Slides: 84
Download presentation
OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU C++ 6. dio

OSNOVE PROGRAMIRANJA U PROGRAMSKOM JEZIKU C++ 6. dio

Programska struktura petlje 2 U programu je često potrebno ponoviti neku radnju više puta.

Programska struktura petlje 2 U programu je često potrebno ponoviti neku radnju više puta. Takva se programska struktura naziva petlja ili iteracija. Ponavljati se može: � unaprijed zadani broj puta, � sve dok je ispunjen zadani uvjet.

Petlje 3 Struktura petlje se može ostvariti naredbama: for, while, do – while.

Petlje 3 Struktura petlje se može ostvariti naredbama: for, while, do – while.

for petlja 4 for petlja se najčešće koristi ako se dijelovi programa trebaju ponoviti

for petlja 4 for petlja se najčešće koristi ako se dijelovi programa trebaju ponoviti unaprijed poznati broj puta. Sintaksa:

for petlja 5 Svaka for petlja ima svoju kontrolnu varijablu. Njena se vrijednost svakim

for petlja 5 Svaka for petlja ima svoju kontrolnu varijablu. Njena se vrijednost svakim prolaskom kroz petlju mijenja ovisno o vrijednosti prirasta. Kontrolnu varijablu petlje potrebno je prije ulaska u petlju deklarirati. U petlji se najprije zadaje vrijednost početnog stanja kontrolne varijable petlje (početno stanje).

for petlja 6 Po zadavanju početnog stanja kontrolne varijable petlje zapisuje se uvjet. Blok

for petlja 6 Po zadavanju početnog stanja kontrolne varijable petlje zapisuje se uvjet. Blok naredbi se izvršava sve dok je vrijednost uvjeta jednaka logičkoj istini (1). Kad vrijednost uvjeta postane neistina (0) petlja se prekida.

for petlja 7 Prirast je iznos za koji se mijenja vrijednost kontrolne varijable petlje.

for petlja 7 Prirast je iznos za koji se mijenja vrijednost kontrolne varijable petlje.

8 for petlja

8 for petlja

Primjer 1 9 Potrebno je ispisati brojeve od 1 do 20. Ispis brojeva od

Primjer 1 9 Potrebno je ispisati brojeve od 1 do 20. Ispis brojeva od 1 do 20: 1 2 3 4 5 6 7 8 9. . . 20

Primjer 1 10

Primjer 1 10

#include<iostream> using namespace std; 11 int main() { int brojac; cout<<"Ispis brojeva od 1

#include<iostream> using namespace std; 11 int main() { int brojac; cout<<"Ispis brojeva od 1 do 20: "<<endl; for (brojac=1; brojac<=20; brojac++) { cout<<brojac<<" "; } cout<<endl; return 0; }

Primjer 2 12 Potrebno je dopuniti prethodni primjer tako da se ispisuju brojevi iz

Primjer 2 12 Potrebno je dopuniti prethodni primjer tako da se ispisuju brojevi iz raspona od M do N (raspon unosi korisnik). Ispis pocinje od broja: Ispis zavrsava brojem: Ispis brojeva od. . . do. . . : . . . .

Primjer 2 13 unos početne i završne vrijednosti raspona

Primjer 2 13 unos početne i završne vrijednosti raspona

#include<iostream> using namespace std; 14 int main() { int brojac, m, n; cout<<"ispis pocinje

#include<iostream> using namespace std; 14 int main() { int brojac, m, n; cout<<"ispis pocinje od broja: "; cin>>m; cout<<"ispis zavrsava brojem: "; cin>>n; for (brojac=m; brojac<=n; brojac++) { cout<<brojac<<" } cout<<endl; return 0; } ";

Beskonačna petlja 15 Potrebno je ovako promijeniti prethodni program: for (brojac=m; brojac<=n; ) {

Beskonačna petlja 15 Potrebno je ovako promijeniti prethodni program: for (brojac=m; brojac<=n; ) { cout<<brojac<<" } ";

Beskonačna petlja 16

Beskonačna petlja 16

Beskonačna petlja 17 Petlja se izvodi neograničen broj puta jer je uvjet uvijek ispunjen.

Beskonačna petlja 17 Petlja se izvodi neograničen broj puta jer je uvjet uvijek ispunjen. Ako se dogodi da se pokrene program u kome je beskonačna petlja, program se može prekinuti zatvaranjem prozora u kom se izvršava program.

Beskonačna petlja 18 Da bi se izbjegla beskonačna petlja treba: � zadati uvjet koji

Beskonačna petlja 18 Da bi se izbjegla beskonačna petlja treba: � zadati uvjet koji jamči konačan broj ponavljanja petlje, � navesti sva tri izraza u zagradi naredbe for, � izbjegavati promjenu vrijednosti kontrolne varijable unutar bloka naredbi for petlje.

Primjer 3 19 Ispisati parne brojeve iz intervala od 50 do 100. Parni brojevi

Primjer 3 19 Ispisati parne brojeve iz intervala od 50 do 100. Parni brojevi iz intervala od 50 do 100 su: 50 52 54 56. . 98 100

Primjer 3 20

Primjer 3 20

#include<iostream> using namespace std; 21 int main() { int brojac; cout<<"Parni brojevi iz intervala

#include<iostream> using namespace std; 21 int main() { int brojac; cout<<"Parni brojevi iz intervala od 50 do 100 su: " <<endl; for (brojac=50; brojac<=100; brojac+=2) { cout<<brojac<<" "; } cout<<endl; return 0; }

Primjer 5 22 Ispisati parne brojeve u rasponu od 100 do 50. Parni brojevi

Primjer 5 22 Ispisati parne brojeve u rasponu od 100 do 50. Parni brojevi iz intervala od 100 do 50 su: 100 98 96 94. . . . 52 50

Primjer 5 23 prirast

Primjer 5 23 prirast

#include<iostream> using namespace std; 24 int main() { int brojac; cout<<"Parni brojevi iz intervala

#include<iostream> using namespace std; 24 int main() { int brojac; cout<<"Parni brojevi iz intervala od 100 do 50 su: " <<endl; for (brojac=100; brojac>=50; brojac-=2) { cout<<brojac<<" "; } cout<<endl; return 0; }

Primjer 6 25 Treba potražiti pa ispisati brojeve djeljive sa 7 unutar raspona od

Primjer 6 25 Treba potražiti pa ispisati brojeve djeljive sa 7 unutar raspona od M do N. Raspon pocinje od broja: Raspon zavrsava brojem: Brojevi djeljivi sa 7 iz raspona od … do … su: . . . .

Primjer 6 26 Napomene: � Blok naredbi u petlji se izvršava za svaki broj

Primjer 6 26 Napomene: � Blok naredbi u petlji se izvršava za svaki broj iz zadanog raspona. � Ispisuju se samo brojevi djeljivi s brojem 7. � Djeljivost brojeva se provjerava operatorom modulo (%).

Primjer 6 27

Primjer 6 27

28 #include<iostream> using namespace std; int main() { int brojac, m, n; cout<<"Raspon pocinje

28 #include<iostream> using namespace std; int main() { int brojac, m, n; cout<<"Raspon pocinje od broja: "; cin>>m; cout<<"Raspon zavrsava brojem: "; cin>>n; cout<<"Brojevi djeljivi sa 7 iz raspona od "<<m <<" do "<<n<<" su: "<<endl; for (brojac=m; brojac<=n; brojac++) { if(brojac%7==0) cout<<brojac<<" "; } cout<<endl; return 0; }

Primjer 6 29 Provjera:

Primjer 6 29 Provjera:

Ugniježdene for petlje 30 for petlje mogu biti ugniježdene jedna unutar druge. Pri ulazu

Ugniježdene for petlje 30 for petlje mogu biti ugniježdene jedna unutar druge. Pri ulazu u vanjsku petlju, njena se kontrolna varijabla postavi na početnu vrijednost. S tom se vrijednošću ulazi u unutarnju petlju.

31 Ugniježdene for petlje

31 Ugniježdene for petlje

Ugniježdene for petlje 32 Pri ulazu u unutarnju petlju, kontrolna varijabla unutarnje petlje se

Ugniježdene for petlje 32 Pri ulazu u unutarnju petlju, kontrolna varijabla unutarnje petlje se postavi na početnu vrijednost i sve dok je uvjet zadovoljen, izvršava se blok naredbi unutarnje petlje. Po završenoj unutarnjoj petlji, kontrolna varijabla vanjske petlje se mijenja za vrijednost prirasta i provjerava se uvjet vanjske petlje. Za svaku vrijednost kontrolne varijable vanjske petlje izvodi se cjelokupna unutarnja petlja.

Primjer 7 33 Vrijednost kontrolne varijable vanjske petlje mijenja se od 1 do 3,

Primjer 7 33 Vrijednost kontrolne varijable vanjske petlje mijenja se od 1 do 3, a unutarnje od 1 do 5. U programu se ispisuju trenutne vrijednosti kontrolnih varijabli vanjske i unutarnje petlje.

Primjer 7 34 vanjska petlja unutarnja petlja kazalo se pomiče na početak sljedećeg redka

Primjer 7 34 vanjska petlja unutarnja petlja kazalo se pomiče na početak sljedećeg redka

Primjer 7 35 Vanjska petlja omogućit će : � ispis teksta: Vanjska petlja: �

Primjer 7 35 Vanjska petlja omogućit će : � ispis teksta: Vanjska petlja: � ispis trenutne vrijednosti kontrolne varijable vanjske petlje (i) � ispis teksta: Unutarnja petlja: Unutarnja petlja : � ispisuje trenutne vrijednosti kontrolne varijable unutarnje petlje (j, od 1 do 5). Po ispisu svakoga od redaka, kazalo se prebacuje na početak novog redka i postupak se ponavlja.

36 #include <iostream> using namespace std; int main() { int i, j; for (

36 #include <iostream> using namespace std; int main() { int i, j; for ( i = 1; i <= 3; i++ ) { cout<<endl<<"Vanjska petlja: i="<<i<<endl; cout<<"Unutarnja petlja: "; for ( j = 1; j <= 5; j++ ) { cout<<" j="<<j; } cout<<endl; } return 0; }

Primjer 7 37 Provjera:

Primjer 7 37 Provjera:

Manipulatori 38 Ispis se može oblikovati manipulatorima (operatorima za rukovanje ispisom). Da bi ispis

Manipulatori 38 Ispis se može oblikovati manipulatorima (operatorima za rukovanje ispisom). Da bi ispis bio u pravilnim stupcima, koristi se manipulator: � setw(int) određuje koliki će se prostor predvidjeti za ispis podatka koji slijedi u izlaznom toku.

setw(int) 39 Svi su manipulatori za rukovanje ispisom definirani u biblioteci iomanip koju u

setw(int) 39 Svi su manipulatori za rukovanje ispisom definirani u biblioteci iomanip koju u datoteku izvornog koda treba uključiti naredbom include. setw(int) se upotreblajva unutar naredbe izlaznog toka, npr. :

Primjer 8 40 Potrebno je zbrojiti prvih 100 prirodnih brojeva. Zbroj prvih 100 prirodnih

Primjer 8 40 Potrebno je zbrojiti prvih 100 prirodnih brojeva. Zbroj prvih 100 prirodnih brojeva je. .

Primjer 8 41 Prije ulaska u petlju treba: � Deklarirati varijablu koja će sadržavati

Primjer 8 41 Prije ulaska u petlju treba: � Deklarirati varijablu koja će sadržavati trenutne vrijednosti kontrolne varijable petlje (npr. zbroj) pri svakom prolasku kroz petlju. � Varijabli zbroj pridružiti vrijednost 0. Naredba u bloku omogućava uvećavanje vrijednosti varijable zbroj za tekuću vrijednost kontrolne varijable petlje (brojac).

Primjer 8 42 početna vrijednost blok

Primjer 8 42 početna vrijednost blok

#include<iostream> using namespace std; 43 int main() { int brojac, zbroj; zbroj=0; cout<<"Zbroj prvih

#include<iostream> using namespace std; 43 int main() { int brojac, zbroj; zbroj=0; cout<<"Zbroj prvih 100 prirodnih brojeva je: "; for (brojac=1; brojac<=100; brojac++) { zbroj=zbroj+brojac; } cout<<zbroj<<endl; return 0; }

Primjer 8 44 Provjera:

Primjer 8 44 Provjera:

Primjer 9 45 Treba prebrojiti koliko brojeva unutar raspona od M do N ima

Primjer 9 45 Treba prebrojiti koliko brojeva unutar raspona od M do N ima znamenku jedinice vrijednosti 9.

Primjer 9 46 Prije ulaska u petlju treba: � Deklarirati varijablu (npr. N) u

Primjer 9 46 Prije ulaska u petlju treba: � Deklarirati varijablu (npr. N) u kojoj će se prebrojavati pronađeni brojevi koji zadovoljavaju uvjet. � Varijabli N pridružiti vrijednost 0. Naredba u bloku omogućava uvećavanje vrijednosti varijable N za 1 svaki put kada se pronađe broj koji zadovoljava uvjet.

Primjer 9 47

Primjer 9 47

48 #include<iostream> using namespace std; int main() { int brojac, m, n, N; cout<<"Raspon

48 #include<iostream> using namespace std; int main() { int brojac, m, n, N; cout<<"Raspon pocinje od broja: "; cin>>m; cout<<"Raspon zavrsava brojem: "; cin>>n; N=0; for (brojac=m; brojac<=n; brojac++) { if(brojac%10==9) N=N+1; } cout<<"U rasponu od "<<m<<" do "<<n<<" ima "<<N <<" brojeva sa znamenkom jedinice vrijednosti 9. " <<endl; return 0; }

Primjer 9 49 Provjera:

Primjer 9 49 Provjera:

while petlja 50 while petlja se najčešće koristi ako broj ponavljanja bloka naredbi u

while petlja 50 while petlja se najčešće koristi ako broj ponavljanja bloka naredbi u petlji nije unaprijed poznat. Izvršava se sve dok je ispunjen zadani uvjet. Uvjet je logički izraz čiji rezultat mora biti tipa bool. Kada rezultat postane logička neistina (false, 0), preskače se blok naredbi petlje i program se nastavlja od prve naredbe nakon bloka

while petlja 51 Sintaksa:

while petlja 51 Sintaksa:

52 while petlja

52 while petlja

Primjer 10 53 Uporabom while petlje potrebno je ispisati brojeve od 1 do 20.

Primjer 10 53 Uporabom while petlje potrebno je ispisati brojeve od 1 do 20.

Primjer 10 54 Petlja while može zamijeniti for petlju. Za rješenje ovog problema potrebno

Primjer 10 54 Petlja while može zamijeniti for petlju. Za rješenje ovog problema potrebno je, prije ulaska u petlju: � zadati početnu vrijednost varijable koja se koristi u uvjetu (brojac=1), � zadati uvjet (brojac<=20), U bloku naredbi u petlji uz ostalo zadati i prirast (brojac++).

Primjer 10 55 početna vrijednost uvjet prirast

Primjer 10 55 početna vrijednost uvjet prirast

56 #include<iostream> using namespace std; int main() { int brojac; brojac=1; cout<<"Ispis brojeva od

56 #include<iostream> using namespace std; int main() { int brojac; brojac=1; cout<<"Ispis brojeva od 1 do 20: "<<endl; while(brojac<=20) { cout<<brojac<<" "; brojac=brojac+1; } cout<<endl; return 0; }

Primjer 11 57 Potrebno je unesenom prirodnom broju prebrojiti znamenke. Upisi prirodni broj: Broj

Primjer 11 57 Potrebno je unesenom prirodnom broju prebrojiti znamenke. Upisi prirodni broj: Broj … ima … znamenaka.

Primjer 11 58 Broj znamenaka odabranog broja nije unaprijed poznat. Pomoći će petlja while.

Primjer 11 58 Broj znamenaka odabranog broja nije unaprijed poznat. Pomoći će petlja while. Početna vrijednost varijable koja se koristi u uvjetu je uneseni broj (b). Da bi se izvršavao blok naredbi u petlji vrijednost varijable b mora biti veća od 0 (b>0).

Primjer 11 59 U bloku naredbi petlje: Od vrijednosti varijable b valja odvojiti znamenku

Primjer 11 59 U bloku naredbi petlje: Od vrijednosti varijable b valja odvojiti znamenku najmanje težinske vrijednosti pa dobiveni rezultat vratiti u varijablu b. 2. Varijablu koja prebrojava znamenke uvećati za 1. 3. Provjeriti uvjet petlje. 1.

Primjer 11 60 Kada se prebroji posljednja znamenka (znamenka najveće težinske vrijednosti), uvjet više

Primjer 11 60 Kada se prebroji posljednja znamenka (znamenka najveće težinske vrijednosti), uvjet više neće biti zadovoljen. Petlja se prekida i ispisuje se rezultat. Primjerice:

Primjer 11 61

Primjer 11 61

#include<iostream> using namespace std; int main() 62 { int br, b; cout<<"Upisi prirodni broj:

#include<iostream> using namespace std; int main() 62 { int br, b; cout<<"Upisi prirodni broj: "; cin>>b; br=0; while(b>0) { b=b/10; br=br+1; } cout<<"Broj ima "<<br<<" znamenki: "<<endl; return 0; }

Primjer 11 63 Provjera:

Primjer 11 63 Provjera:

Primjer 12 64 Treba unijeti N realnih brojeva pa izračunati njihovu srednju vrijednost. Unos

Primjer 12 64 Treba unijeti N realnih brojeva pa izračunati njihovu srednju vrijednost. Unos brojeva traje sve dok korisnik ne upiše 0. Nakon posljednjeg broja unesi nulu. Unesi broj: . . . Uneseno je. . . brojeva. Srednja vrijednost je. .

Primjer 12 65 Problem se rješava while petljom. Prije ulaska u petlju treba zadati

Primjer 12 65 Problem se rješava while petljom. Prije ulaska u petlju treba zadati početnu vrijednost varijable koja se koristi u uvjetu. U ovome slučaju unosi se prvi broj (N). U uvjetu se uspoređuje sadržaj varijable u koju se pohranjuje uneseni broj s 0 (N==0).

Primjer 12 66 Ako je uvjet ispunjen, izvršava se blok naredbi u petlji. U

Primjer 12 66 Ako je uvjet ispunjen, izvršava se blok naredbi u petlji. U bloku je potrebno: � uneseni broj N pribrojiti varijabli zbroj (zbrajanje), � varijablu broj uvećati za jedan (prebrojavanje), � unijeti sljedeći broj N. Unos se nastavlja sve dok je uvjet ispunjen, tj. dok se ne unese 0.

Primjer 12 67 Kada korisnik unese 0, uvjet više nije ispunjen, program se nastavlja

Primjer 12 67 Kada korisnik unese 0, uvjet više nije ispunjen, program se nastavlja od prve naredbe nakon petlje. Nakon petlje treba izračunati i ispisati srednju vrijednost unesenih brojeva.

#include<iostream> using namespace std; int main() { float N, broj, zbroj; broj=0; zbroj=0; cout<<"Nakon

#include<iostream> using namespace std; int main() { float N, broj, zbroj; broj=0; zbroj=0; cout<<"Nakon posljednjeg broja unesi nulu. "<<endl; cout<<"Unesi broj: "; cin>>N; while(N!=0) { broj=broj+1; zbroj=zbroj+N; cout<<"Unesi broj: "; cin>>N; } cout<<"Uneseno je "<<broj<<" brojeva. Srednja vrijednost je "<<zbroj/broj<<endl; return 0; }

Primjer 12 69 Provjera:

Primjer 12 69 Provjera:

do-while petlja 70 do-while petlja se također koristi ako broj ponavljanja bloka naredbi u

do-while petlja 70 do-while petlja se također koristi ako broj ponavljanja bloka naredbi u petlji nije unaprijed poznat. Za razliku od do sad opisanih petlji kod dowhile petlje se uvjet ispituje nakon izvođenja bloka naredbi u petlji.

do-while petlja 71 Sintaksa:

do-while petlja 71 Sintaksa:

do-while petlja

do-while petlja

Primjer 13 73 Primjer 11 riješiti do-while petljom (unesenom prirodnom broju prebrojiti znamenke).

Primjer 13 73 Primjer 11 riješiti do-while petljom (unesenom prirodnom broju prebrojiti znamenke).

#include<iostream> using namespace std; int main() { int br, b; cout<<"Upisi prirodni broj: ";

#include<iostream> using namespace std; int main() { int br, b; cout<<"Upisi prirodni broj: "; cin>>b; br=0; do { b=b/10; br=br+1; } while(b>0); cout<<"Broj znamenki: "<<br<<endl; return 0; }

Naredba break 75 Naredba break se rabi kada treba prekinuti izvođenje nekog bloka naredbi

Naredba break 75 Naredba break se rabi kada treba prekinuti izvođenje nekog bloka naredbi unutar petlje, a sastavni je dio i switch–case naredbe. Nakon naredbe break program izvršenje nastavlja od prve naredbe iza programske petlje.

Primjer 14 76 Treba unijeti 10 prirodnih brojeva pa ih zbrojiti. U slučaju unosa

Primjer 14 76 Treba unijeti 10 prirodnih brojeva pa ih zbrojiti. U slučaju unosa broja 5, unos se prekida. Ispisuje se poruka o unosu broja 5, a potom i broj unesenih brojeva do unosa petice te njihov zbroj. Upisi broj: … Uneseno je … ispravnih brojeva. Njihov je zbroj …

Primjer 14 77 Ako je uvjet ispunjen, prekida se izvođenje bloka naredbi u petlji,

Primjer 14 77 Ako je uvjet ispunjen, prekida se izvođenje bloka naredbi u petlji, i nastavlja se s prvom naredbom nakon bloka.

#include <iostream> using namespace std; int main () { int n, A, zbroj, broj;

#include <iostream> using namespace std; int main () { int n, A, zbroj, broj; zbroj=0; for (n=1; n<=10; n++) { cout <<"Upisi broj: "; cin>>A; if (A==5) { cout<<"Prekid zbog unosa broja 5"<<endl; break; } broj=broj+1; zbroj=zbroj+A; } cout<<endl<<"Uneseno je "<<broj<<" ispravnih brojeva. Njihov je zbroj "<<zbroj<<endl; return 0; }

Naredba continue 79 Ponekad je potrebno preskočiti dio bloka naredbi do kraja programske petlje,

Naredba continue 79 Ponekad je potrebno preskočiti dio bloka naredbi do kraja programske petlje, pa nakon toga petlju nastaviti. U tu se svrhu koristi naredba continue.

Primjer 15 80 Treba unijeti 10 prirodnih brojeva, pa ih zbrojiti. U slučaju unosa

Primjer 15 80 Treba unijeti 10 prirodnih brojeva, pa ih zbrojiti. U slučaju unosa broja 5, ispisuje se poruka o unosu broja 5, preskače se dio bloka do kraja programske petlje pa se nakon toga petlja nastavlja. Na kraju se ispisuje broj ispravno unesenih brojeva te njihov zbroj.

Primjer 15 81 Upisi broj: … Uneseno je … ispravnih brojeva. Njihov je zbroj

Primjer 15 81 Upisi broj: … Uneseno je … ispravnih brojeva. Njihov je zbroj … Ako se unese broj 5, ispisat će se poruka: Unesen je broj 5. On se ne pribraja i ne prebrojava.

Primjer 15 82 Ako je uvjet ispunjen, preskače se dio bloka naredbi do kraja

Primjer 15 82 Ako je uvjet ispunjen, preskače se dio bloka naredbi do kraja programske petlje, a nakon toga se petlja nastavlja.

#include <iostream> using namespace std; int main () { int n, A, zbroj, broj;

#include <iostream> using namespace std; int main () { int n, A, zbroj, broj; zbroj=0; for (n=1; n<=10; n++) { cout <<"Upisi broj: "; cin>>A; if (A==5) { cout<<"Unesen je broj 5. On se ne pribraja i ne prebrojava. “<<endl; continue; } broj=broj+1; zbroj=zbroj+A; } cout<<endl<<"Uneseno je "<<broj<<" ispravnih brojeva. Njihov je zbroj "<<zbroj<<endl; return 0; }

Primjer 60 84 Provjera:

Primjer 60 84 Provjera: