Uvod u programiranje - matematika – V predavanj e

Preview:

DESCRIPTION

Uvod u programiranje - matematika – V predavanj e. Vesna Veličković vesna@pmf.ni.ac.rs. Tok izvršenja programa. Upravljačke strukture S ekvenca G rananje P etlje M oguće je proizvoljno kombinovanje. Petlje. Naredbe u petlji se izvršavaju nula ili više puta. - PowerPoint PPT Presentation

Citation preview

Uvod u programiranje- matematika –V predavanje

Vesna Veličkovićvesna@pmf.ni.ac.rs

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