360 likes | 607 Views
Programski jezici. Pregled i osnovne karakteristike. Algoritam. Algoritam je niz nedvosmislenih koraka koji se mogu izvršiti i koji definišu proces koji se može završiti – neformalna definicja Ne postoji formalna definicija Čerčova teza – neformalna definicija poklapa se sa formalnom.
E N D
Programski jezici Pregled i osnovne karakteristike
Algoritam • Algoritam je niz nedvosmislenih koraka koji se mogu izvršiti i koji definišu proces koji se može završiti – neformalna definicja • Ne postoji formalna definicija • Čerčova teza – neformalna definicija poklapa se sa formalnom
Naći zapreminu valjka Ako je R poluprečnik osnove i H visina, tada je zapremina valjka jednaka V=R*R*H*PI, gdje je PI=3.14 Ludolfov broj Na stolu je N listova papira, na svakom listu po jedan broj. Naći najmanji broj. U lijevu ruku uzmimo jedan list (označimo ga sa L), a desnom rukom uzimamo redom listove sa stola (označimo ih sa D) i upoređujemo L i D. Ako je D<L, prebacujemo ga u lijevu ruku, a papir koji je tamo bio odlažemo. Ako nije D<L, odlažemo papir iz desne ruke i nastavljamo upoređivanje. Poslije upoređivanja sa svim elementima, u lijevoj ruci je najmanji broj. Primjeri algoritama
Ako je u banku uloženo x eura sa godišnjom kamatom od y procenata, odrediti niz čiji je i-ti element iznos na računu na kraju i-te godine, i=1,...,10. Prvi element niza a[1] je x+x*y/100 Ponavljaj devet puta radnju, redom za i=1,2,...,9: a[i+1] = a[i]+a[i]*y/100 Drugo rješenje: ponavljaj deset puta, redom za i=1,2,...,10: a[i] = x(1+y/100)i Naći najmanji element niza sa N elemenata Neka je M najmanji element i neka je jednak prvom elementu niza; Neka i označava tekući element niza, i=2,...,n; ako je i-ti element niza manji od M, tada M dobija vrijednost i-tog elementa; ako i-ti element niza nije manji od M, preći na sledeći element Poslije upoređivanja sa svim elementima, M je najmanji element niza Primjeri algoritama II
Primjer: procedura swap koja zamjenjuje dvije uzastopne vrijednosti v[k] i v[k+1] u nizu v Algoritamska šema ili pseudo kod t v[k] v[k] v[k+1] v[k+1] t
Pseudo kod procedure Swap /* Zadatak: Zameniti vrijednosti ulaznih argumenata procedure. */ PROCEDURA Swap(UI Arg1Def_Tip, UI Arg2Def_Tip) Argp Def_Tip // Pomoćna promenljiva za zamenu POČETAK PROCEDURE Swap Argp Arg1 Arg1 Arg2 Arg2 Argp KRAJ PROCEDURE Swap
Zadaci kontrolne jedinice • Mogućnost dohvatanja podataka iz memorije • Logika za nizanje (ređanje) instrukcija • Logika za generisanje signala koji kontrolišu protok informacija između različitih komponenti datapath-a • Logika za kontrolu koje operacije mogu izvršavati funcionalne jedinice datapath-a
Zadaci datapath-a • Posjeduje funcionalne jedinice (na primjer sabirač) i memorijske lokacije (registre); • Veze između komponenti tako da se mogu odraditi pojedine funkcije • Mogućnost učitavanja podataka iz memorije i smještanja podataka u memoriju
Istorijat • Mašinski jezik • Primjer: sabiranje dvije vrijednosti koje su smještene u memoriji • (1) učitaj prvu vrijednost iz memorije u registar; (2) učitaj drugu vrijednost iz memorije u drugi registar; (3) aktiviraj kolo za sabiranje tako da ulazi budu dati registri, a izlaz neki treći registar. (4) Smjesti rezultat u neku memorijsku lokaciju. (5) Stop.
Primjer mašinskog koda • binarni i heksadecimalni zapis datog algoritma: • 0001010101101100 156C • 0001110011001110 166D • 0101000001010110 5056 • 0011000001101111 306E • 1100000000000000 C000
Asemblerski jezik • Deskriptivna imena za memorijske lokacije, registre i kodove operacija - mnemonici • Primjer: LD – Load, ST – Store, HLT -Halt LD R5, Price LD R6, Tax ADDI R0, R5 R6 ST R0, Total HLT
Asembler • Program koji prevodi programe napisane u mnemoničkoj formi u mašinski jezik je asembler • Jezici druge generacije • Mane: konstrukcije su i dalje na niskom nivou, razvoj programa se mora zasnivati na sitnim koracima mašinskog jezika, mašinska zavisnost
Treća generacija • Elementarne konstrukcije (primitivi) od kojih treba izgraditi program nisu obavezno i konstrukcije pomoću kojih se može dizajnirati program • Konstrukcije su višeg nivoa i nisu mašinski zavisne
Konstruisanje programskog jezika – izbor konstrukcija od kojih se može izgraditi program. Svaka takva konstrukcija je dizajnirana tako da se može izraziti kao niz konstrukcija nižeg nivoa (npr. mašinskog jezika) • assign Total thevalue Price+Tax – ne zavisi od mašine • assignPromjenljivathevalueIzraz
Programski prevodioci: prevođenje programa iz konstrukcija višeg nivoa u programe na mašinskom jeziku • Kompajleri (Grace Hopper) • Interpreteri – instrukcije se izvršavaju istovremeno sa prevođenjem
Paradigme programiranja • Impertivna (proceduralna) - niz instrukcija koje obrađuju podatke tj. program je implementacija algoritma koji rješava problem • Primjeri jezika: Pascal, Cobol, C, Fortran, Algol, APL, itd.
Deklarativno programiranje • Primjena generalnog algoritma za rješavanje problema; prevođenje problema u formu koja je dostupna algoritmu; osnovni nedostatak: razvoj opšteg algoritma; većina jezika su usko specijalizovani • Primjer jezika: Prolog, Goedel
Funkcionalno programiranje • Program se sastoji od funkcija, koje su izgrađene od elementarnih funkcija • Primjer: LISP - aritmetička sredina • (Divide (Sum Numbers) (Count Numbers)) • Najmanji element liste: (First (Sort List))
Funkcionalna paradigma – modularan pristup projektovanju • Prirodan pristup izgradnji programa - od već postojećih cjelina • Primjeri jezika: LISP, Haskell, Scheme,ML • Često se koristi za matematičke sisteme, npr. dokazivače teorema i logičke sisteme
Objektno-orijentisano programiranje • Jednice programa su “aktivni objekti” • Posljedica modularnog pristupa – svaki objekat je definisan u posebnoj zaokruženoj jedinici i može se kasnije koristiti • Objekti komuniciraju predajom poruka – “message passing” • Trenutno dominantna paradigma programiranja i uopšte razvoja softvera
Primjer: lista je “pasivan objekat” u proceduralnim jezicima, jer se kontroliše pomoću programa; • U OO paradigmi, lista je objekat koji se satoji od same liste i kolekcije procedura za manipulaciju listom (dodavanje elementa, brisanje, sortiranje, detektovanje da li je lista prazna); program koji pristupa listi ne mora da sadrži navedene procedure • Primjer: C++, SmallTalk, Eiffel, Java