Uvod u programiranje matematika XI predavanje Vesna Velikovi
- Slides: 25
Uvod u programiranje - matematika – XI predavanje Vesna Veličković vesna@pmf. ni. ac. rs
Tipovi u Pascalu • Definicija tipa type <ime tipa> = <tip> ; Vrste tipova u Pascalu Prosti (nestruktuirani) Složeni (struktuirani) Redni tipovi INTEGER CHAR BOOLEAN intervalni nabrojani pointer REAL array record string file set
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.
Nizovi Niz je jednodimenzionalni array (ima samo jedan indeks). const max. Indeks = 100; type niz = array [1. . max. Indeks ] of real; var a, b : niz; na, nb : integer; // broj stvarno upotrebljenih komponetni a 1 2 3 a[3] . . . n-1 n n+1 max Index
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.
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.
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]);
Učitavanje i štampanje • Učitavanje i štampanje nizova se radi pokomponentno (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. )
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;
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); var i: integer; begin for i: =1 to n do write (a[i]: 10: 2); writeln end;
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 Skalarni. Proizvod (a, b: vektor; n: integer) : real; var i: integer; S : real; begin S : = 0; for i: =1 to n do S : = S + a[i] * b[i]; // S postoji da ne bi u gornjoj naredbi imali rekurziju Skalarni. Proizvod : = S; end;
begin {program} write ('n = '); read(n); ucitaj (a, n); ucitaj (b, n); Saberi (a, b, n, c); stampaj (c, n); S : = Skalarni. Proizvod (a, b, n); writeln ('Skalarni proizvod je ', S); end. {program}
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.
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;
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.
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 begin max : = a[i]; indeks : = i; end; Maksimum : = max;
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.
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 begin pom : = a[i]; a[i] : = a[j]; a[j] : = pom; end;
• 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.
• 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;
Uredjenje niza uglova type ugao = record stepen : 0. . 360; 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)); end; begin 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) end;
Domaći zadatak 17 • Deklarisati tipove datum i niz datuma. • Učitati niz datuma i urediti ga po rastućem redosledu.
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.
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;
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].
- Objektno orijentisano programiranje
- Perbedaan matematika ekonomi dan ekonometrika
- Induksi matematika diskrit
- Vesna knezevic predic
- Vesna mijailovic iskustva
- Vesna radoman
- Osnove kakovosti in varnosti v zdravstvu strokovni izpit
- Delo
- Kurje oko latinski naziv
- Vesna loborec
- Bog jarilo
- Forrest klasifikacija
- Vesna futo vugdelija
- Vesna turuk
- Vesna bjedov
- Vesna jevremovic
- Vesna mihajlovic
- Vesna antonic
- Vesna nemec
- Dr vesna gotovac
- Vesna sehovac
- Vesna tornjanski
- Redundansa znacenje
- Vesna turuk
- Vesna baltezarevic
- Marcel duchamp akt koji silazi niz stepenice