Uvod u programiranje- matematika –V predavanje
Vesna Veličković[email protected]
Tok izvršenja programa
Upravljačke strukture• Sekvenca• Grananje• PetljeMoguće je proizvoljno kombinovanje.
Petlje
Naredbe u petlji se izvršavaju nula ili više puta.
U Pascal-u postoje tri naredbe koje realizuju petlje (cikluse):
• For• While• Repeat
Izbor naredbe za petlju
• Ako znamo tačan broj prolazaka kroz petlju, biramo FOR.
• Ako ne znamo tačan broj prolazaka kroz petlju, pitamo se da li se kroz petlju mora proći bar jedanput.• Ako se kroz petlju mora proći bar jedanput,
biramo REPEAT.• Ako se kroz petlju ne mora proći ni
jedanput, biramo WHILE.
WHILE petlja
while <uslov> do <naredba>
Uslov je logički izraz.Primenjuje se kada ne znamo broj prolazaka kroz
petlju, čak i kada nismo sigurni da se kroz petlju uopšte treba proći.
U tom slučaju izlazak iz petlje mora biti definisan nekim uslovom.
Složena naredba u WHILE• Ako je unutar while naredbe potrebno napisati
više od jedne naredbe, stavljamo ih u složenu naredbu.
while <uslov> do begin <naredba1> ; <naredba2> ; ... <naredbaN>end
Izvršenje WHILE naredbe
Naredba u petlji se izvršava sve dok je ispunjen uslov.
• Prvo se izračuna vrednost uslova.• Ako je ta vrednost TRUE, izvršava se naredba u
petlji. Zatim se ponovo ispituje uslov.
• Ako je je ta vrednost FALSE, izlazi se iz petlje.Napomena: Sa while naredbom možemo
napraviti beskonačnu petlju!
Beskonačna petljak := 1;while k < 10 do writeln (k);Izvršenje: K se postavi na 1. Ispita se uslov k < 10.
Kako je k=1<10, uslov je zadovoljen i izvršava se naredba u petlji (odštamta se k=1). Ponovo se ispituje uslov. I dalje je k=1<10, pa se ponovo štampa k=1. Ponovo se ispituje uslov...
Na ovaj način smo napravili beskonačnu petlju.
Ispravan primer
Naredba u petlji mora da menja uslov!
k := 1;while k < 10 dobegin writeln (k); k := k+1;end
Kada se ne ulazi u petlju
Uslov u while naredbi se ispituje pre nego što se izvrši naredba u petlji.
Može se desiti da uslov odmah na početku bude netačan, pa se onda u petlju uopšte ne ulazi.
k := 1;while k < 0 dobegin writeln (k); k := k+1;end
FOR i WHILE
for i:=1 to 10 do writeln (i)
i := 1;while i<=10 dobegin writeln (i); i := i + 1;end
While je najopštija naredba petlje. Sve što se može uraditi sa for, može se uraditi i sa while.
FOR i WHILE
for i:=1 to n div 2 do writeln (2*i)
i := 2;while i<=n dobegin writeln (i); i := i + 2;end
Nekada je while zgodnija, čak i ako znamo tačan broj prolazaka kroz petlju.• Odštampati sve parne brojeve do n.
Akumuliranje grešaka
• Odštampati f(x) za x od m do n sa korakom 1/3x := m;while x <= n dobegin f := <računaj f(x)>; writeln (f); x := x + 1/3end
Iteracija
• Izračunati koren jednačine x – 10 * ln(x) = 0.x0 biramo proizvoljno
x1 := 10 * ln(x0);
x2 := 10 * ln(x1);
...Postupak prekidamo kada se dostigne tačnost eps,
odnosno kada bude |xn – xn-1| < eps.
Ako se postupak ne završi za k koraka, pretpostavljamo da postupak divergira, pa ga prekidamo.
read (x0);x := 10 * ln(x0);i := 1;while (i <= k) and (abs(x-x0) >= eps) dobegin x0 := x; x := 10 * ln(x0); i := i + 1end
Iteracija
• Izračunati sin(x) sa zadatom tačnošću eps.
...!7!5!3
)sin(753
xxx
xx
)!12()1(
12
n
xa
nn
n
U ovom slučaju tačnost znači
,...2,1,0,)32()22(
2
1
n
nn
axa nn
epsan ||
)32()22()!12(
)1(
)!32()1( 2
12
321
1
nn
x
nxnx
a
an
n
nn
n
n
S := 0;n := 0;a := x;while abs(a) >= eps dobegin S := S + a; a := - sqr(x)*a / ((2*n+3)*(2*n+2)); n := n+1end
Domaći zadatak 8
• Izračunati cos(x) sa zadatom tačnošću eps.
...!6!4!2
1)cos(642
xxx
x
Rad sa fajlovima
type fajl = file of real;var n, i : integer; broj : real; f : fajl;
Čitanje brojeva iz fajla
assign (f, 'f.dat'); reset (f);n := 0;while not eof (f) do begin n := n + 1; read (f, broj); { radimo nešto sa brojem }end;close (f);
Upisivanje brojeva u fajl
assign (f, 'f.dat');rewrite (f);for i:=1 to n dobegin { izračunavanje broja } write (f, broj);end;close (f);