Presentation is loading. Please wait.

Presentation is loading. Please wait.

Uvod u programiranje - matematika – XI predavanje

Similar presentations


Presentation on theme: "Uvod u programiranje - matematika – XI predavanje"— Presentation transcript:

1 Uvod u programiranje - matematika – XI predavanje
Vesna Veličković

2 Tipovi u Pascalu Definicija tipa Vrste tipova u Pascalu
type <ime tipa> = <tip> ; Vrste tipova u Pascalu Prosti (nestruktuirani) Složeni (struktuirani) Redni tipovi pointer INTEGER REAL array CHAR record BOOLEAN string intervalni file nabrojani set

3 Array tip Više promenljivih istog tipa čini jednu celinu. Ta celina ima zajedničko ime, a do pojedinačnih komponenti se dolazi pomoću indeksa. array [ <tip indeksa> { , <tip indeksa> } ] of <tip komponente> Tip indeksa mora biti neki redni tip. Tip komponente može biti bilo koji tip.

4 Nizovi Niz je jednodimenzionalni array (ima samo jedan indeks).
const maxIndeks = 100; type niz = array [1 .. maxIndeks ] of real; var a, b : niz; na, nb : integer; // broj stvarno upotrebljenih komponetni a 1 2 3 ... n-1 n n+1 max Index a[3]

5 Specifičnost nizova Obično se u primenama ne zna unapred tačan broj komponenti (elemenata) niza. U deklaraciji array tipa se procenjuje maksimalan broj potrebnih komponeti. Zbog toga uz svaku promenljivu nizovnog array tipa ide po jedna integer promenljiva koja označava koliko komponenti je stvano upotrebljeno. Procenjeni maksimalni broj komponetni ne sme biti premali, da bi program mogli upotrebiti u većem broju slučajeva, ali ni preveliki da ne bi imali mnogo neiskorišćenog prostora.

6 Upotreba nizova Deklaracija tipa. U ovoj fazi opisujemo kako će promenljiva nizovnog tipa izgledati kada se bude napravila, ali za sada ne postoji ni jedna promenljiva tog tipa. Deklaracija promenljivih. Odvaja se memorijski prostor za potreban za čuvanje promenljive tog nizovnog tipa, i uvodi se ime te promenljive. Vrednosti komponenti (elemenata niza) su nedefinisane, pa se još uvek ne mogu upotrebljavati. Definisanje vrednosti komponenti. Upotreba cele promenljive ili neke od njenih komponetni.

7 Definisanje vrednosti komponenti
Ovo se može uraditi na dva načina: Celoj promenljivoj array tipa se dodeljuje vrednost druge promenljive istog tipa. var a, b : niz; a := b; Dodeljivanje vrednosti pojedinačnim komponentama se može uraditi pomoću naredbe dodeljivanja ili read. a[5] := 8; read (a[7]);

8 Učitavanje i štampanje
Učitavanje i štampanje nizova se radi po-komponentno (komponeta po komponenta). Ne može se ceo niz učitati naredbom read ni odštampati naredbom write. Za učitavanje array (i record) tipa koristimo procedure. (Rezultat funkcije ne može biti struktuiranog tipa.)

9 Primer: vektor Deklarisati tip vektor.
Učitati dva n-dimenzionalna vektora. Izračunati i odštampati njihov zbir i skalarni proizvod. program Vektori; type vektor = array [1..50] of real; var a,b,c : vektor; n : 1..50; s : real;

10 procedure ucitaj (var a:vektor; n:integer); var i: integer; begin for i:=1 to n do read (a[i]); end; procedure stampaj (a:vektor; n:integer); write (a[i]:10:2); writeln

11 procedure sabari (a,b:vektor; n:integer; var c:vektor); var i: integer; begin for i:=1 to n do c[i] := a[i] + b[i]; end; function SkalarniProizvod (a,b:vektor; n:integer) : real; S : real; S := 0; S := S + a[i] * b[i]; // S postoji da ne bi u gornjoj naredbi imali rekurziju SkalarniProizvod := S;

12 begin {program} write ('n = '); read(n); ucitaj (a,n); ucitaj (b,n); Saberi (a,b,n,c); stampaj (c,n); S := SkalarniProizvod (a,b,n); writeln ('Skalarni proizvod je ', S); end. {program}

13 Maksimum niza Prvo se prvi element proglasi za maksimalni.
Zatim se svi elementi od drugog do poslednjeg uporedjuju sa proglašenim maksimumom Ako je element koji ispitujemo veći od dosadašnjeg maksimuma, onda se on proglašava za maksimum. Ako nije, proglašeni maksimum se ne menja. Kada pregledamo sve elemente niza, proglašeni maksimum će biti upravo stvarni maksimum niza.

14 function Maximum (a:niz; n:integer) : real; var i : integer; max : real; begin max := a[1]; for i:=2 to n do if max < a[i] then max := a[i]; Maksimum := max; end;

15 Maksimum i njegov indeks
Ako želimo da uz maksimum niza odredimo i na kom mestu se on nalazi, kad god promenimo vrednost promenljive max, menjamo i indeks. Na način opisan u donjoj proceduri, ako postoji više vrednosti jednakih maksimumu, pamtiće se mesto (indeks) njenog prvog pojavljivanja.

16 procedure Maximum (a:niz; n:integer; var max: real; var index : integer); var i: integer; begin max := a[1]; indeks := 1; for i:=2 to n do if max < a[i] then max := a[i]; indeks := i; end; Maksimum := max;

17 Uredjenje niza po rastućem redosledu
Na prvo mesto niza postavimo najmanji element niza. Za to korisimo predhodno opisani postupak nalaženja najmanjeg elementa niza, osim što ne koristimo dodatne promenljive min i indeks, već, čim nadjemo neki element koji je manji od prvog, promenimo im mesta. Zatim na drugo mesto postavimo najmanji element od preostalih. Postupak ponavljamo dok ne dodjemo do pretposlednjeg. Kad njega postavimo, na poslednjem mestu će se automatski nalaziti najveći element.

18 procedure Uredi (var a:niz; n:integer); var i, j : integer; pom : real; begin for i:=1 to n-1 do for j:=i+1 to n do if a[i] > a[j] then pom := a[i]; a[i] := a[j]; a[j] := pom; end;

19 Primetimo da kod uredjenja niza po rastućem redosledu uslov u if naredbi je a[i] > a[j] , a važi i<j. Ako niz uredjujemo po opadajućem redosledu, usov u if naredbi je bi bio a[i] < a[j] . Znači, ako elementi a[i] i a[j] nisu uredjeni kako treba, menjamo im mesta.

20 Ako se elementi niza ne mogu uporedivati relacijama < ili > (na primer ako su nekog struktuiranog tipa), možemo primeniti isti algoritam za uredjenje niza samo što umesto uporedjivanja relacijom stavljamo funkciju koja ispituje da li su elementi uredjeni kako treba. function nisu_uredjeni (i,j:integer) : boolean; begin nisu_uredjeni := not (<dobro uredjenje koje odgovara tom tipu>) end;

21 Uredjenje niza uglova type ugao = record stepen : ; minut : 0..60; end; niz = array [1..100] of ugao; procedure Uredi (var a:niz; n:integer); var i, j : integer; pom : ugao; function nisu_uredjeni ( a, b : ugao) : boolean; begin nisu_uredjeni := not ((a.stepen < b.stepen) or (a.stepen = b.stepen) and (a.minut <= b.minut)); for i:=1 to n-1 do for j:=i+1 to n do if nisu_uredjeni ( a[i], a[j] ) then razmeni_mesta (i,j)

22 Domaći zadatak 17 Deklarisati tipove datum i niz datuma.
Učitati niz datuma i urediti ga po rastućem redosledu.

23 Umetanje u uredjeni niz
Dat je niz realnih brojeva, a, uredjen po rastućem redosledu i jedan realan broj, b. Broj b umetnuti u niz a na odgovarajuće mesto. Prvo treba naći mesto i a[i-1] <= b <= a[i] Zatim treba sve elemente niza počev od mesta i pomeriti za jedno mesto udesno. I na kraju treba staviti b na mesto i.

24 procedure umetni (var a:niz; var n:integer; b:real); var i, j : integer; begin {nalazenje mesta} i := 1; while (i<=n) and (b > a[i]) do i := i + 1; {po zavrsetku petlje b <= a[i], ili je i=n+1, tj. b je vece od svih a[i]} {pomeranje udesno} for j:=n downto i do a[j+1] := a[j]; {umetanje b} a[i] := b; n := n+1; {i broj elemenata niza se menja} end;

25 Domaći zadatak 18 Dat je niz realnih brojeva, a, uredjen po opadajućem redosledu i jedan realan broj, b. Broj b umetnuti u niz a na odgovarajuće mesto. Pokušajte da nalaženje mesta i uradite počev od poslednjeg elementa niza a[n].


Download ppt "Uvod u programiranje - matematika – XI predavanje"

Similar presentations


Ads by Google