Prirodno-matematièki fakultet u Sarajevu Odsjek za matematiku UVOD U KOMPJUTERSKE NAUKE Skripta Pripremili: doc. dr.

Samir Ribiæ, Adnan Isajbegoviæ, Kemal Gu iæ, Edin Ajanoviæ, Zlatan Zametica, Sanjin Ðogiæ, Maja imiæ, Jasmin Meru iæ, Sabina Karahod iæ, Valida Hamidoviæ, Edis Heriæ, Azra Èau eviæ, Nedim enderoviæ, Imer Husejnoviæ, Adi Prijiæ, Sanela abanoviæ, Faik Idrizbegoviæ, Ermin Hod iæ, Dino Èau eviæ, Emir Gegiæ Sarajevo, maj 2010 1

Sadr aj Programske paradigme............................................................ .......4 ièano programiranje................................................................ ......8 Programiranje u programskim jezicima niskog nivoa ..............18 Ma inski jezik.................................................................... ...........................................................18 Asemblerski jezik............................................................... ...........................................................23 Stekovni jezici Forth i Postscript.............................................. ..................................................30 Nestrukturano programiranje u programskim jezicima visokog nivoa........................................................................... ....................41 FORTRAN......................................................................... ...........................................................42 COBOL........................................................................... ..............................................................50 BASIC........................................................................... ................................................................54 Struktuirano programiranje...................................................... ....59 Pascal.......................................................................... ..................................................................62 Programski jezik C.............................................................. ...........................................................65 Algol 60........................................................................ ................................................................76 Algol 68........................................................................ ................................................................77 PL/I............................................................................ ...................................................................78 Ada............................................................................. ...................................................................80 Modula 2........................................................................ ...............................................................81 XBASE........................................................................... ..............................................................82 BCPL............................................................................ ................................................................83 Objektno-orijentisano programiranje..........................................85

C++............................................................................. ..................................................................87 Delphi.......................................................................... ................................................................101 C#.............................................................................. ..................................................................112 Python.......................................................................... ...............................................................115 Ruby............................................................................ ................................................................128 Deklarativno programiranje...................................................... ..131 SQL............................................................................. ................................................................131 Funkcionalno programiranje...................................................... 138 Lisp............................................................................ .................................................................143 ML.............................................................................. ................................................................145 2

Miranda......................................................................... ..............................................................147 Haskell......................................................................... ...............................................................148 Logièko programiranje............................................................. ...150 Prolog.......................................................................... ................................................................151 3

Programske paradigme Prvi kompjuteri su bili programirani icama, tj. raznim kombinacijama, ice bi bile spojene i time bi bila obavljena operacija. Jedan od ranih primjera takvih kompjutera je I BM 805 Test Scoring Machine, iz 1936. godine, kojeg je napravio Reynold Johnson, srednjo kolsk i profesor, a koji je mogao obraditi testove na osnovu èitanja zaokru enih odgovora. Prvi elektronski digitalni raèunar je Atanasoff-Berry Computer (ABC) iz 1937. godine, koji je bio dizajniran za rje avanje sistema linearnih jednaèina. Do 1973. Godine se smatralo da je ENIAC bio prvi kompjuter, ali je te godine poni ten patent u amerièkom patent zavodu, i ABC je progla en prvim kompjuterom. Tokom 2. svjetskog rata, Njemaèka se uveliko slu ila ma inom za kodiranje nazvanom Enigma. Glavni cilj Velike Britanije je bio razbijanje koda ove ma ine, ne bi li time do li do vrijednih podataka za potrebe rata. Razbijanje njenog koda ruènim putem nije bilo moguæe, zbog glomaznosti, pa je tako u februaru 1944. godine u Bletchley Parku pu ten u pogon Colossus, prvi elektronski ureðaj kojeg je bilo moguæe programirati. Poslije su kompjuteri bili bazirani na binarnom kodu koji su predstavljali kontr olne sekvence u CPU. Gottfried Wilhelm Leibniz (1646-1716) je prvi razvio binarni kod , te time omoguæio osnovu za razvoj kompjuterskih nauka. Leibniz je poku ao razviti ma inu koja bi obavljala èetiri osnovne raèunske operacije. On je zami ljao ma inu koja bi radila na principu kuglica smje tenim u bu enim karticama, a stanje da ima kuglice bi predstav ljalo stanje jedan, a ako nema kuglice, predstavlja stanje nula. Na ovom konceptu rade dana nji raèunari, te se zbog toga èesto i smatra prvim nauènikom u oblasti informatike. Da bi se programiranje olak alo, razvijeno je asemblersko programiranje. Ovo je za mjenilo ma insko programiranje. Asemblersko programiranje se smatra primitivnim jezikom, i ako je druga generacija, èak iako su tokom ezdesetih imali ogromne moguænosti, kao i sofisticirane makroe. Takoðer, podr avali modularno-programerske opcije poput CALL (pozivanje potprograma), eksterne varijable, operatore tipa READ/WRITE/GET/PUT, itd. Asembliranje se jo uvijek koristi u integrisanim sistemima. Sljedeæi napredak je bio razvoj proceduralnih jezika. Ovo je treæa generacija jezika , te predstavljaju napredne jezike. Primjeri ovih jezika su COBOL (Common Business Or iented Language), FORTRAN (FORmula TRANslation), ALGOL (ALGOritmic Language), itd. koji su uglavnom razvijeni za komercijalne i nauène potrebe, PL/1 (Programming language 1) koji je razvijen kao hibrid za nauène i komercijalne potrebe, te BASIC (Beginners All Purpose Symbolic Instruction Code) namijenjen za iroku upotrebu. U ovim jezicima,

podaci i manipulacije podacima se predstavljaju kao objekat.opisuje se korak po korak taèno kako procedura ide da bi se rije io problem. Jedini naèin da korisnik pristupi ovim podacima je pute m podprograma. Java.godine 4 . Ovo je najuticajnija programska parad igma u komercijalnom razvoju softvera. itd. ranih 1980-ih je razvijeno objektno-orjentisani programiranje. Radi ovoga. U ovim jezicima. interni rad na objektima mo e biti promjenjen bez da se u tièe RekonstrukcijaColossusaiz 2006. Nakon toga. Primj eri su Simula. Smalltalk. To znaèi da je brzina i efikasnost programa najvi e zavise od sposobnosti i iskustva programera. C++. Eiffel.

koji zauzimaju prostor.na bilo koji kod koji koristi taj objekat. onda mijauèe. Dodavanje medote hodanje grupi ivotinje æe dati objektima maèkama i psima istu metodu hodanja. }. ali njihove podklasne metode prevladaju metode nadklase. a ako se zada maèki. U posljednje vrijeme su se èak nekim je zicima koji nisu klasièni objektno-orjentisane paradigme. } }.) Mnogi programeri i danas sumnjaju u efikasnost objektno-orjentisanih jezika u od nosu na proceduralne jezike. Pascal. Polimorfizam je osobina po kojo j objekat ima parametre razlièitih tipova. zada funkcija govor(). const string name. Kao moguæe rje enje razvijen je polimorfizam. Nalijeðivanje metodom polimorfizma omoguæuje klasi B da naslijedi metodu od klase A bez da mora pruzeti sve osobine klase A. Recimo. Jedna od glavni zamjerki jeste na mnogo bespotrebnih dodata ka u samom jeziku ili objektima. dodavani objektno-orjentisani koncep ti (Visual Basic. onda on laje . Oboje naslijeðuje govor() od grupe ivotinje . jedan objekat odreðenog tipa se mo e kori stiti kao objekat drugog tipa. class Zivotinje { public: Zivotinje(const string& name) : name(name) {} virtual string talk() = 0. ako se psu. a èesto nisu ni potrebni ( Softw are bloat ). tj. class Pas : public Zivotinje { public: Pas(const string& name) : Zivotinje(name) {} virtual string talk() { return "Vauu! Vauu!". } . class Macka : public Zivotinje { public: Macka(const string& name) : Zivotinje(name) {} virtual string talk() { return "Mijauu!". Primjer u C++: #include <iostream> #include <string> using namespace std. itd.

for(int i = 0. delete zivotinje[i]. i < 3.}. int main() { Zivotinje[] = { new Macka("Mica"). new Macka("Macek"). i++) { cout << zivotinje[i]->name << ": " << zivotinje[i]->talk() << endl. } return 0. new Pas("Lesi") }. } 5 .

. nl. Visual Prolog. te se u njemu mo e pisati jednostavniji kod. Ada. kompjuteru se govori ta je problem. a posjeduje napredne konstrukcije za naprednije programer e. to se zakljuèuje prilikom analize jednostavnijih pr ograma raðenim u njemu. a ne procedura koje treba slijediti . Program posjeduje bazu podataka. #include( "stdlib. U ovim j ezicima.hhf" ) static hwString :string := "Pozdrav". C++. te na osnovu toga pronalazi rje enje ko je sadr i tra ena svojstva. a ne kako ga rije iti. XSB. razvijene su deklarativne paradigme. Program je struktuisan k ao kolekcija svojstava za pronala enje rezultata. HLA koristi sintaksu baziranu na nekoliko naprednijih programskih jezika poput Pascal-a. Erlang. te familije funkcionalih jezika (Sc heme. call stdout.puts. Èesto se HLA smatra ni im programskim jezikom. Fun kcionalni jezici koriste blokove kodova koji se pona aju kao matematièke funkcije. itd. Nezavisno od proceduralnih jezika. XSLT. begin Pozdrav. kojeg je razvio Randall Hyde. Ocaml) i logièih programerskih jezika (ALF. end Pozdrav. ili skup pravila. HLA u sebi podr ava jednostavnije instrukcije ma inskog nivoa kao i ostali x86 asembler. itd. poput sliènih produkata tipa MASM (Microsoft) ili TASM (Borland). Fril).Rezultat je sljedeci: # Mica: Mijauu! # Macek: Mijauu! # Lesi: Vauu! Vauu! Objektno-orjentisano programiranje se smatra orjentisanim asemblerskim jezikom. Primjeri ovih jezika su SQL. push( hwString ). Primjeri gdje su ovi jezici iskori teni su Mathematica. Primjer koda u HLA: program Pozdrav. sa ignorisanjem HLL (High Level Language) kontrolnih instrukcija. Primjer je HLA (High Level Assembly). Ovi jezici se uglavnom koriste u akademske svrhe. HLA je prvobitno smi ljen kao alat za uèenje asemblerskog programiranja na fakultets koj razini. HLA om oguæuje lahko uèenje za poèetnike.

Logièko programiranje se bazira na matematièkoj logici, tj. na logièkim formulama, a program se izvr avaju kori tenjem suèelja sa setom pravila sve dok se ne pronaðe odgovor na problem ili se komplet formula smatra nedosljednim. Zato se od progra mera oèekuje istinitost programa da bi funkcionisalo. Poèeci ovog tipa programiranja dati ra iz ranih 1960-tih, tokom debate o primjeni deklarativnih i proceduralnih jezika u r azvoju umjetne inteligencije. Danas se logièko-programski jezici koriste u rje avanju probl ema u civilnom in injerstvu, zraènoj kontroli, mehanici, itd. 6

7 STILOVI PROGRAMSKIH JEZIKA O IÈENIANALOGNIDIGITALNI DEKLARATIVNI IMPERATIVNI FUNKCIONALNI DOMENSKI LOGIÈKI NIZOVNI NISKOGNIVOA VISOKOGNIVOA MA INSKI STEKOVNIASEMBLERSKI NESTRUKTUIRANI STRUKTUIRANI PROCEDURALNI OBJEKNI OBJEKTNOORIJENTISANI OBJEKTNOBAZIRANI S NASLJEÐIVANJEMKLASA S NASLJEÐIVANJEMOBJEKATA

ièano programiranje

Prvi raèunari su bili programirani direktno putem ica. Oni su bili povezani sa mnog im logièkim vezama; u poèetku izgraðeni pomoæu elektriènih releja, kasnije vakuum cijevi, tranzistora i integriranih sklopova. Relej je elektrièni pogon prekidaèa. Mnogi releji koriste elektromagnet za (pokretan je)rad mehanizma prekidaèa, ali i drugi principi se takoðer se koriste. Gornji sklop korist i tri releja, sa spiralom svakog od njih spojenih na jedan ulaz i uzemljenje. Stoga, releji æe s e uvijek aktivirati, kad god na njihove odgovarajuæe ulaze pustimo visoki napon. Serijska veza prekidaèa osigurava da je uèinak AND kola (izlaza) pozitivan kada su s vi releji su aktivni. Krajnji rezultat je logièko AND kolo sa tri ulaza. Jaki pogon(e nergija) visoke vrijednosti na izlazu se intepretira kao logièka 1, a otvoreni (pokretni) k ao logièka 0. Donji sklop pokazuje odgovarajuæe NAND kolo s dva ulaza. Paralelni prikljuèak za rel ejne prekidaèe osigurava da æe izlaz biti logièka 1, dok najmanje jedan relej ostaje neakti van. 8

Do sredine 1940-ih veæina raèunara su radije bili graðeni od vakuum cijevi nego od prekidaèa i releja. Iako su vakuumske cijevi lomljive, skupe, i koriste puno energ ije, one su puno br e od releja (i puno ti e). Ako se zanemari Atanasoff ABC ma ina i Colossus, on da je prvi pravi (radni) opæe namjene, elektronièkih raèunala Electronic Numerical Integr ator And Computer (ENIAC) koji je konstruisan na Univerzitetu u Pensilvaniji izmeðu 194 3. i 1946. Zamisao John William Mauchly (1907-1980) i J. Presper Eckert Jr. (1919-1995), EN IAC je bio èudovi te -bio je visok 10 stopa, zauzimao je 10002 stopa (podnog) prostora, te ak oko 30 tona, i koristi vi e od 70.000 otpornika, 10.000 kondenzatora, 6.000 prekid aèa, i 18.000 vakuum cijevi. Konaèna ma ina je zahtijevala 150 kilovata snage, to je bilo dovoljno da osvjetli mali grad. Jedan od najveæih problema s raèunarima izgraðenim iz vakuum cijevi je pouzdanost; 90% ENIAC-a je izgubilo na vremenu propisanom za lociranje i zamjenu spaljenih c ijevi. Zapisi iz 1952. pokazuju da je oko 19.000 vakuum cijevi moralo biti zamijenjeno samo u toj godini, to je u prosjeku oko 50 cijevi na dan! Analogni raèunar je forma raèunara koji stalno koristi promjenljive aspekte fizièkih p ojava, kao to su elektrièna, mehanièka ili hidraulièna velièina, da podesi problem iznala enja rje enja. S druge strane, digitalni raèunari predstavljaju razlièite kolièine prirasta, kao i njihove brojèane promjene vrijednosti. Mehanièko -analogni raèunari su bili vrlo va ni u kontroli obraèuna pi toljima svjetskom ratu i Korejskom ratu; proizvoðeni su u velikom broju. u Drugom

Specifièno, razvoj tranzistora uèinio je elektronsko -analogne raèunare praktiènim, i pr ije nego to su se digitalni raèunari dovoljno razvili, oni (tranzistori) su se obièno kor istili u nauci i industriji. Analogni raèunari mogu imati vrlo irok raspon slo enosti. Logaritmar ( iber) 9

nomogram[1] su najjednostavniji, dok su // (naval gun fire control computers and large hybrid digital/analogue computers) // bili meðu najslo enijim. Digitalni raèunari imaj u odreðeni minimalni (i relativno veliki) stupanj slo enosti koji je daleko veæi od jednostavnijih analognih raèunara. Ta slo enost je potrebna za izvr avanje njihovih pohranjenih programa, te u mnogim sluèajevima za kreiranje uèinka koji je direktno pogodan za ljudsku upotrebu. Postavljanje analognog raèunara iziskuje listu faktora da bude odluèeno; zajedno s poèetnim uvjetima -tu je, startna cijena. Druga bitna stvar je kreiranje potrebne mre e povezivanja izmeðu elemenata za raèunanje. Ponekad je potrebno razmisliti o struktur i problema, tako da bi raèunar funkcionisao na zadovoljavajuæi naèin. Nijedna varijabla ne bi smjela prema iti raèunarske granice, a trebala bi se izbjeæi i diferencijacija, tipièno, reorganiziranjem mre e meðusobnih veza kori tenjem integratora u drugaèijem smislu. Pokretanje elektronskog analognog raèunara, pretpostavljajuæi da je pode en, poèinje zadr avanjem raèunara sa nekim promjenljivim vezanim za njihove poèetne vrijednosti. Aktiviranjem prekidaèa, on ili off pokreæemo program (zadatak)/raèunar. U nekim sluèajevima raèunar se mo e, nakon pokretanja u odreðenom vremenskom intervalu, u vi e navrata povratiti u poèetno stanje, ponoviti zadatak, i pokrenuti se opet. Sliènost izmeðu linearno -mehanièkih komponenti, kao to su opruge i dashpots (viskozno -fluidni amortizeri), i elektriènih komponenti, kao to su kondenzatori, i nduktori, i otpornici je upadljiva u smislu matematike. One mogu biti kreirane pomoæu jednad bi koje su u su tini istog oblika. Kako god, razlika izmeðu ovih sistema je ono to èini analogno raèunanje korisno. Ako se uzme u obzir jednostavan mno tvo opruga sistem, konstruisanje fizièkog sistema æe zahtijevati pravljenje ili modificiranje opruga . Nakon toga bi uslijedilo njihovo meðusobno spajanje i postavljanje na odgovarajuæe mjesto, prikupljanje test - opreme s odgov arajuæim ulaznim rasponom, i na kraju, uzimanje mjera. U slo enijim sluèajevima, kao to su amortizeri za trkaæe automobile, eksperimentalne konstrukcije, modifikacija, i tes tiranje, to nije tako jednostavno niti jeftino. Elektrièni ekvivalent mo e biti konstruisan sa nekoliko operativnih pojaèala (OP pojaèal a) i nekih pasivnih linearnih komponenti; sva mjerenja se mogu direktno uzeti sa osciloskopom. U sklopu, (simuliranog) 'èvrstina opruge ", na primjer, mo e se promij eniti pode avanjem potenciometra. Elektrièni sistem je analogija na fizièkom sistemu, otuda ime, ali je manje skup za izgradnju, opæenit sigurniji i obièno je mnogo lak i za izmi jeniti. Takoðer, elektronski sklop u pravilu mo e raditi na vi im frekvencijama nego sistem ko ji je simuliran. To omoguæava da se simulacija pokreæe br e nego u stvarnom vremenu (koji bi , u nekim sluèajevima, bio u satima, sedmicama, ili du e). Iskusni korisnici analognih

) S obzirom na protok i akum ulirani volumen tekuæine. (U stvari. sve to je potrebno bi bio stabilan otpornik. napon mo e simulirati pritisak vode. s obzirom na odgovarajuæi mjerni faktor . To se zove dinamièki raspon. U praksi. struja je rijetko kori tena u elektroniènim analognim raèunalima. nauèni / in enjerski. jednostavan integrator kasni sa snadbijevanjem dok su obje varij able naponi.elektronskih raèunara ka u da su oni ponudili relativno povjerljive kontrole. Digitalni proraèuni pokretnim zarezom imaju uporedivo ogroman dinamièki opseg (Dobro moderan priruèni. kalkulatori imaju eksponent 500. Nedostatak mehanièko-elektriène analogije je da je elektronika ogranièena rasponom nad kojim varijable (promjenljive) mogu varirati (mijenjati vrijednosti).) Ovi elektrièni sklopovi takoðer mogu lako izvesti niz razlièitih simulacija. Ona je takoðer ogranièena nivoom buke. u tom sluèaju. Na primje r. te razumijevanje problema u odnosu na digitalne simulacije. a elektrièna struje mo e simulirati brzinu protok a u obliku kubiènih metara u sekundi. je r je sa 10 .

Digitalni elektronski sistem koristi dvije naponske razine da predstavi binarne brojeve. manipulira elektriènim naponom to odgovara dijelu va nosti u problemu koji se rije ava. Meðutim. tu je vjerojatno da æe biti nula -c entar analognog pokazivaèa -tip brojila za prosjeènu taènost mjerenja napona. binarni brojevi su samo kodovi koji odgovaraju.) su se koristili kada bi s e diferencijalna jednad ba pokazala vrlo te ka za rije iti standardnim sredstvima. proizvoljna analogni raèunari obièno imaju prednje ploèe s brojnim utiènicama (jedno-kontaktne utiènice) to dopu ta sloju kabla (fleksibilne ice sa utikaèima na oba kraja) formiranje meðusobnih veza koje definiraju postavljanje problema. ali otkazuju iz struje. taèan izvor napona daje poznate dimenzije. Preciznost (èitanja) analognog raèunara bila je ogranièena uglavnom precizno æu (èitanja) opreme koju koristi. nazvani tako jer izvode matematièk e operacije. Manipulacija t ih binarnih brojeva je naèin kako digitalni raèunari rade. Osim toga. na svjetlost primarnih boja. oni (analog. Osim toga. elektronski analogni raèunar. pru a praktièno bilo koji stupanj preciznosti koji bi mogao biti potreban. Preciznost digitalnih raèunara je ogranièena du inom rijeèi. . (sve. Ona se uvijek koriste s preciznim popratnim komponentama koje u djelovanju. // Poljski Analogni raèunari ELWAT // Elektronski naponom puno lak e raditi. uglavnom na tri ili èeti ri bitne znamenke. postoje precizni potenciometri (promjenljivi otpornici) visoke rezolucije za postavljanje (i kada je to potrebno mijenjanje) skale faktora.?) Veæina OP pojaèala u reprezentativnoj postavi su zbirna pojaèala. Taènost analognog raèunara je ogranièena njegovom procjenom elemenata. sa vrlo visokim napredovanjem i stabilnim upisom. raè. Povremeno. ili slova abecede (ili drugih simbola). Tipièni elektronski analogni raèunari sadr e bilo gdje. a dok je relativno spor. na primjer. dolaze iz ulaznih komponenti. U mnogim sluèajevima. Op pojaèala su odreðeni tip pojaèala s povratnom vezom. Stabilan. od nekoliko do stotinjak ili v i e operativnih pojaèala ( "op pojacala. koja dodaju i oduzimaju analogne napone.preciznost raèuna. kao i kvalitetom unutarnje snage i elektriènih veza. op ampovi"). Analogna raèunala su posebno dobro namje tena da prikazuju situacije opisane diferencijalnim jednad bama. koji provode rezultate na izlaznim prikljuècim a.

a oni integriraju zbir svojih unosa u odnosu na vrijeme.Takoðer. Meðut im. vrijeme mo e poslu iti kao jedna od varijabli. Integriranje u odnosu na druge varijable je gotovo poseban dio mehanièko -analogno g integratora. s obzirom da se rje enje problema ne mijenja s vremenom. OP pojaèala sa popratnim kondenzatorima su obièno ukljuèeni u postavku. to gotovo nikada nije uèinjeno u elektronskim analognim raèunarima. nelinearne funkcijonalne 11 . Ostali elementi raèunara ukljuèuju analogne multiplikatore.

disk / lopta / valjak integratora. mitra (miter mo e znaèiti pored ostalog i klin) -zupèanik diferencijala. s druge strane. poveæanjem ulaznog napona.org/wiki/Function_generator" funkcijonalnih generatora -pos ebni sklopovi razlièitih kombinacija otpornika i dioda za pru anje nelinearnosti. Induktori se nikada nisu koristili u tipiènim analognim elektronskim raèunarima. ukljuèuju kori tenje hrpe izolacijskih cijevi kao model za sortiranje brojeva. Kljuène elektriène / elektronske komponente mogu ukljuèivati: Precizne otpornike i kondenzatore operativna pojaèala multiplikatore . mo e pru iti upotrebljivo taène eksponencijalne ili logaritmicke funkcije. skup nok tiju. ventile i spremnike. ali u svojoj biti sadr e skup kljuènih komponenti koje izvode kalkulacije. Kljuène mehanièke komponente mogu ukljuèivati rotirajuæe osovine za pohranjivanje podataka unutar raèunara. izmi ljeni u svrhu ilustriranja koncepta analognih raèunanja. bilo nekih u analognim raèunarima znaèi da se izraèunavanja obièno br e). brzinom odreðenom uglavnom frekvencijskim ostalih raèunarskih elemenata.generatore.wikipedia. Analogni raèunari èesto imaju kompliciran okvir. U povijesti elektronsk posebnih tipova visokih brzina. kamere (2-D i 3-D). Nelinearne funkcije i proraèuni mogu biti konstruisani sa ogranièenom precizno æu (tri i li èetiri_znamenke) dizajniranjem HYPERLINK "http://en. Kljuène hidrauliène komponente mogu ukljuèivati cijevi. mogu biti mnogo bli e idealnom nego induktori. Op pojaèala podi u izlazni napon. Kondenzatori i otpornici. jer je njihovo odstupanje od idealnog pona anja preveliko za raèunanje bilo koje velike preciznosti. Upotreba elektriènih svojstava izvode u stvarnom vremenu (ili odzivom operativnih pojaèala i ih analognih raèunara. mehanièke rje a vaèe ( resolvers) i multiplikatore i obrtne servo-e. to je razlog za to oni èine veæinu pasivnih raèunalnih komponenti. postupno se poveæava i broj provodivih dioda. Kada se nadoknadi za temperaturu. i gumeni zavoj kao model za nala enje udubljene taèke u skupu taèaka (convex hull). tako da su iskoristiva u ostatku raèunara. te analogne komparatore. Obièno. Neki primjeri. i nizovi vezani zajedno kao model pronala enja najkraæeg puta na mre i. Bilo koji fizikalni proces koji vr i neko raèunanje mo e se tumaèiti kao analogni raèunar. koji operator manipulira unutar okvira kompj utera. Postavke analognog raèunara koje na prvi pogled zahtijevaju induktore mogu se preurediti i redefinirati za kori tenje kondenzatora. prednji pad napona tranzistorske baze -emitera . ploèa.

mjeraèe napona generatore odreðenih funkcija Osnovne matematièke operacije kori tene u elektriènom analognom raèunaru su: 12 .

poput prisiljavanja. Kroz kori tenje diferencijalnih je dnad bi. a druga se ispostavilo dale prvu. to znaèi da se buke visoke frekvencije pojaèavaju. trokut i kvadratne tala i 2 MHz.zbrajanje integracija s obzirom na vrijeme inverzija mno enje stepenovanje logaritmiranje dijeljenje. (Kako bi se modelirao prisilno. jaèina sistema diferencijalnu jednad bu: 13 mno tvo opruga je usmjerena na odrediti odgovor sistema na sinus. Kori tenjem diferencijaln e jednad be: bili bismo u moguænosti se frekvencija izmeðu 2 Hz . Ona odgovara u frekvencijskoj domeni na visoko-prolaznim (high pass filter. na vanjske podra aje. a u praksi se izbjegava redefiniranjem problema kada je to moguæe. kao to je gibanje masa prikljuèenih na izvor. dok je diferencijacija isto rizièna za nestabilnosti. i integratora mogu brzo i taèno predstavlja ti diferencijalne jednad be grafièki. iako je mno enje mnogo preporuèljivije Diferencijacija s obzirom na vrijeme ne koristi se èesto. filter koji propusta visoke frekvencije i pr opusta ih kao niske frekvencije) filterima. U izgradnji na eg raèunara dizajnirali smo dva sklopa iste diferencijalne jednad be.) mo emo izgraditi analogni raèunar koristeæi sumatore i integratore. Oba kruga predstavljaju ko superiornija uodnosu na Matematièka analiza: Modeliranjem prigu enog kretanja. Upalite analogni raèunar. ustvari je raèunski kompleksno vidjeti grafièki prikaz rje enja ovih modela. Da bi se bolje razumio fizièki svijet. sabiraèa. postaje moguæe precizno modelirati pona anja takvih sistema No. . prigu eno titranje mase prièvr æene na oprugu. ponekad je potrebno koristiti matematièke mod ele za predviðanje reakcija razlièitih fizikalnih sistema. Ana logni raèunari kroz kori tenje mno itelja.

Dizajn na eg prvog analognog raèunala: U na prvi sklop dizajna. Ovdje je originalni blok dijagram na eg jakog harmonièkog oscilatora. Rje avanjem homogene jednad be dobiva se rje enje oblika: Dalje. Ks je konstanta opruge. mo emo transformirati jednad bu i rje enje za xL(s). poku ali smo direktno implementirati sklop. Kori tenje Laplaceove transformacije. mo emo rije iti za x (t). 14 . i F(t) je snaga funkcije. Jednom kad imamo stabilan spoj dizajna. bez da ga se umanjuje. mo emo prijeæi na modeliranje jednad be sa veæim sklopovima. Kd je konstanta prigu enja.gdje je M masa objekta prièvr æena na oprugu. Rje avanje ovog integrala æe nam dati rje enje diferencijalne jednad be koja je analogna modelu raèunala. Da bi se rije ila ova diferencijalna j ednad ba. za pojedina rje enja moramo rije iti originalnu jednad bu. Ili da bismo mogli koristiti analogni raèunar. prvo se mora rije iti homogena jednad ba za dobivanje rje enja ovog sistema. pomoæu inverzne Laplaceove transformacije. Zatim.

zajedno sa otpornikom i vrijednosnim kondenzatorom.I ovo je shema sklopa koji smo izgradili. a izlazni je zelena linija. U svim sljedeæim dijagramima. 15 . ulazni val je plava. Odgovor orginalnog sklopa za razlièite ulazne valove Svi sljedeæi ulazni valovi su bili na istoj amplitudi i istoj frekvenciji (100 Hz) .

Moguænost a uriranja funkcionalnosti poslije dostave i niskih bespovratnih tro kova. koja sadrzi trenutne implementacije. Za neke jaèe kalkulacije mo e se konstruisati elektrièni sklop koji mo e rije i ti na problem mnogo br e nego trenutni mikroprocesor. (sklopni dijagrami su se prethodno koristili za odreðene konfiguracije. Logièki blokovi mogu biti konstruirani za obavljanje kompleksnih kombinacija funkcija ili samo za jednosta vna logièka kola kao to su AND i XOR. FPGA je integrisani sklop dizajniran da bude pode en od strane kupca/korisnika ili dizajnera poslije procesa proizvodnje-odakle i programibilno polje . dizajn se sastoji od minimuma cjelina koje opisuju suèelje i arhitekturu. ali je ovo izuzetno rijetko). FPGA sadr i programibilne logièke komponente zvane logièki blokovi i hijerarhija rekonfigurabilne povezanosti koja omoguæuje blokovima da budu ièno -zajedno (wired together) ne to poput jednog èipa programbilne makete. Svi izlazni oblici valova proizvod e karakteristièni termalni um. Takoðer se mo e primijetiti da je izlazni oblik valova za ovaj sklop bio vrlo slièan. FPGA konfigur acija je generalno/opæenito odreðena pomoæu HDL-a (hardware description language) slièno onome koji se koristio za upotrebu aplikacija specificno intergisanog sklopa (AS IC). FPGA se moze koristiti za implementa ciju bilo koje logicne funkcije koju moze obavljati ASIC. relativno ko ta ASIC dizajn (ne odupiruci se opæenito veæoj jedinstvenoj cijeni) nudeæi prednost za mnoge aplikacije/zahtjeve. Jednostavno AND kolo u VHDL-u bi izgledalo otprilike ovako : 16 . Ovaj sklop je takoðer dao bolji odg ovor. tehnièki. barem u smislu va nosti.Kvadratni val Sinusni val Efekti uma su zapa eni kod svih izlaznih valova. kod kvadratnih valova nego kod sinusnih i trougaonih valo va Podruèje programabilnih ulaznih polja Moderna inkarnacija ièanog programiranja je u specijaliziranim programabilnim èipovim a tipa FPGA. N eki dizajneri takoðer sadr e vi e arhitekture i konfiguracija. kao sto su bili za ASIC procesi. veæina dizajnera uvozi zbirke modula. logika blokova ukljuèuje pamæenje elemenata koji mogu biti jednostavni flip-flopovi ili vi e cjelokupnih blokova mem orije. Osim toga. U veæini FPGA. U VHDL. bez obzira na ulazni val.

OUT1: out std_logic). 17 .H. IN2 : in std_logic.Z. I opæenito jednostavne funkcije kao ova su dio veæeg modula djelovanja. Meðutim. treba imat i na umu da su mnogi dijelovi ili neobavezni ili trebaju biti napisani samo jednom . -.all. use IEEE. kori tenjem ovih 9 -logièkih vrijedosti ( U. Osim toga.std_logic_1164.(this is a VHDL comment) -. Dok se primjer iznad mo e uciniti vrlo govorljivim (rjeèiv) za HDL poèetnike. Jedna mo e lako koristiti tip izgraðenih b i izbjeæi uvoðenje biblioteke u poèetku. [1] je grafièki ureðaj za raèunanje.-) umjesto jednostavnih bitova ( 1 .-. kori tenje elemenata poput tipa std_logi c mo e u poèetku biti overkill (preoptereæenje).0. architecture RTL of ANDGATE is begin OUT1 <= IN1 and IN2.import std_logic from the IEEE library library IEEE.1.L. end RTL.W. dvodimenzionalni dijagram dizajniran je da omoguæi pribli no grafièko izraèunavanje funkcije.this is the entity entity ANDGATE is port ( IN1 : in std_logic. end ANDGATE. umjesto da se ima odv ojen modul za ne to tako jednostavno. 0 ) nudi vrlo opse ne simulac ije i alat za otkrivanje gre aka dizajnera koji trenutno ne postoji u bilo kojem HDL-u.X.

Grupa od 8 bitova naziva se bajt (byte). Èovek mora na neki naèin da saop ti raèunaru niz instrukcija koje on treba da izvr i. Hardver èine delovi raèunara. «Inteligencija raèunara nije ni ta veæa od inteligencije onog kontejnera pored fakulteta»* . moramo raèunaru precizno opisati sve korake-instrukcije (naredbe) koje on izvr ava redosledom koji mu je zadat. 16. sredstvo za komunikaciju. Ma inski jezik je izgraðen nad binarnom azbukom. Raèunar je ma ina bez inteligencije. Raèunar mo e «razumeti» samo formalan zapis. koje karakteri u dva stabilna stanja (ima napona nema napona. Programski jezik je skup pravila ko jim se predstavljaju instrukcije i opisuju podaci raèunaru. Sve operacije i svi podaci predstavljeni su nizom bitova. Kako se ma inski program sastoji od niza nula i jedinica. Jednoznaènost svake konstrukcije programskog jezika je njegova najbitnija karakteristika. Zbog toga je do lo do razvoja programskih jezika koji omoguæavaju zapis niza instrukcija raèunaru k oje se ne mogu vi eznaèno protumaèiti. ne toleri uæi ni najmanje nepreciznosti. Jezik je sredstvo za predstavljanj e i preno enje informacija. 64 bita. Zbog tehnièke realizacija raèunara u raèunari se sve predstavlja pomoæu dva simbola 0 i 1. i zahteva dobro poznavanje naèina rada i arhitekture odreðenog raèunara. Jedan znak binarne azbuke predstavlja bit (binary digit). Najva niji delovi raèunara izgraðeni su od elektronskih i magnetnih komponenti. 32. Prirodni jezici dopu taju nejednoznaènost i nepreciznost. Za komunikaciju izmeðu ljudi koriste se jezici. a pisanje instrukcija programiranje. Skup instrukcija napisan za re avanje nekog problema naziva se program. vrlo je te ko programirati na . Da bi re ili neki problem kori æenjem raèunara. teèe struja -ne teèe struja. severni pol ju ni pol). Programom zadajemo raèunaru na koji naèin izvr ava poslove. Sve informacije u raèunaru predstavljaju se nizom bitova grupisani m u grupe od 8. Razlikujemo tri nivoa programskih jezika: ma inski jezik simbolièki jezik jezici vi eg nivoa Ma inski zavisni jezici Najjednostavniji programski jezik je interni jezik raèunara ma inski jezik. Raèunar izvr ava samo ono to mu je zadato i to na naèin na koji mu je zadato. binarnom azbukom. Programski jezik je sredstvo kojim èovek saop tava raèunaru program.Programiranje u programskim jezicima niskog nivoa Ma inski jezik Od hardwarea pa prema softwareu Raèunarski sistem sastoji se od hardvera i softvera. Kori æenjem programskog jezika komuniciraju èovek i raèunar. U zavisnosti od arhitekture raèunara ti nizovi bito va imaju razlièita tumaèenja i razlièite su velièine. a softver èine programi po kojima raèunar radi.

dr. **prof. 18 . sa predavanja.njemu. Programi na prvim raèunarima bili su zapisani ma inskim jezikom. i to je uslo vilo da uzak krug ljudi pi e i odr ava programe. eljko Juriæ.

Umesto instrukcija pisanih nizom bitova uvedene su mnemotehnièke skraæenice za operacije i simbolièke oznake podataka npr. Na taj naèin proces programiranja je u zn atnoj meri olak an. ne odlikuje velikom koncizno æu i pregled no æu (razumljivosti da i ne govorimo). Da bi se program napisan na simbolièkom jeziku izvr avao na raèunaru mora se prethodno prevesti na ma inski jezik. ali i dalje zavisi od konkretnog procesora. poslednja instrukcija je preme tanje konaènog rezultata iz registra u memoriju. u malim koracima opisati re avanj e problema. soba. elemente kuæe predstavljati i na ta j naèini. vrata. kako èesto ka emo. veæ se mora ponovo pisati. rade na bejziku jer on kuca nard be na tom jeziku i na njemu dobija odgovore od raèunara.u njegov ROM je ugraðen vrlo slo en program koji naredbe bejzika prevodi na za raèunar jedino razumljiv jezik -ma inski jezik ili mikrokod -koji se sastoji od velikih ni zova nula i jedinica. Mo emo to uporediti sa procesom gradnje kuæe pri èemu moramo voditi raèuna o polo aju svake cigle. tj. Maternji jezik raèunara se. kada koristimo simbolièki jezik prva instrukcija alje prvi podatak u poseban registar (akumulator) zatim sledeæom instrukcijom dodajemo drugi broj sadr aju registra i tako dok ne dodamo i poslednji broj. ele da se upuste u pisanje ma inskih programa. Sam raèunar ne "razume" bejzik . Èesto za ma inske i simbolièke jezike ka emo da su ma inski zavisni jezici. Zar ima takvih? Ima ih. daske i slièno. tj. Po tom nazivu simbolièki jezik se èesto naziva asemblerski jezik ili kraæe asembler. poznavajuæi blagodeti bejzika. Pretpostavimo da treba da saberemo èetri broja. posao je automatizovan tako to je napisan program koji kao ulaz d obija program napisan u simbolièkom jeziku. a ipak je bolji od bilo kog postojeæeg programsk og jezika! Èitavo ovo poglavlje posveæeno je onima koji. kuhinja. Kako svakoj naredbi simbolièkog jezika odgovara jedna naredba ma inskog jezika. ali pri izradi samog projekta lak e i razumljivije je govoriti o veæim jedinicama np r. b vr i se sabiranje podataka a i b. naredbom ADD a. sa gledi ta korisnika. dakle. radi na bejziku. Program koji vr i prevoðenje iz simbolièkog u ma inski jezik naziva se asembler ( translator). Ova tvrdnja je samo delimièno taèna: stoni raèunari. i to mnogo -svaki ozb iljan . Maternji jezik raèunara Veæina stonih raèunara. prozor i slièno. Jasno je da pri gradnji kuæe u jednom momentu moramo detaljno opisati polo aj svake cigle.Da bi se premostile pote koæe pisanja programa na ma inskom jeziku dolazi do razvoja simbolièkih jezika. Va no je istaæi da pri programiranju na ma insko zavisnim jezicima programer morao vrlo detaljno. U vi im programskim jezicima to radimo kori æenjem jedne instrukcije (npr. x=a+b+c+d). i dalje je potrebno poznavati tehnièke karakteristike konkretnog raèuna za koji pi emo program. pa program napisan u simbolièkom jeziku za jedan raèunar ne mo e se koristiti za raèunar druge arhitekture. a kao izlaz odgovarajuæi program na ma inskom jeziku. Napomenimo da skup naredbi simbolièkog jezika zavisi od arhitekture raèuna ra. Kako to izgleda kada koristimo raèunare upoznajmo n a sledeæem primeru.

Ako se jedan ciklus u programu izvr ava 1000 puta. razume njegov odgovor i prevede je vama. Razgovor bez prevodioca to preðemo na Pre svega. zamislite da razgovarate sa nekim Francuzom ne znajuæi njegov jezik. Programi koji rade na ma insko m 19 . pre nego ovaj jezik. Razgovor se. preæi na ma inski jezik.vlasnik raèunara æe. dakle. Oèigledno je da je potrebno vreme da ono to ste eleli da ka ete objasnite prevodiocu. pre ili posle. naredbe unutar tog ciklusa æe 1000 puta biti prevoðene. pa zatim on prevede va u reèenicu. Zato. Isto je tako i kod raèunara prevoðenje svake naredbe traje dugo. moramo da objasnimo potrebu za njim. odvija preko prevodioca. saop ti je Francuzu.

raèunaru ZX Spectrum) koju i vi i sagovornik odlièno poznajete ali prevodilac o njoj nema pojma? Proæi æe mnogo. oni se prikazuju na ne to pogodniji naèin preko mnemonièkih skraæenica. kao to smo rekli. njegov prevod æe. po pravilu. u veæini sluèajeva. Ma inska abeceda Iako su ma inski jezici. 11. a raèunar radi ne to slièno tome. 14 i 15). Zatim se heksadekadni brojevi grupi u dva po dva (jer su dve heksadekadne cifre jedan bajt dok se. Bejzik omoguæava realizaciju èak i vrlo slo enih programa za obradu podatak a. Mo ete li Francuzu sa kojim razgovarate posredstvom prevodioca da saop tite taèno ono to mislite? Njemu ne govorite vi nego prevodilac. javljaju i slova A. ali ne to! Korisnik tada. lako mo e da preraste u poseban programski jezik. sa stanovi ta memorije. Pre svega. I ovaj problem mo e da bude prevaziðen bez ma inskog jezika -postoje specijalizovani vi i programski jezici za rad sa periferijskom opremom. Pomoæu ma inskog jezika realizuje se slo eni softver za obavljanje specifiènih potreba koji. to izaziva delimièni g ubitak poverenja u raèunar. D. Nikada ni jedan konstruktor raèunara i programskih jezika neæe moæi da predvidi sve potrebe korisnika i da obuhvati sve obl asti u kojima æe raèunar biti kori æen! Ma inski jezik omoguæava korisniku da natera raèunar da radi taèno ono to njemu treba bez posredstva operativnih sistema. modemom i. Treba. postati nerazumlji v i na kraju æete morati da prekinete razgovor. 12. C.jeziku zato. na primer. èesto koristi naredba LD A. ali pot reba za ma inskim jezikom neæe. Kod procesora Z80 se. ali kada se doðe do osetljive oblasti rada sa periferijskim jedinicama ( tampaèem. o n nehotice modifikuje neke va e reèenice tako da se nijansa njihovog znaèenja mo e lako promeniti. ploterom. koja redom predst avljaju "cifre" 10. ipak. osim cifara 0-9. Zatim se programske instrukcije zamenjuju skraæenicama koje opisu ju njihovo dejstvo. u daljem razvoju raèunara. No. kasnije. disk-jedinicom) poèinju da se javljaju "nesporazumi" korisnik taèno zna ta bi raèunar trebalo da uradi. vratimo se opet razgov oru sa Francuzom i prevodiocu: ta ako elite da razgovarate o nekoj specifiènoj temi (npr. u nedostatku poznavanja struènih termina. reæi da veæina proseènih korisnika raèunara poèinje da pi e ma inske programe ne zbog zadovoljavanja potreba za nekim sasvim specifiènim aplikacijama raèunara veæ da bi programi za igre br e radili. mnogo vremena dok prevodilac ne shvati ono to elite da ka ete. jedinice i nule treba pretvor iti u heksadekadne brojeve (smatramo da vam je poznato ta su heksadekdani brojevi -u njima se. Ovo se posebno odnosi na vlasnike spo rog ZX81. rade 40-100 puta br e od odgovarajuæih BASIC programa! Problemi sa brzinom æe. B. jedna heksadekadna c ifra naziva "nibble". E i F. H ko ja se . nizovi jedinica i nula. modifikuje svoje potrebe. verovatno biti prevaziðeni. naroèito. 13.

Za pisanje programa na ma inskom jeziku potrebno je. D. na primer. Svaka naredba se sastoji od mnemonièke skraæenice (u gornjem primeru to je bilo LD) koja se prevodi u dve ili èetiri heksadekadne cifre (jedan ili dva bajta). Skraæenica LD dolazi od "load" i znaèi: prenesi sadr aj registra H u registar A (akumulator). najpre.heksadekadno kodira kao 7C. E. na primer) ili adresa nekog bajta memorije. Naredba LD A. Iza skr aæenice se pi e adresni deo koji govori raèunaru gde se nalaze podaci koje treba da obraðuje. C. H. shvatiti strukturu na redbi. L kod procesora Z80. Ova j adresni deo mo e da bude neki od procesorskih registara (B. prenosi sadr aj memorijskog bajta èija je adresa 7530 (ova adresa je heksadekadna i njoj odgovara dekadna adresa 30000) u procesorski registar A radi 20 . A. (7530).

najèe æe.A) i na kraju æe se izvr avanje ma inskog programa prekinuti (naredba RET) i raèunar æe se vratiti u bejzik program iz koga je usledio poziv ma inskog.A RET Sa leve strane se nalaze adrese instrukcija. Na ma inski program æe poèinjati od adrese 30000 (heksadekadno 7530) i imaæe svega èetiri instrukcije. prevoðenje programa i snimanje na kasetu.58. Da sve ovo ne bi ostalo na nivou teoretisanja. neki programabilni d epni raèunar) i uneti ih memoriju pomoæu naredbe POKE. Prva instrukcija (LD A.50.one raèunaru ni ta ne znaèe.obrade.58. kada ove brojeve pretvorimo u dekadne : 58 117 58 60 50 117 58 201. izgleda ovako: 7530 7533 7534 7537 3A 3C 32 C9 3A 75 LD A.117. Spectrum. sastaviæemo kratak ma inski program k oji uveæava sadr aj nekog bajta memorije za 1 i odgovarajuæi prateæi bejzik program. (753A)) æe u registar A (èesto se naziva i akumulator) dovesti br oj koji se nalazi na adresi 753A (dekadno 30010).) koji su kod nas zastupljeni. Ovakav program mo e da bude vi e ili manje slo en. (7530) prevodi sa 3A 30 75) ili gotov program koji v r i prevoðenje.60. Ma inski program je pisan za procesor Z80 koji poseduje veæina popularnih modela (ZX81. Kada smo napisali program u mnemonièkim skraæenicama. Mnemonièke skraæenice su ispisane pored njih radi kompletnosti . Ceo program .. a zatim demonstrirati rad programa: 10 FOR I=0 TO 7 20 READ A 30 POKE 30000+I. treba dobijene heksadekadne brojeve pretvoriti u dekadne (za to se koristi bejzik program ili. (753A) INC A 3A 75 LD (753A). Rutine iz ROM-a Program glasi 3A 75 3A 3C 32 75 3A C9 ili.201 . sledeæa æe poveæati sadr aj registra A za jedan (INC A). Sada nam ostaje da sastavimo bejzik program koji æe uneti ma inske instrukcije u memoriju. pristupamo njihovom pretvaranju u heksadekadne brojeve. a vrlo su popularni slo eni "asembler programi" koji omoguæavaju uno enje skraæenica. Za to mo emo da koristimo tabelu (prema njoj s e gore pomenuta naredba LD A.A 40 NEXT I 50 INPUT A 60 POKE 30010. a odmah do njih su same instrukcije predstavljene kao heksadekadni brojevi. kodiran. ispravljanje. TRS 80..A 70 CALL 30000 80 PRINT PEEK 30010 90 GOTO 50 100 DATA 58. zatim æe sadr aj akumulatora biti vraæen na odgovarajuæe mesto u memoriji (LD (753A). Ukoliko radimo manuelno.117.

21 .Nije te ko razumeti rad programa. Najpre se iz DATA naredbe u memoriju unosi ma insk i program koji poèinje od adrese 30000. a zatim raèunar poziva potprogram i na ekranu prikazuje rezultat. Zatim se od korisnika tra i da otkuca neki bro j (podrazumeva se da je taj broj manji od 256).

pa bi uno enje programa moralo drukèije da se organizuje. Zar ne bi bilo bolje pozvati ovaj program? Na alost. ko ji predstavljaju skup mikroinstrukcija i koji se smje taju u upravljaèku memoriju. Naredba CALL 30000 bi kod mnogih raèunara morala da se zameni sa. sve instrukcije bejzik programa bi morale da budu promenjene. Na program je "znao" gde se nalazi argument operacije koju treba da izvr i i gde da s mesti rezultat. pa bi se koristilo B=USR(0). Repertoar i nstrukcija (broj raspolo ivih instrukcija) zavisi od vrste i tipa raèunara. Ba u ovome i le i ume nost dobrog programera: cilj je upotrebiti rutine iz ROM-a raèunara z a obavljanje nekih zadataka! Raèunar. Repe rtoar instrukcija kod raèunara sa mikroprogramiranjem mo e se jednostavno mijenjati dopisivanjem novih mikroprograma.Èak i na ovom jednostavnom primeru se vidi koliko se ma inski programi razlikuju od raèunara do raèunara. B=USR(30000). na primer. ne poseduje naredbe READ i DATA. a kod nekih drugih bi br oj 30000 morao da bude sme ten negde u memoriji. na primer. Da smo. njihova logièka povezanost. negde u ROM-u ima potprogram koji slu i z a uno enje podataka sa tastature (ovaj potprogram se koristi za bejzik naredbu INPUT ). Primjenom koncepta mikroprogramiranja omoguæeno je da se operacija (instrukcija) formira od elementar nih operacija nazvanih mikrooperacije. kao i njihovo funkcionisanje. Umjesto binarnog koda operacije formiraju se mikroprogrami. bio sasvim razlièit. ROM je toliko veliki da ovaj pro gram nije lako pronaæi. a mo da ne bi imao ni isti b roj naredbi. . a neke uop te ne bi lièile na one koje smo koristili! Lako je primetiti da sastavljanje ma inskih programa nije ni malo jednostavan posa o. ZX81. Rijeè predstavlja niz bita. Kod raèunara koji ne koriste Z80 procesor morale bi da se izvr e korenite izmene: èitav ma inski program bi. jasno. na program bi se produ io na stotinak instrukcija . a nije lako ni zakljuèiti u kom æe se memorijskom bajtu nalaziti broj ko ji je korisnik otkucao posle njegovog izvr avanja. Kada bismo ovaj program eleli da primenimo na raèunaru BBC model B. U/I jedinica mo e da omoguæi serijski (bit po b it) ili paralelni (svi bitovi odjednom) prenos podataka odnosno instrukcija. Du ina rijeèi je broj bita koji je saèinjavaju. Binarni kodovi mikrooperacija nazivaju se mikroinstrukcije. bili ambiciozniji i po eleli da elimini emo potrebu za bejz ik programom i da na ma inskom jeziku realizujemo uno enje broja sa tastature i prikazivanje rezultata na ekranu. Zakljuèak Specifiènost svakog raèunara èine elektronske komponente. to se kodova tièe. meðutim. odnosno nula i jedinica. Do kraja 60-tih god ina organizacija upravljaèke jedinice zavisila je od repertoara instrukcija.

22 .

pomoæ i ispravljanje gre aka. u kojima jedna izjava opæenito je rezultat mnogim ma inskim uputama.Asemblerski jezik Asemblerski jezici su porodica ni ih jezika za programiranje raèunara. koji se (idealno) prenose. To je u kontrastu sa programskim jezicima visoke r azine. Asembler obavlja vi e ili manje izomorfne prijevode (jedan-na-jedan preslikavanja) iz mnemonièke izjave u ma inske instrukcije i podatke. posebno je temelj za RISC arhitekture. mikrokontrolora i drugih (obièno) integriranih sklopova. zatim upotrijebe drugi prolaz za rje avanje ovih adresa. za optimiz iranje maksimalnog potencijala rada cijevi CPU-a. U posebnim . kao i x86 (-64). opisane u nastavku). Druga vrsta Two-pass asembleri (i Multi-pass asembleri) koji izraðuju tablice sa svim nerije enim simbolima u prvom prolazu . mikroprocesora. Moderni asembler. za stvaranje zaje dnièke sekvence. a nazivaju se makr o asembleri.Mnogi sofisticiran i assembleri nude dodatne mehanizme kako bi se olak ao razvoj programa. a temelji se na kratice (zvane mnemotehnike) koji poma u programeru da s e sjeti pojedinih uputa. Asembler se opæenito jednostavnije mo e napisati nego programski jezi ka visoke razine. i HP PA-RISC. kratke upute kako inline . najmodernim asemblerski m jezicima ukljuæene su i makro objekti( macro . Kori tenje simbolièke reference je kljuèno obilje je asemblera . Prednost one-pass asemblera je brzina.spremanje dosada njih proraèuna i adresa nakon uploada programske modifikacije. Sun SPARC. su tisku kontrolu procesa. Veæina asembler takoðer ukljuèuje makro objekate za obavljanje tekstualne zamjenue -npr.Korisnièki program koji se zove asembler i koris ti se za prevoðenje izvje taja asemblerskih jezika u odreðeni ma inski kod. Asembler Tipièno moderni asembler stvara objektni kod prevodeæi mnemotehnièke instrukcija u opcode. koji s e temelje na koliko prolaza je potrebne za izrade datoteke programa: Prva vrsta One-pass asembler prolazi kroz izvorni kod jednom i pretpostavlja da æe svi simboli biti definiran prije bilo kakve upute. kao to je MIPS. Ova reprezentacija je obièno definiran od strane proizvoðaèkog hardvera. Postoje dvije vrste asemblera. ili èak i generirati cijeli plan programa. umjesto naziva potprograma. Prednost . Asemblerski jezik je tako specifièan za odr eðene fizièke (ili virtualne) raèunarske arhitekture. a moguæe je od 1950 godine. registara. te rje avanjem simboliènih imena za memorijske lokacije i drugih subjekata . koja nije tako va na kao to je nekada bio s napretcima u brzini i sposobnosti raèunara. To je u suprotnosti s veæinom jezika v isoke razine. Oni provo de simbolièan prikaz brojèanih kodova i ostalih konstanti potrebne da se programiraju posebne CPU arhitektre. itd.

two-pass asemblera je da simbol se mo e definirati bilo gdje u programu. Kao 23 .

zapise. klasa i postavki Profinjena makro obrada ( iako je dostupna na asemblerima od kasne 1960-ih za IBM/360) Objektno-orijentirane osobine kao to su: enkapsulacija. Da biste ga stavili na drugi naèin. interface. nasljeðivanje(inheritance). Sofisticirani asemblerski jezici visoke razine pru aju apstrakcije kao Napredna kontrola strukture High-level proceduru / funkciju deklaracije i saziva High-level apstraktni tipovi podataka. ali ne i to su: . Mnemotehnièki "mov" predstavlja opcode 1011 koja zapravo kopira vrijednost u druge naredbe u registar prve naredbe. i nazivaju ga "mov" opcode. Intel u sintaksi. na primjer kada se namjerava na binarnom opcode oznaèiti neki simbol -mnemonièki -sama. Mnemonièku naredbu odabrao je dizajner da bi instrukciju "move" mogao programmer bolje zapamtiti. mnemonièki kao to je "mov" nije opcode. ukljuèujuæi i structure. to je tehnièki nepravilno. U praksi. mnogi programeri ispuste rijeè mnemonièki. unija. zarezom odvojena lista argumenata ili parametara koje slijedi opcode. (H-sufiks oznaèava heksadecimalnom ili 97 u decimalnom) . Na primjer. program se mo e definirati na vi e logiènih naèina. Struktura asemblerskog jezika Program napisan u asemblerskom jezik se sastoji od niza instrukcija -mnemotehnik a koji odgovaraju toku izvr ne naredbe. Malo moderniji programeri trebaju da spominju zapravo ono to su u obrascima binarni opcode-ove z a posebne upute. x86/IA-32 procesor mo e izvr iti sljedeæe binarne instrukcija ( 'MOV') kao to je izra eno u ma inskom jeziku: Heksadecimalni: B0 61 (binarni: 10110000 01100001) Ekvivalentno asemblerskom jezik je lak e zapamtiti (npr. To èini s dva prolaza asemblerski program za lak e èitanje i odr avanje. a li kao da simbolizira opcode. tek kada prevede asembler. polimorfizam. 61h Ova instrukcija znaèi: Premjesti (zapravo kopiraj) heksadecimalnu vrijednost '61 ' u registar procesora poznat kao "AL".rezultat toga. razlika je u praksi postala malo zamagljena meðu programerima. Tipièna izjava asemblerskog j ezika. tada mogu biti uèitane u memoriju i biti izvr ene. moglo bi se odnositi na "opcode mov". mnemonièk i) : MOV AL.

meðu procesor dizajnerima. i (djelomièno) obrnutog od asemblera tj. Meðutim. 24 . Za razliku od programskih jezika vi e razine. Transformacijom obiènog jezika u ma inski jezik je postignu to asemblerom. u nekim sluèajevima . obièno postoji jedan-na-jedan korespondencija izmeðu jednostavnog asemblerskog i instrukcija ma inskog jezika. disassebler -a.

asemblerski jezik pru a pseudoinstukcije koji pro iruju na nekoliko uputa ma inski jez ik, pru ajuci obièno potrebnu funkcionalnost. Na primjer, za ma inski jezik kojem nedostaj e "granaja ako veæe ili jednako"( "branch if greater or equal" ) instrukcija, asembl erski jezik pru a pseudoinstrukcije koje se pro iruje i na ma inski "skup ako je manje od" i "gran aj ako je nula ( set if less than i branch if zero )".Veæina asemblera takoðer nudi bogat jezik makroa (obja njeno ispod) koji se koristi od strane prodavaèa i programera za generiranje slo enijih kodova i sekvenci. Svaka raèunarska arhitektura i arhitektura procesora obièno ima svoj ma inski jezik. Na ovoj razini, svaka instrukcija je jedno stavno dovoljno da se izvr ava pomoæu relativno malog broja elektriènih sklopova.Raèunari se razlikuju po broju i vrsti instrukcije koje mogu da izvr e. Na primjer, novi 64-bi tni raèunari æe imati razlièit strujni krug od 32-bitnog raèunara. Oni isto tako imaju razlièite velièi ne, brojeve registara i prikaze razlièitih vrsta podataka u memoriji. Dok veæina raèunara za opæu namjenu su u stanju izvr iti u su tini iste funkcionalnosti. Osnovni elementi Bilo koji asembleski jezik se sastoji od 3 vrste instrukcija koje se koriste za definiranje programa: Opcode mnemotehnika (Opcode mnemonics) Sekcija podataka (Data sections) Asemblerska direktiva(uputa) Opcode mnemotehnika Upute (izjave) u asemblerskmo jeziku opæenito su vrlo jednostavna, za razliku od onih u programskim jezicima visoke razine. Opæenito, opcode je simbolièko ime za jed nu istrukcuju ma inskog jezika, a tu je najmanje jedan opcode mnemonièki definisan za s vaku instrukciju ma inskog jezika. Svaka naredba u pravilu sastoji se od instrukcije il i opcode plus nula. Veæina upute odnose se na jednu vrijednost, ili par vrijednosti. Instru kcije mogu biti bilo neposredno (najèe æe vrijednost u bajtovima, koji se kodira uputama) ili adr esini podatci koji se nalaze negdje saèuvane u memoriji. To odreðuje temeljna arhitekture procesora, asembler samo odra ava kako ova arhitektura radi. Data sections Postoje upute koje se koriste za definiranje elemenata za dr anje podataka i varijabli. Oni definiraju vrstu podataka, du inu i poravnanje podataka. Ove upute se mogu definirati da li su podaci dostupni izvan programa (programi sklopljen odvojeno) ili samo na program u kojem je definiran dio podataka. Assembly directives i pseudo-ops

25

Asemblereske direktive su upute koje su pogubili asebleri za vrijeme sklapanja.O ni mogu napraviti red programa u ovisnosti o parametrima ulaz od strane programera, tako da jedan program mo e biti sklopljen na razlièite naèine, mo da i za razlièite aplikacije. Oni se takoðer mogu koristiti za predstavljanje programa, olak avajuæi programerima za èitanje i odr avanje. Imena pseudo-OPS-a èesto poèinju sa dot da bi ih razlikovali od ma inske instrukcije.Neki asembleri takoðer podr avaju pseudo-upute, koje generiraju dvije ili vi e ma inske instrukcije. Obièno, svako konstanti i varijabli je dato ime, tako da upute mogu se lak e lokacirati po imenu, to promovi e self-documenting code . U izvr nom kodu, naziv svakog potprograma je povezan sa svojim entry point , tako da bi lo koji poziv potprograma mo e koristiti svoje ime. Unutar potprograma, GOTO destinacij e su date oznake.Neki asembleri imaju potporu lokalnih simbola koji su leksièno razl ièite od normalnih simbola (npr., kori tenje "10 $" kao GOTO odredi te). Veæina asemblera osigurava fleksibilno upravljanje simbol, to omoguæava programerima da upravljaju razlièitim prostorima, automatski izraèunati offset unutar strukture podataka, te dodi jeliti oznake koje se odnose na doslovnu vrijednost ili rezultat jednostavnih raèunanja asemblera.Asemblereski jezici, kao i veæina drugih programskih jezika, dopustaju d a komentari mogu biti dodani u red izvornog koda, koje zanemaruju asembler. Dobra upotreba komentarima je jo va nije u asembleru nego u vi im programskim jezicima, kao i smisao, svrhu sljedeæe instrukcije je te ko de ifrirati iz samog koda. Pametno kori te nje tih pogodnosti mo e uveliko pojednostaviti problem kodiranja i odr avanja nisko razi nskih kodova. Sirovi asemblerski kod generisan od strane asemblera ili disasemblera-ko da bez komentara, smislenih simbola, ili defenicijama podataka je dosta te ko èitati kada s e promjene moraju izvr iti. Broj operacija (Number of operands) Instrukcije ce biti kategorizirane po maksimalnom broj operanada (registri, memo ri kih lokacija,vrijednosti) izrièito navedeno u uputama.Neki od operanada isto tako bi m ogli dati implicitno, pohranjene na vrhu stack-a ili implicitne registre i rezultat se raèun a kao dobar(iako ne naredba). Neki setovi instrukcija mogu imati razlièit broj operanada za razlièite upute. (U primjerima koji slijede, a,b i c odnose na memorijske adrese i reg1 , ma inske registre.) 0-adresni (nulta adresna ma ina), tzv. stack ma ina : sve aritmetièke instrukcije odvijaju pomoæu vrh jedne ili dviju pozicija na stack-u, naredbe su: push i pop up ute se koriste za pristup memoriji:push a, push b, add , pop c. 1-adresni (jednoadresa ma ina), tzv. akumulator ma ina, ukljuèuje veæinu starijih

raèunara i mnoge male mikrokontrolere. Veæina uputa odredi jednog izrièito prvu naredbu (registar, memorijsku lokaciju) sa implicitnim akumulatorom: load, add b , store c. Vezana klasa je praktièno stack ma ini koje èesto omoguæavaju jedan eksplicitnu naredbu u aritmetici instrukcije: push a, add b, pop c. 2-adresni (dvoadresna ma ina) -neke RISC i mnoge CISC ma ine spadaju u tu 26

kategoriju. Za RISC ma inu (zahtijeva eksplicitnomemorisko pamæenje), upute æe biti: load a, reg1; load b, reg2; add reg1, reg2; store reg2, c; 3-adresni CISC(troadresna ma ina) -gore navedeni primjer ovdje mogu se obavljati u jednoj instrukciji u ma ini s memorijskim instrukcijama: add a,b, c; ili vi e obièno (veæina ma ina dozvoljva najvi e dvije memoriske instrukcije): move a, reg1; add reg1, b, c; 3-adresni RISC (troadresna ma ina) -U tipiènoj troadresnoj RISC ma ini, sve tri instrukcije aritmetièkih uputa moraju biti registrovane, tako izrièiti 2-adresni loa d / store upute nisu potrebne. Skup instrukcija sa 32 registara zahtijeva 15 bitova za kodiranje tri registrara troadresnog, tako da ovaj program je obièno ogranièena sa uputama postavljene s 32-bitnim uputama ili du e. Primjer: load a, reg1; load b, r eg2; add reg1 + reg2-> reg3; store reg3, c; Vi e adresni - neke CISC ma ine dozvoljavaju razne naèine adresiranja koje dopu taju vi e od 3 instrukcija ,kao to je VAX "POLY". Primjeri: Java virtual machine JVM (0 adresni): iload_1 iload_2 iadd istore_3 MOS 6510 (1 adresni): jsr xout lda #<bobot ldy #28 jsr strout lda #<bobpa ldy #2 jsr strout txa Motorola 68000 (2 adresni): print_b_of lea s_ofbeer,a1 bsr print_s rts 27

k] ADDL2 #400. increment pointer for A[i.d7 move. R8 <.l a1. R9 .a2 print_s_loop add. R6 . [EBX] pop edi Vax 11 (3 adresni): loop3: MULF3 (R5)+. increment pointer for B[k.b #OUTCH.b (a2)+. 0 je wait_on_input xor EAX. k]*B[k.print_s move. decrement loop count. R9 <. (R6). loop3 . R8 . continue if > 0 Makroji (Macro) Mnogi asembleri podr avaju predefinirane makronaredbe. j] and .A[i. j] ADDF2 R9. a drugi podr avaju 28 .R8 + A[i.(a3)+ beq print_s_done trap #14 bra print_s_loop Intel i386 (2 adresni s ogranièenjem): wait_on_input: call _kbhit cmp EAX. j] SOBGTR R7. k]*B[k.

Jedan makro je definiran koristeæi odgovarajuæi pseudo-op. Makro asembleri èesto dopu ta makronaredbi da uzimaju parametre. kao to je stvaranje i pohranu podataka realizirana kroz naprednu Boolean operaciju nad bitovima koji se koriste u igricama. Npr. simbolièke varijable. a to se dogodilo. Buduæi da makronaredbe mogu imati kratka imena. Makroi su kori teni za prilagodbu sistema velikih razmjera softver za odreðene kupce u mainframe doba. za generisanje verzije programa u COBOL-u koristeæi èisti program makroasemblera. Mnogi asembleri imaju izgraðene (ili unaprijed definirane) makronaredbe za sistemsko pozivanja i drugih posebnih broj nih sekvenci. kao i vi i nivo jezik). ali pro iriti na vi e ili zaista puno li nija koda. onda obraðuje ih kao da su se pojavili u izvornom kodu datoteke svi zajedno (ukljuèujuæi. na primjer. Tako makronaredbe mogu generirati veæi broj asemblerski jezika. upravljanj e podacima i kriptografiji. na temelju makro argumenata. on zamjenjuje izjavu sa tekst linije vezane u z taj makro. kao to je realizirana u 1970-ih. razmjenu infor macija . sadr e linija koda unutar COBOL-a. softver sigurnosti. Makronaredbe dozvoljavaju i spremanje konteksta tj. Takoðer je moguæe koristiti iskljuèivo makro obradu. niz manipulacija i aritmetièkih instrukcija. pojam m acro . Ovaj slijed teksta linija ukljuèuje slijed instrukcija. kondicionale. siste mski programeri rade s IBM-ovim Monitor System / Virtual Machine (CMS / VM) i sa IBMovim "real time transaction processing" ("stvarnom vremenska obrada transakcije") dod atkom. CICS (Customer Information Control System) a ACP / TPF.tada se on mo e smatrati vi em programskim jezikom. Ne ki asembleri ukljuèuju prilièno sofisticirane makro jezike. bolje asembler. Kada asembler obradi takve izjave.programer-defined makronaredbe koje ukljuèuju sekvence linije teksta u koje su stavl jene varijable i konstante. na primjer. : Organizacija koristi asemblerski jezik koji je sna no pro iren pomoæu makronaredbi. airline / financijskom s istemu koja je zapoèela u 1970-ih i dalje radi mnoge velike Global Distribution Systems ( GDS) i kartiènog sistema danas. To je zato to. sve kori teno za vrijeme izvr avanja date makronaredbe. koji ukljuèuje elemente visok ih programskih jezika kao dodatne parametre. Oni se takoðer mo gu koristiti za dodavanje vi e razinskih struktura programa. To bi se moglo koristiti za generiranje strukture podataka ili "unro lled" petlje. irenje makronaredbi koje se pojavljuju u zamjenski teks t). ili bi se mogli generisati cijeli algoritmi utemeljeni na slo enim par ametrima. a takoðer su kori teni od strane kupca da svoje osoblje zadovolje potrebama izrade posebne verzije proizvoðaèa operativnih sistema. oni se mogu koristiti kako bi smo asemblerske programe puno skratili (zaht ijevaju manje linija koda iz programer aplikacija. ili slijed za pohranu podataka pseudo-OPS-a. na primjer. Moguænosti generirati asemblerski kod napisan u potpuno razlièitim jezicima.

processing ( obrada makronaredbe ) je neovisna od pojma assembly ("asembler"). To je zato to mnogi programeri su bili prilièno zbunjeni makro parametarima supstitucijom. obrada teksta. 29 . to je zapu teno na vi im programskim jezicima. a preostalih trajnica za asembler. u stvari su se pojavila i pojavljuje se u programskog jezika C. ko ji podr ava "preprocesor upute" za postavljanje varijabli. Koncep t makro obrade. nego objekt generiranog koda. C preprocesor nije Turing-complete (Turingpo tpun). Unatoè moæ makro obrade. modernom smislu rijeèi obrada. Imajte na umu da za razliku od pr ethodnih odreðene makro procese unutar asemblera. jer nisu imali moguænost da koriste petlje ili "go to".

Forth okru enj a razlikuju se u naèinu pohranjivanja rezultirajuæeg programa. Ia ko nije popularan kao drugi programski sistemi. ali mnoge druge implementacije.Gdje C kompi lator sada mo e generirati kod s vi e kompaktnosti i performansi. posljednj e izdanje u decembru 2008. pojavljuju se kao takva procedura." u virtualni stroj slièno runtime ! okru enj u. Veæina Forth jedinstvenih svojstava proizla ze iz ovog naèela. i drugi ugraðen i sustavi. Operacije mogu biti testirane. skriptiranja. Forth ima dovoljno podr ke za prodaju i izvoðenje. iako ime nije akronim. bez provjere tipa. 1994 standard trenutno prolazi kroz reviziju. Forth ima intera ktivne znaèajke oba izvr enje naredbi ( to ga èini pogodnim kao ti za sustave koji imaju nedostatak formalnog operativnog sustava) i sposobnost za prikupljanje sekvenci naredbi za kasnije izvr enje. privremen o nazvan Forth 200x. stack-Baziran programski jezik . ukljuèujuæi i osnov ne varijable operatera.Stekovni jezici Forth i Postscript Forth je strukturiran. Gforth. kao to su BBC Microsoft i Apple II serije. Forth je popula ran na raèunalima s ogranièenim resursima.F orth se ponekad pi e velikim slovima nakon uobièajene upotrebe tijekom ranijih godina. ili "operacije. ali automatski pokrenut program ima isti uèinak kao i ruèno pokrenut program. reflektivan. Korisnik interak tivno odreðuje i vodi potprograme. Stacks Svaki programsko okru enje sa rekurzivnim potprogramom implementira stack za kontr . Pregled Forth okru enju kombinira prevodilac s interaktivnim shell-ovima. Forth zadr ava prednost interaktivnosti. i dalj e ostaje tako u aplikacijama kao to su firmware-i mali mikrokontroleri.Ovaj contrast sa kombinacijom C sa Unix shell . Svi sintaktièki elementi. Èak i ako je odreðena operac ija optimizirana tako da ne zahtijeva poziv potprograma. Forth trenutno koristi Open Firmware. Proceduralni programski jezik. ali nije obavezno). shell mo e sastaviti i interaktivno upisati naredbe u koderu prije nego ih izvodi (Takvo pona anje je uobièajeno. i kompilacije. zahtjevan. Neke Forth implementacije (obièno rane verzije ili one pisane za iznimno lak prenos) navojem kompajlirani kod. redefinirane i debugged kao izvor je u ao bez recompi ling ili ponovno pokretanje cijelog programa.pri èemu su kompletne funkcije posebna klasa programskih objekata i interaktivne naredbe su strogo zadane. S druge strane. implementacija u Forth od GNU projekta aktivno odr ava. Ukljuèivanjem interakcije. prostor aplikacije. jo uvijek je dostupna kao potprogram.

olu toka. Umjesto toga. skraæeno rstack . Rijeèi djeluju neposredno na zadnje vrijednosti u ovom stack-u. Veæi rijeèi su navedene u smislu njihova uèinka na stack. meðutim. FunkcijaPoziv stack-a se onda zove "veza" ili "return" stack. Posebna rstack manipulacijska funkcija koju je omoguæio kernel koristi za privremeno skladi tenje u nutar rijeèi . ukljuèujuæi i potprogramske parametre (u kao to je C call in value sistemu). ali inaèe ne mo e se koristiti da proðe parametre ili za rukovanje podacima. nije ni poziv po vrijednosti. Ova struktura obièno pohranjuje lokalne varijable. Za aritmetièki operatore. srednje vrijednosti èuvaju se u drugi stack. Tipièno. parametri se bri u i zamijene sa bilo kojm povratnom vrijedno æu. parametri su postavljeni n a vrhu stacka prije nego to je rijeè izvr ena. ali najèe æe jednostavno stack . Forth èesto nema lokalne varijable. Nakon izvr enja. U tom smislu mo e se nazvati "parametar" ili "podaci" stack. ovo slijedi pra vilo 30 .

godine. kr atkog vremena razvoja.godine jer je fajl koji tumaèi datoteku bio ozn aèen Èetvrti. Ostal o upotrebe Forth-a ukljuèuju Open Firmware boot ROM-ovi koji koriste Apple. Moore-ovih osobnih programskih sistema. i OLPC XO-1 i FICL-based u prvoj fazi kontroler pokretanja sustava FreeBSD operativnog susta va. disciplinirani profesionalci su dokazali da se jednostavno odr ava na razvoju hard verske platforme tijekom desetljeæa upotrebe. efikasnog kori tenja memorije. koji je dao Forth reputaciju kao "pisati-jedini jezik". a ne kao èetvrta generacija programskog jezika kao pojam je do ao da se koristi. MicroFORTH hobisti kasnije koriste za generir anje . Charles Moore i Elizabeth formirali su Forth 1973.Fotrh je nazvan tako 1968. FORTH. za èetiri (buduæe) generacije softvera-ali IBM 1130 operacijski sistem ogranièi o imena datoteka do 5 znakova.reverse Polish notaticije. poèev i s Elizabeth Rather na US Nacionalnom Radio Astonomskom laboratoriju. slo enim projektima.microFORTH je razvijen za Intel 8080.Buduæi da se Charles Moore èesto selio sa jednog posla na drugi tokom svoje karijere.Moore je vidio Forth kao nasljednika kompajliranog l inka treæe generacije programskih jezika. dok je aplikacija razvijena od strane nadl e nog. Forth sistem èesto je kori ten da bi se izneo novi hardver. rani prit isak na uèenje jezika je bio lahk za portanje na razlièite raèunalne arhitekture. i velike brzine izvedbe. On je implementiran uèinkovito na modern im RISC procesorima i procesorima koji ga koriste kao navedeni strojni jezik. Meðutim. IBM. godine.sati neshvatljivo broj.i preradili Forth sisteme na desetine drugih platformi u sljedeæem desetljeæu. Odr avanje Forth je jednostavan jezik koji se mo e pro iriti. Povijest Forth je evoluirao od Charles H. ili softvera za "èetvrte generacije" hardvera. i Zilog Z80 mikroprocesor poèetkom 1976. Forth je prvi put izlo en drugim programerima u ra nim 1970im. pro irivanje takoðer poma e slabijim programerima tipa da napi u neshavtljiv kod. kako u astronomskim tako i u prostoru aplikacija. njegova modularnost i pro irivanje dozvoljavaju pisanja na visokoj razini programa kao to su CAD sustavi.. Forth je prvi stanovnik softver a na novim Intel èip 8086 u 1978 i MacFORTH je prvi stanovnik razvoj sustava za prvi Appl e Macintosh je 1984.Nakon njihovog rada na NRAO. Inc.Forth je utoèi te. Na primjer. Forth se uspje no koristi u velikim. Primjer stacka koji ilustrira upotrebu prikazan je na slikama . koji su se kontinuirano razvijali od 1958. Nokia-u 6800.Forth se jo uvijek koristi i danas je ugraðen u mnogim sistemim a (mali kompjuterizirani ureðaji) zbog svoje prenosivosti. Sun.

Brzo irenje i velika primjena konaèno su doveli do standardizacije jezika. ima FORTH u operativnom sistemu. to je dobro jer je pogodan za mala mikroraèunala iz tog vremena. FO RTH je postao vrlo popularan 1980 god. Uobièajena praksa je zapravo kodirati standarde FORTH-79 i FORTH-83 u 1979 i 1983 godini. kao to je 6502 u 1978-oj godini. Ovi standardi su ujedinjeni od strane ANSI 1994 god. Barem jedan kuæni raèunar.zato to je kompaktan i prenosiv. Canon Cat takoðer koristi FORTH za svoj sistem programiranja. Rockwell je takoðer producirao single-chip mikroraèunala s FORTH jezgrima. Programer perspektive 31 .. respektivno. obièno se nazivaju ANS Forth.Forth sistema za druge arhitekture. R65F11 i R65F12.

Postfix notacija èini jezik lak im za tumaèenje i pro irenje. gdje se opretaror nalazi izmeðu svojih operanada. Ovaj kod definira novu operaciju (operacija again 'je pojam koji se koristi za pot program) koja sezove FLOOR5 pomoæu sljedeæe naredbe: DUP duplira broj na stack-u. <cr> 300 ok Èak Forth strukturalne znaèajke su stack-orijentirane. DROP odbacuje vrijednost na stacku.rezultat za matematièki izraz (25 * 10 + 50 ) mogao bi se napisati na ovaj naèin: 25 10 * 50 + . FLOOR5 operacija je ekvivalent za ovu funkciju napisan u C programskom jeziku: int floor5(int v) { return v < 6 ? 5 : v . Forth ne upotrebljava BNF gramatike. to obièno koriste kalkulatori iz Hewlett-Packarda.n' ) DUP 6 < IF DROP 5 ELSE 1 . 6 mjesta od 6 na vrhu stack-a. èije otvaranje brojeva pokreæe rezultat. Tekst u zagradi je komentar.THEN . poziv za operaciju ". za razliku od uobièajenih infix nota cija. Na primjer: : FLOOR5 ( n -. poredi prva dva broja na stack-u (6 i DUPed input). <cr> 5 ok 8 FLOOR5 . . Napokon. umjesto mijenjanja gram atike i mijenja temeljne provedbe.n' ) 1. <cr> 7 ok Prvo tumaè stavlja broj (1 ili 8) na stack a zatim ga poziva FLOOR5. U RPN-u. Ova operacija se pokreæe na sledeæi naèin: 1 FLOOR5 . Koristeæi RPN. i vraæa moguænost promjene broja. Produ eno prevodjenje jedino zahtijeva pisanje novih rijeèi. operator je postavljen iza njegovih operandi. koji defini e da operacija oèek uje broj na stack-u. a THEN zavr ava uslov. i nema monolitan prevod ilac.5 MAX ." otvara i ispisuje rezultat na ko risnikov terminal.1. i zamjenj uje ih s pravom ili pogre nom vrijed æu. IF uzima pravu-ili-pogre nu vrijednost i odabere izvr avat i naredbe odmah nakon njega ili za prijelaz na drugo. } Ova funkcija je napisana jezgrovitije kao: : FLOOR5 ( n -.Dodatne informacije: Reverse Polish notacija Forth velikoj mjeri oslanja na iskljuèivo kori tenje data stack-a i Reverse Polish n otacije (ili postfix notacija RPN).

Neki sustavi prepoznaju dodatni razmak znakova. a zatim se vraæa u ra èlanjivanje ostatka. ako je uspje na. Ako rijeè nije pronaðena. uprkos tome to nema eksplicitne gramatike. Interpreter èita ulazne podatke iz ureðaja korisnièkog unosa.Sadr aji Forth gramatièko ra èlanjavanje je jednostavno. operacija pretpostavlja da je broj i poku ava se pretvoriti u broj i stav iti ga na stack-u. tumaè nastavlja sa ra èlanjivanjem ulaznog toka podataka. U 32 . tuma izvr ava kod vezan uz rijeè. Kad interpreter pronaðe rijeè. onda ra èlanjuje rijeèi u prostoru ogranièenja. poku ava pronaæi rijeèi u rjeèniku. Ako je rijeè pronaðena.

Linux ili Unix verzija i koriste domaæe operativne sustave i su stav datoteka za izvor i podatkovne datoteke. kako je upotrijebljen u stvarni rad code) ili ime za svoje svrhe u Forth sustavu: npr. fajlovi(datoteke) i zadaci Classic Forth sustavi tradicionalno ne koriste niti operativni sustav niti datot etski sustav. Operativni sistem. Ostali ne-standardni sadr aji ukljuèuju mehanizam za izdavanje poz iva . Obièno dizajn Forth a ssembler konstruira uputu o stack-u. n. najèe æe zahtevanog round-robin rasporeðivanja. Brzo pretra ivanje posti e hashed pristup na kljuèu podataka. Forth sastavljaci èesto koriste Reverse Polish notacija u kojoj parametri instrukcije prethode instrukciji. da biste prona li sljedeæi zadatak i vratili ga na njegovo izvr enje kontekstu. i omoguæiti njegovo pronala enje u rjeèniku. Umjesto spremanja koda u datotekama. privatne k opije nekih kontrolnih varijabli i radno podruèje. gdje se datoteke nalaze se na disk u u blok rasponima. s cijelim br ojem zapisa nadisku bloka. " S" za registrirati se koristi stack pokazivaè. obièno je dostupan (iako vise rijeci i podr ke nisu obuhvaæeni Forth ANSI standardom). R egistri mogu biti referenced by naziv kori ten od strane proizvoðaèa. Svaki zadatak ima svoj skup. Na primjer: : X DUP 1+ . a zatim ga kopira u memoriju kao posljednji korak. . (taèka-zarez). Neki diskovi koriste datoteke pomoæu sustava pristupa disku. Multifunkcionlnost. tumaè ispisuje rijeèi sa porukom o gre ci koja ukazuje da rijeè nije priznata. Asembler je poseban dijalekt kompilator-a. kao to su Intel 8051. . Za razliku od toga. Zamjena zadataka je jednostavna i uèink ovita. i TI MSP430. a kao rezultat toga. Atmel AVR. Veæina Forth sistema ukljuèuju specijalizirane asemblere koji pronalaze izvedive rij eèi. izvor-kod je pohranjen u blokovima zapisan na fizièki disk adrese. èisti ulazni tok. Definicija nove operacije zapoèinje znakom : (dvotoèka) i zavr ava sa znakom .suprotnom. Rijeè PAUSE se kor isti za spremanje trenutnog zadatka izvr enje konteksta. i èeka novog kor isnièki unos. neki Forth sustavi rade na domaæim operativnim sistema kao to s u Microsoft Windows. Rijeè BLOK treba da odredi broj 1K velièine bloka na buffer adres i koja sadr e podatke kojm se obavlja automatsko upravljanjei Forth sustava. ako oba pretra ivanja i broj pretvorbi ne uspije. Obièno se primjenjuju kao binarni zapisi fiksne du ine. to æe kompletirati operaciju X. ANSI Standard opisuje Forth operacije k oje se koriste za I / O. numerirane (0 .. Forth multitaskers su dostupne èak i na vrlo jednostavanim mikrokontrolerima.

OS ili Windows sustava. je tehnika koja se obièno naziva meta-kompilacija by Forth programera (iako se termin ne odgovaraju toèno meta-kompilaciju jer je obièno definirana). Kompilator rijeèi koristi pos ebnu verziju pod nazivom za preuzimanje i èuvanje koja se mogu preusmjeriti u spremniku u podruèju memorije. Obièno su veæi i drugaèiji skup rijeèi iz samostalan Forth je PAUSE r ijeè za izradu zadatka.Spremnik podruèje simulira ili pristupa memoriji poèetkom razlièite adrese od one kod spremnika. Self i cross kompilacije Potpuno opremljen Forth sustav sa svim izvornim kodovima koje æe sam sastaviti. uni tenje i mijenjanje prioriteta. a mnogi daju nastavcima koji zapo ljavaju raspored osigura va operativni sustav. Uobièajeno je da se redef inira pregr t rijeèi koje su sastavljene od bitova u memoriji. ovjesa. Takvi prevodioci definiraju rijeèi za pristup ciljano j memoriji 33 .

Meðutim. Efekt podsjeæa na gnije ðenja imenskih prostoru i mogu preopteretiti kljuène rijeèi ovisno o kontekstu. jer oni ne mogu biti bliski. Kad nova verzija pojavljuje se na posao. Na primjer. Struktura jezika Osnovna struktura podataka u Forth je "rjeènik". ali ova verzija je pohra njena u meðuspremniku. Nakon pristizanja i pohrannivanja operacije redefinira se broj prostora. je pronaðena. su recompiled pomoæu novih definicija. Rjeènik je ostao u sjeæanju kao stablo povezanih lista polazeæi od najnovijih (u posljednje vrijeme) definira rijeè najstarijih. i naèini se pod uvjetom da je privremeno uèitavanje u memoriju za testiranje. Definisana rijeè uglavnom sastoji se od glave i tijela sa glavom koja s e sastoji od imena polja (NF) i povezanih polja (LF). To uèinkovito reuses sve kod prevodilac i tumaè. [19] Rjeènik unos . U rijetkim sluèajevima. Brojne su varijacije takvih prevodite lje za razlièita okru enja Za ugraðeni sustav kodovi mogu biti pisani na drugo raèunalo. dok stra ar. Minimalna definic ije za takav kompajler budu rijeèi koje podrazumijevaju dohvatiti i pohraniti byte. asembler. Glava i tijelo rjeènika ulaz tretiraju odvojeno. Forth sustava kod je sastavio. glava mo e ostati na sastavljanju raèunala. to je pisano u odnosu na prethodnu verziju. Tu mo e biti nekoliko rjeèni ka. tehnika poznata kao cr oss kompilacije. Povezane liste za pretra ivanje nastavljaju pretragu kao ogranak obje dninjujuci glavni kanal na kraju vodeci natrag u nadyorno. preko serijskog porta ili èak jednom TTL malo. Meðuspremnik u memoriji se zapisati na disk. itd.raèunala. i rij eè naredbe Forth rijeèi koje treba izvr iti. spremanje i izvr avanje. U nekim okru enjima (kao to su ugraðeni sustavi) glave zauzimaju memoriju nepotrebno. prevodi lac. stablo. Èesto najvi e vremena dio pisanja udaljenog luka gradi poèetnog programa za provedbu dohvatiti. dok tijelo ide na novu platformu. Kontekst prekidaè uzrokuje popis pretrage za poèetak u razlièit list. Zatim. te tijelo koje se sastoji od koda po lja (CF) i parametar polje (PF). koji pronalazi "operaciju" na izv r ni kod nazvan strukturom podataka. a imajuæi rijeèi imena i d rugih ne-executing dijelovima rjeènika u izvornom sastavljanju raèunala. ali mnogi moderni mikroprocesori imaju integrirane moguænosti za ispravljanje pogre aka (kao to su Motorola CPU32) koji eliminiraju ovaj zadatak. kada Forth program rekompajlira za novu platformu. kao to su meta-kompilacije rjeènik moze biti izoliran i samosta lan. neki crosskompajl eri mogu staviti glave u cilj ako cilj oèekuje da podr i interaktivni Forth. obièno NULL pokazivaèa. a host(sastavljanje) memorije i raèunala.

Opisan kao struktura. backward ptr to previous word address: codeword \ ptr to the code to execute this word any-array: parameterfield \ unknown length of data. Meðutim. or opcodes end-structure forthword 34 . iako se taèno velièina i red mogu razlikovati. unos rjecnika mo e izgledati ovako: structure byte: flag \ 3bit flags + length of word's name char-array: name \ name's runtime length isn't known at compile time address: previous \ link field. odreðene komponente su gotovo uvijek prisutne.Taèan format unosa rjecnika nije propisan. i implementacije se razlikuju. words.

Polje pokazivaèa kod æe biti adresu rijeè koja æe izvr iti koda ili podataka u polju ili paramet ar poèetak stroj kod taj Procesor æe se izvr iti izravno. Pokazivaè se mo e relativni pomak ili apsolutna adresa koja ukazuje na sljedeæi najstariji brat ili sestra. Prilikom sastavljanja tih. Tumaè i dalje èitati razmakom razgranièeni rijeèi iz ureðaja korisnièkog unosa. Povezano polje sadr i pokazivaè na prethodno definiranim rijeèi. prevodilac jednostavno mjesta kod ili navojem pokazivaè na rijeè. Ovisno o pojedinoj provedbi Forth.. umjesto da interpretacije semantike. Ako rijeè je pronaðena. DUP LIT 6 < ?BRANCH 5 DROP LIT 5 BRANCH 3 LIT 1 . moze biti jedan ili vi e NUL ('\ 0') bajtova za poravn anje.Naziv polja poèinje s prefiksom koji daje duzinu rijeèi imena (obièno do 32 bajtova). "Vrijeme prevoðenja" zastava u polje Ime je postavljen za rijeèi "v rijeme prevoðenja" pona anje.. Ovo omoguæava programeru da promijeni rijeèi kompajl er za posebne namjene. Za debelo definirane rijeèima.. i gotovo sve njegove kompajl er budu provedeni u kompajliranju rijeèi. DUP 6 < IF DROP 5 ELSE 1 . a dok. Struktura kompajlera Kompajler sam po sebi nije monolitan program. te nekoliko bita za zastave. Isjeèak: . Karakter reprezentira ime operacije a zatim slijedi pr efiks. ako false). stvara rjeènik ulaz (debelo definicija) i ulazi u kom pilaciju dr ave. pa teret s novom IP adresom na kojoj nastaviti izvr enje rijeèi.. ili ugraðen u kod. kôd polje pokazivaèa ukazuje na rijeèi koje æe spasiti trenutno Forth pokazivaè instrukcije (IP) na povratku stacka.. Brojevi iza PODRU NICA predstavlja skok u odnosu adrese. tumaè vr i prikupljanje semantike povezana s rijeèju. Sve u Forth rijeèi kontrolu protoka izvr iti tijekom kompilaciju za prikupljanje razlièitih kombinacija primitivnih rijeèi PODRU NICA i? PODRU NICA (podru nice. Tijekom kompilacije podataka stog se koristi za podr ku balansiranje upravljaèka struktura. Veæina jednostavne rijeèi izvr iti isti kôd li su upisani na naredbe i redak.THEN ... LIT je primitivna rijeè za guranje "doslovno" broj podataka na stog. To je isto kao to procesor poziv / upute za vraæanje ne. kao to su IF. Kompilacija dr ave i tumaèenje stanja rijeèi: : analizira ime kao parametar. gnije ðenje.. æe se sastaviti u sljedeæem nizu unutar definicije: . Zadani kompilacija semantika rijeèi su dodati svojoj int . [14] klasièni primjeri kompajliranju rijeèi su kontrolne str ukture.. Sastoji se od Forth rijeèi vidljivog sustava koji je i korisna je programer. a backpatching podruènih adrese. Sve u Forth kontrole strukture.

veæina kontrola protoka rijeèima. To je primjer èije rijeèi kompilaciju semantici se razlikuju od zada ne. a ne na interaktivnoj komandna linija. i nekolik o drugih rijeèi su neodreðene u Forth ANS. [14] rijeè. (polu-debelo) zavr i definicijama i vr aæa se na tumaèenje stanja. to znaèi da oni samo smiju se koristiti unutar defini cije. (polu-debelo).erpretaciji semantika na trenutnu definiciju. Interpretacija semantika. [14] Tumaèa dr ave mo e se mijenjati ruèno sa rijeèima [(lijevo-bracket) i] (desno-zagrada) koj i 35 .

respektivno. trenutno stanje tumaèa mo e se i èitati iz dr ave zastave koji sadr i vrijednost true kad u kompilaciji dr ave i la nih drugaèije. To omoguæava primjenu tzv dr avnom pametnih rijeèi s pona anjem koji se mijenja u skladu s trenutno stanje tumaèa. ili neki oblik . ((Paren) i \ (backslash) mora bi ti odvojen razmakom od sljedeæih komentar tekst. Rijeè EXECUTE traje izvr en je tokena iz podataka stog i obavlja povezana semantika. (kompajl iratizarez) traje izvr enje tokena iz podataka stog i dodaje povezana semantika na trenutnu definiciju. rijeè \ (backslash) koristi se za komentare koje nas tavljaju kraj trenutne linije. 'RANDOM-rijeè EXECUTE jednak je RANDOM-word. Da se rastaviti ispravno. [22] Ra èlanjivanje rijeèi i komentare rijeèi: : . Izvr enja tokena daje neprozirni ruèka za sastavio semantika. . (polu-debelo) i odlazi na izvr enje tokena podataka stog. tijelo kod definiranja sastoji se od bilo strojnom jeziku. u bilo dr ave. [21] Trenutan rijeèi obièno se izvode tijekom kompilaciju. Neimenovane rijeèi Neimenovani rijeèi se mo e definirati s rijeèi: NoName koji kompilira sljedeæe rijeèi do sljedeæeg. ' i: NoName primjeri su ra èlanjivanja rijeèi koje se iz svoje argumente za unos korisnik umjesto podataka stog. odnosno.ulaze tumaèenje dr ave ili kompilaciju dr ave. Rijeèi '(karta) uzima ime rijeèi kao parametar i vraæa token izvr enje povez anih s tom rijeè o podacima stog. Slièno tome. U ANS Forth. ali to se mo e nadjaèati koje programer. slièno djelovanje upuæuje na C programskog jezika. Je primjer neposredne rijeèi. Doslovno je kompilaciju semantika da se objekt iz p odataka stog i dodati semantiku na trenutni debelo definicija to mjesto taj objekt na st og podataka. Neposredna rijeè Rijeè TRENUTAN obilje ava najnoviju definiciju kao neposredna rijeèi. ne sastavlja. odgoditi. djelotvorno zamijeniv i svoju kompilaciju semantike s tumaèenjem semantike. Ove rijeèi mogu se koristiti s r ijeèi doslovno za izraèun vrijednosti tijekom prevoðenja i umetnuti izraèunata vrijednost u trenutnom debelo definiciju. Struktura koda U veæini Forth sustava. Izvr enju tokena mogu biti pohranjeni u varijable. ANS u Forth. U interpretaciji stanja. rijeèi odgoditi uzima ime kao parametar i dodaje kompilaciju semantika zove rijeèi na trenutnu definicij u èak i ako je rijeè je oznaèen odmah. Drugi primjer je rijeè ((Paren) koja èita i ign orira sljedeæe rijeèi do i ukljuèujuæi sljedeæa desno zagradi i koristi se za mjesto u komentare debelo definiciji. Rijeè kompajlirati. Forth-83 definira razlièite rijeèi sastaviti i [sastaviti ] prisiliti kompilaciji ne-hitnu i neposrednu rijeèi.

Izvorni Forth koji slijedi neformalni FIG standardni (Forth interes na zajednica). Ovo je takoðer pozvao indirektnenavojem kod. je TIL (navojem Interpretive jezik). Najbr i moderni Forths kori tenje potprograma navoja. ali s izravnim navojem i potprogram navojem Forths takoðer su postali popular ni u moderno doba.navojem kod. umetnite 36 .

Fort h program ia zadatak sprema kao sliku sjecanja i sastavi program s jedinstvenom naredbom (npr. jedn a æelija mjesto u memoriji. Funkcija osigurava lokalne varijab le i na drugim jezicima osigurava podataka stog u Forth (iako Forth takoðer ima stvarne lo kalne varijable). pak. Programiranje Rijeèi napisane u Forth-u se skupljaju u izvr nom obliku. a takoðer propisuje pona anje kao instancu klase rijeèi da bi izgradili ovu definiciju operacije. ili se mo e p odesiti da sadr i niz inicijalizirane ili druge vrijednosti. navodeæi kak o obièaj definiranja pona anja i primjer pona anja. to je programer odgovornost za kori tenje odgovarajuæeg operatora za preuzimanje i pohranu vrijednosti ili druge operacije na podacima. Primjeri ukljuèuju: imena varijablama neincijalizirani. Neki primjeri ukljuèuju kru ne odbojnika . Primjer pona anja: VARIJABILNI vraæa svoju adresu na stack STALNE imena vrijednosti (naveden kao argument konstanta). RUN) koji se izvr ava kada je sastavljena verzija optereæena. Opæenito govoreæi. prostor mo e biti dodijeljena na ovoj lokaciji. Tijekom razvoja. Podatkovni objekt i definirani ovim i sliènim rijeèima su globalne u djelokrugu. Klasièni "indirektni navoj" implementacije sastavlja popise adresa rijeèi koje treba izvr iti. CREATE imena lokacije. obièno takvi podaci objekti slu e da sadr i podatke koji se koriste r ijeèi ili broj zadataka (u multitasked implementaciji)] Èetvrta ne provodi konzistentnost po dataka tipa uporabe. i automatski-indeksirana polja. Forth takoðer pru a pogonu kojim programer mo e definirati nove aplikacije specifiène za definiranje rijeèi. Forth stil programiranja koristi vrlo malo objekata zove podataka u usporedbi s drugim jezicima. mnogi modern i sustavi generiraju stvarni strojni kod (ukljuèujuæi i pozive na neki vanjski kod rij eèi i za druga mjesta). ukazuje na CF runtime kod povezan s definiranjem rijeèi koju je stvorio. Primjer pona anja vraæa adresu poèetku ovog prostora.Operacija je karakteristièno definiranje "defini ra pona anje" (stvaranje rjeènika ulaza plus eventualno raspodjeli i inicijalizuije pod atke prostora). [23] Podatkovni objekti Kad je operacija varijabla ili drugi objekt podataka. imenovan bitovi na I / O port. Primjer pona anja vraæa vrijednost. Neki sustavi imaju optimiziranje kompilatora.Veæina programera Forth stack . programer koristi tumaèa za izvr enje i i test .jednostavne rijeèi kao makronaredbi i izvesti okance optimizacije ili druge optimi ziranje strategije da bi kod manjih i br e.

Jedan od moguæih implementacija: 37 . wo rld! . ali i postavlj a alate za napad na povezane probleme.zatim kori ste visoke razine postavljanja alata za pisanje konaènom programu. pogledajte program Hello. world! Za obja njenje tradicije programiranja "Hello World". i ne implementira samo jedno rje enje. i bottom-up razvoj uz kontinuiranu provjeru i integracije. Dobro osmi ljen progr am Forth èita kao prirodni jezik. Primjer koda Hello."Top-down dizajn je obièno razdvajanje programa u" rjeèniku ".-a zala u slobodan top-down dizajn.

HELLO <cr> Operacija CR (Carriage Return) uzrokuje sljedeæe outpute koji æe biti prikazani u no vom redu. K oristeæi [CHAR]. kao to je to ponekad sluèaj u drugim programskim jezicima." iz niza Hello. world!" .Tekstaizmeðu zagrada je komentirani i ignoriran od strane kompajlera.) CR . . Forth tumaè ne pokreæe izlaz u novi red. npr.nema. definicija za EMIT-Q mo e se prepisivati ovako: : EMIT-Q [CHAR] Q EMIT . ] (right-bracket). Ra èlanjivanje rijeèi CHAR uzmima razmakom razgranièeni rijeèe kao parametar i mjesta vrijednosti prvi lik podataka stack-a . Rijeè [CHAR] je neposredna verzija CHAR. Potrebno je d a tumaè raspozna :: kao Forth rijeè. Raz mak razdvajanje rijeèi . Prema konvenciji.( Hello. Standardni Forth sistem je takoðer tumaè.: glasi dvostruko citat razgranièena string i dodaje kod na novijim definicijama. povratak na kompilaciju i dodava nje izraèunate vrijednost toka : : EMIT-Q [ CHAR Q ] LITERAL EMIT ." Hello. Isto tako po konvenciji tumaè èeka za ulaz na kraju prethodne linije. Kao i kod operacije . izraèunavanje ASCII vrijednost Q karaktera. world!) (Dot-Paren) je neposredna rijeè koja analizira razgranièeni niz i prikazuje ga.U Forth's CR ne podrazumijeva 'flush-buffer'. tako da parsiranje stringa æe biti prikazano na izvr enju. CHAR i LITERAL -privremeno prebacivanje na stanje tumaèa. world nije ukljuèen kao dio niza.: razdvaja . Ra èlanjivanjem rijeèi. Mije anje prikupljanja i tumaèenja Ovdje je definicija operacije EMIT-Q koji kada se izvr ava emitiran je od jednog z naka Q: : EMIT-Q 81 ( the ASCII value for the character 'Q' ) EMIT .Operacija EMIT uzima vrijednost iz podataka stack-a i prikazuje odgovarajuæi karakter. Sljedeæe redefiniranje EMIT-Q koristi ope raciju [ (left-bracket). Rijeè dolazi prije teksta za ispisOperacija cr dolazi prije ispisa teksta. Ova definicija koristit ASCII vrijednost znaka Q (81) izravno.. a isti rezultat se mo e dobitit upisivanjem sljedeæeg odsjeèka koda u Fotrh konzolu: CR . \ Emit the single character 'Q' .: HELLO ( -.

Obe. sve razlièite. Kori tenje neposrednih i odgoðenih operacija [CHAR ] mogu su definirani ovako: : [CHAR] CHAR POSTPONE LITERAL . Inc kod je k rajnje jednostavan i mo e biti napisan kao i veæina programera iz opisa. Svaki put polje koje se koristi zamjeni dva bajta.Ova se definicija koristi \ (backslash) za opisivanje komentara. Zamjene kontroliraju 38 .i CHAR i [C HAR] su unaprijed definirane u Forth ANS. Imamo niz od 256 bitova. IMMEDIATE Kompletan program RC4 cipher U 1987 Ron Rivest razvio je RC4 cipher-sustav za RSA Data Security.

. Slijedi promjena bajtova na i i j . 0 VALUE ii 0 VALUE jj CREATE S[] 256 CHARS ALLOT : ARCFOUR ( c -.gurus.com Sljedeæi Standard Forth verzije koristi Core samo rijeèi. Poto m korak po korak koristeæi i i j . Ovo je XORed s osam bitova na tekstu za ifrira nje. Da bi se dobio novi dobili novi i doda se 1. Niz je inicijaliziran od 0 do 255.) 256 MIN LOCALS len key 256 0 DO I S[] I + C! LOOP 0 TO jj 256 0 DO ( key len -. i i j su postavljena na 0. ili Bajt za ifriranje ili za de ifriranje. pogledajte sljedeæe http://ciphersaber.'S[i] S[i] ) R@ ROT C! ( -. : ARCFOUR-INIT ( key len -. dobiva se novi j dodajuæi da je niz bitova na i i kljuè zamj Konaèno.S[i]+S[j] ) 255 AND S[] + C@ ( -. Sve dopune su modulira ne na 256. Da bi se bio novi j doda se polje bajta u novom i .'S[i] S[i] j ) S[] + DUP C@ >R ( -.x ) ii 1+ DUP TO ii 255 AND ( -. svaki poèinje 0.'S[i] S[i] 'S[j] ) OVER SWAP C! ( -.'S[i] S[i] ) DUP jj + 255 AND DUP TO jj ( -.S[i] ) R> + ( -.c x ) XOR .Za daljnje informacije. Kod je niz bitova na zbroju polja bitova u i i j .brojila i i j .) key I len MOD + C@ .i ) S[] + DUP C@ ( -.

Ovo je jedan od mnogih testova za provjeru koda.S[] I + C@ + jj + 255 AND TO jj S[] I + DUP C@ SWAP ( c1 addr1 ) S[] jj + DUP C@ ( c1 addr1 addr2 c2 ) ROT C! C! LOOP 0 TO ii 0 TO jj ..( Should be: F1 38 29 C9 DE ) PostScript (PS) je dinamièki programski jezik (concatenative) koga su stvorili Joh n Warnock i Charles Geschke u 1982.R SPACE 4C ARCFOUR 2 . HEX 61 8A 63 D2 FB 5 !KEY KEY: COUNT ARCFOUR-INIT CR DC ARCFOUR 2 .R CR .R SPACE EE ARCFOUR 2 .R SPACE F9 ARCFOUR 2 .. CREATE KEY: 64 CHARS ALLOT : !KEY ( c1 c2 . PostScript je najpoznatiji po tome to je jezik za . cn n store the specified key of length n ) DUP 63 U> ABORT" key too long (<64)" DUP KEY: C! KEY: + KEY: 1+ SWAP ?DO I C! -1 +LOOP .R SPACE 2C ARCFOUR 2 .

Meðu tim.opisivanje stranica u elektronièkim i i podruèjima stalnog izdava tva. PostScript programi se ne proizvode prema ljudima. Jezik PostScript je Turing-complete programski jezik. koji pripada grupi concatenative jez ika. 39 . kao drugi programi. Tipièno.

scoped memori ji i. za razliku od nekih drugih . to èini redoslijed operacija jednoznaèanim. Meðutim.. Literala (npr. ali èitanje program zahti jeva malo vje be. Veæina operatora ( to je u drugim jezicima pojam funkcije) uzima svoje argumente iz stack-a. PostScript je intrepetirani. svaki PostScript program bi trebao poèeti sa znakovima "%!" tako da svi ureðaji mogu to ispravno protumaèiti kao PostScript. Kao opæe konvenci je. stack-based jezik slièan Forth-u. Simbol "%" se koristi za uvoðenje komentara u PostScript programe.orijentiran je i na garbage collection. koji ih vidi sve samo kao polja i rjeènicima. jer treba imatii izgled stack-a na umu. 500 (the origin is at the % lower-left corner of the page) (Hello world!) show % stroke the text in parentheses showpage % print all on the page or if the output device has a console %!PS (Hello world!) = Jedinice za du inu Postskriptum koristi taèku kao jedinicu za du inu. ali s jako dinamièanim pisanjem i strukture podataka inspirirane kao one u Lisp.. Sofisticirani strukture podataka mogi biti izgraðene na polju i rjeènik tipa. tako da s vako daljnje pisanje æe biti primenjeno na korisnièki definiran "tip" koji je lijevo od k oda koji ih provodi. buduæi da je jezik na razini 2.moguæe je pisanje raèunalnih programa u PostScript kao u bilo kojem drugom programskom jeziku. Hello World Hello World program je uobièajen naèin da se poka e mali primjer kompletanog programa u odreðenom jeziku. ali ne mo e biti progla en u sistemu pisanja. i mjesto njihovih rez ultati je na stack-u. Jezik kori sti Reverse Polish notaciju. mo e izgledati ovako u PostScript-u (razina 2): %!PS /Courier % name the desired font 20 selectfont % choose the size in points and establish % the font as the current one 72 500 moveto % position the current point at % coordinates 72. brojevi) imaju uèinak postavljanja svoje kopije na stack-u .

385827 lineto stroke PostScript koristi single-precizne realne brojeve (24-bitni kazaljka). kako bi privukao vertikalne linije duljine 4cm.verzija taèke. 40 . Za prijedlog grafika. broj znaèajnihznaèajki mo e biti smanjen. dovoljno je napisati : 0 0 moveto 0 113. PostScript koristi toèno 72 bodova za inch. Tako je: Na primjer. tako da nem a smisla koristiti vi e od 9 znaèajki i odrediti decimalni realni broj.

Dubina stvaranja mo e isto tako biti ogranièena na jednu ili dvije razine. potp rogrami su dozvoljeni. . To znaèi da nema (automatski) dodatak kada osvje iti potprogram koji dozivate. Linije su obièno numerisane il i mogu imati oznake.Nestrukturano programiranje u programskim jezicima visokog nivoa Ne-strukturirano programiranje je historijski najranija programska paradigma koj a je bila u stanju stvoriti Turing-complete algoritme. VRSTE PODATAKA Ne-strukturirani jezici dopu taju samo osnovne tipove podataka. To ukljuèuje rane verzije BASIC-a (kao to su MSX BASIC i GW-BASIC). ovo omoguæava protok izvr enja za skok na bilo koji red u programu. Ne-strukturirano programiranje uvodi osnovne koncepte kontrole toka. ali neki sluèajev i rekurzija gdje nisu potrebene vrijednosti stanja potprograma nakon rekurzivnog p oziva moguæe su ako su varijable koje su posveæene rekurzivnom potprogramu izbrisane (ili reinicijalizirane na svoju izvornu vrijednost) na ulazu u potprogram.oba su smatrana kao strukturirano programiranje. Nestrukturirano programiranje je sna no kritizirano zbog proizvodnje jedva èitljivih kodova i ponekad se smatralo da ima lo pristup za stvaranje velikih projekata. grupa lini ja). asemblerskih program za pronala enje gre aka i nekih skriptnih jezika kao to su MS DOS. machine-level code(ma insko kodiranje). tako da sve varijable mogu zadr ati svoju vrijednost iz prethodnog poziva. te direktni skok u potprogram ili iz potprograma je (teoretski) dozvoljen. obièno po jedan u svakoj liniji. Iako nema pojma o proceduri u ne-strukturiranoj paradigmi. ali je pohv aljeno za slobodu koju pru a programerima. Za razliku od postupka. kao to su pe tlje. OSNOVNI KONCEPTI Program u ne-strukturiranom jeziku obièno se sastoji od sekvencijalno zapovjednih naredbi. To èini opæu rekurziju (opis procesa ponavljanja objekata na samoslièan naèin je rekurzija) te kom. JOSS. COBOL. FOCAL. Tu su ujedno i visoke i niske razine programskih jezika koji koriste ne-struktur irano programiranje. ili izjava. TELCOMP. MUMPS. potprogram mo e imati nekoliko ulaza i izla za. registri opæe namjene mogu slu iti istoj svrsi nakon spremanja na ulaz). a li labele i varijable mogu imati ogranièeno podruèje djelovanja (Na primjer. Praæeno je historijski kao proceduralno programiranje a onda kao objektno-orijentirano programiranje. Nema koncepta lokalne varijable u ne-strukturiranom programiranju (iako za sklap anje programa. rani asemblerski sistemi (bez proceduralnih metaoperatora). kao nizovi i to su brojevi. grane i skokove.

Ma insko programiranje je te ko i dovodi do gre aka. Nadalje.redovi (numeriran skup varijabli istog tipa). Uvoðenje polja u ne-strukturiranim j ezicima bio je znaèajan korak naprijed. plan mora biti napisan u binarni ma inski kod. buduæi da svaki tip 41 . koji poznaje pro cesor. PROGRAMSKI JEZICI Da bi bio izvediv. èineæi tok obrade podataka moguæim unatoè nedostatku strukturirane vrste podataka.

godine. ako nema gre aka. sasta vlja ekvivalentan ma inski programski kod objekta. ali koji imaju ogranièen. . jer sadr i napomene za potprograme a koji zahtijeva zajednièke poslove kao to su èitanje ulaza. Fortran 77. rezultata iz laza i raèunanja matematièkih funkcija. programski jez ici visoke razine izvorni program èitaju kao ulaz od strane programa koji se zove prevodilac(kompajler).* / = (). Ovi potprogrami su grupisani zajedno u bibliotekama koje su na raspolaganju za kori tenje od strane svih objektnih programa. irom je bio dostupan i kompatibilan s kasnijim verzijama. praznine.misleæi da neæe biti posljednja verzija. koje slièe engleskom pa s u zbog toga lak i za kori tenje nego ma inski kod. Umjesto toga. Primjeri: 123 + 1 0 4356 -4 INTEGER konstante su predstavljene u taènom obliku. Samo je jedan zadr an. predstavljen 1956. kao i: + .procesora ima svoj ma inski kod. Jedan citat mo e biti ukljuèen u niz tako to pi emo dva uzastopno. koji provjerava njegove sintakse i. numerièka slova. program napisan za jednu vrstu procesora nije izv ediv na bilo kojoj drugoj vrsti procesora. '$: Kada su ukljuèi u Fortran izvje taj. Izvr ni program tada mo e biti uèitan u memoriju i pokrenut. CHARACTER tip Konstanta tipa CHARACTER. veæina programa su pisana u jezicima visoke razine.. Primjer: 'WE''RE A'' JOCK TAMSON''S BAIRNS.) Iako je u ma inskom kodu. FORTRAN Danas. (Ako izvorni program sadr i sintaksne gre ke. Za stvara nje izvedivog programa objektni programi zahtjevaju da budu povezani sa bibliotekama potprograma. specijalizira n rjeènik i jednostavnu sintaksu bez dvosmislenosti. Od tada je nekoliko puta bio ispitan (pregledan). (èesto zvana STRING) je niz znakova koja mogu biti velik a slova abecede. FORTRAN (Formula Translation). U jezicima visoke razine instrukcije nisu izvedive. niz mora biti razdvojen jednostrukim navodnicim a ( '). Njihova velièina ima granicu koj a ovisi o du ini rijeèi. objektni program je nepotpun. prevodilac(kompajler) izbacuje broj poruka koji ukazuju na prirodu gre ke i gdje su te gre ke nastale.' INTEGER tip Konstante tipa INTEGER su cijeli brojevi. bio je prvi jezik visoke razine.

2. Ukoliko je broj nap isan bez 42 . Karakterizira ih decimalna taèka koja odvaja cijeli dio od decimalnog dijela broja npr. Realni brojevi su z apravo ono to u matematici nazivamo decimalnim brojevima.REAL tip Konstante tipa REAL su brojevi koji mogu ukljuèivati razlomke.73.

izraze. Konstanta je na exponent od 10 a koji se mno i sa prethodnim dijelom. dalje slijedi decimalni eksponent napisan kao slovo 'E' nakon toha slijedi INTEGER konstanta. INTEGER konstanta ili konstanta REAL. moramo pridru iti varijablama. mo emo upotrijebiti umjesto njega varijablu kojoj smo ga pridru ili (u koju smo izraz smjestili). Ako je napisan s taèkom. npr. DEGC MEAN STDDEV Svaka varijabla ima tip. Njihova velièina ima granicu ko ja ovisi o du ini rijeèi. odnosno vrijednosti izraza. REAL konstante su predstavljene u pribli nom obliku. Fortran ga tretira kao cijeli broj. REAL konstanta je pisana u jednom od sljedeæih oblika: 1. u FORTRANU.6 E-3 (0. nakon toga razlomak kao niz decimalnih cifri. VARIJABLE Varijabla je rezervirani memorijski prostor èiji sadr aj korisnik/programer smije mi jenjati tokom izvoðenja programa. na primjer. Nakon pridru ivanja. nako n èega slijedi decimalni zarez.6x103) 7E-3 2. Opæenito. Sadr aj dakle mo e biti UPISAN u varijablu. "COL UMN 'je ekvivalentno' COL UMN '. To je oblik: .6E3 (4. 2.4 . kad god zatrebamo taj izraz. ali ne i oboje. Upis se v r i.decimalne taèke. Ili ci jeli dio ili razlomak. Primjeri: VOL TEMP A2 COLUMN IBM370 Prostori su zanemareni od strane Fortran 77. tretir an je kao realni broj. koji propisuje vrstu vrijednosti koju mo e imati. pridru ivanjem. EXPLICITNI TIP Tip varijable mo e biti dodijeljen explicitno kao iskaz od strane tipa specifikaci je. Napomena: eksplicitni tip du ine secifikovan u bajtovima (8 bita) èesto je naveden i za "*". npr. jedan je morao biti izostavljen. Cijeli dio napisan kao INTEGER konstanta definira se kao prethodnom dijelu. Primjeri: +123. Varijabla dr i vrijednost sve do nov og pridru ivanja! Varijabla se sastoji od 1 do 6 velikih slova i decimalnih brojeva. Napomena: Prostor postaje znaèajan u "slobodnom formatu" za Fortran 90! Jasnoæa se mo e pobolj ati tako to odaberemo varijable koje sugeriraju njihovu upotrebu. Tip var ijable mo e biti naveden eksplicitno ili dodijeljen implicitno. Pri tome se sadr aj koji je eventualno prethodno tamo stajao bri e i zamjenjuje novim.6x10-3) 4. varijabla sadr i vrijednost izraza i u programu.4 -123.

odvojene zarezima. U iskazu se dati tip dodjeljuje za sve varijable u listi.type variable_list gdje je type (tip) naziv vrstei variable_list je jedna varijabla ili lista varij abli. Primjeri: INTEGER WIDTH REAL NUM. K 43 .

Umjesto tog a prevodilac zapisuje imena i tipove varijabli i pohranjuje rezerve za njih. njen tip je INTEGER. IMPLICITNI TIP Ako se varijabla upotrebljava bez ukljuèenja u tip specifikacije.Tip specifikacije izjave se ne sla e u izvr om ma inskom kodu instrukcija.0 HEMIJSKA = 7 elimo li to. DODJELJIVANJE VRIJEDNOSTI Prije nego to se varijabla mo e koristiti u raèunanju. mora joj biti dodijeljena poèetn a vrijednost. moramo napisati REAL OLOVKA INTEGER HEMIJSKA OLOVKA = 6. Nije meðutim dopu teno pisati OLOVKA = 6. U programu je dopu teno pisati OLOVKA = 6 HEMIJSKA=7. ne to liberalniji od npr C-a.5 bez prethodne deklaracije. DEKLARACIJA Fortran kao i brojni drugi programski jezici zahtijeva od programera da prije ne go poène koristiti imena varijabli u programu. tj najavi i rezervira. Najjednostavniji oblik READ izjave je: READ *. ta imena deklarira. uz ist ovremeno odreðivanje tipa varijable. Takve ne-izvr ne izjave moraju biti postavljene na poèetak programa. Ako to nije ispunjeno. prije prve izvr ne izjave. Ovo mo e biti ispunjeno èitajuæi vrijednosti ulaza ili putem dodjele izjav a. onda je njen tip REAL. njegov tip je do dijeljen implicitno (po defaultu) prema sljedeæem pravilu: Ako varijabla poèinje slovom od I do N. READ izjava READ izjava se koristi za dodjeljivanje vrijednosti varijabli èitanjem podataka iz ulaza. to je deklaracija? Deklaracija je popisivanje imena varijabli koje æe biti kori tene u programu.0 HEMIJSKA = 7 Napomena: Deklaracija mora biti jednoznaèna: ime varijable se u deklaraciji smije pojaviti samo jednom. Fortran je meðutim. variable_list Gdje je variable_li st jedna ili . dok je ITEMP INTEGER varijabla. Preciznije. deklaracijom se propisuje koji tip podatka smije biti smje ten u varijablu. Tako je TEMP REAL varijabla.

Primjer: READ *. zarezima. VAR2 i VAR3. VAR3 Èeka dok se ne unesu tri konstante. ili novim linijama. a dodjeljuje ih kao niz varijabli u lis ti.lista varijabli odvojenih zarezom. VAR2. VAR1. 44 . Izvr enje programa se zaustavlja dok se ukljuèi (unese) pravi broj konstanti. nakon toga dodijeljuje im niz varijabli VAR1. Ova izjava èita konstante iz terminala. odvojen e razmacima.

REAL vrijednost mo e biti dodijeljena INTEGER varijabli. CHARACTER vrijednost ne mo e biti dodijeljena numerièkoj varijabli ili obratno. Dodijeljena vrijednost je odrezana. Operator Operacija + Zbrajanje ili predznak + .DODJELA IZJAVA Najjednostavniji oblik dodjele izjava je: varijabla = konstanta To znaèi da je konstanta dodijeljena kao vrijednost varijable na lijevoj strani.0 3. npr. na neki naèin. stvaraju vezu izmeðu operanada. tako to se odbaci dio razlomka.5 ITEMP = 100 VRSTA PRAVILA Koji god naèin se koristi za dodjeljivanje vrijednosti varijabli.Oduzimanje ili predznak * Mno enje / Dijeljenje ** Potenciranje Aritmetièki izraz ima oblik: . I majte na umu da '=' znak ima drugo znaèenje nego u algebri. 2. Aritmetièki izraz je svaka smislena kombinacija operanada i operatora. predstavljaju aritmetièke ope racije i. (arithmetic_expression) Aritmetièke operacije su obilje ene slijedeæim aritmetièkim operatorima. Pravila su: 1. To ne znaèi jednakost. aritmetièki izraz u zagradama. INTEGER vrijednost mo e biti dodijeljena REAL varijabli. Primjer: X = 5 je ekvivalent X = 5. Primjeri: TEMP = 74. ali je zadatak operatora. dakle. to mo e prethoditi predznakom + ili -. Vrijednost dodijeljena je realni ekvivalent cijelog broja. Operand aritmetièkog izraza mo e biti: numerièka konstanta numerièka varijabla. Operatori.: ARITMETIÈKI IZRAZI Aritmetièki izraz je je onaj izraz koji se dobije izvodeæi niz aritmetièkih operacija da bi dobili brojèanu vrijednost koja zamjenjuje izraz. tip vrijednosti mora biti dosljedan sa tom varijablom.

.. 45 .operand [operator operand] . da se oni mogu ponavljati neogranièeno. Uglate zagrade oznaèavaju da su stavke operatora i operanda neobavezne.

0 +6.0 +6. to jest da su operacije matematièki definirane. sve EVALUACIJA (PREDNOST REDA) napisana uzastopno. 2.0 vrednuje do 20. Evaluacija (procjena) poèinje s lijevom operandom. kako je prikazano na primjeru: 4.0 * 3. osim ako operator nije d rugaèije naznaèio.0 +6. Primjer: 2 ** 3 ** 2 vrednuje do 512 (2 ** 9). ili izraz u zagradi. nula na ne to itd. Potenciranje se realizuje s desna na lijevo. pravila za procjenu aritmetièkih izraza mogu biti naved ena kako slijedi: 1. : * (-B). u kojem operatori na b ilo kojoj liniji imaju jednaku prednost i prednost se smanjuje prema dolje.14159 K (A + B) * (C + D) -1. ali su zanema reni od strane kompajlera Fortran 77. Dva operatora ne mogu biti Primjer: *-B nije dozvoljeno.(Binarni i unarni) Koristeæi ovu prednost reda. Sve ostale operacije obavljaju se s lijeva na desno.0 (4. Varijabla operand. 4.0 Slijed operacija odreðen je redoslijedom raèunskih operacija. ** * / + .0 TIP PRAVILA ZA ARITMETIÈKE IZRAZE . Aritmetièki izraz se ocjenjuje zamjenjujuæi varijable operandi i izraze u zagradama njihovim vrijednostima.0 / X +Y / Z ** 2 2. 3. se ocjenjuju prije nego to se sljedeæa p ravila primjene.0 * 2. koristeæi rezultat svake operacije kao operand od sljedeæeg. Drugi faktor mora biti stavljen u zagradu.0) * 2.0 vrednuje do 16. dijelje je ilegalno (nije dozvoljeno). Operandi moraju biti takvi nje s nulom.0 * 2. Primjeri: 3. Primjeri: 4. Va an je redoslijed kojim se izvode operacije.14159 * RADIUS Ogranièenja: 1. i obavljanje operacija naznaèeno je u nizu. npr. 2.Spaces (prazan prostor) se mo e koristiti kako bi pobolj ali èitljivost.

vrijednost rezultata je takoðer tog tipa.Operandi REAL i INTEGER mogu se slobodno pomije ati u aritmetièkom izrazu. Ako su oba operanda istog tipa. Tip vrijednosti izraza odreðuje se primjenom sljedeæih pravila: 1. 46 .

u kojem se dijeljenjem jedn og cijelog broja sa drugim (npr. vrijednost aritmetièkog izraza je dodijeljen a numerièkoj varijabli u izjavi (iskazu) oblika: numeric_variable = arithmetic_expression Ako se tip izraza razlikuje od varijable.Y PRINT izjava ispisuje izlazne liste na ekranu terminala u standardnom formatu. a vrijednost rezultata je REA L. To je oblik: PROGRAM program_name gdje program_name je naziv u skladu s pravilima za Fortran varijable. Expression Promjenljivi Rule tip tip INTEGER REAL Pretvori u Real REAL INTEGER Skratiti PRINT izjava Izlaz mo e biti printan koristeæi PRINT izjavu. koja je vrlo slièna READ izjavi: PRINT *. 7 / 5) ili podizanjem cijelog broja na cijeli broj (npr. odvojenih zarezima. INTEGER operand se pretvara u svoj pravi ekvivalent prije nego to se operacija izvede.'THE RESULTS ARE'. Primjer: PRINT *. pravila navedena pod 'Type rules (Tip pravila) se primjenjuju. output_list output_list je jedna konstanta. varijabla ili izraz ili popis stavki. Ovo pravilo nije u skladu s pravilima iz aritmetike.2. X . Ako je jedan operand INTEGER a drugi REAL.'AND'. Primjeri: Vrijednost 99/100 0 7 / 3 2 -7 / 3 -2 N ** (-1) 0 N ** (1 / 2) 1 100 * 9 / 5 180 9 / 5 * 100 100 ARITMETIÈKI ZADATAK Kao to je navedeno na poèetku poglavlja. tj. 47 . PROGRAM izjava Programu se opcionalno mo e dati ime tako da poèinje sa jednom PROGRAM izjavom. 2 -1) ne dobije uvijek kao rezultat cijeli broj.

.

Columns Usage 1-5 Statement labels 6 Continuation character or blank 7-72 Fortran statements 73-80 Unused Slika 5: Izgled Fortrana JEDNOSTAVAN PROGRAM Sljedeæi primjer koristi Fortran izjave koje smo upoznali do sad da bi se rije io je dnostavan problem. Iako se kartice vi e ne kori ste. Izgled pravila prikazani su na slici 5. ali ne u prethodnim verzijama. 1 PROGRAM PETROL . Fortran i dalje koristi ovu kolonu na temelju rasporeda. Kolone 1 do 5 su rezervisene za izjavne oznake (statement labels). Meðutim. Napi ite program koji èita udaljenost putovanja. a ispisuje prosjeènu potro nju benzina u kilometrima po litri. on pun i rezervoar opet i bilje i udaljenost koju je napravio u kilometrima. Na njegovom odredi tu. Izvorno. Izjava STOP zaustavlja izvoðenje programa. koja oznaèava kraj programa. broj zaustavljanja i kolièinu benzina koju je stavio na kraj u putovanja.. ove su kolone kori tene za ispis niza brojeva na karticama. STOP nije obavezno. Primjer 1: Vozaè puni svoj rezervoar benzinom prije polaska na put. Kolone 73 do 80 su zanemarene od strane kompajlera. Fortran je osmi ljen kako bi se iskoristio raspored kartice '80-kolone ignoriranjem razmaka i rezervacije razlièitih podruèja kartice za razlièite svrhe. osim ako slj edeæa vrsta ima bilo koji znak osim 0 u koloni 6. bu ene kartice bile su zajednièki medijski ulaz. ako je izvr enje jednostavno da se zaustaviti na kraju programa. ali sada se n ormalno ne koriste. END izjav a mo e da bude samo na kraju programa. IZGLED PROGRAMA (fiksni oblik Fortran 77) Kada je uveden Fortran. St oga. END je takoðer imao isti efekat. jedna ili vi e STOP izjava mo e biti napisana ranije. U Fortranu 77/90. Svaki put kad stane da bi nasuo benzin on stavlja 40 litara u rezervoar.STOP i END izjave Svaki program mora zakljuèiti s tvrdnjom END. Svaki takav karakter oznaèava da su ko lone 7 do 72 nastavak prethodne vrste. Izjava zavr ava zadnjim znakom u liniji. Svi Fortran izvje taji mo raju biti napisani u kolonama 7 do 72.

2 INTEGER STOPS.STOPS. KM.FILLUP 8 USED = 40*STOPS + FILLUP 9 C COMPUTES THE PETROL USED AND CONVERTS IT TO REAL 10 KPL = KM/USED + 0.5 48 . FILLUP 3 C 4 C THESE VARIABLES WOULD OTHERWISE BE TYPED REAL BY DEFAULT 5 C ANY TYPE SPECIFICATIONS MUST PRECEDE THE FIRST EXECUTABLE STATEMENT 6 C 7 READ *.

koristi se broj litara benzina koji se izraèunava. a ne zaokru en.SERNO CHARACTER*16 FNAME. ali æe biti skraæen.5 13. U liniji 10.4 13 Ovaj FORTRAN program omoguæuje korisnicima dodavanje.4) GO TO 70 .4 12.9 12 12.9 13.GT. Dodavanje 0. 2-CHANGE. U liniji 8.1X.'/ FOUND = 0 ENDSW = 0 100 FORMAT ('1ENTER FUNCTION NUMBER ') 200 FORMAT (' (1-ADD.BNAME CHARACTER*21 MSGOK. 5-END)') 300 FORMAT (' & REQUIRED SERIAL NO.EMPSER IF (FNTYPE.A16) 1000 FORMAT (A21) WRITE (6.A6) 500 FORMAT (A16.5 prije skraæivanj a ima uèinak zaokru ivanja gore ili dolje. ali se pretvara u REAL kada se dodijeljuju realna varijabla USE D. brisanje ili prika z zapisa u datoteci people's names (imena ljudi).5 IS ADDED TO ENSURE THAT THE RESULT IS ROUNDED 12 PRINT *.') 400 FORMAT (I1. Zapisi s e moraju dodati prije nego to se oni mogu mijenjati.KPL 13 END Slika 6: Program za potro nju benzina Ovaj program ilustrira neke od taèaka o vrsti pretvorbe koja je spomenuta u pretho dnom poglavlju.100) WRITE (6.5 KPL 12.0 12.400) FNTYPE. 'AVERAGE KPL WAS'. po serijskim brojevima.LNAME. To je ilustrirano dalje u nastavku.A6) 600 FORMAT (A16) 700 FORMAT (' ENTER FIRST NAME:') 800 FORMAT (' ENTER LAST NAME:') 900 FORMAT (' '.A16. promjenu.11 C 0. izraz KM / RABLJENO je ocijenjen kao REAL. KM/USED KM/USED + 0. 3-ERASE. Ovo je korisna metoda zaokru ivanja. brisati ili prikazati.'/ DATA MSGNG /'1INCORRECT SERIAL NO.1X.A16.0 13 12.5 12 12. 4-DISPLAY.200) WRITE (6. kada se dodijeljuje INTEGER varijabla KPL. IMPLICIT INTEGER (A-Z) CHARACTER*6 EMPSER.MSGNG DATA BNAME /' '/ DATA MSGOK /'1OPERATION COMPLETED. Kompjute rska vrijednost je tipa INTEGER.300) READ (6.

FILE='NAMES') OPEN (UNIT=12.OPEN (UNIT=11. FILE='WORK') 49 .

800) READ (5.1) GO TO 65 READ (11.LNAME GO TO 10 15 FOUND = 0 ENDSW = 1 GO TO 25 20 FOUND = 1 25 IF (FNTYPE.ERR=75.AND.FOUND.10 READ (11.FNAME.500.IOSTAT=INT) SERNO.LNAME (ENDSW.700) READ (5.SERNO) GO TO 20 WRITE (12.LNAME IF (INT.LNAME (INT.GT.FNAME.IOSTAT=INT) SERNO.900) FNAME.0) GO TO 75 IF (EMPSER.END=65) SERNO.EQ.IOSTAT=INT.0) GO TO 30 IF (FNTYPE.1) GO TO 35 WRITE (6.1.END=15) SERNO.AND.1000) MSGOK WRITE (12.500.FNAME.EQ.ERR=75.ERR=75.1000) MSGOK TO 60 45 WRITE (6.600) LNAME 50 55 IF 60 IF WRITE (6.600) FNAME WRITE (6.ERR=75.EQ.EQ.EQ.4) GO TO 50 SERNO = EMPSER WRITE (6.0) GO TO 55 65 CLOSE (UNIT=11) CLOSE (UNIT=12) STOP .IOSTAT=INT.EQ.FNAME.EQ.LNAME IF (FNTYPE.NE.500.EQ.EQ.FOUND.500.1.3) GO TO 40 TO 45 WRITE (6.0) GO TO 65 GO TO 55 30 FNAME = BNAME LNAME = BNAME GO TO 45 35 GO 40 GO IF (FNTYPE.1000) MSGNG IF (FOUND.

te akademika gdje je ministarstvo za 50 . Njegovo ime je akronim za Comon Business-Oriented Language .70 STOP 10 75 STOP 20 END COBOL Cobol je jedan od najstarijih programskih jezika. Sve je poèelo 8. godine. ap rila 1959. na sastanku proizvoðaèa raèunara i korisnika. odnosno primjenjuju ga u financijama i administrativ nim sistemima za tvrtke. Cobol je kreirala Grace Hopper u drugoj polovini 1959.

zatim IBM-ovim COMTRAN-om. COBOL 2002 . Finalno tehnièko izvje æe .).Amandman-1989 . go dine. Ti proizvoðaèi su bili: Burroughs korporacija.septmbra 1959. U pou aju da se rije i prob lem nekompatibilnosti izmeðu razlièitih verzija COBOL-a American National Standards Inst itute (ANSI) je 1968.Amandman-1991 .COBOL85 . ANSI je proizveo nekoliko revizija COBOL-a ukljuèujuæi: COBOL-68 . Microsoft Windows i u familiji POS IX (Unix/Linux itd. ANSI je objavio prepravljenu verziju (ANS)COBOL-a. razvio standardni oblik jezika. COBOL je podvrgnut mnogim modifikacijama. RCA Sperry Rand . Sastanak je odr an 28 . Osnovan je odbor na èelu kojega je bio Joseph Wegstein koji je tijekom narednih mjeseci kreirao prvu verziju COBOLA. Ova je verzija poznata kao Ameri can National Standard (ANS) COBOL.jezik kojega je izumio Bob Bemer. IBM Laboratorije. kojeg je predvodio Charles Phillips. 1997. te Vernon Reeves i Jean Sammet iz Sylvania Electric Products. XML sintaksno izvje æe 2006 Objektno orijentirane zbirke klasa jo se èeka za odobrenje 2003 Posao se nastavlja do sljedeæe potpune revizije COBOL-a za koju se oèekuje da æe biti 2010. i u decembru je taj ist i program pokrenut na dva razlièita tipa raèunara. koji je sadr avao razne dodatke koji nisu bili u verziji iz 1968. napredniju od one iz 1974. Odluka za kori tenje naziva COBOL donesena je na sastanku odbora odr anog 18. na kraju je osnovan pododbor kojeg su èinili: William Selden i Gertrude Tierney iz IBM-a. te FACT-om jezikom iz Honeywell-a. korporacija Gartner je objavila da 80 % svjetskog poslo . sve dotada nje modifikacije su ureðene i izdane pod imenom Cobol 60. . ali nikad nije sasvim pokrenut. 1974. Od bor su èinili èlanovi est vodeæih tvrtki proizvoðaèa raèunara i tri vladine organizacije. Honeywell (Minneapolis ) . komercijalnim poduzeæima i operativnim sistemima kao to je IBM-ov z/OS. razvoj jezika se nastavio do danas.za koju obièno ka emo da je majka programskog jezika COBOL .obranu SAD-a odluèilo sponzorirati i nadgledati odreðene akcije. Od 1959.Howar d Bromberg i Howard Discount iz RCA. Glavne odrednice su u velikoj mjeri inspirirane jezikom FLOW-MATIC kojeg je izum ila Grace Hopper. U januaru 1960. to ga je u velikoj mjeri pobolj alo. Prvi kompajleri za Cobol su implementirani tijekom 1960. COBOL se najèe æe koristi u vladinim i vojnim organizacijama. maja 1959. na RCA te na Remigton-Rand Univac-u demonstrirajuæi da je moguæe postiæi takvu kompatibilnost. 1985.Sylvania Electric Products Tri vladine organizacije su bile : Amerièko zrakoplovstvo David Taylor Model Basin NBS (dana nji Nacionalni institut za tehnologiju) Ovaj odbor srednjeg dometa je osnovan. Ovaj pododbor je zavr io specifikacije za Cobol u decembru 1959 . ANSI je objavio jos jednu prepravljenu verziju COBOL-a. COBOL-74 .

no u kasnijim verzijama je to ispravljeno. world u COBOLU: 51 . i procj enjuje da godi nje nastane jo dodatnih 5 milijardi linija koda. dodjeljivanje dinamièkoj memoriji te struktuirane programske strukture. omoguæava sintaksu kao to je: ADD YEARS TO AGE Dok je ekvivalentna struktura u veæini programskih jezika age:=age + years . CO BOL ima preko 400 kljuènih rijeèi. a ova sintaksa je slièna operatoru dodjele koji je kasnije implementiran u C. Primjer programa Hello. rekurzije.vanja obavlja upravo programski jezk COBOL sa preko 200 milijardi linija koda. COBOL dozvoljava identifikatore duge do 30 karaktera. COBOL nije podr avao lokalne varijable.

Svaka naredba se zavr ava taèkom. Sintaksa COBOLA je obièno bila kritizirana zbog verbalizma. 000500 03 CUST-NUMBER PROCEDURE DIVISION Sva logika programa. ENVIRONMENT DIVISION Ovaj dio govori raèunaru s kojim æe ureðajima suraðivati (printeri.dat' sads i skup naruèioca po redovima: Joe Bloggs 20Shelly Road Bigtown 023320 John Dow 15Keats Avenue Nowheresville042101 Jock MacDoon05Elliot Drive Midwich 100230 File section æe izgledati ovako 000400 DATA DIVISION. 000480 05 STREET PIC X(19). 000420 000430 FD INPUT-FILE.IDENTIFICATION DIVISION. HELLO-WORLD. DISPLAY 'Hello. Slijedi prim . odnosno sve naredbe se nalaze u ovom dijelu. 000460 03 ADDRESS. Tra dicionalni COBOL. to ga je èinilo podesnim za namjenu u poslovnom raèunalstvu. STOP RUN.ostale datoteke i sl.odnosno tko je autor programa.world'. velièina i tip podataka koji æe biti ispisani ili uèitani u datote ku ) i WORKING STORAGE SECTION. Programi u COBOLU imaju èetiri dijela: IDENTIFICATION DIVISIONGovori raèunaru ime programa. ). PERFORM naredb a se koristi za poziv drugih paragrafa. Dvije va ne podjele ovoga dijela su: FILE SECTION (u ovom dij elu se definira struktura. 000470 05 HOUSE-NUMBER PIC 99. PROCEDURE DIVISION.datoteke koje bi mogle biti kori tene te dodjeljuje identifikacijska imena ovim izlaznim jedinicama). 000410 FILE SECTION.a kada kompajliran.i grana se na: CONFIGURATION SECTION (definira izvor) i INPUT-OUTPUT (definira printer.te sadr i ostalu dokumentaciju. je imao ogranièen broj funkcija. PROGRAM-ID. ali neki smatraju to k ao pozitivnu stvar jer èini ovaj programski jezik lakim za èitanje i razumijevanje. 000490 05 CITY PIC X(13). 000450 03 NAME PIC X(12). kad je program napisan. DATA DIVISION Data division govori o mjestu u memoriji koje je dodijeljeno podacima i identifi katorima koje je koristio program. za kakvu je namjenu napravl jen itd. Pretpostavimo da datoteka 'input. 000440 01 CUSTOMER-DATA.

jer programa koji tekstualnoj datoteci dodaje brojeve. 52 .

000180 000185***************************************************** 000187 000190 DATA DIVISION. 000320 000330 01 EOF-FLAG PIC X VALUE 'N'.COB' 000170 ORGANIZATION IS LINE SEQUENTIAL.000010 IDENTIFICATION DIVISION. 000510 000510 MAIN-PARA. 000260 000270 FD OUT-FILE. 000460 000470 000480***************************************************** 000490 000500 PROCEDURE DIVISION. 000280 01 LINE-CODE-OUT PIC X(120). 000040**************************************************** 000050* Program to add line numbers to typed code * 000060* Allows for comment asterisk. 000200 FILE SECTION. 000230 01 LINE-CODE-IN. 000370 03 L-NUM-CODE PIC 9(6) VALUE ZEROS. * 000080* * 000090**************************************************** 000100 000110 ENVIRONMENT DIVISION. 000390 03 L-CODE PIC X(100) VALUE SPACES. 000290 000300 000310 WORKING-STORAGE SECTION. LINE-NO-PROG. 000440 000450 01 LINE-NUMBER PIC 9(6) VALUE ZEROS. 000130 FILE-CONTROL. 000240 03 CHAR-1 PIC X. 000430 03 L-COMMENT PIC X(100) VALUE SPACES. 000400 000410 01 NUMBER-COMMENT. 000420 03 L-NUM-COM PIC 9(6) VALUE ZEROS. 000250 03 CODE-LINE PIC X(110). 000210 000220 FD IN-FILE. 000140 SELECT IN-FILE ASSIGN TO 'INPUT. 000340 88 END-OF-FILE VALUE 'Y'. 000020 PROGRAM-ID. 000030 AUTHOR. 000380 03 B-SPACE PIC X VALUE SPACE. or hyphen .* 000070* moving it into position 7. 000350 000360 01 NUMBER-CODE. solidus. 000120 INPUT-OUTPUT SECTION. TIM R P BROWN.TXT' 000150 ORGANIZATION IS LINE SEQUENTIAL. 000160 SELECT OUT-FILE ASSIGN TO 'OUTPUT. 000520 OPEN INPUT IN-FILE 000530 OUTPUT OUT-FILE 000535 000540 PERFORM UNTIL END-OF-FILE 000550 ADD 10 TO LINE-NUMBER .

000560 READ IN-FILE AT END 000570 MOVE 'Y' TO EOF-FLAG 53 .

godine. Kurtz 1964. koji je glavni jezik za . kao programski jezik koji bi pribli io sv ijet programiranja osobama kojima to nije primarna struka. BASIC BASIC (Beginner's All-purpose Symbolic Instruction Code) je napredni programski jezik. Kako su dolazili novi kompjuteri na tr iste svaki je dolazio sa no vijom verzijom. Tako je recimo. BASIC je i danas odlièan alat za uèenje programiranja. Primjer jednog koda u BASIC-u: . Tako su Atari 8-bit kompjute ri imali vlastitu verziju BASIC-a nazvanu Atari BASIC koja je donekle bila modifikovana da bi stala na 8kB ROM memorije. Sam jezik je do ivio ekspanzij u 70-tih i 80-tih kada na tr iste izlaze kompjuteri manjih dimenzija namijenjeni iroj bazi k orisnika.NET platforme. Osmislili su ga maðarski matematièar i informatièar John George Kemeny i amerièki informatièar Thomas E. èime su irili veliku familiju verzija BASIC-a. ali i kao osnova mnogo slo enij ih jezika poput Microsoft Visual Basic. BBC je izdao BBC Basic. a Apple II i TRS-80 su imali sliènu ali noviju verziju. Commodore PET je imao verziju Micro-Soft BASIC . 1977. Samim time. Koji je sadr avao mnogo novih strukturalnih naredbi. u magazinu Byte Magazine predstavljana tri glavna kompjutera tog doba i sva tri su imali BASIC kao primarni programski jezik i kao operativno suèel je. Mnogi kuæni kompjuteri 80-tih su u ROM memoriji dobijali neku verziju BASIC-a. f amilija verzija BASIC-a je najveæa od svih programskih jezika. s obzirom da je svaka upot reba kompjutera zahtjevala pravljenje posebnog softvera. koji je razvijen od strane Aco m Computers Ltd.000580 NOT AT END 000590 000600 000610 000620 IF (CHAR-1 = '*') OR (CHAR-1 = '/') OR (CHAR-1 = '-') THENMOVE LINE-CODE-IN TO L-COMMENT 000630 MOVE LINE-NUMBER TO L-NUM-COM 000640 WRITE LINE-CODE-OUT FROM NUMBER-COMMENT 000660 ELSE 000670 MOVE LINE-CODE-IN TO L-CODE 000680 MOVE LINE-NUMBER TO L-NUM-CODE 000690 WRITE LINE-CODE-OUT FROM NUMBER-CODE 000720 END-IF 000730 END-READ 000740 INITIALIZE NUMBER-CODE NUMBER-COMMENT 000750 END-PERFORM 000760 000770 CLOSE IN-FILE OUT-FILE 000780 STOP RUN.

U$ 20 PRINT "Hello ". A$ 100 IF LEN(A$) = 0 THEN GOTO 90 54 . N 40 S$ = "" 50 FOR I = 1 TO N 60 S$ = S$ + "*" 70 NEXT I 80 PRINT S$ 90 INPUT "Do you want more stars? ". U$ 30 INPUT "How many stars do you want: ".10 INPUT "What is your name: ".

U$ END Varijable Klasièni BASIC je razumio samo jedan tip varijable i stringove.3)=4 A$(2. Stringovi su se uvodili dodavanjem znaka $ nakon imenovanja varijable. U tom s luèaju adresa elementa u matrici je bila u zagradama kao u ovim primjerima: A(1)=1 A$(1)="BOOKS" Dimenzije u matrici se rastavljaju zarezima: A(1. 1) IF A$ = "Y" OR A$ = "y" THEN GOTO 30 PRINT "Goodbye ". Imena varijabli u BASIC-u su morala na prvom mjestu sadr avati slova. dok je na drugom mjestu moglo biti ili slovo ili broj.oduzimanje * mno enje / dijeljenje () za postavljanje primarnosti matematièkih operacija AND operacija u matematièkoj logici sa znaèenjem i OR operacija u matematièkoj logici sa znaèenjem ili 55 .54 Jedina numerièka varijabla je bila binarna implementacija pokretnog zareza . tako i za string varij able: + sabiranje .2)="XYZ123" Operatori i simboli BASIC ima nekoliko operatora za kako matematièke operacije. Svaka varijabla je zauzimala 5 bajta memorije i mogla je biti u opsegu od -1E+38 do 1E +37. Multidimenzionalne matrice su mogle imati i numerièku i slovnu vrijednost. Primjer: A=5 A$="THIS IS A STRING" K7=10 BB$="HELLO!" ZZ=1.110 120 130 140 A$ = LEFT$(A$.

a u COLOR BASIC-u device#-1 znaèi kasetu a #-2 printer Funkcije ABS(num) daje apsolutnu vrijednost za dati broj ASC(str) daje prvom znaku ASCII string kod CHR$(num) daje string znaku ACCII numerièki kod EOF(device number) daje vrijednost 0 ako u fajlu imaju podaci ili -1 ako nema INKEY$ daje neki znak ako je pritisnututa neka tipka na tastaturi. varijabla ili neka druga operacija ili funkcija koja sadr i numerièku vrijednost str znaèi da se tra i string. a ako nije da je vrijednost nula INT(num) daje cijeli broj (integer) od numerièke vrijednost LEFT$(str. Za device 0 se podrazumijeva da su u pitanju ekran i tastatura. To mo e biti fiksni broj. To mo e biti statièki string ili string varijabla ili neka druga operacija ili funkcija koja sadr i string vrijednosti device number znaèi da je u pitanju neki ureðaj.num) daje prvih num slova stringa str LEN(str) daje du inu stringa MEM daje vrijednost preostale memorije u bajtima 56 .NOT operacija u matematièkoj logici sa znaèenjem = jednakost > veæe od < manje od >= jednako ili veæe <= manje ili jednako <> nije jednako " " odreðuje da je string podatak konstanta : razdvaja vi e komandi u jednom redu Radne naredbe nije num znaèi da se tra i numerièka vrijednost.

start num.length num) daje novi string iz str poèev od pozicije uzimajuæi narednih length num znakova PEEK(num) daje vrijednost memorije na lokaciji num (0-65535) POINT(x num. tj. zadaje podatke u BASIC programu koji se pozovu sa READ komandom END kraj programa EXEC [adresa memorije] izvr ava program u ma inskom jeziku na adresi u memoriji FOR {num}={broj} TO {broj} [STEP {broj}].var. te se izvr ava po tom podprogramu. nakon èega se dobija rezultat izvr ene operacije Komande AUDIO [ON/OFF] ukljuèuje i iskljuèuje zvuk iz audio kasete CLOAD [ name ] otvara BASIC program iz kasete. a ako je negativan daje vrijednos num 0 num u radijanima u string jezièni podprogram na lokaciji 275 i 276 u memoriji..y RIGHT$(str.. position num) daje novi string poèev od pozicije stringa RND(number) daje proizvoljan broj od 0 do number SGN(num) daje vrijednost t-1. otvara sljedeæi dostupni program CLOSE [device number] zatvara ureðaj (u COLOR BASIC-u ovo jedino mo e biti #-1. a ako je dat num (0-8) daje boju novom ekranu CONT nastavlja program nakon to se pritisne pauza ili stop CSAVE [ name ] snima BASIC program na kasetu pod zadanim imenom DATA var.. y num) daje boju na grafikonu na poziciji x.MID$(str. zatvara kasetu) CLS(num) èisti ekran.NEXT (num) stvara FOR petlju sa zadan im parametrima 57 .var. Ako nije naveden name .. te vrijednost 0 ako je u SIN(num) daje vrijednost STR$(num) pretvara num USR(num) poziva ma inski num 1 ako je num num start num pa pa do kraja datog pozitivan. otvara sljedeæi program CLOADM [ name ] otvara program u ma inskom jeziku iz kasete.. Ako name nije zadan.

GOSUB {broj linije} poziva podprogram na datoj liniji GOTO {broj linije} program se nastavlja od date linije IF {ne to} THEN {komanda} [ELSE {komanda}] izvr ava kondicionu naredbu. du ina daje zvuk sa frekvencijom tona (1-255) i trajanjem (1-255) STOP program staje sa izvr avanjem VAL (str) daje numerièku vrijednost iz stringa ako su u stringu brojevi 58 . data zapisuje vrijedonst data (0-255) na adresi memorije (0 65535) RESET (x.y) resetuje pixel na grafikonu sa koordinatama x (0-63) i y (0-31) na c rnu boju RETURN povratak iz podprograma RUN num pokreæe BASIC program od date linije SOUND ton. samo to izlistava na printeru [zavr ni red] izlistava linije programa poèev i zavr avajuæi sa NEW bri e sadr aj memorije (i program i varijable) POKE adresa memorije. ako je taèna onda izvr ava THEN a ako nije onda ELSE LIST [poèetni red] zadanim linijama LLIST [poèetni red] [zavr ni red] isto kao i LIST.

Ovaj pristup primije niti temeljne strukture koje je predlo io Dijkstra. objektno-orijentirano programiranje (OOP) je razvi jen kako bi se moglo sudjelovati u vrlo velikim ili slo enim programima (vidi dolje: Objekt no orijentirano usporedbe) Niske razine strukture programiranje Na niskom nivou.. Najèe æi su: 1. te u odnosu na onaj koji sadr e to. Pogled izvedena iz Dijkstrin koji se takoðer zala e za cijepanje programa u pod-s ekcije s jednog mjesta ulaska u zemlju. U " selection " jedna od brojnih izjava se izvodi. korisno razdvajanje pitanja. strukturiranih programa èesto su sastavljene od jednostavan. Jezik je opisan kao "block-strukturiranim" ako im a sintaksu za zatvaranjem strukture izmeðu uzastopne kljuène rijeèi. Historijski gledano. Godina nakon Dijkstra (1969). takoðer samo jedan izlaz bod ). To su Sequence. Jackson. Michael A. sastavljena od sliènih pod-struktura u ogranièenom broju naèina. kao to su if-izjavu . ali kao konstrukti koji koriste vis oke razine strukture programa koji æe se po uzoru na temeljne strukture podataka obraðuju. Post oje najmanje 3 glavne pristupu podataka strukturirani programski dizajn je predlo io J eanDominique Warnier. ovisno o stanju programa. ali je sna no protivi konceptu jednu toèku izlaza. selection. i nekoliko jezika provoðenja ovog. izjava je obavljena sve dok program dosegne odreðen oblik ili op eracije se primjenjuju na svaki element kolekcije.else. 3. i repetition: "Sequence" se odnosi na nalog za izvr enje izvje taja. To se obièno izra ava s kljuènim rijeèima kao to su if. hijerarhijska toka struktura programa.Struktuirano programiranje Struktuirano programiranje mo e se posmatrati kao podskup ili subdisciplinarnih imperativnih programiranja. repeat. Èesto se preporuèuje da sve petlje moraju imati samo jedan unos taèke (i originalne strukture programiranja. i Ken Orr. or case.until. nek oliko razlièitih strukturirane tehnike ili metodologije razvijene su za pisanje struktur iranih programa. Podaci Structured Programming ili Jackson strukturirano programiranje. Ono je naj poznatiji za uklanjanje ili smanjenje oslanjanja na GOTO naredbe... switch. To se obièno izra ava s kljuènim rijeèima kao to su while. Edsger Dijkstra strukturirano programiranje.endif. U " repetition ". To smanjuje razumijevanje program za razumijevanje svaku strukturu vlastitu. for or do. jedan od glavnih paradigmi programiranja.then. 2. koji s e temelji na usklaðivanje strukture podataka s programskim strukturama. gdje je logika programa struktur a..

ako fi .uzastopne strane. ili broj odjeljak uzastopne BEGIN .. END. kao u ALGOL 68. kao 59 ..

Strukturirano programiranje jezici Strukturno programiranje se moze raditi u bilo kojem programskom jeziku. Stoga procesor uvijek v r i "strukturirani program" u tom smislu. it te strukture su dovoljne da se opi u sa uputama ci klusa sredi ta centralne jedinice . veæina novih proceduralnih programskih jezika su ukljuèeni u moguænost potaknuti strukturirano programiranje . Tehnika za pisanje programa koristeæi top-down metode je napisati nazive svih glav nih funkcija koji ce biti potrebni. Dizajn Strukturirano programiranje je èesto (ali ne uvijek) povezane s "top-down" pristup dizajnu. Historija Teorijski temelj Teorema strukuiranog programiranja daje teorijsku podlogu strukturiranog program iranja. komponente su dovoljno specifièni da bude kodirana. BEGIN. izbor. a prog ram je napisan. analogan vi e zubi ili zubaca èe lja u odvajanje dijelova èe lja. PL / I i Ada. Od oko 1970 kada je strukturirano programiranje poèelo da stièe popularnost kao tehnika. Na kraju. Kasnije. i iteracije -dovoljni da se izrazi bilo koja racunska funkcija. Na primjer. u Adi. END IF. Neki od poznatijih strukturirani programski jezici su ALGOL. EXCEPTION. glavno upori te u tradicionalnim proceduralnim jezici ma. Ove podijeljene podrutine ce akcju izvoditi tako jednostav no da se moze i sa eto kodirati. kao i rad Turingovog stroja. jezik je opisan kao "èe lja strukturiranim" ako ima sintaksa za zatvaranjem objekata unutar redoslijedu rijeèi. THEN. Strukturirani teorem programa ne adresira kako napisati . A ako je izjava-u Adi je 4-raèvast cesalj kljuènim rijeèima IF. u kojoj dizajn zapoèinje odreðivanjem na slo ene komade i onda ih dijeli na sukcesivno manje komade.u PL / I. On navodi da su tri naèina kombiniranja programa-sekvenciranje. Kad se sve ove razlicite podrutine kodiraju program je izv rsen. To je upravo suprotno od bottom-up pristup programiranju koja je uob ièajena u objektno-orijentirani jezici poput C + + ili Java. ELSE. "Èe alj-strukturirano" jezik ima vi e kl juènih rijeèi da definiraju strukturu odvojene sekcije unutar bloka. Pas cal. blok 4-raèvast cesalj kljuènim rijeè DECLARE. iako je po eljno da se koristi ne to poput proceduralnog programskog jezika. èak i ako se instrukcije èitaju iz memorije ni su dio strukturiranog programa. To zapazanje nije nastalo sa pokretom struktuiranog programiranja. Meðutim. Top-down je programski stil. END . programerski tim pregleda potreba od sv ake funkcije i proces se ponavlja.

analizirati korisno strukturirani program. 60 .

mnogi programeri koji nisu upoznati s teoremom sumnjao je u svoja potra ivanja.. U nastavku æe postati jasno da plan korektnosti nije moja jedina briga. sve unatrag grane na desnoj strani." U pismu. U svom radu 1974. to vi e znaèajnih spora u nadolazeæim godinama je bilo strukturirano programiranje zaprav o mogao pobolj ati softvera jasnoæa. Dijkstra je tvrdio ogranièavanje broja strukture æe pomoæi d a se programer usredotoèi na razmi ljanje i da æe se pojednostaviti zadatak u osiguranja ispravnosti programa dijeljenjem analizu na upravljive koraka. "srtuktuirano programiranje s Goto izvje taji". Teoretièari strukturiranog programiranja stekli su ve likog saveznik 1970 nakon to je IBM-ov istra ivaè Harlan Mills primijenio svoju interpretac iju o teoriji strukturiranog programiranja na razvoj sistema za indeksiranje u New Yor ku vrijeme u istra ivanju datoteka. 198 7 je jo . i nema kri anja je dnih i drugih. ali i takoder da se demonstruje njegova ispravnost na uvjerljiv naèin pa ove gore navedene primjedbe imaju dobok utjecaj na aktivnosti programera: object koj i stvara mora biti korisno strukutirano. . 1969 u svojim Nap omene o strukturirano programiranje. pozvao na ukidanje nesputan GOTO od jezika visoke razine u interesu pobolj anja kvalitete koda. Dijkstra je napisao: Kada smo zauzeli stav da to nije jedino zadatak programera za izradu odgovarajuc eg programa. on je dao primjere gdje je vjerova o da direktno vodi do skoka jasnije i uèinkovite bez rtvovanja logiènosti. koje je naveo Böhm i Jacopini dokaz. prilag odljivost programa ili upravljanja bit æe jo jedan . kvaliteta. i razvoj dovoljno vremena da se opravd a obuku programera u njemu. iako je Dijk stra kritizirao naèina na koje Millsovo tumacenje razlikuje od objavljianih radova.. Mnogi od onih koji poznaju prevodioce i teorije grafova su zagovarali do pu tajuæi samo reducirati tok grafova. ali on se nije slo ilo (i jo uvijek se ne sla e ) i ukidanje GOTO naredbe. Ovo pismo se obièno navodi kao poèetak rasprave strukturirano programiranje. Knuth je predlo i o bla a strukturna ogranièenja: Trebalo bi biti moguæe donositi plan dijagram toka sa sv im naprijed granama na lijevo.Debate Godine 1967 pismo od Dijkstra pojavilo se u Communications of the ACM s naslovom "GOTO naredbe smatra tetnim. Projekt je bio veliki in enjering uspjeh. Donald Knuth je prihvatio naèelo da programi moraju biti napisani s logièno na umu.. a menad eri u drugi m kompanijama navode u prilog usvajanja strukturiranog programiranja. Iako..

kao to su FORTRAN." GOTO smatra tetnim 'smatra tetnim. Vi i programski jezik kojima su izvorno nedostajale programske strukture. BASIC i sada 61 . gotovo svi raèunalni znanstvenici bili su uvjereni da je korisno nauèiti i primjenjivati koncepte strukturiranog programiranja. Frank Rubin did so in that year with a letter ". st.uvijek moguæe postaviti pitanje strukturiranog programiranja u èasopisu informatike. COBOL. " Rezultat Do kraja 20.

Meðutim. èesto se koris te vi e izlaza. il i mo da nai li okolnosti koje sprjeèavaju nastavka. ili èak goto. vrlo vjerojatno èak i vi e nego onaj s nestrukturiranim kontrolom barata goto izjavama. tokr i pravila Dijk strinovog strukturiranog programiranjea Kodiranje sa jednom toèkom izlaza u pravilu bi bilo vrlo nezgrapan. Neki programi. da bi se odra alo da potprograma mo da neæe imati vi e posla za napraviti. Veæina jezika usvojili vi e toèaka izlaza oblik strukturalnog programiranja. neki programeri (ukljuèujuæi Knuth) vole da provode oblike CHANGE s skokom na novo stanje. Tipièan primjer bio bi jednostavan postupak èitanja podataka iz datoteke i prerade: open file. i "return"). s razlièitim pravilima èi æenja. Moguæa je struktuir atinje tih sistema tako to svaki oblik-CHANGE zaseban potprograma i koristeæi varijable ukazuj u na aktivno stanje. C omoguæuje vi estruke putove strukture izlaza (k ao to je "continue". } } process read data. ima broj oblika koji slijede jedni druge na naèin koji nije lako svesti na osnovne strukture.ih imaju. noviji jezici takoðer imaju " labelled breaks " ( dozvoljava izbijanja vi e nego samo najintimnije petlje ) i iznimke. Zajednièki odstupanja Iznimka rukovanje Iako postoji gotovo nikakav razlog za vi e taèaka ulaza do potprograma. while (reading not finished) { read some data. "break". toèka izlaza æe biti izuzetno te ko za èitanje i razumijevanje. " Stop and inform " mo e se postiæi bacanjem iznimke. drugi povratka iz postupka. Ako je bilo vi e moguæih stanja pogre ke. etiketom petlje break. finish the subprogram. Kako postupak ima 2 izlaza. . if (error) { stop the subprogram and inform rest of the program about the error. osobito parsera i komunikacijskih protokola.

U pro losti. 62 . prateæi Pascal Kompanija Wirth je razvila jezik Euler.Pascal POVIJEST Pascal se temelji na programskom jeziku Algolu i ime je dobio u èast francuskog matematièara i filozofa Bleza Paskala.

Postoje noviji Pascalovi kompajleri koji se koriste na ir oko.definicije. i uèiniti lak u gradnju dinamiènih i rekurzivnih struktura podataka kao to su popisi. Objektn i Pascal se na iroko koristi za razvijanje Windowsovih programa kao to je Skype. Niklaus Wirth-ovog vlastitog Algol-W i suger isane od CAR Hoare. Drugi jezici koji su uticali na Pascal-ov raz voj su Cobol. cifara 0-9. Pascal je bio prvi visoko rangirani jezik kori ten za razvoj u Apple Lisa. nabrajanja. Kompanija Wirt h je namjeravala kreirati efikasan jezik baziran na tzv. dokumentacija. od istra ivaèki projekat a za PC igre do ugraðenih sistema. Pascal ima strog pristup svim objektima. koja oznaèava . Izvr ni dio programa uvijek poèinje kljuènom rijeèi begin. < > = [ ] { } Alfabet verzije Turbo Pascal ukljuèuje jo i sljedeæe znakove: @ $ _ Sintaksa jezika Pascal predviða da bilo koji dio Pascal programa koji je omeðen vitièa stim zagradama predstavlja komentar. Na poèetku svakog Pascal programa mora se nalaziti zaglavlje programa. strukturnom programiranju. i sljedeæih specijalnih znakova: ' ( ) + -* / . ALFABET JEZIKA PASCAL Alfabet programskog jezika Pascal se sastoji od svih velikih i malih slova engle skog alfabeta. ali takoðer uvodi koncepte i mehanizme koj i bi omoguèili programerima da defini u vlastite tipove podataka. Pascal takoðer ima mnogo olak apstrakcije koji nisu bili ukljuèeni u proceduralni jezik. Simula 67 i Wirth-ov vlastiti Algol-W. bez eksplicitne pretvorbe. odnosno output ukoliko program prikazuje izlazne podatke korisniku preko standar dnog izlaznog ureðaja ( tipièno ekrana). . STRUKTURA PASCAL PROGRAMA Pascal u svom izvornom obliku je èisto strukture s rezerviranim rijeèima kao je. Neke verzije Pascala su se koristile za sve.Pascal je uglavnom namijenjen za poduèavanje poèetnika strukturnom programiranju. i raèunar se na njega uopæe ne obazire prilikom izvr avanja programa. Algol 68. P ascal ima korijene u programskom jeziku Algol 60. a zavr ava kljuènom rijeèi end. kao to su tip. :. Meðutim. Slièni mehanizmi su st andard u mnogim programskim jezicima danas. for. iza koje slijedi ime programa. Takve tvorevine su dijelom naslijeðene ili inspirisane iz Simula 67. stabla i grafovi. Ono poèinje kljuènom rijeèi p r o g r a m. else. while. a nakon tog slij ede rijeèi input ukoliko program èita podatke sa standrdnog ulaznog ureðaja(tipièno tastatur e). nakon koje obavezno slijedi taèka. then.a ukljuèuje kontrolne to su: if. i tako dal ica u struktuiranim podacima i drugih objekata orginalni Algol60. to znaèi da se jedan tip podataka ne mo e pretvoriti ili tumaèiti kao drugi. pokazivaèe.

63 . U Pascalu se svaka od promjenjivih koje æe se koristiti mora predhodno deklarirati(najaviti). Deklaracija promjenjivih zapoèinje navoðenjem kljuène rijeèi v ar .kraj programa.

Intervalni tip Intervalni tip je jo jedan korisnièki definirani tip. pa mnoge verzije Pascala uvode i tip longint koji je identièan tipu integer. Bijela ). ukoliko imamo deklaraciju: Var Punoljetan : Boolean. Znakovni tip Promjenjive znakovnog tipa. Zelena. realni tip. mogu kao svoju vrijednost sadr avat i proizvoljan znak. Primjer deklaracije promjenjive realnog tipa: var Temperatura : real. odnosno da ogranièi skup vrijednosti predstavljen tipom. cifru ili znak interpukcije. Na primjer. koji omoguæava programeru da de finira podskup nekog veæ postojeæeg tipa. Crna ili Bijela. Zuta. Promjenjive tipa Boja mogu imati vrijednosti samo vrijed nosti Crvena. kao i dva izvedena tipa: pobrojani tip i intervalni tip. to jest slovo.Nakon toga slijedi popis promjenjivih koje deklariramo zajedno sa dozvoljenim sk upom vrijednosti koje promjenjive mogu da prihvate. ovaj opseg èesto nije dovoljan. U veæini verzija Pascala vrijednosti promjenjivih ogranièene su na opseg od -32768 do 32767. odnosno tipa char. zatim znak j ednakosti. pa mnoge verzije Pascala uvode i tip string. Zbog nekih tehnièkih ogranièenja. Pobrojani tip Pascal dozvoljava korisniku da definira vlastite tipove uz pomoæ kljuène rijeèi type. U jeziku Pascal. Logièki ( Bulov ) tip Promjenjive logièkog tipa mogu imati samo jednu od dvije moguènosti: true ili false. Promjenjive ovog tipa mo gu sadr avati èitave rijeèi ili reèenice. Crna. i logièki tip. Plava. definira novi tip Boje. Tada promjenjiva Punoljetan mo e imati samo vrijednost true ili false. U proste tipove spadaju èetiri osnovna tipa podataka: cjelobrojni tip. znakovni tip. Na primjer. Uzmimo kao primjer deklaraciju var Broj : integer. Svi tipovi podataka se mogu podijeliti na proste i slo ene tipove. deklaracija type Boje = ( Crvena. Zelena. Ovo se pokazalo ka o veliko ogranièenje. opseg vrijednosti koje se mogu smje tati u cjelobroj ne promjenjive uvijek je ogranièen. Ova deklaracija oznaèava da je tip promjenjive Broj tip integer. Realni tip Promjenjive realnog tipa mogu sadr avati proizvoljne vrijednosti iz skupa realnih brojeva. odnosno cjelobroj ni tip. Cjelobrojni tip je najjednostavniji prosti tip. Intervalni tip se definira tako to se prvo definira ime tipa. osim to dopu ta z natno iri opseg vrijednosti. nakon èega se navode poèetna i krajnja vrijednost koju promjenjiva tog tipa mogu uzi . Plava. Zuta. svaka promjenjiv a mora imati svoj tip.

. Na primjer: type Sat = 0 . 23. . b = record x: Integer. DaniUgodini= 1. Ovdje su deklarirani tipovi Sat i DaniUgodini kao podskupovi tipa integer. kao npr.. 365. razdvojene sa dvije taèke. u sljedeæem primjeru: a = Array [1.mati. Slo eni tipovi mogu biti izgraðeni od jednostavnijih. 64 .10] of Integer.

for i := 1 to 10 do writeln('Iteration: '. Sada æemo dati jedan primjer programa raðenog u programskom jeziku Pascal: Programski jezik C C (izgovara se "ce") je racunarski programski jezik opæe namjene. Iako je C dizajniran za sistemski softver. case i of 0: write('zero'). i:1). Pascal je strukturiran programski jezik. koje moraju sve biti u tom redoslijedu.y: Char end. c = File of a. while a <> b do writeln('Waiting'). 1: write('one'). if a > b then writeln('Condition met') else writeln('Condition not met'). Svaka datoteka ima tampon varijablu koja se oznaèava sa f ^. Postupci za èitanje i pisanje premje taju varijable u meðuspremnik. i drugih procedura i funkcija. 2: write('two') end. tipova.Procedure i funkcije u Pascalu se mogu umetati na bilo koju dubinu. Kao to je prikazano u gornjem primjeru. Svaki procedura ili funkcija mo e imati vlastitu deklaraciju konstanti. Pascal-ove datoteke su sekvence komponent i. repeat a := a + 1 until a = 10. Pascal kao i drugi programski jezici omoguèava definisanje potprograma kao to su procedure i funkcije. va rijabli. on je takoðe iroko kori ten za razvoj prenosivih sof tverskih . Razvio ga je 197 2 Dennis Ritchie na Bellovi laboratoriji za kori tenje s operativnim sistemom UNIX. Ovaj zahtje v narud be je izvorno namijenjen da omoguæi efikasnu single-pass kompilaciju. to znaèi da je protok kontrola struktuiran u standardna izvje æa. bez 'go to' naredbe.

65 .

sa malo ili nimalo promjena svog izvo rnog koda. C ima objekte za strukturirano programiranje i omoguæava opseg leksièkih promjenljivih i rekurzije. obezbedi nizak level pristupa memoriji i jezièke konstukcije unatoè ma insk im. Minimalizam Dizajn ovog programskog jezika je vezan za prvobitnu namjeru da se koristi kao prijenosni sistem. Dizajn C se koristi u sistemskom softveru. C program moze biti sastavljen za vrlo sir ok raspon raèunarskih platformi I operativnih sistema. dok statièki sistem tipa spreèava mnoge neplanirane operacije. Karakteristike Kao i veæina jezika u ALGOL radiciji. U C u . bio je dizajniran da podstakne na nezavisno ma insko programiranje. Uprkos niskom nivou sp osobnosti ovog jezika. Ovo su takodje neke osobine ovog jezika: Varijable mogu biti sakrivene unutar bloka . C je uvelike uticao na mnoge druge p opularne programske jezike. Jezik je postao dostupan na svim poljima.aplikacija. C je jedan od najpopularnijih programskih jezika i ima jako malo raèun arske arhitekture za koji C kompajler ne postoji. te da bi osigurao minimalno vrijeme izvodjenja podr ke. Skladnih standarda i spretno napisan. od kojih je najpoznatiji C + +. sav izvr ni kod je sadr an unutar funkcije. Polj e za tekst u C programu je slobodnog formata. Dizajniran je tako da je mogao da koristi je dnostavan kompajler. Raznovrsni tipovi podataka (struktur a) omoguæuju povezivanje elemenata koji se mogu kombinovati I koristiti zajedno. C je stoga koristan za mno ge aplikacije koje su bile kodirane u asemblerskim jezicima. I koristi taèka zarez za razdvajanje izra za. Izostavljanje oznake se u C-u preds tavlja se izrièito preko polaznih pokazivaèa vrijednosti. C kompajleri za nekoliko obiènih 8. direktan pristup bilo kojem adresnom obje ktu i izrazi u njegovom kodu mogu biti prevedeni direktno iz ma inskog u izvr ni kod. On pru a jednostavan. koji je izvorno zapoèeo kao pro du etak od C. Neke od ranijih verzija C kompajlera su implementirane na PDP 11 procesorima koji imaju samo 16 adresnih bita. od ugradjenih mikrokontrolera do superracunara.bitnih platformi su solidno prevedeni. Funkcijski parametri uvijek nose vrijednost.

Znak = se koristi za raspored (kopiranje). i uvjetnu kombilaciju. a Algol 80 ( ) ). matematièkih funkcija dosljedno prevedenih na biblioteke programa. znakovi se mogu koristiti kao cijeli brojevi) Nizak nivo pristupa memoriji raèunara . Oznaka == se koristi za 66 .. Slo ene funkcije kao to su I /O. Predprocesor za makro definicije.preko prevodjenja ma inske adrese do podatka Funkcije I podaci zahtijevaju vrijeme za izvodjenje slozenijih oblika Razvrstavanje po indeksima je sekundaran pojam.Djelimièno slabi tipovi (na primjer.. } (Algol 60 koristi begin. dok je u Algol-u: = . kao to je u Fortran-u. definiran u aritmetickim podacima. na primjer: Znak { .end. Relativno mali skup unaprijed odredjenih fraza Govorne structure koje vi e lièe na B nego na ALGOL... kori tenje stringova.. kod za ukljuèivanje datoteka.

standardne funkcije biblioteka oznaèavaju pogre ne uslove u osnovnim varijablama i / ili specijalnom povratnom vrijednosti.B notacija kori tena u nekoliko jezika). Bez obzira na rukovanje.. Nema zahtjeva za provjeru granica u polju. Nedostaci to su + =. itd. Meðutim Unix 6 & 7 verzije C-a doista koriste ALGOLov e i ASCII operatore. kao to su ugraðeni sistemi. C ne posjeduje pojedine karakteristike koje su dostupne u nekim drugim programsk im jezicima: Nema ugradjene definicije funkcija. Nema operacija na cijelom polju. Prije C99. kao i + = 1 kod ALGOL-a 68) . (Odgovara operatorima +: = Relativno nizak novo prirode jezika pru a programeru kontrolu za zatvaranje nad on im to raèunar radi . (kao to je A. nije bilo odvajanja Boolean tipova (nula/ ne-nula je kori tena umjesto toga). u Fortranu. ali za utvrðivanje infimuma i supremuma respektivno.ispisivanje jednakosti ( to je EQ. + +. · Samo poèetna podr ka za modularno programiranje. To omoguæuje kodu da uèinkovito djenuje i na vrlo ogranièenom hardveru. a funkc ije biblioteka ne pru aju lokalne go to naredbe. Nema utomatskog skupljanja smeæa. ili = u BASIC-u i Algol-u) Logièke operacije "i" i "ili" su predstavljena sa & & i kao u Algolu. Vrlo ogranièena podr ka za objektno-orijentisano programiranje sa obzirom na polimorfizam i nasljeðivanje. Nema direktne dodjele polja ili ica (kopiranje se mo e obaviti putem standardne funkcije. Nema kompajliranja slo enijih oblika funkcija ili operatora preoptereæenja. Ne postoje formalni zatvaraèi ili funkcije kao parametri (samo funkcije i varijabl e). Veliki broj slo enih operatora. Nema generatora. podr ano je zadavanje objekata tipa strukture ili unije) . unutranja kontrola protoka se sastoji od ugradjene funkcije poziva. I semant ièki su razlièite od operatora & i .ni pomoænih programa. pri èemu dozvoljava posebno skrojenu I agresivnu optimizaciju za odreðenu platformu. Ogranièeno podr ka za obavijanje. Nema sintakse za raspone. .

Nedefinisana pona anja Mnoge operacije u C koje imaju nedefinisano pona anje ne zahtijevaju da budu dijagnosticirane u vrijeme prevoðenja. ili su dobijeni preko biblioteke treæe s trane.Nema prirodne podr ke za umre avanje. izraz u grupama 67 . "nedefinisano pona anje" znaèi da taèno pona anje koje proizlazi ne odredjuje standard. iako pogre an. Mnoge od ovih karakteristika su dostupne kao ekstenzije u nekim kompajlerima. U sluèaju C. a upravo ono to æe se dogoditi ne mora biti dokumentirano u C provedbi. Poznati. POSIX). Nema standardne biblioteke za raèunarsku grafiku i nekoliko grugih programa potrebnih za programiranje. ili se mogu simulirati usvajanjem odredjenih dosicplina kodiranja. il i su u nekim operativnim okru enjima (npr.

a ne nu n o programerska gre ka. zbog svoje osobine da je d obijen iz ranijih jezika pod nazivom "B". Ove operacije su sve programske gre ke koje bi mogle nastati kori tenjem i drugih programskih jezika. Prema Ritchie . izmeðu 1969 i 1973. korisnu semantiku (u ovom primjeru. pretpostavlja odbacivanje unosa kroz sljedeæi. koji je smatran va nim za primarnu ulogu C-a kao jezika za implementaciju sistema.pri iskori tavanju nekih moguænsoti PDP-a 11 dovela je do r azvoja rane veryije C-a. ukljuèujuæi i neke u kojima se pona anje moglo dobro definisati .c je da program mo e uzrokovati "demone za letenje do tvog nosa".std. Ponekad odreðeni kompajler generira razumne i dobro izvedene akcije koje su potpuno drugaèije od onih koji æe se dobiti uz pomoc nekog drugog C kompajlera. bug . eventualno pomoæu alata za pronala enje dijelova programa èije pona anje nije definisano. koji ukljuèuje nekoliko ideja od kolega. . Historija Do razvoja C jezika je doslo u AT & T Bell Labs. Pozivanje () na tok otvoren za input je primjer nedefininisanog pona anja. kao dozvoljeno pro irenje. koji prema Ken Thompson u je bio gola verzija BC PL programskog jezika. najkreativnije razdoblje bilo je 1972. Porijeklo jezika C usko je vezano za razvoj operativnih sistema Unix.lang. Izvorno je prevodjen u asemblerski jezik u PDP-7 Ritchie-a i Thompson-a. To je i sluèaj za koji neke potvrdjene implementacije mogu pru it i dobro definisanu. novi red). Nedostatak funkcionalnosti jezika B. Èitanje vrijednosti variable prije nego to je inicijalizovana.comp. nedefinisano pona anje . C crpi kritike jer njegov standard izrièito identifikuje brojn e sluèajeve nedefinisanog pona anja.c i comp. tako C èini da se na odgovornost programera izbegava nedefinisano pona anje. kada je kori tena vrijednost povratka. Suvi no naèenje cijelog broja Dostizanje kraja vrijednosti funkcija bez pronala enja izjave o povratku. ali se ne navodi nikakav mehanizam za to. Na kraju su odluèili da naprave operativni sistem za PDP-11. Nazvan je "C". Razlog za to je neko pona anje ostavljeno nedefinisanim je da bi kompajlerima bio omoguæen irok raspon instrukcija arhitektur a da bi generisali uèinkovitiji izvr ni kod za dobro definisano pona anje. Ponekad se u praksi dogaða na primjer. Upotreba takvih nestandardnih ekstenzija opæenito ogranièava prenosivost softvera. Primjeri nedefinisanog pona anja su: Pristupanje izvan granica polja. a koji mo e o tetiti sadr aj memorije. koji je te ko pronaæi.

· Originalne PDP-11 verzije UNIX sistema razvijene su u asemblerski jezik. uz dodatak struktura tipova.) U 1978.(Raniji primjeri ukljuèuju Multic s sistem (napisane u PL / I)i MCP (Master Control Program) za Burroughs B5000 napisane u Algol-u 1961. Brian Kernighan i Dennis Ritchie objavio je prvo izdanje The C Programming Language. To je bilo jedno od prvih jez gara operativnih sistema provodjen u neki drugi jezik. poznata kao C programer "K & R". slu io dugi 68 . Do 1973 . C jezik je postao dovoljno sna an da su veæina UNIX jezgara operativnih sistema iznova napisana u C-u. Ova knjiga.

drugo test2 OtherFunction = (). Registrirajte / * int * / test2. a drugo izdanje knjige poslije pokriva ANSI C standardom. jer su mnogi stariji kompajleri jo uvijek bili u upot rebi. ) Sve navedene komentare out . Dok K & R deklaracije funkcija ne ukljuèuju bilo kakve informaciju o argumentu fun kcije. mnogo godina K & R C je jo uvijek smatra n kao "najmanji zajednièki nazivnik" na koji su C programeri ogranièili sebe kad je maksimalni prijenos zatra en. Funkcija koja se kor istila bez ikakve prethodne deklaracije se . povratak test2. U ranim verzijama C. samo funkcije koje su vratile ne -cjelobrojnu vrijednost tr ebale su biti deklarisane. ako (test1> 0) test2 = 0.int deklaracije mogu biti ispu teni u K & R C . ako je njeg ova vrijednost veæ kori tena. Verzija C koji opisuje se najèe æe spominju kao K & R C. vracala na cijeli broj.10 umjesto eventualno namijenjene I = -10 Èak i nakon objavljivanja 1989 Standard C. . test1 = SomeFunction (). Na primjer: long int SomeFunction ().niz godina kao neformalni specifikaciju jezika. po pretpostavci . K & R je predstavio nekoliko jeziènih moguænosti: standardnu I / O biblioteku dugi tip podataka int Neoznaèen tip podataka int slo eni zadatak operatora oblika = OP (kao to su =-) su promijenjeni u obliku op = da bi uklonili semantièku nejasnoæu stvorenu kao to je konstrukcija i=-10. / * OtherFunction int (). * / / * Int * / CallingFunction () ( long int test1. koji je bio interpretiran kao i =. ako se koriste prije definicije funkcije.

iako æe neki prevodioci izdati upozorenje. ili ako se vi e poziva za funkci je koristi pomoæu razlièitih brojeva ili vrste argumenata. kao to su neke usluge Unixa razvijeni su da (izmeðu ostalog) mogu provjeriti dosljednost funkcije kori æene na vi e izvornih datoteka.parametri funkcije se ne provjeravaju. U godinama nakon objave K & R C. uz potporu AT & T kompajlera i nekih drugih dobavljaèa. Meðu njima su: 69 . ako je lokalna funkcija nazvana krivim brojem argumenta. Odvojeni alati. nekoliko neslu benih osobina su dodate jeziku.

C89 je podr an u trenutnim C kompajlerima.· void funkcija · funkcije povratka struktura ili skupine tipova (a ne pokazivaèe) · zadatak za strukture tipove · navedeni tipovi Veliki broj ekstenzija i nedostatak sporazuma o standardnim bibliotekama. na primjer. uz pop ularnost jezika i èinjenicu da èak ni Unix kompajleri nisu precizno implementirani K & R specifikaciju. Godine 1990. U sluèajevima gdje kod mora biti u iskompajliran. amerièki nacionalni institut za standarde (ANSI) formira odbor. Nakon ANSI / ISO standardizacije procesa. Tijekom kasnih 1970-ih i 1980-ih. ili ponekad C89. kori tenja nestandardnih biblioteka. ANSI C standard (sa promjenom oblikovanja) usvojen je od strane Meðunarodne organizacije za normizaciju (ISO) kao ISO / IEC 9899:1990. Bilo koji plan napisan samo u Standard C i bez ikakve zavisnos ti od hardver-a æe raditi ispravno na bilo kojoj platformi C izvedbe. iako je K & R interfejs i dalje dopu ten. dovela je do nu nosti standardizacije. Nacionalno usvajanje promjena meðunarodnog standarda se obièno dogaða u roku godinu dana od ISO objavljivanja. ali se priklanjaju normama ISO C. kao i druga nacionalna tijela za uspostavljanje normi. ANSI. kao to su GUI biblioteke. za kompatibilnost s postojeæim izvorni kod. i pobolj anje preprocesor. pojmovi "C89" i "C90" odnose se na isti programski je zik. èime se njegova popularnost poveæala znaèajno. podr ka za meðunarodni karakter skupova te lokacije. Jedan od ciljeva procesa C standardizacije bio je proizvodnja skup K & R C. __STDC__ makro naredba se mo e koristiti za podijelu koda u Standard i K & R odjeljcima da bi iskoristila osobine dostupne samo u Standard C. koja se ponekad naziva C90. miniraèunara i mikroraèunara.159-1989 "Programski jezik C". ukljuèujuæi i IBM PC. verzije C-a su prevodjene za irok krug raèunara. za uspostavljanje standardnih specifikacija C-a. bilo standardno ili baziran na K & R C komajlerima. standard je potvrdjen kao ANSI X3. a veæina C koda koji se sastavlja se i da nas temelji na njemu. vi e ne razvijaju C s tandard samostalno. void pokazivaèi. Bez takve mjere opreza. Dakle. Stand ard C. X3J11 . Godine 1983. Odbor za standarde je ukljuèivao nekoliko dodatnih osobina kao to su prototipovi funkcija (posuðena iz C + +). u okviru svojih gr anica resursa. Godine 1989. Ova verzija jezika èesto se naziva ANSI C. programi mogu kompajlirati samo na odreðenim platformama ili s odreðenim kompajlerima. zbog. specifikacija C jezika ostala je relat . Sintaksa za deklaraciju parametara takoðer je takodje bila pribli ena s tilu koji se koristi u C + +. uklj uèujuæi mnoge neslu bene osobine koje su naknadno uvedene.

ivno statièna neko vrijeme, dok je C + + nastavio da se dalje razvija, uglavnom sopstve nim naporima. Godine 1995 Normativni Amandman 1 do 1990 C Standard je objavljen, da bi ispravio neke detalje i dodao podr ku za opse niji meðunarodni karakter skupova. C standard dodatno je prepravljen krajem 1990-ih, to je dovelo do objavljivanja ISO / IEC 9899:1999 u 1999, koji se obièno naziva "C99". On je od tada izmijenjen tri puta o d strane 70

Technical Corrigenda. Meðunarodni standard C odr ava radne skupine ISO / IEC JTC1/SC22/WG14. C99 uvodi nekoliko novih moguænosti,nekoliko novih tipova podataka (npr. int), raz lièite du ine polja, pomoæ za makronaredbe promjenjive mjesta i podr ku za komentari u jednom redu koji poèinju s / /, kao u BCPL ili C + +. Mnogi od ovih veæ se provode u nastavcima u nekoliko C kompajlera. C99 je veæim dijelom kompatibilan s C90, ali je stro i na neki naèin. Godine 2007 se poèelo sa radom u oèekivanju druge revizije C standarda, neformalno nazvane "C1X". Odbor C standarda je usvojio smjernice da ogranièi usvajanje novih osobina koje ni su testirane od strane postojeæih implementacija. Upotreba Primarna upotreba C-a je "sistem programiranje", ukljuèujuæi izvedbu operativnih sistema i ugraðenih sistem aplikacija, zbog kombinacija po eljnih karakteristika kao to su prenosivost koda i efikasnost, moguænost pristupa odreðenim hardverskim adresama, sposobnost da se "igra rijeèima" kako bi se slagala sa zahtjevima za pristup podac ima, vrijeme izvoðenja i niske potra nje za resursima sistema. C se takoðer mo e koristiti za web programiranje pomoæu CGI kao "Gateway" informacijama izmeðu web aplikacija, poslu itelja i preglednika. Neki faktori za odabir C pord ostalih jezika su njegov a brzina, stabilnost i manja osjetljivost na promjene u radnim okru enjima zbog svoje prirod e sastavljanja. Jedna od posljedica irokog prihvaæanja C-a je i efikasnost prevodjenja kompajlera, bibioteka i predstavnika drugih programskih jezika u C. C se ponekad koristi kao posredni jezika u implementacijama drugih jezika. Ovaj pristup se mo e koristiti za prijeno s i praktiènost.Neki prevodiocima koji koriste C ovaj naèin su BITC, Gambit, Glasgow Has kell kompajler, Squeak, i Vala. Na alost, C je zami ljen kao programski jezik, a ne kao prevodilac jezika, pa je stoga manje idealan za kori tenje kao srednji jezik. C je takoðer na iroko kori ten za implementaciju krajnjeg korisnika aplikacije, ali kako su aplik acije postale veæe, mnogo tog razvoja usmjereno je na druge jezike. Sintaksa Za razliku od jezika kao to su FORTRAN 77, C izvorni kod je slobodnog oblika i omoguæuje proizvoljno kori tenje razmaka za oblikovanje koda, prije nego redanja u kolone linije teksta,bazirane na ogranièenju. Komentari se mogu pojaviti bilo izmeðu / * i * /, ili (u C99) nakon / / do kraja linije. Svaka datoteka sadr i izvor deklaracije i definicije funkcije. Funkcije definicije , pak, sadr e deklaracije i izjave. Deklaracije defini u nove tipove koristeæi kljuène rijeèi kao to su struct, union i enum, ili dodijeljuju tipove, rezervi u nove varijable, obièno pi sanjem tipa

nakon èega slijedi ime varijable. Kljuène rijeèi kao to su char i int odredjuju tipove. Dijelovi koda su u zagradama ({i}, ponekad zvanim "vitièasta zagrada") ogranièavaju opseg deklaracija i djeluju kao jedna izjava za kontrolne strukture. Kao imperativni jezik, C koristi izvje taje za specifiène akcije. Najèe æa izjava je izraz , nakon kojeg slijedi zarez. Kao nuspojava evaluacije, funkcijama se mogu davati i mena i varijablama se mogu dodijeliti nove vrijednosti. Da biste izmijenili normalno sekvencijalno izvr enje izvje taja, C nudi kontrolu pro toka 71

izjava identificiranim rezervisanim rijeèima. Strukturirano programiranje je podr an o od strane, if (-else) uvjetnog izvoðenja kao i do-while,while i for za izvr enje petlji . For iskaz je odvojio inicijalizaciju, testiranje, i ponovno inicijaliziranje izraza, bilo koj eg ili svih koji mogu biti izostavljeni. Break i continue se mogu koristiti da napuste izjavu ili petl ju Tu je i nestrukturiran go to iskaz koji se grana direktno do neoznaèene lebele unutar funkcije. Switch odabira sluèaj koji treba biti izvr en na osnovu vrijednosti cijelog broja iz raza. Izrazi se mogu koristiti za razne ugraðene operatore (vidi dolje) i mogu sadr avati pozivanje funkcija. Redoslijed argumenata funkcija i operanada je nedefinirana. Procjene se èak mogu poklapati. Meðutim, sve nuspojave (ukljuèujuæi skladi tenje u varijabli) æe se dogoditi prije sljedeæeg "sequence point"-a. Iako je imitirao mnoge jezike zbog rasprostranjene familijarnosti, C sintaksa je èesto bila kritizirana. Na primjer, Kernighan i Ritchie ka u u Introduction of The C Programm ing Language, "C, kao i bilo koji drugi jezik, ima svoje nedostatke. Neki od operato ra imaju krivu prednost, neki dijelovi sintakse bi mogli biti bolji." Problemi koje vrijedi spomenuti su: Ne provjeravanje broja i tipova argumenata kada funkcija ima prazan popis parametara. (To osigurava povratnu kompatibilnost s K & R C, koji nisu imali prototipova.) Upitan izbor prednosti operatora, kao to je spomenuto od strane Kernighan i Ritchie gore, kao to su obvezujuæe == vi e nego èvrsto & i u izrazima kao x == 0 & 1. to su

Kori tenje operatora =, koristi u matematici za jednakost, pokazujuæi zadanost, nakon presedana u FORTRAN, PL / I, i BASIC , ali za razliku od ALGOL-a i njegovih derivata. Ritchie je napravio ovu sintaksu svjesno, jer se argument o zadanosti pojavljije vi e nego argument poredjenja. Sliènost i jednakost operatora dodjele (= i ==), to ga èini lakim da se sluèajno zamijeni jedan za drugim. C-ov slab sistem tipova dozvoljava svakom da se korist i u kontekstu drugih, bez kompilacija gre ke (iako neki kompajleri daju upozorenja). N a primjer, uvjetni izraz if (a = b) je taèan samo ako nije nula nakon dodjele. Nedostatak infiksnog operatora za slo ene objekte, posebno za string operacije, izradjuju program koji se jako oslanja na te operacije kao ne to te ko za èitanje. Izjava sintaksi koje neki smatraju nerazumnim, naroèito za pokazivaèe funkcija. (Ritchie-jeva ideja je bila da proglasi identifikatore u kontekstima nalik namje ni). Operatori u C-u i C + + C podr ava bogat skup operatora, èiji se simboli koriste u izrazu ua navodjenje manipulacija koje se izvode, dok se ocjenjuje ekspresija. C ima operatore za:

aritmetiku (+, -, *, /,%) ispitivanje jednakosti (==,! =) relacije poredka (<, <=,>,> =) Booleovu logiku (!, & &, logiku bitovima (~, &, , ^) smjene bitovima (<<,>>) zadavanje (=, + =, -=, *=, / =,% =, = &, 72 =, ^ =, <<=,>> =) )

npr. []) uvjetnu procjenu (?:) èlan izbora (.h>) sljedeæe funkcije: round (): zaokru i na najbli i cijeli broj. (dupli) (256 * 256).. to mo e bit . Za ostale vrste zaokru ivanja. odredjenu C standardom. na pola puta od nule rint ().0). nearbyint (): zaokru i prema va eæem tipu pokretni zarez smjeru zaokru ivanja. u najveæoj moguæoj mjeri. ->) Vrstu pretvorbe (()) Velièinu objekta (sizeof) Funkciju argument zbirka (()) sekvencioniranje (. npr. *. (Long int) sqrt (1000. Za razliku od nekih drugih sluèajeva tipa casting.0).) grupiranje (()) C ima formalnu gramatiku. konverzije izmeðu brojeva i vrije dnosti pokretnog zareza opæenito malo mijenjaju kodiranje kako bi se oèuvala brojèana vrijedn ost operanda . -) referencu i dereferencu (&. vrijednost se zaokru uje "prema nula"). prevodjenja iz cijelog broja na tip pokretnog zareza æe saèuvati svoju brojèanu vrijednost taèno -ako broj bita u ciljnom ti pu nije dovoljna.prirast i smanjenje (+ +. kada je dodjeljivanje vrijedno sti varijabli ili funkcija parametra. ili izmeðu dva tipa integer ili dva tipa pokretnog zareza sa raz lièitim velièinama. Rekonstrukcija je implicitna u vi e konteksta. ceil (): najmanju sastavnu vrijednost ne manje od argumenta (zaokru iti) kat (): (zaokru · TRUNC Sve ove Najveæu sastavnu vrijednost (u duploj reprezentaciji) ne veæoj od argumenta i dolje) (): zaokru i prema nula (isto kao typecasting na int) funkcije koriste dvostruki argument i vraæaju dvostruki rezultat. Tipovi sintaksi mogu se koristiti za pretvaranje vrijednosti izmeðu integer tipa i tipa pokretnog zareza. ili aritmetièkih operacija na operand s razlièitim tipovima. kada se koristi vrijednost pokretnog zareza kao indeks z a vektor. Pretvaranje iz tipa pokretni zarez u tip cijeli broj podrazumijeva odsijecanje bilo kojeg dijela (tj. ili (float) sqrt ( 1000. i u tom sluèaju najmanje znaèajnih bitova-je izgubljeno. C 99 standard specificira (u <math. Konkretno.

Prevodjenje pokretne vrijednosti za double tip èuva brojèanu vrijednost taèno. koje se mo e dohvatiti i po staviti pomoæu fegetround () / fesetround () funkcija definisanim u <fenv. Neki kompajleri æe tiho pretvoriti pokretnu vrijednost do udvostruèene u nekim kontekstima. obièno prema nuli. neki dogaðaji u vezi zaokru ivanja su pogoðeni trenutnim naèinom rada zaokru ivanja ( to ukljuèuje round-to-even. funkcija parametara progla ena kao pokretna mo e zapravo biti donesen kao dvostruka. to je suprotno od prevodjenja koje zaokru uje vrijednost kako bi se uklopio u manji broj bita frakcije. npr. round-down. Round-up. U ma inama koji su u skladu sa IEEE standardima o pokretnom zarezu.h>. i round-to-zero). 73 .i baèeno na cijeli broj ako je potrebno.

naspram drugih. World" na standardni izlaz. primjer koji se pojavio u prvom izdanju K & R je postao model za uvodni program u veæini programskih ud benika. World \ n"). ) U prvom redu program sadr i obradu direktive. oznaèeno # include. To uzrokuje preprocesor . World" program: [11] # Include <stdio. bez obzira na programski jezik.Integer Aritmetika u C u postavlja drugi complement kod za unutra nje kodiranje. World" primjer "Hello. World \ n"). koja je progla ena u stdio. U sljedeæem redu oznaèeno je da je funkcija nazvana glavna definisana.h> int main (void) ( printf ("Hello. Uglaste zagrade okolo stdio. Program ispi suje "Hello.h se opskrbljuje iz sistema biblioteka.prvi alat za ispitivanje izvornog koda koji zamijenjuje liniju sa cijelim tekstom stdio. pretvaranje bilo cjelobrojne vrijednosti na bilo koji cijeli broj tip a s n bitova èuva 2n vrijednost po modulu. Glavna funkcija slu i za posebne namjene u C programima: U vrijeme izvoðenja poziv glavna funkcija oznaèava poèetak izvr avanja programa.h tra i pomoæu strategija koje preferiraju standardna zaglavlja. Konkretno.gdje je obièno prikaz ekrana ili terminal. U tom . World". return 0. Otvaranja vitièas tih zagrada oznaèavaju poèetak definicije glavnih funkcija.koja imaju isti naziv. "Hello. ) Standard-nekonformna "Hello. kao rezultat vrednovanja glavna funkcija je cijeli broj. Tip razvrstaè int oznaèava vraæanje vrijednosti. funcija nazv ana printf .h standardnih zaglavlja koji sadr i izjave za standardni izlaz i izlaz funkc ija poput printf. Kljuène rijeèi void kao parametar popisa pokazuje da glavna funkcija ne uzima argumente.h ukazuju da se stdio. Dvostruki navodnici mogu se koristiti da ukljuèe lokalna ili specifièna zaglavlje datoteke. Originalna verzija je: main () ( printf ("Hello. U sljedeæem redu.

Zarez oznaèava razmak u reèenici.pozivu. ali tiho je od baèena jer se ne koristi. printf funkcije je pro ao jedan argument. to se tumaèi kao izlazni kod za pokazivanje uspje nog izvr enja. 74 . String literal je neimenovano polje s elementima tipa char. Worl d \ n". (Oprezniji program mo e testirati povratnu vrijednost kako bi se utvrdilo da li je ili ne printf funkcija naslijedjena. postavite automatski prevodilac sa zavr nim 0-vrijednosnim znakovima za oznaèavanje kraja niza (printf treba znati o vo). Zatvaranje vitièaste zagrade oznaèava kraj koda za glavnu funkciju. \ N je escape sekvencu koju C prevodi kao znak za novi red koji na izlazu oznaèava k raj trenutne linije. Povratna izjava prestaje izvr enjem glavnih funkcija i uzrokuje to da vrati cijelobrojna vrijednos t 0.). Povratna vrijednost funkcije printf je tipa int. adresa prvog znaka u nizu doslovno "Hello.

Tekstom stringova èesto se manipulira koristeæi pokazivaèe na nizove znakova. i tretiranje njih kao promjenljivih. to je opisano u nastavku. Pointer aritmetike je automatski poredan po velièini pokazanih podataka. jer su obièno neoznaèeni. kao to su grane. pokazivaèe. ali programer mo e pojaèati provjere na razne naèine. Ima ugraðene tipove za cijele brojeve razlièitih velièina. vrlo jednostavanih tipova koji snimaju adresu ili lokacije objekta ili funkciju u memoriji. C dozvoljava kori tenje i manipulisanje i konverziju izmedju tipova pointera. C99 je dodao boolean vrstu podataka. Takodje. ne smeju biti bez inicijalizacije (divlji pokazivaèi) . znakove i popisane tipove (nabr ajanja). Koristenje ovih pointera mora biti uz obaveznu opreznost. èesto se provodi kao dinamicki dodijeljene strukture objekata povezanih pomoæu pokazivaèa. gdje mo e biti potrebno bje anje iz tipa sistema. Pokazivaèi se mogu preoblièiti za pristup podacima pohranjenim na adresi ukazao na. C se èesto koristi za programiranje sistema ni eg nivoa. Dinamièka dodjela memorije. koristeæi standardne funkcije biblioteka. C podr ava kori tenje pokazivaèa. C n ema . Pokazivaèima se mo e manipulirati pomoæu pokazivaèa dodjele i aritmetike. Tipovi variabli u C u su tradicionalno na fiksiranoj i statièkoj velièini vremena kompajliranja. evidencije (struct). ili pomoæu kori tenja tipova u formi izrièitog pretvaranja vrijednosti iz jedne u drugu vrstu. Poznate grupe pokazivaèa su: Null-pointeri (koji p okazuju da vrijednost nije ispravna). Void pointeri (koji pokazuju nepoznate tipove obje kata). floating-point brojeve. izvodi se uz pomoæ pointera. potpisane i nepotpisane. i unije (union). ili pomoæu pokazivaèa i unij e da reinterpretiraju osnovne bite vrijednosti na neki drugi naèin. kao to je Pascal. Kompajleri poku avaju da osiguraju taènost veæine vrsta izraza . iako kompajleri p reduzimaju mjere razlièitog levela provjere. Drugi programski jezici reðavaju ovaj problem prek o ogranièenih tipova. Pokazivaèi funkcije su korisne za pozivanje rukovanja. i mogu dovesti do ne eljenih efekata.moguæe je da se smjesti cio blok memorije u toku tog vremen a. ali dok tip pokazivaèa ukljuèuj e i tip onog na sta je pokazano. ili da se pozove poka i funkcija. izrazi obuhvaæenih pokazivaèa mogu biti provjereni u vr ijeme kompajliranja. Tu su i izvedeni tipovi ukljuèujuæi i polja. Generalno. Objekti koje tra imo moraju biti odvojeni i pono vo upotrijebljeni. Pokazivaèi se koriste za razne svrhe u C. Run-time zastupljenost vrijednosti pokazivaèa je obièno sirova memorija adresa. Mnoge vrste podataka.Strukture podataka C je statièki slab sistem slab obiènog tipa koji ima neke sliènosti s drugim ALGOLpoto mcima.

Interesantan prika z moguænosti unutra nje promjene pointera i variabli je pokazan ispod. Broj elemenata u deklarisnim variablama X mo e biti determinisan kao sizeof X / sizeof x[0]. Èetiri dodjele odgovaraju propisanom c kodu. /* ekvivalntno *(x + i) */ *(x + i) = 1.specijalne propise za deklarisanje vi edimenzionalnih variabli.a to su: /* x je varijabla a i je cijeli broj */ x[i] = 1. i ne zahtijeva da varijabla bude pravilna (bounds checking carinska provjera). 75 .

Biblioteke su èesto napisane u C-u zbog toga sto C kompajleri generi u ob jektni kod. Biblioteke: Programski jezik C koristi biblioteke kao primarnu metodu za ekstenziju. Ova zadnja linija mo e biti pronadjena u C kod u. ali uglavnom ih posjeduju s vi C programi. koji mijenja indeks varijabli i sa varijablom x. ali semantiècki taèna. Statièko smje tanje u memoriju: mjesto za objekte je osigurano za vrijeme kompajliranja ti objekti imaju ivotni vijek samo dok ono traje. Najuobièajenija C biblioteka je C standard libraby . Svaka bibliot eka je tipièno te a datoteka koja sadr i prototipe funkcija sadr anim u biblioteci koju mo e koristiti program. Ova biblioteka podr avca input i output tok. prijenos memorije. Dok su mnogi programi napisani u C-u . Perl i Python. izraz: i[x]. i deklaracije specijalnih tipova podataka i makro simbola kor i tenim u ovim funkcijama. U C u s e biblioteka sje ta u funkciju sadr anu u jedinstvenoj arhivskoj datoteci. Njegova upotreba u komercijalne aplikacije je bila uskraæena usljed nedostatka opisa u standardno ulazno / izlaznim objektima nezainteresovanosti velikih raèunarskih kompanija. /* neobièna upotreba.*(i + x) = 1. koja je specifièna po ISO i ANS I C standardima i dolazi sa svakom C implementacijom. postoji irok krug drugih dostupnih biblioteka. . i[x] = 1. Ova tri pristupa variraju od situacije do situaciju. Programeri zatim kreiraju interfejs biblioteka tako da se programi mogu kor istiti na nisko-nivoskim jezicima kao to je Java. ali njegova upotreba je strana i èudna medju C programerima. mamtematièkih stringova i vrijednosti vremena. Algol 60 ALGOL 60 je kori ten uglavnom u svrhu istra ivanja od strane raèunarskih nauènika u Sjedinjenim Dr avama i Evropi. Memory management Jedna od najva nijih funkcija programerskog jezika je da omoguæi rukavanje memorijom i objektima koje su pohranjene u memoriji. ALGOL 60 je meðutim postavio standarde za izradu algoritama i imao je velik uticaj na buduæi razvoj jezika. ali taèna: i[x] je ekvivalntno *(i + x) */ Primjetiti da je posljednja linija neobièna. C omoguæava tri puta da se smjesti objekat u memoriju. Automatsko smje tanje u memoriju: koje smje ta objekre privremeno Dinamièko smje tanje u memoriju: blokovi memorije neogranièene velièine mogu biti pozvani za vrijeme kompajliranja uz kori tenje funkcija biblioteka.

Nasuprot tome. Poziv-po-imenu imao je odreðe na 76 . primjena im je bila samodefini uæa te su rijetko bili kompatibilni jedni s drugima.ALGOL 60 naèelno nije posjedovao ulazno / izlazne objekte. ALGOL 60 dozvoljava dvije strategije pozivanja parametara: uobièajeni poziv-po-ref erenci (call-by-reference) i poziv-po-imenu (call-by-name). ALGOL 68 je ponudio opse ne biblioteke transput objekata (ALGOL 68 sinonim za ulazno/izlazne).

q. model pokazivaèkih promjenjljivih i pokazivaèkih parametara. k := q end end Absmax Algol 68 ALGOL 68 (skraæeno od ALGOrithmic Language 1968) je bio vodeæi raèunarski programski jezik kao nasljednik uspje nog ALGOL 60 razvijen u cilju mnogo ireg spek tra primjene i rigoroznije definisane sintakse i semantike. integer n. Doprinosi polju raèunarske nauke ALGOL-a 68 su veliki i raznovrsni. functional style # proc error = (string s) void: (print(( newline. Donald Knut osmislio je "test èovjek ili djeèak " da kompajler ispravno ra zlikuje "rekurziju i ne-lokalne reference". i := k := 1. q]). k. value n. kasnije je postao dio razvijenih programskih jezika. korisnièki deklarisani tip ovi i strukture. array a. m. Na primjer. Ipak. q]) > y then begin y := abs(a[p. "thunks". to je predstavljalo ne eljeni nedostat ak u vodeæim jezièkim dizajnima. comment The absolute greatest element of the matrix a. for p:=1 step 1 until n do for q:=1 step 1 until m do if abs(a[p. u jednom ili drugom obliku. real y. ALGOL 68 uvodi sadr aje kao to su sintakse na bazi izraza. newline)). i := p. begin integer p. goto stop). y := 0. " error: ". of size n by m is transferred to y. m. s. . Iako neki od n jih nisu javno izno eni dok nisu potvrðeni. m) Result:(y) Subscripts:(i. redova i matrica. k). ako su stvarni parametri koji se po zivaju cjelobrojna promenljiva i niz koji je indeksiran istom cjelobrojnom promjenjljiv om. nemoguce je sa ALGOL 60 napraviti proceduru koja ce zamijenit vrijednosti dva parametra. and the subscripts of this element to i and k. begin # Algol-68 prime number sieve.ogranièenja za razliku od poziva-po-referenci. i. procedure Absmax(a) Size:(n. Ovaj test sadr i primjer poziva-po-imenu. poziv-po-imenu je jo uvijek popularan dio Algola u vidu isjeèaka programskog koda t zv. te moguænost uzimanja elementa iz nizova.

l).proc one to = (int n) list: (proc f = (int m. (list l) list: ( l is nil error("tl nil"). (list l) int: ( l is nil error("hd nil"). f(m+1.0))). f(1. = ref node. skip t of l ).n) list: (m>n mode mode proc proc proc proc list node cons hd = tl = show nil cons(m.n))). = (int n. 77 .n)). list l) list: heap node := (n. list t). show(tl(l))). skip h of l ).whole(hd(l). = struct (int h. = (list l) void: ( l isnt nil print((" ".

proc primes = (int n) list: sieve( tl( one to(n) )). Bili su u nemoguænosti da to uèine zbog ogranièenja FORTRAN-a te su se pojavili sa dizajnom novog programskog jezika pod oznakom NPL . cons(hd(l). filter = (proc (int) bool p. Prva definicija se pojavila u aprilu 1964 godine. Projekt je osnovan . Slièno. 0. filter(p. 1965 godine sa PL/I (sa rimsko I kao FORTRAN-ov IV ). tl(l)) proc sieve = (list l) list: if l is nil then nil else proc not multiple = (int n) bool: n mod hd(l) . Kontrola PL/I je obav ljana najprije u Centru za programiranje u Njujorku a kasnije u IBM-ovoj laboratoriji u Hursliju. IBM je elio jedinstven programski jezik za sve korisnike. Nadali su se da bi FORTRAN mogao biti pro iren za potrebe poslovno orjentisanih programera. U oktobru 1963 formira se odbor sastavljen od 3 èlana IBM -a iz Njujorka i 3 èlana SHARE-a te IBM-ove grupe nauèno orjentisanih korisnika u cilju prijedloga ovih pro irenja FORTRAN-a. show( primes(100) ) end PL/I Nauèno i poslovno orjentisani korisnici su 1950-tih i ranih 1960-tih programirali u razlièitim programskim jezicima za razlièiti raèunarski hardver. a kasnije. nasljednika sv ih postojeæih IBM arhitektura. tl(l) ))) fi. Ova skraæenica se podudarala sa skraæenicom za Britanski nacionalni laboratorij fizike te je zamijenjen sa MPPL. IBM-ov System 360 (najavljen 1964. Pokazalo se da tako veliki jezik ima potrebu za formalnom definicijom PL/I-ja.tl(l))) filter(p.proc if l elif else fi. Velika Britanija. sieve( filter( not multiple. list l) list: is nil then nil p(hd(l)) then cons(hd(l). dok su nauèno orjentisani korisnici programirali u FORTRANu. Tako su poslovno orjentisani s e koristili Autocoders-om preko COMTRANa do COBOLa. IBM je uzeo NPL kao poèetnu taèku i dovr io dizajn do nivoa pisanja prvog kompajlera: NPL-ove definicije su bile nepotpune u detaljima i opsegu. god) je bi o dizajniran kao zajednièka ma inska arhitektura za oba tipa korisnika. SHARE i GUIDE grupe korisnika su bili ukljuèene u pro irivanje jez ika i imale su ulogu u IBM-ovom procesu za kontrolu jezika kroz njihove PL/I projekte.

Odbor The Share 3by3 je postavio sljedeæe ciljeve za NPL : · Korisni opseg koji æe ukljuèivati postojeæi FORTRAN. objavljujuæi ga u priruèniku GY33-6003.1967 godine u IBM-u u Beèu da bi pru io kompletnu specifikaciju i otklonio moguæe dvojbe. To je dovelo do jedne od prvih veæih formalnih metoda za razvoj. a standard za PL/I je odobren 1976 godine. GY33-6003 u Hursliju 1967 godine. Jezik je najprije bio detaljno naznaèen u priruèniku Specifikacije jezika PL/I. nazvanih VDM. dodatno uvrstiti aplikacije78 . te izmijenjen u priruèniku Specifikacije jezika P L/I. IBM je nastavio razvijat PL/I kasnih 60-tih i r anih 70tih. Ove priruènike su upotrijebljavale grupe korisnika Multics-a kao i drugi rani korisnici. C28-6 571 napisanog u Njujorku 1965 godine. Prvi kompajler je napra vljen 19 66 godine.

Kao rezultat dobiti jezik koji æe biti lak e uèiti i koristiti. Bez rezervisanih rijeèi. Brojni principi i moguænosti kombinovani su skupa ispunjavanju ciljeva: Blok strukture. Korisni opseg se pro irio i ukljuèivao je sistemsko programiranje te dogaðajima-upravljano programiranje.deklaracije i iskaze sa dozvoljenim skraæenicama. iskazi i opcije iskaza su bile moguæe dodati u glavnom hardveru i opsegu od drugih postojeæih jezika doda prepoznatljivom i èitljivom sintakso da jeziku dobije svoj karakter u . Dodatn i ciljevi za PL/I su bili: Izvr avanje kompajliranog koda u odnosu na FORTRAN ( to nije bilo postignuto). Dinamièka pro irenja za nizove i znakove Kratka sintaksa za izra avanje.znakovne i brojne nizove. PL/I je posudio ideje juæi prilièan broj novih moguænosti te upotpunio ga sa m. Novi atributi.opcijama i deklaracijama da bi se sakrila odreðena kompleksnost. (Drugi implementatori ne podr avaju funkciju multiprogramiranja jer se njihovi operativni sistemi razlikuju od IBM-ovih u tom podruèju. pro irene U/I operacije te dinamièke odzive u sluèajevima gre aka prekoraèenja ili kraja datoteke. programa kontrole tipova podataka kao i oblika struktura podataka. Sna no iterativno procesiranje sa dobrom podr kom za strukturalno programiranje. Pogodan za skup znakova od 60. Bilo je potrebno uvest kon kurentnost sa COBOL-ovim upravljanjem listama i pisanju izvje taja. PL/I je pro ao test èovjek ili dijete Donalda Knuth-a. Razumljivost jezika. olak alo pro irenje jezika i smanjilo tipkanje. Opse ne strukture zadane u iskazima. irok opseg raèunarskih tipova podataka. koriteæi la ne varijable za vrijednosti po potrebi (poziv-povri jednosti). praæenje operacija i multiprogramiranje. kao ALGOL 60. Uskladiti jezik sa trenutnom praksom rada ma ina Sisteme U/I kontrole.) Ovi ciljevi su evoluirali tokom ranog razvoja jezika. Ukloniti proizvoljna ogranièenja i neprirodne interpunkcije ko je su smetali korisnicima FORTRAN-a. Biti ureðajno-neovisan. Da bi postigao ove ciljeve. prenoseæi napor sa programera na kompajler. te moguæno æu pode enja na 48. nadzor zamki (odnosno izuzetaka). Imati moguænost pro irenja za novi hardver i u podruèju novih aplikacija. sa osnovnom semantikom (ukljuèujuæi rekurziju). te funkcionisati efikasno operativnog sistema. Argumenti proslijeðivati preko poziva-po-referenci. Pobolj ati produktivnost i vrijeme procesa programiranja.

za kombinovanje i spajanje dijelova koda u u kompletne prorame.PL/I-ju bez poni tavanja postojeæih programa. THEN.da se iskoristi to je vi e moguæe i da se izbjegnu proizvoljna ogranièenja . Moguænosti za kontrolu i presretanje izuzetaka u posebnim uslovima (rukovanje izuzecima) rada. (Poma e da programski jezik bude dobar ). Svaka moguænost da bude dostupna u svakom kontekstu gdje ima smisla. te slobodno kombnovana sa ostalim moguænostima gdje god ima smisla. Nisu bili rezervisani èak ni IF. 79 . integrisani u osnovu jezika. macros. Ortogonalnost. ELSE i DO. Objekti za otklanjanje gre aka (tzv. sa odbjektim a za kompajliranje tzv. Programi podijeljeni u odvojene cjeline (pogodne za kompajliranje).svaka moguænost da bude neovisna jedna o drugoj. debugging).

declare line character (100) varying. on endfile (sysin) end_file = 1. te se jo uvijek kor isti u te svrhe. Izvorna namjena Ade je da bude u ugraðenim real-time sistemima. s druge strane je bilo vi e obiènih programera (manje rada). */ find_strings: procedure options (main). declare (line_no. Revizija Ada 95. /* Read in a line. do while (end_file = 0). modularne mehanizme (paketi). Tucker Taft kompanije Interm etrics izmeðu 1992 i 1995.) Nazvana je prema Ada Lovelace. Ada Ada je struktuirani. prov jeru pri pokretanju. Obavljao je sliène zada tke kao C i C++. ali sa poveæanom sigurno æu poput Jave. èesto pripisivano kao prvi raèunarski programer. end_file = 0. . ukljuèujuæi dinamièko otpremanje. Znaèajnije odlike Ade ukljuèuju precizno pisanje. imperativni raèunarski programski jezik. line_no = 1. end find_strings. line_no = line_no + 1. /* and then print every subsequent line that contains that string. numerièko i finansijsko programiranje.unaprijedila je podr ku za sistemsko. get edit (pattern) (L). declare pattern character (100) varying.Ovi principi su neminovno rezultirali velikim programskim jezikom te su zahtijev ali prilièno kompleksnije kompajlere od COBOL-ovih ili FORTRAN-ovih. line). upravljanje izuzecima te gener iènost. paralelno procesiranje (zadatci). Ada 95 je dodala podr ku za objektno-orjentisano programiranje. To se nije gledalo kao nedostatak jer je bilo malo ljudi koji su se bavili kompajliranjem(zahtjevalo pu no rada). (Neki navode i uticaj Ade na Javu . dizajnirana od strane S. get edit (line) (L). pattern) > 0 then put skip list (line_no. end_file) fixed binary. if index(line. Dizajnirao ga je tim predvoðen Jean Ichbiah kompanije CII Honeywell Bull tokom 1977-1983. which contains a string. end.

with Ada. Takoðe ukljuèuje objekte za lak u programsku provjeru. 80 .Text_IO. Zbog ovih razloga na ao je iroku upotrebu u sigurnosnim sistemima kao to su avio. procedure i funkcije. ali se takoðe mo e efikasno i kompajlirati. Programe Ade saèinjavaju paketi. gre ku off-by-one i druge otklonjive propuste.Podr ku provjere pri pokretanju Ada koristi da bi zabranila pristup slobodnoj memo riji. vojnim (za oru je) te svemirskim letjelicama. Ov e moguænosti se mogu i iskljuèiti èime se dobije na efikasnosti. sprijeèiti prepunjavanje buffer-a.

j). MODULE SumAndAverage. end Print.. end Next. kao revizija Pascala da bi slu io kao jedini program ski jezik za operativni i aplikacijski softver radne stanice Lilith. WriteString. 11.package Mine is type Integer is range 1 . oba iz Xerox-a. CloseInput. Modula 2 Modula-2 je raèunarski programski jezik dizajniran i razvijan izmeðu 1977 i 1980 od strane Niklaus Wirtha iz Ciri kog ETH.Text_IO. OpenInput. FROM InOut IMPORT ReadInt. end Mine. Done. VAR . OpenOutput. koje je Wir th vidio tokom 1976 u Xerox PARC-u. Glavni koncepti su bili: Modul kao mjera za kompajliranje iz dijelova Coroutine kao osnovni programski dio za konkurencijske procese Enkapsulaciju tipova i procedura koji omoguæavaju pristup odreðenim ma inskim objektima Modula-2 je shvaæena kao uspje an nastavak Niklaus Wirth-ovog ranijeg programskog jezika Pascala. begin Ada. j := Next (j). begin while i < Integer'Last loop Print (i). CloseOutput. end loop. WriteLn. WriteInt. i : Integer := Integer'First. procedure Print (j: in out Integer) is function Next (k: in Integer) return Integer is begin return k + 1. Dizajn jezika je bio pod uticajem programskog jezika Mesa i novi h moguænosti za programiranje osobnih raèunara Xerox Alto.Put_Line ('The total is: '.

IF NOT Done THEN WriteString('Output file cannot be opened').N:INTEGER. 81 . BEGIN WriteString ('Enter the names of the output. OpenOutput("OUT"). WriteLn. WriteLn. AVERAGE:INTEGER. input files'). HALT. SUM:INTEGER. X:INTEGER.

END SumAndAverage. Apple Macintosh i IBM PC u DOS-u to je dBASE uèinilo najprodavanijim softverom dugi niz godina. OpenInput("IN"). WriteString('Input file cannot be opened'). AVERAGE:=SUM DIV N. WriteString('The Sum is ').3). dBASE nije uspio napraviti prel az na operativni sistem Microsoft Windows te je na kraju bio zamijenjen novijim rje enji ma kao to su bili Paradox. Clipper i FoxPro. 1). WriteLn. koji je kasn ije 1999 prodao prava na distribuciju novoformiranom dBASE Inc. WriteLn. SELECT 1 SET ORDER TO 1 . WriteLn. Sredinom 1980'tih mnoge kompanije su poèinjale sa pravljenjem njihovih varijacija i sliènih rje enja na jezik dBASE. WHILE Done DO WriteInt(X. i Harbour. Clipper. objavljen od strane AshtonTate za CP/M. IF NOT Done THEN CloseOutput. Zajedno se neformalno svrstavaju i kao xB ase ili XBase. Tu svrstavamo FoxPro (danas Visual FoxPro). WriteInt(AVERAGE. WriteLn. SUM:=0. kasnije i na Apple II. XBASE dBASE je bio prvi iroko kori teni sistem za upravljanje bazama podataka ili DBMS(database management system) za mikrokompjutere. 1). CloseOutput. WriteString('The Average is '). HALT.END. END. FlagShip. N:=0. SUM:=SUM+X. N:=N+1. ReadInt(X). dBASE je prodat Borlandu 1991. WriteInt(SUM. CloseInput. END. ReadInt(X). Quick-Silver. Xbase++.

32 SAY "ESTE CÓDIGO NAO FOI CADASTRADO" INKEY(0) @ 22. FOUND() @ 22.32 SAY " " LOOP ENDIF @ 07.T.6 SAY "HORA: " + HORA 82 .NOT.@ 01.78 DOUBLE DO WHILE .6 SAY "DIA: " + DIA @ 09. VCODIGO = 0 VFIM = SPACE(01) @ 05.06 SAY "CODIGO: " GET VCODIGO PICT "999" READ SEEK VCODIGO IF .01 TO 20.

lf$.wave () DECLARE SUB measure () DECLARE SUB enter (number!) DIM SHARED motorv(1000) DIM SHARED servofreq(1000) DIM SHARED lf$ lf$ = CHR$(10) CALL init CALL measure END SUB init lf$ = CHR$(10) OPEN "com2:2400. PRINT #1.wave () DECLARE SUB save. ":digitize channel1". lf$. PRINT #1.48 SAY "CONTINUAR? [S/N] " GET VFIM PICT "@!" VALID(VFIM$"SN") READ IF VFIM = "S" LOOP ELSE EXIT ENDIF ENDDO Quick BASIC Microsoft QuickBASIC (èesto jo i kao QB s tim da se treba razlikovati od Qbasic koji je zapravo drugi sistem)je nasljednik programskog jezika BASIC. Zasnovan je u ma njoj mjeri na GW-BASICu ali je podpomognut sa korisnièki-definisanim tipovima. END SUB SUB measure FOR count% = 1 TO 6 PRINT #1. boljom diskovnom i grafièkom podr kom te kompajlerom u dodatku interpreteru. lf$.@ 11.6 SAY "COMPROMISSO: " + COMPRO @ 15. ":measure:freq?". unaprijeðe nim programskim strukturama. ":acquire:complete 1". CALL enter(servofreq(count%)) 'input vav motorv(count%) = TIMER NEXT count% END SUB BCPL .8" FOR RANDOM AS #1 LEN = 2 PRINT #1.n. ":acquire:type normal". lf$. DECLARE SUB init () DECLARE SUB get. razvijanog od stran e Microsoft korporacije za kori tenje u MS-DOS operativnom sistemu. Microsoft je prodavao QuickBASIC kao komercijalni paket za razvoj.

BCPL (Basic Combined Programming Language) je raèunarski programski jezikm dizajniran od strane Martin Richardsa sa Univerziteta Cambridge 1966. fiksan broj bita. Neobièan je utoliko to ima jedan podatkovni tip: rijeè. bio je nam jenjen za pisanje kompajlera za druge jezike. Ovakav izbor je kasnije pokazao da stva ra izvjesne probeme kada je BCPL kori ten na ma inama èiji najmanji adresabilni podatak 83 . obièno odabra no da se podudara sa arhitekturom ma inske rijeèi.

znak ! uno eno u vrijednosti. sum) . ) Da bi ovo moglo raditi.nije bila rijeè veæ byte. GET "libhdr" LET start() = VALOF $( LET args = VEC 50 LET instream = 0 LET outstream = 0 LET sum = 314159 IF rdargs("FROM/A. Interpretacije bilo koje vrijednosti je odreðivao operater. kori tenu za obradu vrijednosti. args.TO/K". (Na primjer. // Routine to compute a checksum of a // named file. realizirano je tako da se ne vr i provjera tipa. simplified from a compiler example. 50) = 0 DO $( writes("Bad arguments for CHECKSUM*n") RESULTIS 20 $) instream := findinput(args!0) IF instream = 0 DO $( writef("can't open %s*n". args!1) endread() RESULTIS 20 $) $) $( LET ch = rdch() IF ch=endstreamch BREAK sum := (13*sum + ch) & #xFFFFFFF $) REPEAT UNLESS outstream=0 DO selectoutput(outstream) writef("%n*n". + je sabirao dvije vrijednosti zajedno treti rajuæi ih kao cjelobrojne tipove. args!0) RESULTIS 20 $) selectinput(instream) UNLESS args!1 = 0 DO $( outstream := findoutput(args!1) IF outstream = 0 DO $( writef("can't open %s*n". efektivno tretirajuæi kao pokazivaè.

out: endread() UNLESS outstream = 0 DO $( selectoutput(outstream) endwrite() $) RESULTIS 0 $) 84 .

Ili. iznos novca u kasi. prezime. mo e da postoji objekat HalidBeslic koja prestavlja jedan poseban sluèaj objekta iz klase Pjevaè . preuzimanje artikla. prijava ispita. Tako svaka poruka ima po iljaoca i primaoca. itd. Pona anje objekata (Behavior) . Oni interaguju sa drugim objektima. ubacivanje novca. Uzmimo na primjer aut omobil: podaci (atributi) koji karakteri u automobile su brzina. znaèi. Ima ih bezbroj svud a oko nas. godina studija. uzmimo za primjer objekte kao to su studenti. Razmjena poruka (Message Passing) Objekti ne postoje izolovano. Na pri mer u klasi Pjevaè. Metode kod automata mogu biti izbor artikla. U OO programir anju ova interakcija se ostvaruje preko poruka. itd. Osnovni element u ovoj metodologiji su. Aktivnosti koje studenti izvr avaju su upis semestra. na taj naèin to defini e koji æe podaci biti kori æeni za opis svakog pojedinaènog objekta. Objekti (Object) Objekta je jedna konkretizacija klase. trenutnu u patu. promena stepena brzine (mjenjaèem) itd. ljudi itd. Ili.. odustajanje od kupovine. a aktivnosti (metode) koje ovaj objekat mo e da obavlja su ubrzavanje. itd. Zato je klasa apstraktna struktura bez pojedinaènih vrijedosti za podatke kojima s e opisuju objekti.Objektno-orijentisano programiranje Objektno orjentisano programiranje je metodologija programiranja kojom se modeli ra realan svet kao skup objekata i odnosa meðu objektima. broj indeksa. itd. koèenje. godi na roðenja. boja. itd. odnosno objekat je jedan konkretan primer ak sa konkretnim atributima koji ga razlikuju od drugih objekata iz iste klase. drveæe. Klasa opisuje sve objekte dato g tipa. Kao atri bute automata mo emo da uzmemo boju. Uobièajeno je da sve objekte koji nas okru uju klasifikujemo pa otuda i jedan o d osnovnih pojmova kod OO metodologije pojam klase (Class). polaganje ispita. Klasa (Class) Klasa je sastavljena od osobina objekta koje se izra avaju podacima koje ih opisuj u (atributa) i akcija koje objekti mogu sprovoditi (metoda). Pom islite o objektima koji nas oku uju automobili. preuzimanje kusura. broj sjedi ta. Prenos poruka je proces u kome jedan obje kat (po iljalac-sender) alje podatke drugom objektu (primaocureceiver) ili tra i od drugo g objekta da aktivira neki svoj metod. Atributi studenta su ime. listu artikala koji se nude. objekti koji se koriste za razvoj programa (softvera). ptice. recimo posmatrajmo automat za kafu.

Spoljni svet. Olak ano odr avanje softvera: Kori æenjem OO metodologije znaèajno se olak ava odr avanje softvera. Osnovna svojstva OO metodologije Sada æemo se ukratko baviti nekim osnovnim svojstvima OO metodologije. Vi estruko kori æenje klasa: Jedanput dizajnirana klasa mo e biti iskori æena u raznim aplikacijama. 85 . to jest kako menjaju sop stveno stanje (atribute) i/ili aktiviraju svoje metode. Prednosti kori æenja OO programiranja Realistièno modeliranje realnosti: Kori æenje OO metodologije daje moguænost boljeg I verodostojnijeg modeliranja procesa iz na e realnosti. jer je jednostvnija identifikacija modulèa koje treba menjati. Enkapsulacija (Encapsulation. data hiding) Enkapsulacija je jedan va an koncept u OO programiranju. kao je veæ reèe no.Pona anje se odnosi na to kako objekti reaguju na poruke.

motor. Mogu biti posmatrani k ao posebne klase.pristupa samo onim atributima i metodama koje su oznaèene kao public. veæ neke osobine zanemaruj e (apstrahuje) i ne prikazuje ih kroz atribute i metode. mjenjaè itd. Na primer. kod klase vozila (kao sup er klase) mo emo kreirati sub klase automobili i motorcikli. bez potrebe za promjenom o nog dela programa koji tu klasu koristi. potrebno je da razume i znaèenje atributa i metoda kojima pristupa . Apstrakcija (Abstraction) Apstrakcija je proces kojim se objekti iz realnog sveta modeliraju upro æenom slikom napravljenom u klasi pomoæu atributa i metoda. Obe ove klase nasledile bi sve metode klase vozila. Koji atributi i metodi æe b iti odabrani za prikaz u klasi zavisi od namjera koje imamo u pogledu buduæeg kori æenja klase u razni m aplikacijama. Polimorfizam i kasno povezivanje (Polymorphism and Late bindning) . kao to su metoda Nagnise() i atribut Ugaonaginjanja za motorcikle. Vi estruko nasljeðivanje (Multiple Inheritance) Vi estruko Nasljeðivanje omoguæava da neka klasa (sub klasa) bude bazirana na vi e od jedne klase. Klasa automobil. Sve to je njemu potrebno je da poznaje interfejs preko kojeg pristupa metodama i atribu tima klase. U primeru sa automobilom toèkovi. Pravilno odabran model realnog sveta mo e da pomogne da se razumeju re enja problema koje treba rije iti kroz softversku aplikaciju. U nekim sluèajevima klase i objekti mogu biti tako meðusobno povezani da svi zajedno èine kompleksan sis tem. ali ne mora da zna kako su same metode programirane. predstavlja kompoziciju ovih posebn ih klasa Nasljeðivanje (Inheritance) Nasljeðivanje omoguæava da neka klasa (sub klasa) bude bazirana na drugoj klasi (sup er klasa) i da od nje nasledi svu funkcionalnost. paneli. Na taj naèin je obezbijeðeno da se gre ke koje se pojave u klasi otklanjaju u samoj klasi. Recimo klasa automobil koju smo nap red pomenuli ne opisuje sve moguæe karakteristike automobila. ali bi takoðe mogle da imaju I svoje specijalizovane metode i atribute. Naravno. Kroz dodatni kod (atribute metode ) sub klasa mo e biti specijalizovana za posebne potrebe. Programer ko ji koristi neku klasu ne mora da zna kako su atributi i metode u samoj klasi kodira ne. u tom sluèaju. Kompozicija (Composition) Objekti mogu da interaguju na razlièite naèine u nekom sistemu.

pa se tako reduku je ukupan napor potreban za razvoj softvera. njegovo okru enje æe samo izbacivati iz memorije objekte koji se vi e ne koriste. Ako jezik ima automatsko upravljanje memorijom. tako da se alocira vi e njegovih kopija (insta nci). to se naziva kasno povezivanje. Individualne klase ili grupe povezanih klasa (biblioteke klasa) mogu s e posmatrati kao moduli koji se mogu koristiti u raznim softverskim projektima. a sreæe se i kod operatora . Ovaj oblik polimorfizma naziva se overloding (overloading). 86 . Automatsko upravljanje memorijom (Garbage collection) Objekti se mogu kreirati i dinamièki. kada metode s istim imenom rezultuju razlièitim poziv ima podprograma.Polimorfizam je sposobnost objekta da menja pona anje u zavisnosti od naèina na koji se koristi. U zavisnosti od parametara koje korist imo biæe pozvan onaj metod koji odgovara kori æenim. Pored ovoga omoguæena je i izmjena metoda u naslijeðenim klasama. Na taj naèin se smanjuje potreba za ponovnim programiranjem sliènih zadataka. Modularnost (Modularity) I pored gore navedenih koncepata OO programiranje donosi i poveæanje modularnosti programa. Polimorfizam u najjednostavnijem obliku se pojavljuje kao niz metoda sa istim imenom ali sa razlièitim parametrima.

kao st andard ISO/IEC 14882. bez privatne ili za t iæene baze èlanova. }. od kojih su najpoznatiji Java. bez baze klase i bez virtualnih funkcija. Prvobitno je razvijan u Bell Labs (laboratoriju telekomunikacijske tvrtke Bell) pod rukovodstvom Bjarne Stroustrupa tokom 1980-i h kao pro irenje programskom jeziku C. Zbog velike potra nje za objektno orijentiranim jezicima te izrazitim sposobnostima.C + + je uvelike utjecao na mnoge druge popularne programskim jezi cima. Èlanovi i baza klase su javni po defaultu. Semantika sljedeæeg koda je jednaka u programskim jezicima C i C + +: struct C { int a. Klasa definisana sa klasom kljuène rijeèi ima privatne èlanove i ba znu klasu po defaultu. Agregatna klase Agregatna klasa je klasa bez korisnièki-progla ene konstrukcije. struct D { int a. struktura je klasa definisana strukturom kljuène rijeèi. te mu je originalno ime bilo "C with classes" (en gl. C c. double b. double b. Razlike izmeðu struktura i klasa u C + + U C + +. specifikacija programskog jezika C++ ratificirana je 1998.C++ C++ je programski jezik op te namjene i srednje razine sa podr kom za objektno orijentirano programiranje. C s klasama). . Takve klase se mogu inicij alizirati sa zatvorenom listom reèenica koje su odvojene zarezom. To je jedina razlika izmeðu struktura i klasa u C + +.

20. // D has a sub-aggregate of type C. nema korisnièki definisanu dodjelu operatora niti kor isnièki definisan destruktor. 2 } }. 2 }. Iz tog razloga.}. POD-struktura æe imati istu memoriju kao odgovarajuæa struktura deklarisana u C. Mo e se izvuæi zakljuèak da je POD-struktura C++-a ustvari ekvivalent C strukturama. 87 . POD-struktura POD-struktura (Plain Old struktura podataka) je agregatna klasa koja ima ne-stat ièku bazu èlanova tipa ne-POD-strukture. U veæini sluèajeva. // initialize an object of type C with an initializer-list C c = { 1. POD-struktura se ponekad kolokvijalno naziva i "struktura u C-stilu . { 1. In such cases initializerclauses can be nestedC++ D d = { 10.

int age. Gornje definicije su funkcionalno ekvivalentne. Osnovne deklaracijske I èlanske varijable Klase se deklari u sa rijeèima class ili struct. Tu je i nasljedst vo izmeðu klasa koji mo e koristiti protected: razvrstaè. T aèkazarez nakon vitièaste zagrade je obavezna.public: int age. Èlanovi se deklari u kako bi se bilo u moguænosti pristupiti istima bilo javno ili privatno pom oæu public: i private: ulaznih razvrstavaèa respektivno. struct personclass person {{ string name. konstruktori i destruktori. Svaki èlan nakon to je nai ao na razvrstaè imat æe povezani pristup sve dok drugi razvrstavaè ne naiðe. Nakon jedne od ovih deklaracija (naravno ne obje).Deklaracija i upotreba C + + klase imaju svoje èlanove. Deklaracija èlanova se nalazi unutar ove deklaracije. ime) i age (eng. person se mo e koristiti kako b i se na sljedeæi naèin stvrila nova varijabla person-inog tipa: #include <iostream> #include <string> using namespace std. string name. name (eng. int main () . }. Oba koda æe difinisati objekat tip a person (eng. osoba) koja ima dva javna èlana baze. }. funkcije (specifièni identifikatori ili preoptereæenje operatora) poznatije kao metode. class person { public: string name. int age. }. godine). Ovi èlanovi su varijable (ukljuèujuæi i èlanove drugih objekata i klasa).

return 0. } 88 . b.name = "Calvin".age << endl.age << endl. a.{ person a.name << ": " << a.age = 20. cout << a.name = "Hobbes". b. a. cout << b.name << ": " << b. b.age = 30.

void person::print() const { cout << name << ". . Uzet æem o gornji primjer person-e kao ponovni primjer: class person { std::string name." << this->age << endl.Izvr avanjem prethodnog koda ispis æe biti : Calvin: 30 Hobbes: 20 Èlan funkcije Va an element C + + klasa i struktura èine èlanovi funkcije. public: person() : age(5) { } void print() const. }. int age. because the function is declared const. /* "name" and "age" are the member variables. The "this" keyword is an expression whose value is the address of the object for which the member was invoked. Its type is const person*. kljuèna rijeè this se koristi misleæi na objekat zbog kojeg je funkcija pozvana. To se èesto koristi prolaskom adrese objekta kao implicitno prvog argumenta funkcije. U strukturi koda ne-statiènih èlanova funkci je. Svaki tip podataka mo e ima ti svoje odranije ugraðene funkcije (zvane metodama) koje imaju pristup svim èlanovima (javnim i privatnim) tog tipa podataka.

gdje su a i b gore nazvani kao po iljaoci.print () b. Nasljeðivanje Izgled ne-POD klase u memoriji se ne odreðuje C + + standardom. Na primjer. Oba èlana name i age su privatn a i print() je deklarisan kao javni èlan to je neophodno ako ga elimo koristiti i izvan klase. 89 . mnogi popularni C++ kompajleri implementiraju jednu ba tinu kao splet roditeljske klase sa djeèijom klasom. i prema svakom od njih æe se obraæati kao p rema posebnom èlanu varijabli kada se funkcija print () izvr i. Uz èlana funkcije print(). ali ovo nije potrebno po standardu.print (). ispis se mo e pojednostaviti u: a.*/ } U gornjem primjeru print () funkcija je deklarisana u tijelu klase i definisana sa kvalificiranjem iste sa imenom klase praæenom sa ::.

Preoptereæeni operatori U C ++-u operatori kao to su + . itd. Osoba mo e proglasiti struk turu kao integer u kojoj varijabla really pohranjuje cijeli broj. umjesto umno ka cijelih brojeva.Na primjer. ali zvanjem integer * i nteger suma. preoptereæeni operatori bi se trebali pona ati skoro isto kao to se pona aju u ugraðenim baznim tipovima (int. Na primjeru P sa P* p pokazuje na to da bi ovako moglo izgledati u memoriji: +----+ P::x +----+ ^ p Na primjeru C sa P* p pokazuje da bi moglo izgledati ovako: +----+----+ P::x C::y +----+----+ ^ p Stoga. Pravilno napisam C++ program ne bi trebao praviti pretpostavke u vezi sa izgledom naslijeðenog polja.). ni u kom sluèaju. }. ali ovo nije tra eno. razmislite o class P { int x.*/ mogu biti preoptereæeni kako bi odgovarali potr ebema programera. bilo koji kod koji manipulira polja P objekta mo e manipulisati P polja unu tar C objekta bez razmi ljanja o definiciji o C poljima.float. Kori tenjem static_cast ili dynamic_cast tipove pretvaranja operatori æe osigurati d a su pokazivaèi pravilno pretvoreni iz jednog tipa u drugi. Po konvenciji. Ovi se operatori nazivaju preoptereæeni operatori. cijeli brojevi se mogu vratiti : struct integer . class C : public P { int y. }.

90 .i). } }.{ int i. integer (int j = 0) : i (j) {} integer operator* (const integer &k) const { return integer (i + k.

integer integer::operator* (const integer &k) const { return integer (i + k. Prvo pojavljivanje. Kada se pozove funkcija. ZA jas niju prezentaciju (iako èe ovo smanjiti uèinkovitost programa). Drugo pojavljivanje pokazuje se na kraju deklarac ije i ono obeæava kompajleru da po iljaoc neæe biti promjenjen kada se pokrene funkcija. integer (int j = 0) : i (j) {} integer operator* (const integer &k) const. m.Kod iznad je koristio konstruktora kako bi konstruisao povratnu vrijednost.i pretstavlja èlansk u varijablu iz argumenta varijable k. argument const integer &k. znak (&) znaèi proæi po preporuci.i = i + k. }. dok k.i. Ova gornja osobina isto vijedi I za klase. U const integer &k.i). Binarni preoptereæeni operatori . return m. } Programeri mogu staviti prototip operatora u struct deklaraciji i definisati fun kciju operatora u globalnom podruèju: struct integer { int i. } i gore pretstavlja po iljaocevu vlastitu èlansku varijablu. gornji kod se mo e prepravi ti u: integer operator* (const integer &k) const { integer m. Kljuèna rijeè const se pojavljuje dvaput u gornj em kodu. a ne vrijednost varijable. poin ter varijable æe biti prosljeðen u funkciju. pokazuje da argument varija ble neæe biti promjenjen u funkciji.

integer i = 1.i << endl.Binarni operatori (operatori sa dva argumenata) su preoptereæeni sa deklaracijom f ukcije sa identifikatorskim operatorom koji poziva samo jedan argument. /* we can initialize a structure variable this way as if calling a constructor with only the first argument specified. */ integer j = 3. 91 . Varijabla sa li jeve strane operatora je po iljaoc dok je ona sa desne strane argument. */ integer k = i * j. cout << k. /* variable names are independent of the names of the member variables of the structure.

<nije nu no suprotno od>. dviju varijabli istog tipa struktura je preoptereæena po defaultu kopirati cijeli sadr aj varijabli iz jednog u drugi. Na primjer. neki operatori imaju samo jedan argument. (Bez op te upotrebe) '=' operator izmeðu dvije varijable istog strukturalnog tipa je podrazumijevano preoptereæen da kopira èitav sadr aj iz jedne varijable u drugu. i oni se nazivaju unarnima. ako je potrebno. < nije obavezno suprotno o d >. Po iljaoc unarnog operatora mo e biti na lijevoj a i na desnoj strani operatora. drugim rijeèima. + -Positive / negative sign right * & Dereference right ! ~ Logical / bitwise NOT right ++ --Pre-increment / decrement right ++ --Post-increment / decrement left Unarni preoptereæeni operatori Dok neki operatori. nema preoptereæen ja je povezan s jednom drugom. Sli jedi lista unarnih preoptereæenih operatora: Operator Op ta upotreba Polo ajpo iljaoca + -Pozitivan / negativan predznak desno . po iljaoca.'4' æe se ispisati Slijedi popis binarnih preoptereæenih operatora: Operator Op ta upotreba + . Mo e se prepisati s neèim drugim. drugim rijeèima. kao to smo gore objasnili. nijedno preoptereæenje je povezano jedno sa drugim. imaju dva uvjeta.* /% Aritmetièka izraèunavanja <<>> Bitna izraèunavanja <> ==! = <=> = Logièka uporeðivanja & & Logièka veza = <<=>> = Slo eni zadatak . Na primjer. Operatori moraju biti preoptereæeni jedan po jedan. po iljaoc sa lijev e strane i argument na desnoj. Primjeri su negativni znakovi (kada se ni ta ne stavi lijevo od njih) i logièno NE. Mo e biti zamjenjen neèim drugim ako je potrebno. Operatori moraju biti preoptereæena jedan po jedan.

Poslije poveæanja/smanjenja lijevo .* & ! ~ + + + + 92 Dereference desno Logièki / bitwise NOT desno --Prije poveæanja/smanjenja desno -.

} 93 . person (string N. age = A. Kao i operator (=). Sljedeæa deklaracija preoptereæuje uglastu zagradu. itd.Sintaksa preoptereæenja unarnog operatora.. const argumenti semogu dodati na kraju deklaracije ako je primjenljivo. deklaracija izgleda ovako: return_type operatora @ (int) @ Iznad oznaèava operatora koji æe da bude preoptereæen. dok mala zagrada mo e sadr avati bilo koji odreðeni broj argumenata..) Sadr aj zagrade u pozivnom dijelu je odreðenu drugoj zagradi.) Parametar int u su tini ne znaèi ni ta. int A) { name = N. arg2. ali po konvenciji on je pokazatelj da je po ilja oc na lijevoj strani od operatora.bool. Konstruktori Ponekad softver in injeri ele da njihove varijable uzimaju po defoltu vrijednosti i li specifiène vrijednosti pored deklaracije. Preoptereæenja zagradama Uglasta zagrada [] a i mala zagrada () mo e biti preoptereæena u C++ strukturama. Zamijenite return_type sa baznim tipom povratne vrijednosti (int. Ovo se mo e uèiniti uvoðenjem konstruktora. strelica sa zvjezdicom ( ->*). . Uglasta zagrada mora sadr avati samo jedan argument. Kao dodatak uz operatore iznad. oni se takoðer peoptereæuju po defoltu ako nije napravljena posebna deklaracija. gdje je po iljaoc na desnoj strani: return_type @ operator () Kada je po iljaoc na lijevoj strain. Mala zagrada se preoptereæuje na slièan naèin. strelica operator (->). kljuène rijeèi new i delete mogu takoðer biti preoptereæene. return_type operator() (arg1. ili biti bez argumenata. return_type operator[] (argument) Sadr aj unutar zagrade je odreðen u dijelu argument.

Poèetne vrijednosti mogu se dati zadnjim argumentima kako bi se pomoglo pri inicijaliziranju istih. age (0) {} Deklaracija konstruktora izgleda kao funkcija sa imenom istim kao i bazni tip. 40). se moze dodati kao dio konstruktora. 40). mo emo to nazvati kontruktor u formi za zvanje funkcije. int A = 0) : name (N). Bolji naèin za kreiranje objekta bez kori tenja nepotrebnog kopiranja je: int main () { person r ("Wales". r. } Sa gornjom konstrukcijom Hello! æe biti ispisano u sluèaju kada je person varijabla be . èak i ako su prazne. U tom sluèaju tip varijable person bi bio povratna vrijednost: int main () { person r = person ("Wales".print (). person () { std::cout << "Hello!" << endl.print (). age (A) {} Kada nijedan argument nije zadan konstruktoru u primjeru iznad. r. person (std::string N = "". koja mo e ali I ne mora biti povezana sa varijablom. mo e se reæi da je t o jednako zvanjem konstruktor bez argumenta ( ili poèetni konstruktor): person () : name ("").Imajte na umu da vitièaste zagrade ne mo ete izostaviti. } Kod iznad krejira privremeni person objekat. i onda ga dodjeljuje r-u kori tenjem konstruktora za kopiranje. U stvari. } Specijalna programska akcija.

Nema povratne vrijednosti i ime metode je isto kao i ime klase sa crticom(~) ispred. Destruktori Destruktori su ustvari suprotni konstruktorima. Sintaksa za deklaraciju destruktora je slièna onoj za konstruktora. onda se destruktor poziva automatski.z specijalnih vrijednosti inicijalizirana. ~person () 94 . npr. Pozivaju se kada je uni ten dio kl ase. Kada objekat klase kreiran u bloku (par vitièastih zagrada {} ) je obrisan nakon zat varanja zagrade.

} Osobine Sintaksa C++-a poku ava da uèini da svaki dio strukture izgleda kao osnovni bazni ti p. Naprimjer.{ cout << "I'm deleting " << name << " with age " << age << endl. int b. U mnogim sada njim C++ kompajlerima. }. Upravo zato. . Potro nja memorije Potro nja memorije jedne strukture je ustvari suma memorijske velièine njenih dijelo va varijable. polja strukture se mogu deklarisati kori tenjem uglastih zagrad a u sintaksi (neko_ime_struktuirane_varijable[velièina]). short int s. tako da svaki èlan varijable koristi 4 bita memorije. double d. +----+----+ a b +----+----+ Meðutim. struktura struct bytes_and_such { char c. char C. koje su inaèe 32-bitne . Struktura se sastoji od dva integer. integer su 32bitni integer po defoltu. kompajler mo e dodati crtice izmeðu varijabli ili na kraju structure kako bi osigurao dobro poravnanje za datu kompjutersku arhitekturu. Uzmimo za primjer strukturu twonums : struct twonums { int a. int i. zato koristi najmanje (ili upravo toliko) 8 bita memorije. preoptereæeni operatori dozvoljavaju da se manipuli e stukturom kao sa prostim brojevima. Èitava struktura.

Mo e izgledati ovako +-+-+--+--+--+----+--------+ c C XX s XX i d +-+-+--+--+--+----+--------+ U memoriji.}. gdje XX predstavlja dva neiskori tena bita. 95 .

imagPart += c. this je pokazivaè. return *this. Kako prolazna vrijednost povlaèi èinjenicu da se originalna struktura mod ificira u funkciji. C++ je uveo kljuènu rijeè t his za sve èlanove funkcija. C++ se èesto smatra da obuhvata C programski jezik. Jedna od razlika sa kojoj se èesto susreæemo jest eta to C dozvoljava promjenu iz voi d* u drugi pokazivaèki tip. to je skupo ukoliko je rijeè o v elikoj strukturi. kao to su new I class. a C++ ne dozvoljava. Ovo je zato to bi se kori tenjem drugèijeg znaka samo jedna rijeè (tipièno 4 bita na 32-bitnoj ma ini. potrebno je d a se argument kopira svaki put kada se pozove funkcija.imagPart.Struktura mo e iskoristiti pokazivaèe i strelice kako bi deklarisala i inicijalizira la varijable svojih èlanova. ili ih drugaèije prihvata. tako da je upotreba znaka (*) potreb na kako bi se on mogao preobratiti u odnosu na prethodno stanje. U suprotnom. kljuèna rijeè const trebao bi se koristiti da se zagarantuje da funkcija n eæe mijenjati parametar ukoliko to nije potrebno. This kljuèna rijeè se pona a kao pokazatelj prema sada njem objektu. Veliki dio C koda se mo e taèno kompajlirati u C++-u. 8 bita na 64-bitnoj ma ini) je potrebna da bi se pro lo u funkciju.realPart. meðutim to I nije ba taèno. Jo jedan èesti problem jested a C++ defin i e mnogo novih kluènih rijeèi. ukoliko se koristi promjenljiva vrijednost. ali postoji nekoliko razlika koje taène kodove iz C-a prikazuje kao netaène u C++-u. koje se mogu koristiti kao identif . Prolaz sa upuæivanjem Dosta programera preferira da koristi znak & kako bi deklarisali argument funkci je koji ukljuèuje strukturu. } Kao to smo ustanovili gore. This kljuèna rijeè je izuzetno va na za èlanove funkcija koji imaju strukturu povratne vrijednosti: complex& operator+= (const complex & c) { realPart += c. Kljuèna rijeè this Kako bise olak ala strukturalna sposobnos da se refernira.

. domaæe tipove kompleksnih brojeva.ikatori u C programu. C99 je uveo dos ta novih znakova koje C++ ne podr ava. bilo koja deklaracija ili definicij a funkcije mora se deklarisati sa C poveznicom tako to æe se postaviti vanjski C {/*. Neke razlike su uklonjene u najnovijem (C99) C standard. // komentari i mije a eklaracije I kod. 96 .*/} blok. Iako æe neki dijelovi C99 biti ukljuèeni u sljedeæu verziju C++ standard. kao to su promjenljive du ine polja.U cilju mje anja C i C++ koda. koji sada podr ava znakov e iz C++-a kao to je npr.. Takva funkcija ne mo e se osloniti na dodatke koji ovise o o teæivanju imena (funkcijs ko preoptereæenje). C++0x. Meðutim.

B yte. Java programeri ponekad moraju koristiti dodatke poput CORBA ili OSGi. Objekt-Orijentacija [ Osnovni koncept u Javi je klasa (en.lang. U pravilu. iako oba jezika koriste sliènu sintaksu baziranu na C sintaksi. Ideja je bila da se stvori prog ramski jezik koji bi bio nezavisan od operativnog sistema. Java nema veze sa JavaScript-om. poput int . Microsoft Windows XP. svaka klasa je deklarirana unutar datoteke sa istim imenom i sufiksom . en. mada ne sve. Ideja je da ako se kod nap i e i kompajlira na jednoj platformi (npr. ali sa pojednostavljenom sintaksom. Ovo pravilo je donekle nametnuto kompajlerom koji zahtijeva da su imena klasa i dato teka ista (osim tkz. Java Virtual Machine ili JVM). su takodjer predstavljeni u klasama (napomena: Reflection types) i im aju odgovarajuæe klasne omote poput java. To okru enje se u ovom sluèaju zove Javina Virtualna Ma ina (en.Integer. taj isti bytecode se mo e izvr avati na svim ostalim platformama koje imaju JVM (npr. poput C++. Da bi postigli mre nu podr ku i izvr avanje programa na udaljenim serverima.Boolean i java. inner classes). Nezavisnost od Platforme (operativnog sistema) [uredi] Javin izvorni kod nije kompajliran u ma inski kod nego je pretvoren u tkz. sav izvorni kod je napisan unut ar klasa. Mac OS X).Java Java je objektno-orjentirani programski jezik razvijen u timu predvoðenim James Go slingom u kompaniji Sun Microsystems poèetkom 1990-tih. boolean. Pet osnovnih razloga za razvoj Jave su: treba da koristi objektno-orijentacione metodologije treba da se isti program izvr ava na mnogim operativnim sistemima treba da sadr i (built-in) podr ku za raèunarske mre e treba da izvr i programe sa (geografski) udaljenih servera sa sigurno æu treba da bude jednostavan za upotrebu i da posudi korisne stvari od starijih obj ektivnoorijentisanih jezika.lang. java.lang. Trenutno JVM podr a va najrasprostranjenije operativne sisteme. byte i sl. java. unutra njih klasa. Linux) bez potreb . class). Osnovni tipovi u Javi. baziran na C++-u. bytecod e koji zahtijeva posebno okru enje da bi se mogao izvr avati. tj. stabilnijim runtime sistemom i pojednostavljenom ko ntrolom memorije.

e za 97 .

class. Ime generirane datoteke je ime klase sa . ali za razliku od C++. u Javi su objektno-orjentirani principi obavezni. main() metoda mora uzimati niz String objekata kao parametar.String) koja ispisuje informaciju na ekranu (tkz. U sluèaju nepoznate (anonimne) klase. metoda na nivou klase. glavnu metodu.lang.java. a sav izvorni kod je pisan unutar klasa. zajedno sa simbolom $ i brojem. Uputa public (javna) oznaèava da se ta metoda mo e zvati iz koda u drugim klasama il i da se ta klasa mo e koristiti u drugim klasama izvan hierarhije te klase. Klase koje pokreæu program moraju imati metodu main(). Tako npr. Sve u Javi je uvijek upisano unutar klase. To nije sluèaj u C++-u gdje svaki objekat koji je st voren mora biti ruèno izbrisan koristeæi uputu delete (ako se to ne uradi onda doðe do tkz. 98 . Automatsko Èi æenje Resursa (garbage collection) [uredi] U Javi. Obièno se taj parame tar imenuje args. meðutim bilo koje dozvoljeno ime varijable se mo e koristiti kao param etar (npr. Uputa void oznaèava da metoda main() ne vraæa ni ta. Sve je u Javi objekat. argumenti). Uputa static oznaèava da je ova metoda statièna tzv. pa èak i glavna aplikacija. generirana datoteka æe imati ime klase koja sadr i nepoznatu klasu. kompajler æe stvoriti class d atoteku sa nazivom Primjer.System definira javnu st aticnu (public static) varijablu out koja je instanca (objekat) klase java. vraæena sistemu èim se taj objekat vi e ne koristi (za tog objekta ka emo da je van doma aja ili en. Sintaksa [uredi] Iako je Java nastala od C++. za kla su Primjer koja je deklarirana u datoteci Primjer.class. Kompajler æe generirati class datoteku za svaku klasu definiranu u datoteci sa izv ornim kodom. koji dozvoljava struktuirane kao i objektno-orjentirane principe. Printing funkcija je standardni dio Jave. umjesto uobièajenog nivoa objekta (instance). Glavna metoda mora biti oznaèena static. memory leak).lang. out of scope). za razliku od npr. tj. java. tzv.ponovnim kompajliranjem na toj platformi.java".io. Primjer$1. standardni o utput). Npr. curenja memorije ili en. memorija namjenjena objektu je automatski poèi æena. C++-a. tj. Konvencija za nazive Java datoteke je da imaju isto ime kao i klasa koju sadr e sa obaveznim sufiksom " .PrintStream i ima metodu println(java.class sufiksom.

.

Evo primjera programa pisanog u jeziku Java // OddEven.import javax.swing.JOptionPane; public class OddEven { // "input" is the number that the user gives to the computer private int input; // a whole number("int" means integer) /* * This is the constructor method. It gets called when an object of the OddEven t ype * is being created. */ public OddEven() { /* * Code not shown for simplicity. In most Java programs constructors can initiali ze objects * with default values, or create other objects that this object might use to per form its * functions. In some Java programs, the constructor may simply be an empty funct ion if nothing * needs to be initialized prior to the functioning of the object. In this progra m's case, an * empty constructor would suffice, even if it is empty. A constructor must exist , however if * user doesn't put one in then the compiler will create an empty one. */ } // This is the main method. It gets called when this class is run through a Java interpreter. public static void main(String[] args) { /* * This line of code creates a new instance of this class called "number" (also k nown as an * Object) and initializes it by calling the constructor. The next line of code c alls * the "showDialog()" method, which brings up a prompt to ask you for a number */ OddEven number = new OddEven(); number.showDialog(); } public void showDialog() { /* * "try" makes sure nothing goes wrong. If something does, * the interpreter skips to "catch" to see what it should do. */ try {

/* * The code below brings up a JOptionPane, which is a dialog box * The String returned by the "showInputDialog()" method is converted into * an integer, making the program treat it as a number instead of a word. * After that, this method calls a second method, calculate() that will * display either "Even" or "Odd." */ input = Integer.parseInt(JOptionPane.showInputDialog("Please Enter A Number")); calculate(); } catch (NumberFormatException e) { /* * Getting in the catch block means that there was a problem with the format of * the number. Probably some letters were typed in instead of a number. */ System.err.println("ERROR: Invalid input. Please type in a numerical value."); } } /* * When this gets called, it sends a message to the interpreter. * The interpreter usually shows it on the command prompt (For Windows users) * or the terminal (For Linux users).(Assuming it's open) */ private void calculate() { if (input % 2 == 0) { System.out.println("Even"); } else { System.out.println("Odd"); } } } 99

Java izvorni kod se kompajlira koristeæi javac program, tj. pozivajuæi Java kompajle r. Npr. da bi kompajlirali gore navedeni primjer u trenutaènom direktoriju UNIX, Linux i Mac OS X $ javac Primjer.java Windows C:\> javac Primjer.java Samostalni programi u Javi se izvr avaju tako da se Javinoj runtime (JRE) pripi e im e klase koja sadr i main() (glavnu) metodu koja se automatski poziva. Npr. gore spom enuti program se pokreæe na sljedeæi naèin (ako je Primjer.java kompajliran u trenutnom direktoriju) UNIX, Linux i Mac OS X $ java -cp . Primjer Windows C:\> java -cp . Primjer Ime klase koja sadr i glavnu metodu koja se pokreæe mo e se takoðer deklarisati u METAIN F/ MANIFEST.MF datoteci u Java arhivi, tj. JAR fajlu. Applet Java apleti (applets) su (obièno mali) programi koji su ukljuèeni unutar drugih apli kacija, obièno web stranice prikazane (i izvr avane) unutar browser-a. // Primjer.java applet import java.applet.Applet; import java.awt.Graphics; public class Primjer extends Applet { public void paint(Graphics gc) { gc.drawString("Vozdra raja, nema Hello world!", 65, 95); } } <!-- Primjer.html stranica to sadr i Primjer applet --> <html>

<head> <title>Vozdra Raja Applet Primjer</title> </head> <body> <applet code="Primjer" width="200" height="200"> </applet> </body> </html> Uputa import upuæuje kompajler da ukljuèi java.applet.Applet i java.awt.Graphics kla se u kompilaciju. Koristeæi import uputu programer mo e koristiti normalizirano (skraæeno) ime 100

klase (npr. Applet) umjesto èitavog imena (npr. java.applet.Applet) u svom izvorno m kodu. Primjer klasa pro iruje klasu Applet, tj. Applet daje osnovnu okosnicu aplikaciji za prikazivanje i kontrolu tokom rada apleta. Applet klasa je komponenta Abstract W indowing Toolkit (AWT), koji daje apletu moguænost da se prika e u korisnikovom grafièkom interfejsu (tj. GUI) i reaguje na GUI dogaðaje (poput klika na dugme). Primjer overrides (termin koji opisuje da metoda u ovoj klasi ima prednost nad r oditeljskom klasom) paint(Graphics) metodu nasliðenu od Container super-klase koja, daje, tj. sadr i kod za prikazivanje apleta. Metoda paint() uzima Graphics objekat kao parametar koji sadr i grafièki kontekst unutuar kojeg se prikazuje aplet. Tako npr. paint() poziva metodu drawString(String, int, int) unutar grafièkog kontexta da prika e "Vozdra raja, nema Hello world!" poèev i na piksel koordinatama 65 i 95 u apletovom prostoru. Aplet se stavlja u HTML dokument koristeæi <applet> HTML elemenat (tj. tag). Takoðer postoje tri atributa koji se mogu postaviti code="Primjer" - naznaèuje ime klase koju treba izvrsiti width="200" - znaèi irina, tj. irina apletovog prostora

height="200" - znaèi visina, tj. visina apletovog prostora Apleti se takoðer mogu dodati HTML-u koristeæi object ili embeded elemente (tj. tago ve), mada podr ka za ove element varira ovisno o internet pregledniku. Delphi Do sada smo vjerovatno znali da je Borlandov Delphi najbolje prodavani proizvod za brzo razvijanje aplikacija (RAD -Rapid Application Development) koji se koristi za pisanje Windows aplikacija. Sa Delphijem mo emo pisati Windows programe br e i jednostavnije nego to je to bilo moguæe ranije. Mo emo kreirati Win32 konzolne aplikacije, odnosno Win32 programe za grafièki korisnièki interfejs (GUI Graphical User Interface). Kada kreiramo Win32 GUI aplikacije koristeæi Delphi, dostupna nam je sva snaga istinsko g prevodioca (Object Pascal programski jezik) ubaæenog u RAD okru enje. Ovo znaèi da mo emo kreirati korisnièki interfejs za program (korisnièki interfejs znaèi menije, dija log bokseve, glavni prozor, itd.) kori tenjem tehnike prevuci-i-pusti (drag-and-drop) koja se koristi kod pravih okru enja za brzi razvoj aplikacija. Takoðer, mo emo koristiti Acti veX

kontrole kako bi smo kreirali specijalizovane programe poput Web browsera za par minuta. ne moramo rtvovati brzinu izvr avanja programa. Osoba koja se bavi izradom programske potpore èest o 101 . Delphi nam daje sve to bez dodatnih tro kova. po to Delphi generi e brz prevedeni kod. Delphi obavlja veliki dio posla r adeæi u pozadini sa detaljima niskog nivoa koji èine osnovu Windows programa. ali Delphi ne mo e pisati programe umjesto nas.

VCL (Visual Component Library) sadr i veliku bazu podataka koja se tièe kontrole i bazu podataka koja nude razlièite pristupe. Bazir a se na jeziku Delphi programskog jezika. od prije poznat po imenima CodeGear Delphi. Izbor alata za programiranje je vrlo irok.. pod r ku za COM ovisne interfejse sa numerisanim referencama. Inprise Delphi i Borland Delphi je razvojni softver za Microsoft Windows aplikacije koje su prije bile kreirane od strane Borland-a. Prvo treba odrediti da li æe se programs ki proizvod koristiti na jednoj ili vi e platformi odnosno hoæe li se izvr avati u: · DOS okru enju · Windows okru enju · Unix okru enju · Specifiènom okru enju ili na nekom od drugih okru enja. Delphi koristi programski jezik na bazi Pascal -jezika koji se zove Object pasca l i prikuplja Delphi kodove u izvorni x86 kod. Objekti Objekti su ustvari osnova Delphija. danas poznate kao Inprise. C++. Naime. Embarcadero Delphi. Delphi programski jezik firme Borland utemeljen na Pascal-u zami ljen za brzu izradu programske potpore (RAD . na primjer da se izvr ava u Windows XP okru enju.. Nagla ena je povezanost baze podataka. ima potporu za pristup podacima na nekom poslu itelju preko Interneta i slièno. te podr avaju veliki dio komponenti od treæe strane. Vrlo je pogodan za izradu slo ene programske potpore. a alati za izradu programske potpore s kojima se slu i naziva ju se programerski alati. Delphi je proizvod firme Borland.se naziva PROGRAMER. sve to . Enterprise i Architect. ili ipak mora zadovoljiti rad na vi e okru enja. Oni ukljuèuju VCL (Visual Component Library). C. Nema Delphija bez objekata. Zat im po izboru platforme treba izabrati onaj jezièki procesor koji æe pru iti moguænost izrade programske potpore po svim potrebnim zadanim elementima. dok ih sada razvija Embarcadero Tehnologije. Ova firma je poznat a po programskim jezicima kao sto su Pascal. Sprovoðenjem interfejsa mogu se ovlastiti razlièita polja ili osobine klasa (razreda). koje je izvedenica od Object Pascal-a. Delphi 2010 je najnovija verzija ovog softvera i na tr i tu se mo e naæi u tri razlièita izdanja: Professional. Poruke su podr ane uvoðenjem tagging-a za svaki razred koristeæi brojnu konstantu poruke koja se nas tièe. Dakle. te Delphi nudi iroku bazu podataka. omoguæava dostup vlastitim bazama podataka ili mo e pristupiti bazama podataka drugih proizvoðaèa.R apid Application Development) s mno tvom alata koji slu e kao ispomoæ u oblikovanju grafièki orijentiranog sadr aja.

dobivamo prvi i glavni objekt sa kojim æemo radit i. èim otvorimo Delphi. Tako. De lphi ne bi bio to to jeste da se objektima ne mo e manipulisati. a to je Form. Form je ustvari prozor na koji se stavljaju ostali objekti. Tako mo emo pored fizièkih promjena 102 .vidimo u Delphiju i sa èime radimo su objekti. recimo. Naravno.

ali je samo jedna vidljiv a i to ona koja je pod fokusom (na koju je kliknuto mi em). On sadr i osobine svih objekata koje trenutno programer koristi.). Properties). Child). Form 3OSOBINE Osobine se mijenjaju na dva naèina. Va no je napomenuti da broj 'dijete' objekata uop te nije ogranièen za jedan 'roditelj' ob jekt. programer mo e sam stvarati objekte po svojoj volji i svojim eljama. boje. Parent). ) stvarati i akcije za taj objekt (na klik mi a. Vrlo va na odlika objekata je nasljeðivanje.... po toj logici. a drugi 'roditelj ' (engl. Najva nije je da su za svaki objekt vezane njegove osobine (engl. To dopu ta itekako veliku slobodu programeru. To je prozor koji se nalazi sa lijeve strane i uvijek je otvoren.. kad god se jedan objekat stavi n a drugi (npr. Onaj koji se prvi nauèi je pomoæu Object Inspectora. Naime. Kao i sve u Delphiju. prvi objekt naslijediti neke osobine od drugog (npr. visine. pom oæu kojih se manipuli e objektima. Label na Form) ovaj prvi postaje 'dijete' (engl. boju. f ont.(mijenjanje irine. 103 . ). te æe. Slika 1. na pomjeranje mi a...

ali se mo e mijenjati ) O bje ctMenuItem Pokazuje na jedan dio menija O ldC re ate O rde r Odreðuje kreiranje i uni tavanje objekta Pare ntBiDiMode Nasljeðivanje BiDiMode ParentFont Nasljeðivanje fonta Pixe lsPerInch Broj taèaka po inèu . u ovom prozoru je naslov 'Programiranje: Osobine. maximize..' ) C lie ntHeight Visina 'korisnog' dijela prozora C lientWidth irina 'korisnog' dijela prozora Color Boja Constraints Ogranièenja ( npr.. visine ) Ctl3D Odreðuje da li æe objekat biti 3D renderisan C ursor Odreðuje kakav æe kursor biti iznad objekta DefaultMonitor Odreðuje koji objekat æe biti glavni DockSite Odreðuje da li je objekat vezan DragKind Odreðuje vrstu povlaèenja objekta DragMode Odreðuje naèin povlaèenja objekta Enabled Pokazuje da li je objekat ' iv' Font Odreðuje font na objektu FormStyle Stil prozora ( npr. Sizeable -moguæe je mijenjati velièinu u rad u ) BorderWidth irina okvira C aption Naslov ( npr.Action Izaberete neku proceduru koja æe biti obavljena pri otvaranju prozora Izabe rete neku proceduru koja æe biti obavljena pri otvaranju prozora ActiveC ontrol Pokazuje objekat koji je aktivan nakon otvaranja prozora Align Prijanjanje uz neku od ivica ekrana Anchors Pokazuje kako je objekat vezan za 'roditelj' objekat AutoScroll Odreðuje da li æe se automatski pojaviti scrollbarovi ako je to potrebno AutoSize Odreðuje da li æe objekt tako prilagoditi velièinu da nema slobodnog prosto BiDiMode Pravac objekata Borde rIcons Ikone poput minimize. close Borde rStyle Odreðuje stil prozora ( npr. MDIChild -prozor unutar drugog Height Visina objekta ( dimenzija po y-osi ) HelpC ontext Dio Help file koji æe biti prikazan po pritisku He lpFile Odreðuje koji file slu i kao Help file Hint Tekst koji se nalazi u utom okviru koji slu i kao obja Horz ScrollBar Odreðuje osobine horizontalnog scrollbara Icon Ikona u gornjem lijevom uglu prozora Ke yPreview Odreðuje da li æe objekat reagovati na tastaturu prozora ) na 'What's this?' njenje prije aktivne kontrole Left Udaljenost objekta od lijeve strane 'roditelj' objekta ( ovdje ekrana ) Menu Pokazuje na meni tog prozora Name Ime objekta ( automatski je Form1.

Object Inspector 104 . ScreenCentar -uvijek u centru ekrana ) PrintScale Skala za printanje Scaled Skaliranje ShowHint Odreðuje da li æe Hint biti prikazan Tag Brojna oznaka objekta Top Udaljenost objekta od gornje strane 'roditelj' objekta ( ovdje ekrana ) UseDockManager Odreðuje kori tenje dock managera pri pomjeranju prozora VertScrollBar Odreðuje osobine vertikalnog scrollbara Visible Pokazuje da li je objekat vidljiv W idth Odreðuje irinu objekta ( dimenzija po x-osi ) W indowMenu Odreðuje meni ako je FormStyle MDIForm W indowState Stanje prozora ( npr. Maximized -starta se maximizovan ) Slika 2.PopupMenu Odreðuje popup meni za objekat Position Odreðuje poziciju prozora ( npr.

end blok. i to 3 puta: for i := 1 to 3 do begin Form1. Form1 ) promijeni visinu (koja je iznosila npr. ali i estetike. Delphi je toliko razvijen d a æe automatski izbaciti listu osobina. Ovo je programerski naèin. dok program radi programer nema moguænost mijenjati osobine pomoæu Object Inspectora. pa se lako mo e izabrati Height (visina). ako se izvr ava vi e naredbi. ali je kori tenje istih preporuèljivo ra di lak eg snala enja. Naim e. REPEAT petlja Repeat. prvo upisujemo ime objekta. Primjer. one su od velikog znaèa ja u programiranju. ali ne uvijek i najbolja. prozor ( Form1 ) mijenja irinu za 1 dok ona ne preðe vrijednost od 600. Svaki kod ispisan kao primjer z a neku od 3 petlje ne stoji sam. Dakle.. FOR petlja For petlja je najpoznatija petlja. Repeat i While.Width + 10. da se irina i visina mijenjaju za 10.Drugi naèin mijenjanja osobina je mijenjanje u radu. repeat Form1. Form1. Postoje tri petlje: For..Width := Form1. treba da ukucamo ovo: Form1.Height + 10. . Mala i velika slova nisu va na. PETLJE Iako petlje nisu novost iz Delphija (postoje i u Pascalu). end. Petlja je skup naredbi koje se ponavljaju do ili za vrijeme ispun jenja nekog uslova. To u praksi znaèi da æe se ne to ponavljati dok se odreðeni uslov ne ispuni. Dakle. until Form1. veæ kao dio neke procedure. Tako recimo ako hoæemo da u toku rada programa. prozor ( npr. pa stavljamo taèku.Height := 400. koristi se begin.Width := Form1. 375) na 400.Width + 1. tj Delphi ne pravi razliku.until petlja se koristi ako broj ponavljanja nije apsolutan. U ovoj petlji progr amer defini e broj ponavljanja i radnje koje se vr e za vrijeme tog ponavljanja.Height := Form1. Primjer.Widht = 600.

Width := Form1.Widht + 1. prozor ( Form1 ) poveæava while Form1.end blok nije potreban. razlika je u tome to se ponavljanje vr i dok je uslov ispunjen. . 105 irinu dok god je ona manja od 600. Èak i ako se vr i vi e radnji begin.Lako se zakljuèuje da æe se radnja obaviti bar jednom. Primjer.. Meðuti m.Width < 600 do Form1. WHILE petlja Kao i Repeat petlja i While se koristi ako broj ponavljanja nije apsolutan.

4. elimo da se poslije klika mi em na prozor. i u prazan prostor u begin.Sa lijeve strane tu je Object Inspector koji sadr i dvije trake : Properties i E vents.U jedinici se prikazuje sljedeæi tekst: procedure TForm1. Unit ). Defini emo je na sljedeæi naèin: -ispisujemo rijeè procedure. Prvo. begin end. boja prozora promijeni u crvenu 1.Kliknimo jednom na Form. Bojenje). ali to nije obavezno.Ovdje se radnja neæe izvr iti nijednom ukoliko je irina veæ veæa od 600. -ispisujemo ime procedure (npr. Biramo Events.. Dvoklikom na prazno desno polje pored OnClick Delphi stvara procedure FormClick.Od mnogih moguænosti biramo onu OnClick. ustvari. A tu je i veza sa procedurama. Unit Primjer: . sve je potputno jasno. Na samom poèetku nema nijedne proce dure. Meðutim. Dakle. 2. 106 . kao i kod for petlje. 3. Mogu biti privatne i javne . Ukoliko se vr i v radnji koristi se. Zatamnjene rijeèi odvajaju cjeline i t o malo poja njava stvar.Color := clRed. jedna pro cedura. Naime..end bloku upisujemo: Form1. Privatne su samo za taj prozor.FormClick(Sender: TObject). Svaka radnja je. PROCEDURE Procedure su intelektualna osovina Delphija. I znad private su procedure definisane od strane samog Delphija. u oèi odmah upadaju rijeèi private i public. kad startamo D elphi dobijamo prazan Form i skoro prazan Unit. Slika 3. Prvi kontakt je svakako zbunjujuæi i jedi nica djeluje krajnje komplikovano. Za pisanje privatnih procedura potrebno je definisati proceduru ispod rijeèi priva te. a javne za sve prozore u tom projektu. upoznavanje sa jedinicom ( engl.end blok. Ispod private su procedure koje defini e sam programer. -nakon imena mogu se u zagradi definisati neke varijable koje æe procedura koristi ti. begin. Primjetimo da boje imaju prefiks cl.

Tu upi imo: function Stepenovanje(Baza: Integer. Meðutim. Prostor nije te ko naæi. begin Form1.DFM} pi emo: procedure TForm1. Eksponent: Integer): Integer. a zati m i proceduru da na klik mi em obojimo prozor 1. Exponent: Extended): Extended. 33).. neke i vrlo va ne. Tu upi imo: procedure Bojenje. pa i one koje Delphi defini e. Recimo da elimo izraèunati 733 i tu vrijednost dodijeliti promjenljivoj a. 4. ako opet pogledamo kako to izgleda jedan Unit. kojih nema u Delphiju. FUNKCIJE Naime.Zatim ispod rijeèi implementation {$R *. Primjer: elimo definisati privatnu proceduru koja æe bojiti prozor u crveno.Kliknimo na Unit i izaberimo mjesto ispod rijeèi private. recimo. da smo htjeli sa mi da defini emo takvu funkciju morali bismo raditi sljedeæe: 1.Zatim se ispod implementation pi e sama procedura.end bloka upisujemo Bojenje. a kao eksponent 33. end. Uzmimo primjer funkcije Power(Base: Extended.Zatim ispod rijeèi implementation {$R *. 2. Ova funkcija izraèunava xy. To su posebne jedinice koje nemaju svoj prozor. a defini emo je u implementaciji. pa pi emo: a := Power(7. Tako.Zatim ponovimo prva 3 koraka iz pro log primjera.DFM} . Uostalom t amo su sve procedure. Math unit sadr i mnoge matematièke funkcije. veæ samo sadr avaju odreðene funkcije.Kliknimo na Unit i izaberimo mjesto ispod rijeèi private. primjeæujemo rezervisanu (podebljanu ) rijeè uses. Dakle proceduru defini emo i determini emo. Determini emo je kao privatnu. 2.U prazan prostor begin.Bojenje. 3. Primjeæujemo da je kao baza uneseno 7.Color := clRed. Nakon nje slijedi spisak svih jedinica koje koristi na pr ojekt.

end.pi emo: function TForm1. 107 . var i. t: Integer. Eksponent: Integer): Integer.Stepenovanje(Baza: Integer. begin t := 1. Stepenovanje := t. if i <> 0 then for i := 1 to Eksponent do t := t * Baza.

Db. Chart. Database Desktop rad i sa raznim vrstama baza. te se mo e reæi da su funkcije pro irene procedure.DFM}. defini emo funkcije kao public. bez prozora. U njemu se mogu kreirati nove. ali i modifikovati stare baze. slu i za manipulisanje bazama podataka.Dakle. izmeðu rezervisane rijeèi implementation i {$R *. JEDNA VRLO VA NA PROCEDURA: FormIme. Va no je reæi i da se tabele mogu saèuvati u raznim ekstenzijama (program je kompatibilan sa ostalim database programima). U gornjem primjeru to je Intege r. DODACI ZA DELPHI Delphi sa sobom donosi nekoliko vrlo korisnih dodataka. 7. a najva nija vrsta su tabele. -Database Desktop -kao to i samo ime ka e. Ustvari. Ovako se pi e funkcija za jednokratnu upotrebu. kao i procedur e i funkcije. Oèigledno je da su funkcije veoma sliène procedurama. a procedure samo obavljaju odreðene radnje. ali onih koje ne spadaju u takve ima puno vi e. pi emo upravo MyUni t). Isto va i i za jedinice koje nisu veæ navedene (Delphi smatra samo odreðene jedinice za def ault i kao takve ih ispisuje automatski.. a unit èuvamo kao poseban. za razliku od gore pominjanih jedinica. (FormIme je ime prozora koji elimo otvoriti) Ova procedura je specifièna po tome to se u jedinicu prozora iz kojeg elimo otvoriti prozor treba unijeti sljedeæi kod: uses UnitIme. 108 . u gore pominjanu listu uses dodajemo i ime tog unita (ako je saèuvan pod imenom MyUnit.. (UnitIme je ime jedinice prozora koji elimo otvoriti) Meðutim. jedina razlika je to f unkcije daju neku povratnu vrijednost. funkcije se defini u tako to se nakon imena u zagradu upisuju promjenljive k oje defini e korisnik. Takve su recimo Math.Show. U projektima u kojima elimo da upotrebimo taj unit. ovaj kod se unosi. Zanimljiv je podatak da je veæina ovih programa kreirano u potpunosti u Delphiju to pokazuje njegovu uèinkovitost i moæ. najèe æi tip brojevnih promjenljivih. a nakon zagrade tip koji funkcija vraæa. One dolaze sa Delphijem. Ali ako elimo da napi emo jednu ili v i e funkcija koje mo emo koristiti u svim projektima.).

ali ima i moguænosti kreiranja ikona i kursora. program za dizajn i modifikovanje slika ti pa bitmap. Image Editor 109 . dovoljno je izabrati u opciji New (File meni) jednu od te tri opcije. Da bismo napravi li sliku. poput Paintbrush-a. ali to mu i nije prvobitna namjena. Raèu nar æe vas pitati za velièinu i dalje je sve klasika. niti ima moguænost primjenjivanja nekih specijaln ih efekata poput nekih skupih editora slika. Slika 5. Database Desktop -Image Editor je. ikonu ili kursor. Program nema veliki broj opcija.Slika 4.

èini komplikovan. projekt. Samo izaberemo New project i 'Wizard' æe nas voditi kroz proces.-Help Workshop slu i za kreiranje Windows Help datoteke za na a poèetku. Vrlo je jednostavan za kori tenje. Slika 7. InstallShield 110 . n Slika 6. Help Workshop -InstallShield je program koji omoguæava kreiranje setup aplikacije za va e projekte . ali to uop te nije tako. Proces se.

Objekti se u stvari odnose n a objekte (kao u Java programu) koji Delphi implicitno razvrstava tako da èesto nema potrebe da se ruèno o dredi memorija za pokazatelje na objekte ili sliène tehnike koje se èesto koriste u drugim programskim jezicima. omoguæavajuæi asemblerske dijelove i sistem znakova direktnih CPU kodova. Za one koji vi e vole nizove i vrste nizova. Menad er memorije koju je uveo Borland Developer Studio 2006 je pobolj an u mjeri da sada i ma funkcije za praæenje memorijskih pukotina. Biblioteke od treæe strane trebaju nadogradnju od strane prodavaèa ili ako veæ imaju izvorni kod. null-poèetak. onda jednostv ano trebaju da ponovo prikupe podatke iz nove verzije. IDE ukljuèuje GUI za lokalizaciju i prevoðenje kreiranih programa koji se mogu drugaèije rasporediti tako da nema dodatnih tro kova za prevoðenje (neki programeri ele da koriste proizvode od treæe stra ne radi toga jer time dobivaju veæu funkcionalnost). Komponenete treæih strana (obièno imaju sve izvorne kodove) se mogu kupiti na tr i tu ka o i alati za pobolj anje IDE ili za druge relevantne razvojne zadatke Delphi-ja. Iako je Pascal napravljen iskljuèivo za p otrebe edukacije. Koristeæi razredne pomoænike (class helpers) mo e se uvrstiti nova funkcija u jezgro R . Okosnica ili okvir VCL-a odr ava visoki nivo kompatibilnosti izvornih kodova u razlièitim verzijama to znaèi da programer mo e da na dogradi veæ postojeæi izvorni kod u noviju Delphi verziju. radije nego koristeæi funkcije. u veæini sluèajeva. nije potrebno imati memoriju niti menad era memorije. Svi Delphi proizvodi imaju veliku bibliot eku koja se zove VCL (Visual Component Library) i ukljuèuje veæinu njihovih izvornih kodova. Postoje reference namijenjene za numerisane vrste (tipove) u nizu (kao i niz za poèetak i zavr etak. VCL je sofisticirani sastavni model koji se mo e iznova koristiti i iri ti od strane razvojnog programera. a takoðer podr ava i mali niv o programiranja. Iako Delphi koristi programski jezik visoke kvalitete. Metarazred je prvi razred instrukcija ili objekata. VCL je rano usvojio Dependency inject ion ili Inversion of Control.PREDNOSTI Delphi je visoko razvijeni program namijenjen mnogim korisnicima jer se lako upo trebljava i bazira se na raniji Object Pascal jezik. terminate-kraj) Nizovi mogu biti uvezani u lanace koristeæi + znak. Programski jezik je prilagoðen Rapid Application Development (RAD) i ima integrisa n IDE (Integrated Development Environment) . Delphi nije.

MANE Nema izvorne 64-bit podr ke Delphi kreira samo izvorne 32-bit aplikacije. finalne izvr ne radnje. Kreiranje DLL i ActiveX DLLs ili COM Automation servers je takoðe moguæe. koje su potrebne u kori tenju memorije vi e od 4 GB.g. Delphi IDE. kroz promjene samog modela. Delphi ima veliku grupu podr ke na Usenet i web (e. Podr ka 111 . Nije moguæe napisati 64-bit Windows aplikacije. Delphi 2005 podr ava unaprijeðene oblike kao to je Method Extraction itd.TL i VCL razrede bez mijenjanja originalnog izvornog koda RTL-a i VCL-a. te elimini e DLL verzijske probleme. Brz program -prevodilac mo e uraditi prevod i do jedne. te razvojni programeri mogu da kreiraju Win dows koristeæi Delphi program. ne mogu se napisati plug -ins (ukopèati plug in) u 64-bit aplikacije i usluge za treæa lica kao npr. I imaju moguænosti kreiranja UML metoda od izvornog koda ili modificiranje izvornog koda. Takoðer. Windows Explo rer. ) koji poma u u rje avanju problema za programere / individualce. to pojednostavljuje distribuciju.

Mac OS i Windo ws.NET Framework platformu. Java itd). Sam programer mo e kreirati nove komponente i tako prilagoditi Delphi samom sebi. Takoðer je i kompletan alat. i najte i izazovi su ustvari samo skl apanje jednostavnih radnji u jednu. je prikazana na zadnjoj mapi. NET (èitaj: dot net) je naziv za najnoviju Microsoftovu viziju buduænosti raèunalstva u kojoj se aplikacije izvr avaju distribuirano putem Interneta. Ovo omoguæava korisnicima da prikupljaju bogatstvo kodova bez brige oko bilo kojih prekinutih interfejsa ili funkcionalnosti. sa kod imenom Pro ject X. Lazarus (besplatni Delphi Clone) veæ sadr i najèe æe kori tene VCL komponente Delphi-jeve unakrsne platforme izmeðu Linux. Jez ik je op te primene i namenjen je izradi aplikacija za . Naime. Unakrsna platforma. Na prvi pogled. neki razvojni programeri misle da ova pa nja usmjerena na kompatibilnost sa prija njim modelima usporava razvoj i revoluciju De lphi jezika. te dovodi do starijeg dizajna u standardnim razrednim bibliotekama (VCL/RTL). ali datum objavljivanja jo uvijek nije odreðen. C# C#[1] (engl. Platforma nije unakrsna Delphi nije unakrsna platforma. to se najbolje vidi u sposobnosti da programski kod za odreðenu oper aciju . to pru a podr ku 64-bit. Naime.0. game driverima i slièno. Kao prvo. meðutim. i to u to veæoj mjeri. Da bi to ostvarili. Nas tao je 2002. godine kao sastavni deo MS .NET Framework 1. Delphi se èini jako komplikovan. distribuirano raèunalstvo je konceptualno poput objektno orijentiranog programiranja. bilo j e potrebno ispuniti neke uvjete. C sharp.aplikacijama u 64-bit mo e se naæi na Delphi mapama veæ nekoliko godina. C# je objektno orijentisan programski jezik kao i veæina modernih vi ih programskih jezika (C++. Meðutim. Svaka akcija u Windows-u se mo e napraviti u Delphiju. Posljednji izdati Delphi program sadr i Delphi Pri sm koji se mo e koristiti za razvijanje NET aplikacija. ta ko da se jedan cijeli operativni sistem mo e napraviti u Delphiju. ali se jo uvij ek ne praktikuje redovno. Kompatibilnost sa prija njim modelima Svako novo izdanje Delphi-ja eli oèuvati kompatibilnost sa prija njim modelima. moguæe je manipulisati bazama podataka. SQL-om. Sada nja mapa prikazuje Commodore project. ubrzo se shvata da je on izuzetno jasan i matematièki definisan. Delphi je vrlo moæan alat. HTML-om. Zapravo. sam Delphi j e napravljen u Delphiju. Takoðer. Njegova najznaèajnija osobina je kompatibilnost. izgovor:/se shärp/) je jedan od mlaðih programskih jezika.

) podr ani istim programskim kodom. stolna raèunala itd. umjesto da ga se prepisuje gdje god je to potrebno. razlièiti su ureðaji (telefoni. I kao treæe. Drugo. Na taj naèin apli kacije 112 . dlanovnici.smje tava u jedan blok. smje tanjem specijaliziranog koda na jedno mjesto i otvaranjem javno dostup nog suèelja. Upravo prelazak na distribuirani model donio je toliko potrebnu efikasnost u razvoju ap likacija. kontrolom pristupa u realnom vremenu distribuiranim resursima. tvrtke poput Microsofta dobivaju moguænost bolje kontrole izvr avanja aplikacija. Odavde vuèe korijene Microsoftova «pokreæi svagdje» filozofija.

NET aplikacija. C# podr ava pobrojenja (enumerati ons).NET Framework. U svakom od ovih sluèajeva prijelazni jez ik se mo e izvoditi. CLR ima dvije zanimljive moguænosti. Na primjer. Na primjer. a Java u Java bytecode.NET je izgraðen na standardiziranim tehnologijama poput XM L-a i SOAP-a. Jedan od jezika koji se savr eno uklapa u . . Taj novi jezik.NET Framework standardne biblioteke klasa i specijaliziranih klasa poput onih koje podr avaju ASP. Drugo.NET se oslanja na .NET Framework je napravljen tako da aplikacije na drugim platformama mogu pristupiti tim servisima. . Common Language Runtime (CLR) upravlja izvr avanjem koda kompiliranog za . objavljen je zajedno s . tipski sigurni vrijednosni tipovi podataka koji mogu sadr avati samo konstante. Zanimljivo je da je Microsoft prelaskom na . Za razliku od Jave.NET Framework jest C#.prelaze iz razmi ljanja «posjedujem objekt» u razmi ljanje «podr avam servis». bilo just-in-time kompilacijom na odgovarajuæem virtualnom stroju. bilo interpreterom. te je zato logièno da bud e primarni programski jezik za pisanje . (Java ne podr ava pob rojenja ali ih mo e simulirati). a omoguæuje i stvaranje vlastitih tipova podataka. Valja naglasiti da je u C# dodatna pozornost posveæena kompilac iji prijelaznog jezika u binarni kod. .NET (sljedeæa generacija ASP serverske tehnologije) te Windows Forms (za razvoj klasiènih desktop aplikacija). te strukture koje su korisnièki definirani tipovi podataka. Poput Jave .NET Frameworkom. Svaki od njih sadr i napredna svojst va poput Garbage Collection (skupljanje smeæa) èime se smanjuje potreba za intervencijama izravno u programskom kodu. za pisanje aplikaci ja koje koriste standardne klase mo e se koristiti bilo koji programski jezik kojeg p odr ava CLR.NET platformu.NET Framework se sastoji od Common Language Runtime. (poglavlje 11). C# podr ava primitivnije tipove podataka od onih u Javi (poglavlje 4). . . C# ima moguænost preoptereæivanja razlièitih operatora. Kako buduænost vidi u pru anju softverskih servisa putem distribuiranih aplikacija. Navedeni jezici su sintaktièki gotovo isti. Prva je ta da mu je specifikacija otvorena to omoguæuje portiranje na newindows operativne sustave. U aspektu razvoja aplikacija. C# i Java izvorne datoteke kompiliraju se u prijelazni jezik: C# u Microsoft Int ermediate Language (MSIL). nasljednik C++.C# i Java su jezici najnovi je generacije èiji su izravni prethodnici C++ i C. .NET odustao od strogog patentiranja svojeg vlas ni tva (sve tehnologije koje zahvati nastoji prilagoditi Windows operativnom sustavu).

113 . To su tipski sigurni pokazivaèi na metode. a osnovna ima je namjena implementacija upravljanja dogaðajima . J2EE. U Javi su vi edimenzionalna polja implementirana preko jednodimenzionalnih (polja mogu biti èlanovi drugih polja). Za detaljniju usporedbu C# i Java-e kliknite. C# koristi delegate.NET vs. Komparativan pregled C#-a Microsoft . ali i pravokutna polja . Polimorfizam je podr an pomoæu nasljeðenih metoda te preoptereæenja ili skrivanja metoda bazne klase.C# ne koristi nasljeðivanje vi e klasa u korist nasljeðivanja jedne klase to je pro ireno nasljeðivanjem vi e suèelja. C# pak podr ava i takva (zupèasta).

Length. FileStream fileStream = new FileStream(filePath. Zbog toga je potreba za pokazivaèima u C#-u puno manja nego u C++. FileMode. . public static byte[] ReadFile(string filePath) { byte[] buffer. najbli i roðak C#-a j e C++. to znaèi da je sav kod «umetnut» u datoteku. Preporuèa ih se ondje gdje su karakteristike performansi od krucijalne va nosti. // create buffer . Kao to je veæ spomenuto. Ostale razlike kod upotreba klasa su: dodana je podr ka svojstvima klasa to je preuzeto iz Visual Basi ca. Takoðer postoje i razlike u naèinu kako se odreðeni tipovi podataka mogu koristiti. a metode se pozivaju pomoæu operatora . Pokazivaèi se mogu dodu e koristiti i u C#-u. Kao to smo veæ spomenuli. FileAccess.[b]C# vs.Open. (toèka) umjesto operatora :: (dvije dvotoèke). C# naredbe vrlo su sliène C++ naredbama.Read). ali samo u pisanju nesigurnog koda. try { int length = (int)fileStream. Polja u C#-u su limitirana t e stoga nije moguæe dodavati elemente nakon to je polje popunjeno. Primjer programa u C# using System. C# ne koristi nasljeðivanje vi e klasa. Razumijevanje tipova podataka u C# je znatno kompleksnije od razumijevanja C++ t ipova podataka.IO.NET izvr ni sustav u kojem se izvodi C# kod upravlja memorijom te preuzima brigu o zadaæama poput skupljanja smeæa (Garbage Collection). // get file length buffer = new byte[length]. Spomenut æu samo jednu razliku: naredba switch je promijenjena tako da je zabranjeno nastavljanje sluèaja. Svi tipovi podataka u C#-u izvedeni su iz 'object' tipa. C++[/b] Iako posjeduje neke elemente nasljeðene od Visual Basica i Jave. Najva nija razlika izmeðu ta dva jezika je to to C# ne sadr i poziv datoteke zaglavlja.

sum. length .int count.Close(). } return buffer. } 114 .sum)) > 0) sum += count. // sum is a buffer offset for next reading } finally { fileStream.Read(buffer. // total number of bytes read // read until Read method returns 0 (end of the stream has been reached) while ((count = fileStream. // actual number of bytes read int sum = 0.

VMS. S va autorska prava za ovaj programski jezik dr i neprofitna organizacija Python Softwa re Foundation (PSF). Python) je programski jezik visokog nivoa op te namjene. RISC OS (ranije Acorn).python. Slijedi spisak dr ugih platfomi koje podr avaju Pajton: AIX operating system. VxWorks. inspiraciju za ime je dobio vezano za Leteæeg cirkusa Montija Pajtona (engl. NetBSD. iako Gvido ostaje njegov glavni autor. Interpretatori i standardne bi blioteke modula se stalno razvijaju i prenose na veliki broj razlièitih platformi. svako mo e da postane donator Python Software Foundation u novcu. On je u vreme nastanka jezika bio zaposlen u Stiching Mathematish Centrum (CWI) u Holandiji.Python Pajton (engl. Xbox. Palm OS. OpenBSD. PlayStation 2. BeOS. Glavne p odr ane platforme su Linuks. Svako mo e da koristi programski jezik Pajton besplatno bilo u komercijalne ili u druge svrhe. Symbian OS. te da se programi izvr avaju ( . koji Pajton kod prevode u ma inski jezik. AROS. Amiga. SPAR Solaris. Mac OS X. Sharp Zaurus. BSD. Uz interpretator se obièno isporuèuje i veoma razvijena standardna biblioteka modula. u prvom redu imperativni. OS/390. po rijeèima autora. Njihov oficijalni sajt je www. Windows CE/Pocket PC. Interpretatori i prevodioci Programski jezik Pajton se uglavnom interpretira. U izgradnju jezika i o noga to ga okru uje ukljuèuje se veliki broj ljudi.. OS/2. Znaèajan uticaj na koncept ovog jezika. Programski jezik Pajton postepeno stièe veliku popularnost. imao je autorov rad na kreiranju programskog jezika ABC.1. Mac OS 9. Majkrosoft Vindouz i Java. Monty Python's Flying Circus) . Njegov autor je Gvido van Rosum. Psion. Jezik se brzo i lako uèi. 2. Oni omoguæavaj u da se stvore izvr ni moduli nezavisni od interpretatora. Sintaksa jezika Pajton omoguæava pisanje veoma preglednih programa. AS/400.org.Programi pisani u Pajton jeziku se najèe æe interpretiraju. z/OS . objektno-orijentisan i funkcionalni stil programiranja. Postoje i pravi prevodioci. BBC-evu seriju komedija aktuelnu sedamdesetih godina. Programski jezik Pajton nastao je poèetkom devedesetih godina pro log vijeka. QNX. Plan 9. Razvoj programa 2. po reèima autora. ili svojim doprinosom u izgradnji jezika ili u srodnim oblastima. Autor ovog jezika je Gvido van Rosum sa Univerziteta Stièing u Holandiji. Ime programskog jezika asocira na zmiju piton ali. Podr ava.. Takoðe. BSD. FreeBSD.

malo) br e. Ono to se gubi ovakvim prevoðenjem je prenosivost ovako prevedenog programa na razlièite hardverske i softverske platforme. 115 .

3. Tip podatka vezan je za vrijednost koju sadr i promenljiva. Standardne biblioteke modula Za programski jezik Pajton razvijen je veliki broj standardnih modula koji omoguæa vaju efikasan rad u mnogim oblastima. S vaki podatak je predstavljen objektom ili relacijom meðu objektima. Svakoj promj enljivoj tokom izvr avanja programa mo e da bude dodjeljena vrijednost bilo kog tipa kao i da ta vrednost bude zamjenjena drugom razlièitog tipa. Organizacija podataka 3.1. Standardna biblioteka modula omoguæava pisanje programa vezanih za Internet podr avajuæi veliki broj standardnih formata i protokola. to je moguæe izvesti u Pajtonu ili u nekom drugom podr anom jeziku. objects). Predstavljanje podataka Podaci u programskom jeziku Pajton su predstavljeni objektima (engl. Promjenljive i tip podataka Tip podatka u programskom jeziku Pajton nije vezan za promjenljivu.2.2. Obièno je to C jezik. Veæina ovih modula prenosiva je na razlièite platfo rme to omoguæava da èesto kompletni programi bez prilagoðavanja rade na razlièitim ma inama i pod razlièitim operativnim sistemima. Sam kod programa je zika Pajton je takoðe predstavljen objektima. vezu ka relacionim bazama podataka. kao i standardni moduli za mnoge druge poslove. kada je potrebno sistemsko programiranje ili kada je brzina izvr avanja kritièna. Razvoj novih modula Ukoliko je potrebno razviti novi modul. Sve vrijedosti promjen ljivih su objekti.2. za aritmetiku sa proizvoljnim eljenim brojem decimala. Ali to mo e da bude na primer i Java ili Pyrex jezik k oji predstavlja me avinu programskog jezika Pajton i C jezika. Postoje moduli za kreiranj e grafièkog korisnièkog interfejsa. 2. 3. za rad na leksièkoj analizi primenom regularn ih izraza. 3. 116 .

.. Postoje tri tipa cijelih brojeva: 1. Obièni cijeli brojevi (engl. niske (engl. osim kod konverz ije u niske kada se dobijaju vrijednosti "False" i "True". ili irem. Brojevi (engl. Nepromenljivi nizovi (engl. 2. Long integers) Cijeli brojevi u neogranièenom rasponu koji je jedino limitiran kolièinom raspolo ive virtuelne memorije.4. Objekti Svaki objekat sadr i tip objekta i njegovu vrijednost. Booleans) Bulov tip sadr i samo dvije vrijednosti koje predstavljaju istinosne vrijednosti t aèno i netaèno. ne mijenjaju vrijednost.1. 3. brojevi sa pokretnim zarezom i kompleksni brojevi: . Postoje: -nepromjenljivi (engl. . . U veæini situacija one se pona aju kao cijeli brojevi 0 i 1. . Objekti ugraðeni u jezik Pajton posjeduje jedan broj tipova objekata koji su ugraðeni u jezik. immutable) objekti na primjer: brojevi. Immutable sequences) Objekat koji po tipu spada u nepromjenljive nizove ne mo e da bude izmjenjen nakon . Jednom kreirani objekat ne mo e da mijenja tip. Postoje tri vrste brojeva. Brojevi sa pokretnim zarezom (engl. Nizovi (engl. Jednom kreirani. mutable) objekti na primjer: rijeènici i liste 4. Numbers) Ovi objekti bivaju kreirani iz numerièkih leksema u izvornom programu. Sljedeæi spisak sadr i neke od tipova objekata koji su ugraðeni u programski jezik Paj ton: . Plain integers) Cijeli brojevi u rasponu od -2147483648 do 2147483647. strings) i n-torke -promjenljivi (engl. Complex numbers) Na ma inskom nivou predstavljeni su parom brojeva u obliku sa pokretnim zarezom u dvostrukoj taènosti. Promjenljivo st objekata odreðena je njihovim tipom. Jezik mo e da se pro iri dodatnim tipovima preko modula. Mogu da se podjele na nepromjenljive i promjenljive nizove: . Bulov tip (engl. To su cijeli brojevi. Floating point numbers) Na ma inskom nivou predstavljeni su brojevima sa pokretnim zarezom u dvostrukoj taènosti. Sequences) Oni predstavljaju konaène ureðene skupove èiji su indeksi nenegativni cijeli brojevi. Kompleksni brojevi (engl. dok vrijednost nekih objekata mo e da bude promijenjena.. Integers) Predstavljaju elemente matematièkog skupa celih brojeva.. Cijeli brojevi (engl. Dugi cijeli brojevi (engl. ili kao rez ulat aritmetièkih operatora ili funkcija.

117 .

primerak klase i bilo koji izvr ivi tip (obièno funkc iju koju defini u korisnici). Sljedeæi tipovi spadaju u nepromjenljive nizove: -Niske (engl. Tuples) Elementi n-torki su proizvoljni Pajton objekti.. Mutable sequences) Po kreiranju omoguæavaju izmjenjivanje: -Liste (engl. Mappings) Predstavljaju konaèan skup objekata indeksiran proizvoljnim skupom indeksa: . Preslikavanja (engl. Izvr ivi tipovi (engl. Callable types) Ovo su objekti na koje mo e da se primjeni poziv (izvr enje) funkcije: . . Veæina primjera napisana je kao da se izvr avaju u interaktivnom modu interpretatora. Oznake ">>>" i ". Strings) Elementi niske su znakovi. User-defined functions) Za svaku definisanu funkciju. Pojedinaèni z nak je predstavljen nizom od jednog znaka. dok je odgovor interpretatora 118 . kreira se jedan ova kav objekat. da bi sadr ali podatke uèitane iz datoteke.njegovog kreiranja (ali nepromjenljivost ne va i za eventualne izmjenljive objekte èije reference sadr i nepromjenjivi niz).. Opis jezika Osnovna svojstva jezika opisana su kroz niz jednostavnih primjera. Metode koje defini u korisnici (engl. u trenutku izvr avanja programa. User-defined methods) Ovakvi objekti povezuju klasu. Lists) Sadr e kao elemente proizvoljne Pajton objekte. Rijeènici (engl. . . On se poziva (izvr ava) uz listu parametara koja treba da sadr i isti broj parametara kao i lista formalnih parametara definicije funkcije. Niske mogu da se koriste i kao nizovi bajtov a i da se iskoriste..." na poèetku linije oznaèavaju ono to je korisnik upisao.. Dictionaries) To su konaèni skupovi objekata indeksirani vrijednostima gotovo bilo kog tipa. Ne postoji poseban znakovni tip podataka. Jed ini tipovi objekata koji nisu prihvatljivi kao indeksi su objekti tipa listi ili rijeènika il i drugi promjenljivi tipovi. -Unikod (engl. Funkcije koje defini u korisnici (engl. Sintaksno gledano n-torke se for miraju iz liste izraza meðusobno razdvojenih zarezom. 5.. Sintaksno gledano dobijaju se upisivanjem liste izraza razdvojenih zarezom u uglaste zagrade. Unicode) Elementi ovakvog niza su unikod kodovi. -n-torke (engl. na primjer. . Promenljivi nizovi (engl.

.

vr i se ko nverzija svih operanada u oblik sa pokretnim zarezom. Ukoliko oprerator ima kao operande cijele i brojeve u pokretnom zarezu. Sintaksno.25/2. Kompleksni brojevi èiji je realni deo razlièit od nule pi u se u oblim za gradama. oni se razl ikuju od cijelih brojeva po prisustvu decimalne taèke ili eventualno eksponencijalne not acije. Cijeli brojevi Primjeri rada sa cijelim brojevima: >>> 2 + 3 5 >>> 4 + 8 # Komentar pocinje iza znaka "#" i zavrsava se na kraju linije 12 >>> 3*2 # Mnozenje 6 >>> 4 + 3*5 # Koristi se u matematici uobicajeni redosled racunanja 19 >>> 5*(4 + 3*(2 + 1)) # Grupisanje operanada se vrsi jedino malim (oblim) zagradama 65 >>> 6/2 # Celobrojno deljenje 3 >>> 7/2 # Ostatak pri celobrojnom deljenju se zanemaruje (u rezultatu) 3 U radu sa cijelim brojevima uvek se dobija taèan rezultat.5 . Kompleksni brojevi Podr ani su i kompleksni brojevi. >>> 7.5 >>> 1e1/4 # Deset (jedan puta deset na prvi stepen) podeljeno na cetiri dela 2. . >>> (5+4j) .5 6.5 >>> 5*3. Ovo omoguæuje prelazak (p o potrebi) na brojeve proizvoljne du ine: >>> 2**1024 # 2 na stepen 1024 .(3+1j) (2+3j) >>> (3+5j) + (0+2j) (3+7j) >>> (3+5j) + 2j (3+7j) >>> 1j * 1j . Brojevi u obliku sa pokretnim zarezom Kompletno je podr an rad sa brojevima sa pokretnim zarezom.0/2 3.napisan bez ovih uvodnih znakova. Imaginarni dio kompleksnog broja se oznaèava sufik som "j" ili "J".

(-1+0j) >>> (2+3j) * 3 (6+9j) 119 .

. Niske sadr e nizove znakov a i nisu izmenljive. Niske Rad sa niskama (engl. Dodjeljivanje vrijednosti Znak "=" koristi se kod dodeljivanja vrednosti promenljivim: >>> cijena = 3.' 'Ja mislim.>>> 2 + 3j*3 (2+9j) >>> (4+9.5j) / (1..50 >>> brojKomada = 4 >>> cijena * brojKomada 14. Poèetni indeks je nula.0 Podr ano je vi estruko dodjeljivanje vrijednosti: >>> >>> 17 >>> 17 >>> 17 x = y = z = 17 x y z . mislim.. Strings) je sna no podr an u Pajtonu. >>> rijec = "prestolonaslednica" >>> rijec[0] .' Djelovima niske mo e da se pristupi putem indeksa.5+2j) (4+1j) .. Niske mogu da se pove u upotrebom operatora "+" i da se ponove vi e puta pomoæu operatora "*": >>> 'Ja' + 'Mislim' 'JaMislim' >>> 'Ja' + 3*' mislim. Evo nekoliko naèina da se kreira niska: >>> 'Ovo je niska' 'Ovo je niska' >>> "Mogu da se koriste i dvostruki navodnici" 'Mogu da se koriste i dvostruki navodnici' >>> niska = 'Mujo je rekao "Ja volim da programiram"..' >>> print niska Mujo je rekao "Ja volim da programiram".' + '. mislim.

pozicije 6 >>> rijec[:6] # Prvih sest znakova 120 . ali ne ukljucujuci.'p' >>> len(rijec) 18 # Vraca duzinu objekta >>> rijec[17] 'a' # Vraca poslednji znak ove niske u obliku niske duzine jedan >>> rijec[3:6] 'sto' # Deo niske od pozicije 3 do.

119] >>> lista[2] = 0 >>> lista ['Prvi'.append('Kraj') >>> lista ['Prvi'. 'Drugi'. 119] >>> lista[:1] ['Prvi'] >>> lista[2:] [23. 'Drugi'. 23. 2*2] ['Prvi'. 'Treci'. 4] Za razliku od niski. Predstavljaju se kao spisak objekata razdvojenih zarezom u uglastim zagradama. 119] Djelovima lista mo e da se pristupa. 'Drugi'] Liste kao i niske mogu da se povezuju i multiplikuju : >>> 3*lista[:2] + ['Treci'. 'Drugi'. 'Cetvrti'. 'Treci'. 23. 0. 119. slièno kao i niskama. 'Drugi'. 'Drugi'. 'Drugi'. 'Kraj'] >>> lista[2:2] = ['Treci'. 'Cetvrti'] >>> lista ['Prvi'.'presto' >>> rijec[8:] # Sve osim prvih osam znakova 'naslednica' Podr ane su i niske koje sadr e unikodni skup znakova. >>> lista = ['Prvi'. 23. putem indeksa: >>> lista[0] 'Prvi' >>> lista[3] 119 >>> lista[1:3] ['Drugi'. liste su promenljive: >>> lista ['Prvi'. 'Drugi'. 'Kraj'] Liste mogu da sadr e kao svoje elemente druge liste: . 'Kraj'] >>> lista[2:4] = [] >>> lista ['Prvi'. 'Drugi'. 23] >>> lista[1:] ['Drugi'. 119] >>> lista[:2] ['Prvi'. 0. 'Drugi'. 119] >>> lista. 23. 119] >>> lista ['Prvi'. . Liste Liste omoguæavaju da se vi e objekata istog ili razlièitog tipa pove u u jednu cjelinu. 'Prvi'. 'Drugi'. 'Prvi'.

b. 6] >>> a 121 .>>> b = [3. 4] >>> a = [1. 2.

append(5) a 2. 5]) 6. 'sarka']) >>> 'poskok' in otrovnice True >>> 'belouska' in otrovnice False Skupovne operacije: >>> A = >>> B = >>> A set([1. 6] a[2] 4] a[2][1] a[2]. >>> [3.[1. 5] . 'poskok'] >>> otrovnice = set(terarij) # Formiram skup eliminisuci duplikate >>> otrovnice set(['poskok'. [3. 122 . set([1. 4. 'sarka'. 6] b 4. 'poskok'. Skupovi Skupovi su okupljajuæi tip podataka u kome nije definisan redoslijed elemenata i n e postoje duplikati. 4]) set([3. >>> A set([1. razlika i simetrièna razlika skupova. Kontrolne strukture 6. [3. Obièno se koriste za ispitivanje pripadnosti nekog elementa skupu kao i za eliminisanje duplikata. 4. 5]. 3. 2. >>> A & set([3. 5]) B # Presjek 4]) B # A razlika B 2]) B # Simetricna razlika 2. >>> [3. Implementirane su i matematièke operacije kao to su unija. >>> terarij = ['sarka'. 4]. 5]) B # Unija 2. presjek. 2. >>> >>> >>> [1. 4. Ako je izraèunata vrijednost True izrv iæe se blok iskaza iza dvotaèke.1. >>> A ^ set([1. 3. IF iskaz U najjednostavnijem obliku if iskaza izraèunava se izraz koji mora da rezultira je dnom Bulovom vrijedno æu (True ili False). 'sarka'.

.. . . else.... b = 'Popokatepetl' if b != 'Popokatepetl': print 'Hocu u Meksiko!' print 'Drugi red bloka naredbi' print 'treci red koji se takoðe izvrsava ako je uslov tacan' Postoji forma if iskaza koja sadr i else deo.. na primjer listu ili nisku. Ovo oznaèavanje bloka iskaza uvlaèenjem koristi se kod svih kontrolnih struktura.. elif . Umjesto nje se koristi iskaz if ..... >>> >>> . . elif blok mo e da se ponovi proizvoljan broj puta. .. . Iza ove reèi nalazi se uslov koji se testira i odgov arajuæi blok naredbi koji se izvr ava ako je uslov zadovoljen. a = 12 if a < 0: print 'a je negativno' else: print 'a je nenegativno' a je nenegativno Ako elimo da izvr imo detaljnije ispitivanje neke vrednosti mo emo da upotrebimo iska z koji sadr i rezervisanu reè elif.. elif .. Ovaj iskaz se koristi za prolaz kroz jedan niz vrijednosti.. >>> . . .... .2.. FOR iskaz For iskaz Pajton jezika se djelimièno razlikuje od istoimene kontrolne strukture u paskalskim jezicima... . .. 6. if a < 0: print 'a ima negativnu vrednost' elif a == 0: print 'a sadrzi nulu' elif a == 12: print 'a sadrzi broj dvanaest' else: print 'nesto cetvrto' a sadrzi broj dvanaest Programski jezik Pajton ne sadr i kontrolnu strukturu switch-case......Blok iskaza koji pripada if iskazu oznaèava se pisanjem ispod i uvlaèenjem u odnosu na rezervisanu reè if udesno. >>> >>> .... Blok naredbi koji odgovara else reze rvisanoj reèi izvr ava se jedino ako je uslov rezultirao False vredno æu. Pridru eni blok naredbi izvr ava se jedanput za svaki element niza... .

print 'drug'. 'Mika'. 'Cokula'] >>> for clan in drugari: . clan 123 ..>>> drugari = ['Pera'..

5. 17. 10. >>> [5. >>> [0. 2.. def fakt(n): rezultat = 1 for i in range(1..drug Pera drug Mika drug Cokula Za generisanje nizova brojeva mo e da poslu i Pajtonova range() funkcija. 11. Ukoliko takav ne postoji radi se o proceduri. 8. 8. .. fakt = 1 i = 5 while i != 0: fakt = fakt*i i -= 1 >>> fakt 120 7.3. Funkcije Definicija funkcije poèinje rezervisanom reèi def iza koje u zagradama slijedi lista formalnih parametara. osim ako se direktno ne navede drugaèije (upotrebom iskaza global). 7.. 2) # Svi brojevi od 1 do 19 korak 2 3. 15) 6. 6.. 12.. 20. Ona vraæa li stu brojeva koja predstavlja aritmetièku progresiju izmeðu dva broja. 11] range(5. 10. 9. >>> [1. Slijedi definicija funkcije koja za dati prirodni broj izraèunava njegov faktorije l: >>> . 9. WHILE iskaz Blok naredbi se izvr ava sve dok je kontrolni izraz taèan (True). 4. 13. ... Funkcija vraæa vrijednost po moæu iskaza return. 3. Izraèunavam 5! odnosno proizvod brojeva od 1 do 5: >>> >>> >>> . 14] range(1. range(12) 1. Sve promjenljive navedene u definiciji funkcije su lokalne.. 15.. 7.. 19] 6. 5. n + 1): rezultat *= i return rezultat >>> fakt(5) 120 >>> fakt(50) 30414093201713378043612608166064768844377641568960512000000000000L Podr ane su rekurzivne definicije funkcija. 11. . . 7. .. 9. 13.

124 .

korak = 1): return x ... .korak Sada mogu da uvezem ovaj modul u interaktivnom modu: >>> import mm Poslije uvoza koristim definicije na sljedeæi naèin: >>> mm.jedan 1 >>> mm.nula 0 >>> mm.uvecaj(10) . Evo jednog jednostavnog modula koji kreiram kao datoteku u trenutnom direktoriju mu sa nazivom mm. if n == 0: return 1 else: return n*f(n . .. .py koja sadr i sledeæi tekst: nula = 0 jedan = 1 def uvecaj(x. Da bi ih saèuvali mo emo na e definicije funkcija i promjenljivih da smjes timo u jednu ili vi e datoteka. Za to mo emo da upotrebimo tekst editor.1) >>> f(5) 120 >>> f(50) 30414093201713378043612608166064768844377641568960512000000000000L 8. Takve datoteke se zovu moduli. korak = 1): return x + korak def umanji(x. Moduli Ako interpretator stane sa radom sve definicije koje su kreirane u interaktivnom modu biæe izgubljene... Potom definicije iz tako kreiranih modula mo emo da uve emo i koristimo bilo u interaktivnom modu ili u nekom drugom modulu..Funkcija koja vraæa faktorijel datog broja definisana je na rekurzivan naèin u skupu nenegativnih cijelih brojeva: >>> def f(n): . Kreiranje du ih programa sastoji se obièno iz pisanja modula koji mogu da budu grupisani u pakete (packages)...

nula) -1 >>> mm. 5) 15 Moguæ je i direktan uvoz pojedinih imena definicija.11 >>> mm.uvecaj(10.umanji(mm. ili svih imena odjednom kao u sljedeæem primjeru: 125 .

>>> math. 'modf'. ali dozvoljeni su i drugi iskazi. 'degrees'.>>> from mm import * >>> umanji(34. 'acos'. 'atan2'. >>> import math >>> dir(math) ['__doc__'..pi 3. 'cosh'. 'e'. 'log'. iskaz ImeKlase: 1 2 3 n Iskazi u definiciji klase su obièno definicije funkcija. 'tan'. 'exp'. 'cos'.pi/2) 1. Standardni moduli Standardni moduli u velikoj mjeri pro iruju moguænosti jezika. 'sin'. 'pow'. 'sinh'.0 9.0 >>> from math import sin. 'fmod'. 'ceil'.sin(math. 7) 27 >>> uvecaj(nula) 1 8.__doc__ This module is always available. Klase Definicija klase u svom najjednostavnijem obliku izgleda ovako: class iskaz iskaz iskaz . 'pi'. 'asin'. 'hypot'.1415926535897931 >>> math. 'sqrt'. pi >>> sin(pi/2) 1." podatak = 12 def f(self): print 'Ovo je metod klase' 126 . 'log10'.. 'fabs'. Evo jednog jednostavnog primjera: class ProbnaKlasa: "Ovo je jedna probna klasa. 'floor'. 'radians'. Funkcija dir() vraæa listu svih ime na definisanih u modulu. 'frexp'. Kao primjer uvozim standardni matematièki modul. 'tanh'] >>> print math. It provides access to the mathematical functions defined by the C standard. '__name__'.1. 'ldexp'. 'atan'.

.

IMAP4.__doc__ 'Ovo je jedna probna klasa. Na primer: >>> x = ProbnaKlasa() Sada je kreiran primjerak klase ProbnaKlasa i smje ten u promenljivu x. postoje bazièna re enja za izradu HTTP servera. U ove svrhe izgraðene su standardni moduli koji se isporuèuju zajedno sa interpretatorom. Takoðe u okviru standardnih modula.podatak 12 Èesto se oèekuje da primjerak klase bude inicijalizovan prije njegove upotrebe. ako sve proðe u redu. 5) >>> a. Ovo mo emo da uradimo defini uæi metod __init__() unutar klase. Slede neke internet tehnologije na bazi jezika Pajton koje su nastale van matiène kuæe: Zope Zope (Z Object Publishing Environment) je veb server i skup alata napisan u Pajt on jeziku. Ovaj primj erak mo emo da koristimo na sljedeæi naèin: >>> x. class Tacka: def __init__(self. Gopher. Telnet protokole. NNTP.Ovako kreirana definicija mora da se izvr i da bi klasa mogla da se koristi. SMTP.y = y Ovako definisanu klasu i njene primjerke mo emo da koristimo na sljedeæi naèin: >>> a = Tacka(3.f() Ovo je metod klase >>> x. Po iz vr enju. y): self.x 3 >>> a. formira se objekat tipa klase. .. x.x = x self. PO P3. na strani klijenta postoji podr ka za FTP. Na primjer.. Pojedinaèni primjerci klase kreiraju se upotrebom funkcijske notacije.' >>> x.y 5 10. Primjena Internet Programski jezik Pajton stekao je dio svoje popularnosti nudeæi efikasna rije enja z a internet.

Ovo je tehnologija koja omoguæava veb dizajnerima da formiraju veb s ajt i aplikacije koje se izvr avaju na strani servera kroz publikovanje hijerarhije Pajt on objekata na vebu. 127 . Programer mo e da se usredsredi na pisanje objekata ostavljajuæi da se Zope brine o HTTP i CGI detaljima.Osnovni skript jezik kojim se ovaj server prilagoðava specifiènim potrebama je takoðe Pajton jezik.

odluèeno je na vrijeme on-line chat sesije izmeðu Matsumoto i Keiju Ishitsuka na Februar 24.Plone Zope je moæno sredstvo. na sreæu drugi naziv je izabran da iskljuèiti pometnju. klase s nasljeðivanjem. a bili su izabrani o d strane Matsumoto-a u kasnijim e-mail za Ishitsuka. Zato sam odluèio dizajnirati svoj jezik ". U poèetku dva imena su predlo ena: "Coral" i "Ruby" . prije nego to je bilo koji kod b io napisan za jezik. 1993. Mo e da uvozi veæinu Java klasa i da se prevodi u Java bajt kod. Ovo omoguæava pisanje programa koji se izvr a vaju na Java platformi bilo na strani klijenta ili servera. 1993 od Yukihiro Matsumoto-a koji je elio stvoriti novi jezik koji balansira izmeðu funkcionalnog programiranja sa imperativnim programira njem. i vi e objektno-orijentiran nego Py thon. tvorac Ruby. Nakon toga jo tri verzije Ruby su pu teni u dva dana. mixins.o sam skriptni jezik koji je bio sna niji od Perl. Ruby je zami ljen na Februar 24. decembra 1996. i odvoz smeæa. Ruby Yukihiro Matsumoto. Jython Jython je implementacija programskog jezika Pajton u Javi. Prvi objave Prvi javni izlazak Ruby 0. Coral ima veæ dugu povijest kao ime programskog jezika koji potjeèe iz 1964 na osnutka Royal Radar u Velikoj Britaniji .3 u 1999 prvi engleski jezik mailing lista ruby-talk . Izdavanja su s e poklopila sa lansiranjem japanskog jezika rubin-lista mailing lista koja je bila prva mailing listu za novi jezik.0 Ruby je dosegao verziju 1. Ovaj sistem za upravljanje sadr ajima (CMS) sajta baziran je na Zope tehnologiji i Pajton jeziku. iter ators.0 25. zatvaraèi. Ruby 1. na primjer. Veæ predstavljne u ovoj fazi razvoja su mnoge od znaèajki upoznat u kasnijim izdanji ma Ruby. ali ako je potrebno znatno jednostavnije re enje za kreiranj e i odr avanje sadr aja veb sajta mo e da se upotrjebi. Plone.95 najavljen je na domaæem japanskom newsgrupa 21. [2] Etimologija imena "Ruby" Da se program zove "Ruby". ukljuèujuæi i objektno-orijentirani dizajn. iznimka rukovanja. decembra 1995. Nakon objavljivanja Ruby 1. Matsumoto kasnije je izjavio da faktor u odabiru imena "Ruby" je jer je Birthstone jednog od njegovih kolega.

128 . to je signalizirao veæe zanimanje za jezik izvan Japana. koja je kasnije i besplat no objavljena u javnosti zbog daljnjeg irenja usvajanja Ruby meðu engleskog govornika.je poèela. U septembru 2000 prva knjiga na engleskom jeziku je tiskana za programiranje u Ruby-u.

9. i mogu biti iznenaðeni razlièitim aspektima jezika. On je rekao da on nije primijeniti naèe lo najmanjeg iznenaðenja za dizajn Ruby. A to znaèi naèelo najmanjeg iznenaðenje nakon to ste upoznali Ruby vrlo dobro. to znaèi da se jezik treba pona ati na takav naèin kako bi se smanjila konfuzija za iskusne korisnike. Ako taj osobni standard ostane dosljedan on æe biti malo iznenaðenje za one upoznati s standardnim.6. b) (puts + B)) Per-string karakter kodiranja su podr ani Filozofija Matsumoto je rekao da je Ruby dizajniran za produktivnost i zabavu programera. Oni su robovi. Nagla ava da oblikovanje sustava treba istaknuti ljude. Matsumoto je rekao da je njegov glavni dizajnerski cilj bio napraviti jezik u kojem je i sam u ivao koristeæi ga. bio sam C + + programer prije nego sam poèeo projektiranje Ruby. U maju 2005 raspravu o comp. netko drugi mo da dolazi iz Perl. prateæi naèela dobrog dizajna korisnièkog suèelja. usredotoèeni su na strojeve. Naèelo najmanje iznenaðenje znaèi naèelo najmanjeg mojeg iznenaðenja. potrebama: ''Èesto ljudi." Ruby slijedi princip najmanjeg iznenaðenja (Pols). "Ra deæi ovo.' Prièekajte.1. Oni misle. Mi smo gospodari. stro æe ne to ne to ne to. Prièekajte. a ne raèunala. Neki primjeri su: Blok lokalne varijable (varijable koje su lokalne za blok u kojem su objavljene) Dodatna lambda sintakse (zabava = -> (a. u stvari trebamo se usredotoèiti na ljude. osobito raèunarski in enjeri. Radeæi ovo.9. Netko je do ao iz Python.lang. kao novajlija korisnik mo e poduzeti da to znaèi da se pona anje Ruby poku ava najbli e podudariti sa pona anjrm poznatih drugih jezika. interes za Ruby je skoèio u Ruby on Rails web aplikacijskog frameworka napisan u Ruby. pa Ruby kr i naèelo najmanjeg iznenaðenja. Matsumoto ga je definirao na ovaj naèin u intervjuu: '' Svatko ima individualne pozadinu. o tome kako se ljudi brinu o pisanju programa ili rukovanja aplikacija ma za programe.ruby interesne grupe. Radeæi ovo.1 uvodi mnoge znaèajne promjene na verziju 1. stroj æe se pokretati uèinkovitije. umnjujuæi programerski rad i moguæe konfuzije. Ruby 1. I nakon dvije godine C + + programiranje." Oni se usredotoèuju na strojeve. to me jo uv .Ruby on Rails Oko 2005. obja njavajuæi da æe odabir bilo kojeg dizajna biti iznenaðenje za nekoga.1 Zadnji stabilna verzija referentne implementacije je 1. Programirao sam u C + + tokom dvije ili tri godine. Matsumoto je poku ao udaljiti Ruby od POLS. Princip najmanje iznenaðenje nije samo za vas. Ali. Onda su do li do m ene i ka u: 'Bio sam iznenaðen ovim odlikama jezika.ali on koristi osobni standard u procjeni iznen aðenje. Ruby 1. Fraza i sama je izvor iznenaðenje.9. stroj æe raditi br e. ali ipak je do ao do izraza usko povezan s Rub y programskim jezikom.8. Na primjer.

" Moguænosti Temeljito objektno-orijentiran s nasljeðivanjem. mixins i metaclasses Dinamièki tipovi i duck tipovi 129 .ijek iznenaðuje.

:age def initialize(name. presjeci. Person. 23) ] . i lokalne) obilje eni s igils i kapitalizaciju Automatski odvoz smeæa First-class nastavak Stroga pravila boolean prisile (sve je istina osim la ne i nil) Iznimka rukovanje Operator preoptereæenja Izgraðena podr ka za racionalne brojeve.new("Chris". age) @name. age end def <=>(person) # Comparison operator for sorting @age <=> person. Iterators i generatora. kompleksne brojeve i proizvoljne preciznost i aritmetièke Custom otpreme pona anja (kroz method_missing i const_missing) Native teme i suradnièki vlakana Potpuna podr ka za Unicode kodiranja i vi estruke karaktera (od verzije 1. na primjer.new("Ash". Person. regularnih izraza i simbola Ugradnja koda u ice (interpolacija) Standardni argumenata Èetiri razine varijable opsega (globalno.Sve je izraz (èak i izjave) i sve je izvr eno imperativno (èak deklaracije) Jezgrovita i fleksibilna sintaksa koja minimizira buku sintaktièke i slu i kao temel j za domenu odreðenih jezika Dinamièko razmi ljanje i mijenjanje objekata kako bi se olak alo metaprogramming Leksièki zatvaraèi. 33). 16).9) Native API plug-in u C Interactive Ruby Shell (repl) Centralizirano upravljanje paketima putem RubyGems Implementiran na sve platforme Velika standardna biblioteka class Person attr_reader :name.age end def to_s "#@name (#@age)" end end group = [ Person. klase. uz jedinstvenu blok sintaksu Doslovna notacija za polja.new("Bob". @age = name.

reverse 130 .puts group.sort.

to je ref erentially transparent) jezik sa jasnim prepiskama u matematièkoj logici. je dizajnirana za man ipulaciju i dobavljanje podataka smje tenih u IBM-ovom originalnom proizvodu relacionih baza p odataka. Ova verzija. SQL SQL. deklarativno programiranje je paradigma programiranja k oja izra ava logiku izraèunavanja bez opisivanja svoje kontrole toka. Deklarativno programiranje èesto smatra programe kao teoriju formalne logike. Deklarativno programiranje je èesto definisano kao bilo koji stil programiranja ko ji nije imperativ. kreiranje ema i kontrolu pristupa podacima. Na primjer: program koji opisuje ta izraèunavanja treba izvr iti. kao to je to da se u velikoj mjeri mo e pojednostaviti pisanje paralelnih programa. i izvorno baziran na relacionoj algebri.Deklarativno programiranje U kompjuterskim naukama. logiku programiranja. tim iz IBM San Jose Research Laboratory istrazivackog laboratorij a je . èesto zvan Structured Query Language. Zajednièki jezici ukljuèuju one deklarativno regularne izraze. bilo koji programski jezik koji nema ne eljenih efekata (ili preciznije. Njegov opseg ukljuc uje upite (data query) i izmjene (update). SQL nije Turing kompletan programski jezik. koji zahtijeva izrièito odreðeni algoritam. Boyce-a iz IBM-a r anih 1970-ih godina. i pr oraèune kao odbitke u toj logici prostora. Chamberlin-a i Raymond F. a ne kako da ga izraèunamo. To je u suprotnosti sa imperativom programa. je kompjuterski programski jezik dizajn iran za upravljanje podacima u sistemima relacionih baza podataka (RDBMS relational d atabase management system). HISTORIJAT SQL je razvijen od strane Donald D. System R. Broj drugih zajednièkih definicija postoji tako da poku avaju da daju ter min definicija osim jednostavnih kontrasta sa imperativom programiranja. Deklarativno programiranje je postalo od pose bnog znaèaja u posljednje vrijeme. koja se u poèetku zvala SEQUEL. Tokom 1970-ih. Mnogi jezici primj enom ovog stila poku avaju da smanje ili elimini e ne eljene efekte koji opisuju ta program treba da os tvari. a ne opisuju kako da se to ostvari. i funkcionalno programiranje.

razvijenim 1974. godine u U. Boyce su zatim napravili Structured English Query Language (SEQUEL il i SEQL) za upravljanje podacima smje tenim u System R. Donald D. Prvi sistem za upravljanje relacionim bazama podataka (RDBMS) je bio RDMS. C. Skraæenica SEQUEL je kasnije promijenjen a u SQL jer je SEQUEL bio za titni znak Hawker Siddeley avionske kompanije. a praæen jako brzo Ingres-om. sistem upravljanja relacionim bazama podataka. 131 . Ingres je koristio upitni jezik (query language) QUEL. Chambe rlin i Raymond F. razvi jen u MIT-u ranih 1970-ih. kojeg je kasnije potisnuo sa tr i ta SQL.razvio System R. Berkeley-u.

i 1983. CIA-i i ostalim amerièkim vladinim agencijama. Izrazi (Expressions). godine. UPITI Najèe æa operacija u SQL-u je upit. Relation Software Inc. Na ljeto 1979. uglavnom je ignorisan u SQL iskazima i upitima. olak avajuæi time formatiranje SQL koda za veæu èitljivost. koji prave bilo skalarne vrijednosti ili tabele koje se sa stoje od kolona i redova podataka. Iako ne nu an na svakoj platformi. ukljuèujuæi: Klauzule (Clauses). SELECT uzima podatke iz jedne ili vi e tabela ili izraza. koje su u nekim sluèajevima neobavezne. Ora cle V2 (version 2) za VAX kompjutere. sastavni dijelovi iskaza i upita. koji mogu imati trajan efekt na eme i podatke. Iskazi (Statements). sesije ili dijagnoze. SQL/DS i DB2. je predstavio prvu komercijalno dostupnu implementaciju SQL-a. Takoðer mu nedostaje èvrstina formalnijih jezika poput relaci one algebre. neodgovarajuæe rukovanje nedostajuæim podacima. veze. programski tok. (sada Oracle Corporation) je primjetio po tencijal koncepta kojeg su opisali Codd. izveden deklarativnim SELECT iskazom. i èesto nepotrebno kompleksna i povremeno dvosmisle na gramatika i semantika. g odine. Nakon testiranja SQL-a na korisnièkim testnim mjestima da se utvrdi korisnost i pr aktiènost sistema. ukljuèujuæi System/38. koji su bili komercijalno dostupni 1 979. definisan je kao standardni dio SQL gramatike. o SQL iskazi takoðer ukljuèuju . redom. JEZIÈKI ELEMENTI SQL jezik je podijeljen u nekoliko jezièkih elemenata.. IBM je poèeo razvijati komercijalne proizvode zasnovane na njihovom Syste m R prototipu. Nebitan prazan prostor (Whitespace). (taèka-zarez) za oznaèavanje kraja iskaza. Predikati. Oracle V2 je pobijedio IBM-ovo izdanje System/38 RDBMS-a n a tr i tu za par sedmica. koji dobavljaju podatke na osnovu nekih odreðenih kriterija.Kasnih 1970-ih. 1981. koji odreðuju uslove koji mogu biti proslijeðeni u SQL-ove three-valuedlo gic (3VL) logièke istinitosne vrijednosti koji se koriste za ogranièavanje efekata iskaza i upita. Chamberlin i Boyce i razvio svoj SQL-bazirani RDBMS te eæi da ga proda amerièkoj mornarici. Upiti (Queries). Relation Software Inc. Èeste kritike SQL-a ukljuèuju manjak vi eplatformske prenosivosti. Standardni SELECT iskazi nemaju nikak . ili za izmjenu programskog toka. ili koji mogu kontrolisati transakcije.

sa dodatnim opcijama i klauzulama koje ukljuèuju: FROM klauzula koja odreðuje tabelu (tabele) iz kojih se podaci dohvataju.av trajni efekat na bazu podataka. Neke nestandardne implementacije SELECT iskaza mogu imati trajne efekte. SELECT je najslo eniji iskaz u SQL-u. ostavljajuæi sistemu za upravljanj e databazom (DBMS) odgovornost planiranja. WHERE klauzula dodaje poredbeni predikat koji ogranièava redove koje upit dohvata. koje odmah slijede SELECT rijeè. i izvr avanja fizièkih opera cija potrebnih za pravljenje rezultata u eljenoj formi. Upit se sastoji od liste kolona koje tre ba ukljuèiti u krajnji rezultat. WHERE klauzula elimini e sve redove iz skupa rezultata kojim poredbeni 132 . FROM klauzula mo e sadr avati dodatnu JOIN potklauzulu koja odreðuje pravilo spajanja tabela. kao kod SELECT INTO komande koja postoji u nekim bazama podataka. optimiziranja. Zvjezdica ( * -asterix) se mo e koristiti da se naznaèi da upit treba vratiti sve kolone ispitivanih tabela. Upiti omoguæavaju korisniku da opi e eljene podatke.

Zvjezdica ( * ) u listi kolona oznaèava da sve kolone Book tabele trebaju biti ukljuèene u skup redova rezultata.title. GROUP BY se èesto koristi zajedno sa SQL funkcijama gomilanja tokova podataka ili za eliminisanje duplih redova iz skupa rezultata. count (*) AS Authors FROM Book JOIN Book_author ON Book. SELECT * FROM Book WHERE price > 100. Rezultat primjera bi mogao izgledati kao: Title Authors SQL Examples and Guide 4 The Joy of SQL 1 An Introduction to SQL 2 Pitfalls of SQL 1 Pod uslovom da je isbn jedino zajednicko ime kolona dvije tabele i da kolona tit le postoji samo u Books tabeli. GROUP BY klauzula se koristi za grupisanje redova koji imaju zajednièke vrijednost i u manje skupove redova.00 ORDER BY title. ORDER BY klauzula identifikuje kolone koje se koriste za sortiranje rezultujuæih podataka. HAVING klauzula ukljuèuje predikat koji se koristi za filtriranje redova rezultata iz GROUP BY klauzule.predikat ne dodijeli vrijednost True. redoslijed redova vraæenih SQL upitom je nedefinisan. Upit vraæa sve redove i z tabele Books u kojoj kolona price sadr i vrijednost veæu od 100. grupisanje i gomilanje vraæajuæi listu knj iga i broj autora povezanih sa svakom knjigom. Primjer ispod demonstrira upit vi e tabela. count (*) AS Authors FROM Book . funkcije za gomilanje toka podataka se mogu koristiti u predikatu HAVING klauzul e.isbn GROUP BY Book.title.00. SELECT Book. navedeni upit bi se mogao napisati u formi: SELECT title. Zato to se primjenjuje na rezultat GROUP BY klauzule.isbn = Book_author. Bez ORDER BY klauzule. WHERE klauzula se primjenjuje prije GROUP BY klauzule. i smjer u kojem trebaju biti sortirani (rastuæe ili opadajuæe). Slijedi primjer SELECT upita koji vraæa listu skupih knjiga. Rezultat se sortira u r astuæem poretku po nazivu (kolona title).

NATURAL JOIN Book_Author GROUP BY title. 133 .

iskljuèuje rezultate i sa False i sa Unknown. price. Rijeè Null je takoðer rezervisana kljuèna rijeè u SQL-u koja se koristi za identifikovan je specijalnog Null markera. Tako da poreðenja sa Null ne mogu rezultirati logièkom vrijedno æu True ili False nego t reæom vrijedno æu. Takoðer postoji i infiksni operator i <redni izraz> IS DISTINCT FROM <redni izraz> koj .06 AS sales_tax FROM Book WHERE price > 100. mnoge platforme ili ne podr avaju ovakav pristup ili zahtjevaju konvencije i menovanja kolona. SQL dozvo ljava kori tenje izraza u select listi za dohvatanje podataka. Univerzalni kvantifikator nije eksplicitno podr an u SQL-u i mora se izvoditi kao negirani egistencijalni kvantifikator. kao u slijedeæem primjeru k oji vraæa listu knjiga koje ko taju vi e od 100. SQL pru a dva posebna poredbena predikata: IS NULL i IS NOT NULL provjeravaju da li je (ili da li nije) podatak NULL.Ipak. Null nema vrijednosti (i nije èlan nijednog domena podataka) nego je oznaka za izostana k informacije. Primjetite da SQL vraæa samo rezultate za koje klauzula WHERE vrati vrijedno st True. Unknown (nepoznato). price * 0. SQL sadr i operatore i funkcije za izraèune nad pohranjenim vrijednostima.00 ORDER BY title. SQL koristi Null za rukovoðenje izostavljenim informacijama. tj. NULTA VRIJEDNOST (NULL) I THREE-VALUED LOGIC (3VL) Ideja sa Null je uvedena u SQL za rukovanje nepostojeæim informacijama u relaciono m modelu. SQL podr ava 3VL i prav ila upravljanja SQL 3VL logikom su obja njena u tabelama ispod ( p i q predstavljaju l ogièka stanja). SELECT isbn. Kako SQL operatori vraæaju Unknown poreðenjem bilo èega sa Null. Uvoðenje Null (ili nepoznate vrijednosti) zajedno sa True i False je osnov alo 3VL. title.00 sa dodatnom kolonom sales_tax koja sadr i porez na prodaju od 6% cijene.

Npr. DISTINCT FROM <redni izraz> je negacija gornjeg operatora. MANIPULACIJA PODATAKA <redni izraz> IS NOT Data Manipulation Language (DML) je dio SQL-a koji se koristi za dodavanje. field3) VALUES ('test'. Npr. field2. Slièno.vraæa True ako su oba operanda jednaka ili su oba NULL. 'N'. NULL). · UPDATE modifikuje skup postojeæih redova tabele. · INSERT dodaje redove u postojeæu tabelu.: INSERT INTO My_table (field1. izmj ene i brisanje podataka.: 134 .

ostavljajuæi stanje podataka onakvo kakvo je bilo prije promjena. semantika SQL-a zavisi od implementacije. se koriste za objedinjavanje DML operacija: START TRANSACTION (ili BEGIN WORK. COMMIT i ROLLBACK prekidaju trenutnu transakciju i oslobaðaju podatke. ponekad zvanih upsert . zavisno od SQL dijalekta) oznaèava poèetak transakcije databaze koja se ili izvr i u potpunosti ili se uop te ne izvr i. value(2). ako su dostupne. promjene napravljene transakcijom se ne mogu vratiti. value(1). Kombinuje INSERT i UPDATE elemente. UPDATE Account SET amount=amount+200 WHERE account_number=2345.: DELETE FROM My_table WHERE field2 = 'N'. . CREATE TABLE tbl1_(id INSERT INTO tbl_1(id) INSERT INTO tbl_1(id) SAVEPOINT) spa ava stanje databaze u trenutnom int). ROLLBACK odbacuje sve promjene od zadnjeg COMMIT-a ili ROLLBACK-a. Na primjer. ROLLBACK TO id-1upd. SAVEPOINT id-1upd. KONTROLE TRANSAKCIJA Transakcije. Npr. COMMIT pravi sve promjene podataka u transakciji stalnim. neke databaze su pru ale sliènu funkcionalnost preko razlièitih sintaksi. COMMIT. Obièno koristi COMMIT operaciju sukcesivno. DELETE uklanja postojeæe redove tabele. UPDATE tbl_1 SET id=200 WHERE id=1. Prije toga. Jednom kada se COMMIT iskaz zavr i. Ta je naredba definisana u SQL:2003 standardu. SELECT id FROM tbl_1.UPDATE My_table SET field1 = 'updated value' WHERE field2 = 'N'. MERGE se koristi za spajanje sadr aja vi e tabela. TRUNCATE brzo uklanja sve podatke iz tabele. ili BEGIN TRANSACTION. klasièni transfer sa bankovnog raèuna: START TRANSACTION. SAVE TRANSACTION (ili vremenu transakcije. UPDATE Account SET amount=amount-200 WHERE account_number=1234. UPDATE tbl_1 SET id=1000 WHERE id=2. U odsustvu START TRANSACTION ili sliènog iskaza.

IF ERRORS=0 COMMIT. IF ERRORS<>0 ROLLBACK. 135 .

Bit nizovi BIT (n) niz od n bita. dodajuæi NATIONAL CHARACTER VARYING (n) ili NVARCHAR (n) neodreðene du ine. CREATE kreira objekat u databazi (npr. DROP i TRUNCATE iskazi. ANSI SQL sadr i slijedeæe tipove. CHARACTER VARYING (n) ili VARCHAR (n) mo e najvi e biti n. TIPOVI PODATAKA Svaka kolona SQL tabele odreðuje tip sadr aja kolone. my_field2 VARCHAR(50). BIT VARYING (n) Brojevi INTEGER i SMALLINT FLOAT. ALTER. ALTER modifikuje strukturu postojeæeg objekta na razne naèine kolonu u postojeæu tabelu. RENAME. PRIMARY KEY (my_field1. uglavnom zauvijek. scale) .. po potrebi nadopunjen praznim prostorom. my_field3 DATE NOT NULL. Na primjer: CREATE TABLE My_table ( my_field1 INT. NATIONAL CHARACTER (n) ili NCHAR (n) podr ava internacionalne znakove. REAL i DOUBLE PRECISION NUMERIC (precision. Znakovni nizovi CHARACTER (n) ili CHAR (n) string taèno odreðene du ine n. DROP bri e objekaz u databazi. my_field2) ). tabelu). scale) ili DECIMAL (precision. Osnovne stv ari u DDL-u su CREATE.DEFINISANJE PODATAKA Data Definition Language (DDL) upravlja strukturom tabela i indeksa. string neodreðene du ine ali koja string taèno odreðene du ine koji NCHAR string npr. niz od najvi e n bita.

Datum i vrijeme KONTROLA PODATAKA Data Control Language (DCL) daje korisnicima i grupama ovlasti za pristup i mani pulaciju podacima. Njegova dva glavna iskaza su: 136 .

another_user. · REVOKE ukida GRANT. Na primjer: GRANT SELECT. another_user. PROCEDURALI DODACI SQL je dizajniran za specifiènu namjenu: za dohvatanje podataka iz relacione baze podataka. REVOKE SELECT. na primjer kontrola toka programa. proceduralno i objektn oorijentisano programiranje je dostupno na mnogim SQL platformama preko DBMS integracije sa ostalim jezicima. SQL standard preko SQL/JRT ekstenzija (SQL rutine i tipovi za . ne naredbeni jezik kao C ili BASIC. postoje dodaci za standardni SQL koji dodaju funkcionalnosti proceduralnih programskih jezika. UPDATE ON My_table TO some_user. UPDATE ON My_table FROM some_user. Ipak. SQL je skupovno-bazirani deklarativni upitni jezik. To su: Izvor Puni naziv ANSI/ISO Uobièajeni naziv SQL/PSM SQL/Persistent Stored Modules Standard Interbase/Firebird PSQL Procedural SQL IBM SQL PL SQL Procedural Language (koristi SQL/PSM) Microsoft/Sybase T-SQL Transact-SQL Mimer SQL SQL/PSM SQL/Persistent Stored Module (koristi SQL/PSM) MySQL SQL/PSM SQL/Persistent Stored Module (koristi SQL/PSM) Oracle PL/SQL Procedural Language/SQL (baziran na Ada) Procedural Language/PostgreSQL Structured Query PostgreSQL PL/pgSQL Language (baziran na Oracle PL/SQL) Procedural Language/Persistent Stored Modules PostgreSQL PL/PSM (koristi SQL/PSM) Uz standardne SQL/PSM dodatke i zakonske SQL-ove dodatke.· GRANT daje ovlasti za izvoðenje operacija nad objektima.

poput MySQL i Postgres. Pythona.Java programski jezik) podr ava Java kod u SQL databazama. KRITIKE SQL-a SQL je deklarativni kompjuterski jezik za kori tenje uz relacione baze podataka. dok su ranije v erzije SQL Server-a bile ogranièene na kori tenje pro irenih procedura za smje tanje koje su ug lavnom bile pisane u C-u. dozvoljavaju da fun kcije budu pisane u mnogim razlièitim jezicima poput Perla. Tcl-a i C-a.NET komponenti u databazu. SQL Server 2005 koristi SQLCLR (SQL Ser ver Common Language Runtime) za smje tanje . Ostale platforme. 137 .

to rezultira pogre nim skupovima podataka kada se WHERE klauzule pogre no unesu. ali su pogor ali neslaganja. Npr.). time stvarajuæi prinudnu lojalnost kod korisnika. Kao rezultat toga. Mnoge platforme imaju velike korisnièke baze tako da ukoliko doðe do konflikta izmeðu SQL standarda sa prethodnim pona anjem baze isporuèioca. Funkcionalno programiranje U raèunarstvu. sintaksa datuma i vremena.spajanja svih moguæih kombinacija). Standard ne navodi pona anje databaze u nekim bitnim podruèjima (indeksi. Postoji nekoliko razloga za ovaj nedostatak prenosivosti meðu sistemima. Jezik previ e olak ava pravljenje kartezijanskih spajanja (Cartesian join . Multiplatformska prenosivost Popularne implementacije SQL-a obièno izostavljaju podr ku osnovnim moguænostima SQL standarda. specifikacija semantike jezièkih konstrukcija standarda nije tako precizno obraðena.Interesantno. smje taj podataka itd. ali se nisu slagale sa njim. Nedavni dodaci za SQL su postigli relacionu kompletnost . spajanja stringova. Null vrijednosti. mnoge od osnovnih moguænosti SQL-a su ispirisane od strane relaciono g modela. to vodi dvosmislenosti. Cartezijanska spajanja se tako rijetko koriste u praksi da je uglavnom neophodno kori tenje posebne kljuène rijeèi CARTESIAN. funkcionalno programiranje je programiranje paradigme koja se treti . SQL 1992 je uveo CROSS JOIN koji omoguæava korisniku da naznaèi da je u pitanju kartezijansko spajanje. Ipak. SQL kod se rije tko mo e prenositi meðu sistemima baza podataka bez modifikacija. kao DATE ili TIME tipove podataka. i case sensitivity prilikom poreðenja se razlikuju od platforme do platforme. Gramatika SQL-a je mo da nepotrebno slo ena. Razvojni timovi èesto namjerno prave nekompatibilnosti sa ostalim proizvodima. dok bi sintaksa inspirisana funkcijama mogla rezultirati èe æim kori tenjem manje gramatièkih i sintaksnih pravila. Kompleksnost i velièina SQL standarda znaèi da veæina implementacija ne podr ava cijeli standard. posuðujuæi pristup kljuènih rijeèi kao kod COBOL-a. Takoðer je moguæe da se pogre no konstrui e WHERE klauzula unutar UPDATE ili DELETE iskaza i time sluèajno izmjeni vi e podataka unutar tabele nego to je trebalo. Praktiène primjedbe SQL-u ukljuèuju: Implementacije su nekonzistentne i uglavnom platformski meðusobno nekompatibilne. SQL standard precizno navodi sintaksu koju usklaðeni sistem baza podataka mora implementirati. isporuèioci rijetko ele prekinuti kompatibilnost unazad. ostavljajuæi implementatorima da odluèuju o tome.

Ona se u istièe primjeni funkcija. Funkci onalno 138 . u suprotnosti sa imperativnim programskim stilom.ra kao obraèun procjene matematièkih funkcija i izbjegava stanja i promjenljive podatke .

koriste neke el emente funkcionalnog programiranja. i XSLT (XML ). tako da pozivanje funkcije f dva puta sa i stom vredno æu za argument x koji æe proizvesti isti rezultat f (x) oba puta. on èini osnovu gotovo svih funkciona lnih programskih jezika danas. posebno oni èisto funkcionalni. Mathematica (simbolièka matematika). Iako je vi e matematièka apstrakcija. Na primjer. Programiranje u funkcionalnom stilu mo e biti ostvareno na jezicima koji nisu pose bno dizajnirani za funkcionalno programiranje. OCaml. Funkcionalni programski jezici. razlika izmeðu matematièke funkcije i pojma "funkcija" se koristi u impera tivnom programiranju gdje imperativi funkcije imaju ne eljena dejstva. Koristi se u nekim ezoter iènim . su u velikoj mjeri nagla eni u akademskim krugovima nego u komercijalnom razvoju softvera. naroèito u escheving promenljivoj vrednosti tabele i mo e se posmatrati kao funkcionalni programski jezik. Historija Lambda raèun je teoretski okvir za opisivanje funkcija i njihove procjene. odnosno isti izraz jezika mo e da dovede do razlièitih vrijednosti u razlièito vrijeme u zavisnosti od stanja iz vr avanja programa. nego programski jezik. u funkcionalnom kodu izlazna vrijednost funkcije zavi si samo od argumenata koji su na ulazu funkcija. Meðutim. promijene vrijedno st veæ izraèunatog raèunanja. istaknuti fun kcionalni programski jezici kao to su Scheme. opisuje kako da primjenite koncepte funkcionalnog programiranja JavaScri pt. N aleti deklarativnog domena odreðenim jezicima kao to su SQL i Lex / Yacc. Sa druge strane. formalnom sistemu razvijenom tok om 1930-ih da istra i definiciju funkcije. Kombinacijski logika . imperativ Perl programskoi jezik koji mo e biti predmet knjige.programiranje ima svoje korijene u lambda raèunu. Funkcionalno programiranj e takoðe nalazi primjenu u industriji kroz domena specifiènih programskih jezika kao to su R (stati stika). Erlang. funkcije aplikacije i rekurzija. Ekvivalent teorijske formulacije. U praksi. jedan od najèe æe kori tenih jezika danas. Mnogi funkcionaln i programski jezici mogu se posmatrati kao elaborati na lambda raèunu. Eliminisanje ne eljenih efekata mo e se uèiniti mnogo lak e za razumijevanje i predviðanje pona anja programa. se obièno smatra vi e apstraktnom nego lambda raèun i prethodio je u izumu. koji je jedan od kljuènih motiva za razvoj funkcionalnog programiranja. J i K (finansijska analiza). i Haskell su se koristili u in dustrijske i komercijalne aplikacije od strane raznih organizacija. Zbog toga to nemaju referentne transparentnosti.

ukljuèujuæi Unlambda. koje se sada nalaze u funkcionalnim jezicima. razvio je D on Makarti. a æ na budu ida je skup tina nivou jezika. koji se komercijalno koristi u finansijskim industriji. Ona ima pojam "generator". On defini e funkcionalne programe kao hijerar hiju pomoæu "kombinovanja oblika". D on Bekus predstavio je FP programski jezik u 1977 na dodjeli Tjuringove nagrade odr av i predavanje Mo e li programiranje biti osloboðeno od von Neumann-ovog stila? Funkcionalni stil I Algebra programa. Kenneth E. Ajverson i Rod er Hui napravili se nasljednika APL-u. koji omoguæava "algebre programa".kod se koristiti kao podatak. Kombinacijska logika i lambda raèun su bili prvobitno razvijeni da se postigne jasniji pristup osnovama matematike. Artur Vitni. u modernom jeziku to znaèi da funkcionalne programe prate princip komponovanja. Sredinom 1990-ih. Bekusov papir je popularizovao istra ivanja u 139 .koji iznosi funkciju iprihvata je kao argument. Scheme i Dillan su kasnije poku avali da unaprijede I pobolj aju LISP. To je monta a u stilu jezika za manipulaciju lis te simbola. Iverson je razvio programski jezik APL u ranim 1960-im. Rani funkcionalni jezik je LISP. Information Processing Language (IPL) se ponekad navodi kao prvi raèunar zasnovan na funkcionalnom programskom jeziku.tako da se IPL smatrati kao to funkcija moe moe vi eg reda. LISP je uveo mnoge funkcije. iako je LISP je tehnièki multi-paradigmalni jezik.jezicima. APL je imao primarni uticaj na D on Bekusovo FP prog ramiranje jezika. pro gramski jezik J. dok je na MIT-za IBM 700/ 7000 serije nauènih raèunara u kasnim 1950-im. opisan u njeg ovoj knjizi AProgramming Language. koji je prethodno radio sa Ajverson. U ranim 1990-im. napravio je programski jezik K.

funkcionalnom programiranju. to je donijelo svijest o moæi funkcionalnog program iranja ire programske jezièke-zajednice. od kojih su n ajèe æi Caml i standardni ML. kao i njiho vo vraæanje vrijednosti). tehniku u kojoj se funkcija primjenjuje na svoje argumente jedan po jedan. Tokom 1970-ih ML programski jezik je stvorio Robin Milner na Univerzitetu u Edin burgu. Godine 1987 programski jezik Haskell je u ao u upotrebu. I u ud benicima Struktur a i Tumaèenje kompjuterskih programa. Takoðe u 1970-ih. i generaln o strano imperativno programiranje (ukljuèujuæi Objektno orijentisano programiranje). èiste funkcije èisto funkcionalne funkcije (ili izrazi) nemaju memorija ili I / O nuspojave (osim ako se . implementacija izdanja je bila od 1990. U 1980. a kasnije i Miranda jezik na Univerzitetu u Kentu. razvoj eme programskih jezika (delimièno funkcionala n dijalekat LISP). iako je naglasio funkciua na nivou programiranja a ne kao lambda kalkulus-stil. koji povezuje funkcionalne programe sa konstruktivnim dokazima proizvo ljno slo ene matematièke propozicije. i Dejvid Tarner razvio u poèetku SASL jezik na Univerzitetu u Sent Endruz. Funkcije vi eg reda Funkcije vi eg reda su funkcije koje mogu da preuzmu druge funkcije kao argumente i vrate ih u rezultatu (diferencijalni operator d / dx koji proizvodi izvod funkcije f j e primjer za to raèunanje). uz svaku aplikaciju vraæa novu funkciju koja prihvata sl jedeæi argument. u formi otvorenog standar da za funkcionalno programsko istra ivanje. kao to je opisano kod uticajnih lambda radova 1985. Razlikujemo dvij e vrste: "vi eg reda". Funkcije vi eg reda omoguæavaju currying. koji je bio povezan sa funkcionalnim programiranjem. Per Martin-Luf je razvio Intuitivni tip teorije (koji se jo nazivao Konst ruktivni tip teorije). ML na kraju razvio u nekoliko dijalekata. koje opisuju matematièki koncept funkcija koje rade na drugim funkcijama. ukljuèujuæi i argumente druge funkcije. Koncepti Broj koncepata i paradigmi su specifiène za funkcionalno programiranje. d ok su "prve klase" koje u raèunarskim naukama opisuje programski jezik subjekata koji nemaju o granièenja u upotrebi (na taj naèin prvoklasne funkcije se mogu pojaviti bilo gdje u programu g dje druge prve klase mogu biti kao to su brojevi. Funkcije vi eg reda su blisko povezane sa prvoklasnim funkcijama.

To znaèi da èiste funkcije ima ju nekoliko korisnih osobina. izraz se ne koristi. Ako nema podataka zavisnosti izmeðu dva èista izraza. Ako se èista funkcija zove funcija sa parametrima koje ne izazivaju nikakve spored ne efekte. to daje slobodu kompajleru da preuredi ili kombinuje procjene izraza u programu (npr. Rekurzija Glavni èlanak: Rekurzija (raèunarstvo) Iteracija (petlje) ufunkcionalnim jezicimase posti u preko rekurzije.izraèunavanje rezultata u sebi raèuna kao strani-efekat). odnosno ako je èista funkcija ponovo sa istim parametrima. pomoæu krèenje uma). rezultat je konstantan u odnosu na tu listu parametara (ponekad se naziva refere ntna transparentnost). od kojih se mnoge mogu koristiti za optimizovanje koda: Ako je rezultat èist. Rekurzivne funkcije 140 .svaka p rocjena je bila sigurna). a zatim svaka strategija p rocjene mo e koristiti. ili se mogu izvr iti paralelno i ne ometaju jedna drugu (u drugim uslovima. ona se mo e ukloniti bez uticaja na druge izraze. Ako se cio jezik ne dozvoljava da se ne eljena dejstva. isti rezultat æe biti vraæen. a zatim njihov redoslijed mo e b iti ukinut.

pozivaju se. Strogi odnosi na ne-strogoj procjeni Glavni èlanak: Procjena strategije Funkcionalni jezici mogu se svrstati po tome da li se oni koriste strogo (nestrp ljiv) ili nestrogo (lijen). pristupa. cijeli izraz æe pasti. toznaèi da æe taj elementbiti neuspje an. Takve funkcij e vi eg reda igraju ulogu analognu ugraðene kontrolne strukture kao to su petlje u imperati vnim jezicima. iz meðu ostalog. ali rep rekurzija se prepoznati i optimizovati kompajler u istom kodu k mo e oji se koristi za sprovoðenje iteracija u imperativ jezika. Kod nestrogihprocjena. to omogu ava æ da se radizvodiiznova iiznova.jer procjena je da ne e æ poku ati da ocjeni uslove koje èine listu. ako izraz sadr i neki element koji neæe uspjeti.duina funkcije e æ vratiti vrijednost 4. Pod strogim evaluacijama. Tehnièka razlika je u semantici oznaèavanja izraza koji sadr e neizvr avanje ili divergentna raèunanja. Na primjer. Funkcionalno programiranje ogranièeno je na dobro zasnovanoj r ekurziji sa nekoliko drugih ogranièenja. izraz print length([2+1. Ne-stroga . Zajednièke obrasce rekurzije mogu se uzeti uz pomoæ funkcija vi eg reda. Rekurzija mo e zahtijevati odr avanje stek. Optimizacija rep rekurzije se mo e primijeniti na transformaciju programa u stilu nastavka koji prolazi vrijeme kompilacije. 1/0. i uop te zahtjeva uvoðenja nedoslijednosti u logici izra enoj po vrsti si stema jezika. to èini problem u zaustavljanju neodluèivog. 5-4]) neæe uspjeti pod strogom procjenom jer imamo dijeljenje nulom u treæem elementu list . mo e izazvati defektnos t rezonovanja. Veæina op te namjene funkcionalnih programskih jezika omoguæava neogranièene rekurzije I Turing complete. Scheme programski jezik standardne imple mentacije zahtjeva da se prepoznaju i optimizuju rep rekurzije. Neke posebne namjene jezika kao to su Coq dozvoljavaju samo dobro osnovanu rekurz ije i sna nu normalizaciju. sve njene argumente prije nego to pozove funkcij u. stroga evaluacija u potpunosti procjenjuje funkciju. naziva se ukupno funkcionalno programiranje. 3*2. koncepti koji se odnose na to kako se argumenti funcija obraðuju kada se izraz vrijednuje. Ukratko.

Agda. Kori tenje algebarskih tipova podataka i uzorka pogaðanja èini manipulacije slo enih struktura podataka vi e zgodnim i izra ajanim. i Epigram su bazirani na Institucijskoj teoriji tipova. Cayenne . dok tip zakljuèak oslobaða programera od potrebe da ruèno proglasi tipove kompajler. ukljuèujuæi Miranda. Ogranièena forma zavisnih vrsta naziva se generalizovani algebarski tipovi podatak a 141 . osim ako njihove vrijednosti moraju d a procjene funkciju poziva se. Clean i Haskell. Ove vrste sistema nemaju odluèujuæe tipove zakljuèivanja i te ko je razumjeti i program. Tipièni sistemi i uzrok pogaðanja Posebno od razvoja Hindley-Milner tipa zakljuèka u 1970-im. dobro otkucani programiu ovim jezicima dobijaju znaèenje pisanja u formi matematièkih dokaza iz koje kompajler mo e da generi e certificirani k od. funkcionali programski h jezika imaju tendenciju koristiti tipiène lambda raèune.procjena ne procenjuje argumente funkcije. onda. Kroz Curry-Howard izomorfizam. Compcert je kompajler za podskup C programskog jezika koji je pisan u Coq-u i fo rmalno verifikovan. Ali zavisni tipovi mogu da izraze proizvoljne prijedloge u logici predikata. za razliku od netipiènih lamb da raèuna kori tenih u LISP-u i njegove varijante (kao to su ema). Uobièajeno sprovoðenje strategije za ne-strogu evaluaciju u funkcionalnim jezicima j e graf smanjenje. Nazivaju se zavisne vrste. koja omoguæava vrste koje za vise od uslova. Neka istra ivanja orijentisanim funkcionalnim jezicima kao to su Coq. prisustvo jakih compile-time tipovaomoguæava provjeru programa i èini ih pouzdanijim . Ne-stroga procjena koristi kao defaltna u nekoliko èisto funkcionalnih jezika.

Funkcionalne konstrukcij e kao to su funkcije vi eg reda i lijene liste mogu se dobiti u C + + preko biblioteka. tako da programeri èesto nastoje da naprave neke podatke nepromenljivi i u imperativnim pr ogramima. U C. Poreðenje funkcionalnog i imperativnog programiranja Funkcionalno programiranje se veoma razlikuje od imperativnog programiranja. koji se koriste u imperativnom programiranju da sprovede dr avne i I / O. ukljuèujuæi Java i C# . Prednosti nepromenljivih podataka mogu se vidjeti èak i u imperativnim programima. Zabranjena ne eljena dejstva obezbeðuje ref erencijalnu transparentnost. zajednièka funkcija se mo e implementirati kori æenjem taèkaste funkcije. . lambda funkcije mogu da se koriste za pisanje programa u funkcionalnom stilu. optimizuje i uporeðuje programe. meðutim anonimne klase nisu uvijek odgovarajuæe zamen e za zatvaraèe. Gdje tradicionalno imperativno programiranje mo e koristiti petlje da prolaze kroz list u. Ovo olak ava usvajanje funkcionalnog stila kada koristite te jezike. GAD T su dostupni u Glasgow Haskell kompajleru i u Scala (kao "sluèajne klase"). a predlo eni su kao d odaci na druge jezike. Mnogi objektno-orijentisani projektni uzorci su izra eni u funkcionalno programira nim uslovima: npr.(GADT -Generalized Algebraic Data Types) mo e da se sprovodi na naèin koji obezbjeðuje neke od prednosti zavisnih tipova programiranje izbjegav i veæinu neprijatnosti. mapa. Neki ne-funkcionalni jezici su po sudili funkcije kao to su funkcije vi eg reda. koja se uzima kao argumenti funkcije i liste. Na primjer. èisto funkcionalno programiranje zabranjuje ne eljena dejstva u potpunosti. to olak ava provjeru. i lak e je za p isanje s automatizovanim alatima za obavljanje tih poslova. Strategija ablon jednostavno diktira kori æenje funkcije vi eg reda. kao i listu shvatanja iz funkcionalnih programskih jezik a. funkcionalni stil se èesto koristi funkcijama vi eg reda. Funkcije vi eg reda se rijetko koriste u starijem imperativnom programiranju.. U C # verziju 3. anonimne klase poneka d moge da se koriste za simulaciju zatvaraèa. taèkasta fun cija se mo e koristitida bi se dobili neki od efekata funkcija vi eg reda. Funkcionalno programiranje u ne funkcionalnim jezicima Moguæe je da se koriste funkcionalnim stilom programiranja u jezicima koji nisu tradicionalno smatrani funkcionalnim jezicima. U Javi. a z a posjetioce uzorak odgovara otprilike Catamorphism-u ili fold. jer imaju vi e ogranièenih moguænosti. Naj znaèajnije razlike proizilaze iz èinjenice da funkcionalno programiranje izbjegava ne eljene ef ekte.0 i vi e.

funkcionalni jezici kao to su OCaml i Clean obièno su slièni po brzini od C. nepromjenljivost podataka mo e. Stilovi programiranja 142 . Efikasnost pitanja Funkcionalni programski jezici se percipiraju kao manje efikasni u kori tenju proc esora i memorije nego imperativni jezici kao to su C i Pascal. niz funkcionalnih jezika (kao to su J i K) je dizajniran sa brzinom optimizacije. mo e se desiti gubljenej memorije kada se koristi n epropisno). Za èisto funkcionalne jezike u najgorem sluèaju usporavanja je logaritamski broj memorijskih æelija koje se koriste. Meðutim. a mo e se usporiti u veæin i od konstantnog faktora (meðutim. Pasivno vrednovanje mo e da ubrza program. jer pro menljiva memorija mo e da se predstavi èisto funkcionalnim strukturama podataka sa logaritamskim vreme nom pristupa. usporavanja se javljaju vrlo rijetko u praksi.primenjuje funkciju na svaki element liste. u mnogim sluèajevima. Za programe koji obavljaju intenzivna numerièka izraèunavanja. Dalje. èak i asimptotski. dovesti do izvr enja efikasnosti koje omoguæava kompajleru da pretpostavi da su nesigurni u imperativno m jeziku. Za programe koji rukuju velikim matricama i vi edimenzionalnim baz ama podataka. i vraæa spisak rezultata. znatno poveæava moguænosti za umetanje.

dok funkcionalni programi imaju tendenciju da se na glasi sastav i raspored funkcija. je do ivio komercijalnu upotrebu u oblastima kao to su finansijska analiza. verifikacije voz . Na primjer. i Facebook. bio je prvobitno kori æen za sprovoðenje gre aka otpornih na sisteme telekomuni kacije. jer je izgradio spektar aplikacija u kompanijama kao to s u T-Mobile. OCaml. koji je uveden sredinom 1990-ih godina. source_list) # Apply two specific functions F and G to each item in source Za razliku od imperativnog stila koji opisuje korake koji su ukljuèeni u izgradnji cilja. Erlang programski jezik. On je postao popularan. B: lambda x: A(B(x)) # Define how to apply two generic transformations target = map(compose2(F.append(trans2) # add transformed item to target Funcionalna verzija je ne to drugaèija: # functional style # FP-oriented languages often have standard compose() compose2 = lambda A. u praksi je èesto napisana sa listom razumijevanja. ema dijalekta u LISP-u je kori tena kao osnova za nekoliko apli kacija u ranijim Apple Macintosh raèunarima. funkcionalni stil opisuje matematièki odnos izmeðu izvorne liste i cilja. G). koji je razvijen od strane vedske kompanije Eri csson u kasnim 1980-im.Imperativni programi imaju tendenciju da se naglasi niz koraka preduzetih od str ane programa u sprovoðenju akcije. Nortel. èesto bez navoðenja eksplicitnih koraka. Jednostavan primjer dva re enja na isti programski cilj (koristeæi isti multi-paradigmalni jezik Python) ilustruje ovo: # imperative style target = [] # create empty list for item in source_list: # iterate over each thing in source trans1 = G(item) # transform the item with the G() function trans2 = F(trans1) # second transform with the F() function target. nekoli ko uglednih funkcionalnih programskih jezika se koristi u komercijalne i industrijs ke primjene. Meðutim. Python kod . oblik sintaksièki eæer za for petlje sa implicitno dodaje: target = [F(G(item)) for item in source_list] Upotreba u industriji Funkcionalno programiranje ima reputaciju èisto akademskih interesa.

hardverski dizajn i web programiranje. industrijski programiranih robota. Lisp Lisp je najstariji i najpoznatiji funkcionalni programski jezik. u oblastima kao to su zraèni sistemi. takoðe se primjenjuje u nizu kompanija. jer izvoðenje ovisi o tipovima parame tara. Standardni ML. i Clojure. Kod ovog jezika je vi a razina apstrakcije od imperativnih jezika (npr. LISP progra mi su takoðer formulirani kao liste. C). Haskell. LISP je visoko rekurzivan glede struktura podataka (liste. ) i algoritama. kao i statièke analize ugraðenih softvera. LISP se pokreæe funkcijama: funkcije prenose rezultate drugim funkcijama. Odr ava jednakost programa i podataka.aèa. F #. koje prenose daljnjim funkcijama i td. LISP. iako je pr vobitno bio namijenjen kao istra ivaèki jezik. Suprotno C-u. a program i podaci mogu se modificirati tijekom izvoðenja. Ostali funkcionalni programski jezici koji su primjenjivani u industriji su: Ska la. stabla. Temeljna struktura podataka je lista. funkcije u LISP-u objekti prvoga reda : mogu se 143 .

t. Ako su S1. b. .rekurzivan definicija Atom je s-izraz. S2. modificirati i evaluirati kao da su jednostavne varijable.-=-=-=-=-=-=-=-=-=-=-= .-=-=-=-=-=-=-=-=-=-=-= . ) Niz znakova = string ( ovo je string ) Simboli (ana. Sn) lista.(* guess guess) x))) (< (abs (. Ima implicitan rad s pokaziv aèima. Evaluiraj znaèi: naði pridijeljenu vrijednost. blok.see format page 121-122 (defun good-enough-p (guess x) (format t "~% Guess =~7.j.4f Error= ~7.4f" guess (* guess guess) (abs (. ) Liste .(* guess guess) x)) . Semantiku odreðuje petlja izvoðenja: èitaj-evaluiraj-ispi i svakog s-izraza.5 Iteration and Recursion . s-expressions). LISP je pogodan za prob leme koji poèetno nisu potpuno razumljivi. Primjer programa u Lispu . S-izrazi su atomi ili liste. . x101. kao to je oblikovanje ekspertnih (inteligentnih) s ustava. Tip varijab le ne mora se deklarirati unaprijed.4f Guess^2 = ~7. Podaci nose tip pa funkcije za vrijeme izvoðenja odluèuju o specifiènoj akciji (kasnije prihvaæeno u OO paradigmi).kreirati. tada je s-izraz (S1.14. 100. S2.Section 3.001)) (defun factorial (n) (if (= n 1) . Sintaksu èine simbolièki izrazi. Sn s-izrazi. (defun sqrt-iter (guess x) (if (good-enough-p guess x) guess (sqrt-iter (improve guess x) x))) (defun improve (guess x) (mean (list guess (/ x guess)))) .One way of doing comments (line comments) . s-izrazi (engl. Zbog interpreterskog rada i brzog oblikovanja prototipa. Atomi: Brojevi (3.

n 1))))) (defun fact-iter (product counter n) (if (> counter n) product (fact-iter (* counter product) (+ counter 1) n))) (defun factorial (n) (fact-iter 1 1 n)) (dotimes (i 10) (format t "~% ~d" i)) (dolist (i (* (iseq 10) 2)) 144 .1 (* n (factorial (.

peer-to-peer klijent / poslu iteljski program. itd. teorem provers). [1] èija je sintaksa inspirirana ISWIM. . Danas postoji nekoliko jezika u ML obitelji. ukljuèujuæi genealo ka baza podataka. a iznimka rukovanje. vrsta zakljuèivanja. pplambda. algebarske tipove podataka. analizatori. OCaml. kao to je Haskell. financijskih sustava i aplikacija. ML imala kao metajezik). ML stoji za metajezik: to je bio zami ljen za razvoj taktike u dokaze t eorem komora LCF (èiji jezik. razlikuje. ML koristi statièke odreðivanja pravila. Povijesno.(format t "~% ~d" i)) ML ML je opæe namjene funkcionalni programski jezik razvijen od strane Robin Milner i ostali u kasnim 1970-ih na Sveuèili tu u Edinburghu. Primjeri Sljedeæi primjeri uporabe sintaksu Standard ML. za razliku od èisto funkcijske programske jezike kao to je Haskell. u ovim jednostavnim primjerima. meðutim. NE T platforma. to znaèi da su sve subexpressi ons uvijek procjenjuju. ali to je opæe namjene jezik se takoðer koristi u bioi nformatici. kombinacija prvog reda predikat raèun i jednostavn o tip polimorfnih lambda-raèuna. na razlièite naèine bez osnova. prvoklasne funkcij ama. ali drugi postoje. ukljuèujuæi i F # -jezik koji podr ava Microsoft za svoje. parametarska polimorfizam. uzorak podudaran ja. koja mo e automatski zakljuèiti vrstama najlak e izraza bez zahtijeva eksplicitne komentare tipa. On je poznat po kori tenju Milne rtipa zakljuèak Hindley algoritma. ciklona. Znaèajke ukljuèuju ML-po-vrijednost vrednovanja strategije poziv. Ideje iz ML utjecale brojne druge jezike. Drugi najèe æe kori tene ML dijalekt. Tako se mo e stvoriti i koristiti beskonaèan potocima kao u Haskellu. dva glavna narjeèja su Standard ML (S ML) i Caml. ML je snaga uglavnom se primjenjuju u jeziku dizajn i manipulacije (kompilatora. ML koristi eljni ocjenjivanja. Pregled ML se èesto naziva i funkcionalni neèisti jezik. Za razliku od Haskell. njihov izraz je relativno neizravne. sporo vrednovanje se mo e postiæi kroz kori tenje zatvaraèa. automatsko upravljanje memorijom putem odvoz smeæa. statièna tipkanje. Meðutim. i Nemerle. jer ne bismo ukratko opisali nuspoj ava.

Faktorijel "Hello World" funkcionalne jezika funkciju faktorijela. Izra eno kao èista ML: 145 .

Dio definicije prikazano je opcionalno. Ovo provedbu funkciju faktorijela nije zajamèena raskinuti. sa samo jednim prestanka osnovn og scenarija. kako slijedi: fun fact n = let fun fac 0 = 1 fac n = n * fac (n . primjer izgleda ovako: fun fac 0 = 1 fac n = n * fac (n-1) Funkcija je takoðer oslanja na sparivanje uzoraka. a rezultat primjene fac do n (FAC (n)) ima i tipa integer. Kada je funkcija argument je 0 (nula) ona æe se vratiti cijeli broj 1 (jedan). Za sve drug e sluèajeve u drugom redu je poku ao. te obavlja funkciju sve do osnovnog sc enarija je postignut. Na primjer. Ovo je rekurzije. jer negativni argument uzrokuje beskonaène padajuæe lancu rekurzivni pozivi. Prepisivati bez primj edbe tipa. te æe biti izveden od strane kompajlera. Funkcija èimbenika kao cj elina tada je tip funkcije cijeli u integer (int -> int). pri mjedbe tipa mogu se izostaviti. Vi e robustan provedba èek za nenegativne argument prije rekurziji. ali odvojene razmakom. Zahvaljujuæi vrstu zakljuèivanja. ML Velik di o koda je slièan matematike u pogonu i sintakse. Oznaka E: t mo e se èitati kao izraz ima tip E t. i opisuje vrste ove funkcije.fun fac (0 : int) : int = 1 fac (n : int) : int = n * fac (n-1) Ovo opisuje kao faktorijela rekurzivna funkcija. To je slièno opisima faktorijela naæi u ud benicima matematike. va an dio ML programiranja. Imajt e na umu da parametri funkcije nisu nu no u zagradama. argument je n cijeli broj dodijeljen tip a (int).1) in if (n < 0) then raise Fail "negative argument" else fac n end .

1) end 146 . To se posti e dodavanjem dodatnih. "akumulator". acc) = acc fac (n. n*acc) in if (n < 0) then raise Fail "negative argument" else fac (n. Funkcija se mo e dodatno pobolj ali pi uæi svojoj unutarnjoj petlji u rep-rekurzivna sti lu. kao da stoga ne treba rasti proporcionalno broju funkcije poziva. Napokon. dol azimo do fun factorial n = let fun fac (0. acc) = fac (n-1.Problematièna sluèaj (kad je n negativna) pokazuje kori tenje ML moæni iznimka sustava. parametar za unutarnje funkcije.

s kasnijim tisak u 1987 i 1989.Popis Obrnut Sljedeæa funkcija "obræe" elemenata u popis. Buduæi da ra èlanjivanjem algoritam omoguæuje inteligentno kori tenje izgleda (uvlaèenje). Miranda je prvi put objavljena u 1985. i vratiti liste iste vrste. Ova znaèajka. opæenito. Miranda program (zove skripta) je skup jednad bi koje defini raju razlièite matematièke funkcije i algebarske tipove podataka. zahtijeva kvadratni h vrijeme za izvr enja. Producirao ga je istra ivanje Software Ltd Engleske (koja ima ig na ime Miran da) i bila je prva èisto funkcionalni jezik koji se komercijalno podr ana. mo e konzumira ti liste èiji su elementi svih vrsta. To jest. Toènije. vraæa novu listu èiji su elementi u obrnutom redoslijedu u odnosu na dane popis. Funkcija se mo e prepisivati izvr iti u linearnom vremenu u slje deæim uèinkovitije. fun reverse [] = [] reverse (x::xs) = (reverse xs) @ [x] Ova implementacija obrnutog. Kasnije Haskell programski jezi k je slièan u mnogo naèina da se Miranda. èisto funkcionalni programski jezik. style: fun reverse xs = let fun rev nil acc = acc rev (hd::tl) acc = rev tl (hd::acc) in rev xs nil end Naime. kao brza prevoditelja u C-za Unix operaci jskim sustavima okusa. neva no je. dok toèna i jasna. i nema potrebe za definiranje subjekta pri je njegove upotrebe. Pregled Miranda je lijen. koristeæi neke koncepte iz ML i nade. ova funkcija je primjer polimorfizma parametarskih. inspiriran ISWIM se takoðer koristi u Occam i Haskell i kasn . Rijeè je va no postaviti ov dje: redoslijed jednad bi. je neefikasan. to nema nuspojava i imperativ programiranje znaèajke. To je. postoji rijetko potreba za pojaèanje izjava i izmjenjivaèi bilo izjave su obavezna. Miranda Miranda je non-strogi èisto funkcionalni programski jezik dizajniran David Turner kao nasljednik njegovih ranijih programskih jezika SASL i KRC. iako manje lako za èitanje.

147 i nastavite do kraja iste .ije popularizirala Python. Komentar je uvedena u redoviti skripte koje likovi linije.

odr an je sastanak na kojem sudionici rasporede u obliku jak konsenzus da odbor treba biti formirana za definiranje otvoreni standard za te j ezike. 10560. èisto funkcijskih programskih jezika su postojale. False. bignums) po defaultu. od kojih svi moraju biti istog tipa: week_days = ["Mon"."Fri"] Popis ulanèavanje je + +."Tue". pozna t kao "pismen original". 35) Lista umjesto je najèe æe koristi struktura podataka u Mirandu. oduzimanje je -. Miranda je najèe æe kori tena."Sun"] days = "Nil":days days!0 "Nil" days = days -. u kojima svaki red se smatra komentirajte osim ako poèinje isti m> znakom."Wed"."Thur". Torke su nizovi elemenata potencijalno mije ani tip. vi e od desetak ne-strogi. Miranda je osnovnih tipova podataka su char. izgradnji je:. 1985. ali nije bio u j avnoj domeni. Od tih. interes za li jene funkcionalnim jezicima rastao: od 1987. Mary". a razgranièene su napisane sa zagradama: this_employee = ("Folland. [10] .["Nil"] #days Nakon objavljivanja od strane Miranda Research Software Ltd.Alternativna komentirajuæi konvenciju utjeèe na cjelokupni kod datoteku izvor. Na konferenciji na funkcijske programske jezike i raèunalne arhitekture (F PCA '87) u Portland. Tako da: days = week_days ++ ["Sat". Pisano je ogranièila uglatim zagradama i razdvojene zarezom elemenata. i redovne s pomiènim zarezom vrijednos ti prema potrebi. Oregon. Svrha je Odbora za konsolidaciju postojeæe funkcionalne jezika u zajednièkim koja æe poslu iti kao osnova za buduæa istra ivanja u funkcionalnom jeziku dizajn. analogne zapise u Pascal-kao t o su jezici. Znakova je jednostavno popis char. broj i bool. dimenzioniranje je # i i ndeksiranje je!. dok je broj tiho se pretvaraju izmeðu dvije osnovne forme: proizvoljno preci znosti cijelih brojeva (tzv.

148 . Odbora napori rez ultirali u nizu jezika definicije.Haskell Haskell 1.0 Prva verzija Haskell ("Haskell 1.0") je definiran u 1990 [11].

s Glasgow Haskell Compi ler (GHC) provedba koja predstavlja trenutni de facto standard. To je èisto funkcionalni jezik. RelaxedDependencyAnalysis. to jest. i tip polimorfizma. je poèeo. [10] U sijeènju 2003. 98 Haskell jezièni standard je izvorno objavljen kao "Haskell 98 Rep ort". serija je kulminirao u Haskellu 98. Odbor izrièito pozdravio stvaranje pro irenja i inaèica Haskell pr eko 98 dodavanja i ukljuèuje eksperimentalne znaèajke. postupak definiranja nasljednik Haskell 98 standardu. te ka o baza za buduæe ekstenzije. [13] To je u tijeku proces preispitivanja rastuæi jezik definiciji. ortogonalna o vrst i funkcija. modeliran je neèistu funkcije drugih jezika. neformalno zo ve Haskell "(" Haskell Prime "). NoNPlusKPatterns. bio je najavljen u studenom 2009. Imena ekstenzija uveden u Haskellu 2010 su DoAndIfThenElse. ForeignFunctionInt erface. Tu je razlièita tipa za zastupanje nuspojave. FixityResolution. PatternGuards. [12] jezik nastavlja razvijati ubrzano. revidirana verzija je objavljena kao "Haskell 98 Jezik i knj i nice: Revised Report". namijenjen za odreðivanje stabiln o. liste spoznaja. to znaèi da se opæenito. HierarchicalModules. LanguagePragma. funkcija u Haske llu nemaju nuspojava. Uvodi jezik-Pragma-sintaksa-ekstenziju koja omog uæuje za oznaèivanje Haskell izvor kao Haskell 2010 ili odreðene obveze Pro irenje Haskell Jezik. Prva revizija. EmptyDataDeclarations. èime povezivanja s drugim programskim jezicima. [14] Haskell 2010 Haskell 2010 dodaje vanjskih Funkcija suèelje (FFI) u Haskellu. minimalan. popravci neki sintaksa problema (promjene u formaln a gramatika) i zabrana takozvani "n-k-plus-uzorci". typeclasse s. Moguænosti Glavni èlanak: Haskell znaèajke Vidi takoðer: Glasgow Haskell kompajler # Pro irenje Haskell Haskell znaèajke sporo vrednovanje. . Haskell premijer Poèetkom 2006. Èista funkcija mo e vratiti nuspojava koje su naknadno proveden. definicije oblika Fak (n +1) = (n +1) * n fak vi e nisu dozvoljeni. sparivanje uzoraka. LineCommentSyntax.Haskell 98 Krajem 1997. [10] U veljaèi 1999. nazvana Haskell 2010. prenosiv inaèici jezik i prateæih standardne biblioteke za nastavu. stvarajuæi nova revizija jednom godi nje.

[16] Tip koji predstavlja nuspojava je primjer monada. vrsta sustava temelji na Hindley-Milner tipa zakljuèak. statièki. ali su od prona ao mno go vi e koristi. Monadama su opæi okvir koji mo e 149 . koji su izvorno zami ljen kao principijelan naèin za dodavanje preoptereæenja na jezik.Haskell je jaka. [15]. H askell glavni inovacijama na ovom podruèju je dodati tip nastave.

n] -... Tu je aktivna zajednica oko jezika. Herbranda objavljenog 1930. i software transakcijski memorije. godine problemu mehanièkog dokazivanja teorema posveæeno je dosta pa nje. k ao to su generalizirana algebarske tipove podataka i Tip obitelji. Monadama su definirani kao obièni tipo vima podataka.using only prefix notation and n+k-patterns factorial 0 = 1 factorial (n+1) = (*) (n+1) (factorial n) An efficient implementation of the Fibonacci series. GHC. Poveæanje zanimanja koje je rezulturalo podruèjem logièkog programiranja u dana njem obliku mo e se prouèavati od èlanka J. [12] i vi estruke implementacije postoji. Primjer programa u Haskellu -. GHC je poznata po svojim high-performance provedbu konkurentnosti i paralelizma. ali daje neke Haskell sintaktièka eæera za njihovu upotrebu. parsing. [18] i za to to bogati tip sustava koji ukljuèuju nedavne inovacije.using recursion but written without pattern matching factorial n = if n > 0 then n * factorial (n-1) else 1 -. je i tumaè i izvorni-prevodilac koja radi na veæini platforma.n] -. is this: fibs = 0 : 1 : zipWith (+) fibs (tail fibs) Logièko programiranje Logièko programiranje nastalo je kao rezultat radova na mehanièkom dokazivanju teorema. gdje je prvi put opisan princip rezolucije. Jezik ima otvoren.Robinsona objavljenog 1965. i vi e od 1700 drugih open-source biblioteka i alata koji su dostupni u paketu online repozitorij Hackage. ukljuèujuæi i rukovanje pogre kama.modela razlièite vrste raèunanja. godine. [17] Glavni provedbu Haskell. objavljeni rad. Nakon rada J . Jedna od prvih ozbiljnih studija mehanièkog procesa zakljuèivanja napisao j e u XVII vijeku matematièar Gottfried Leibniz ("Calculus Ratiocintator").1) -.using recursion factorial 0 = 1 factorial n = n * factorial (n . . nondeterminism. as an infinite sequence.using fold factorial n = foldl (*) 1 [1. specifikaciji.A.using lists factorial n = product [1.

Poèetkom 70-ih godina ideju kori tenja logike kao programskog jezika razvili su Robe rt Kowalski (teoretski) i Maarten van Emden (eksperimentalna demonstracija) u Edinb urghu. te Colmerauer (implementacija) u Marseillesu.Rezolucija je generalizacija principa "modus ponens" i omoguæava kori tenje operacij a uporedjivanja i prepoznavanja nazvanih unifikacija (izjednaèavanja). Osnovna teza logièkog programiranja prema Kowalskom glasi: "algoritam se mo e korisn o 150 .

....n) atomi. Drugi problem jeste problem negacije. ·Hornova klauzula je ciljna ili konaèna klauzula... Kori jeni Prologa (Programming in Logic) su u matematèkoj logici.. Kako samo pozitivne informacije mogu biti logièke posljedice baze podataka..Bn konaèna klauzula tada se A naziva glava. Kontrolna komponenta govori o naèinu rje avanja problema ("kako"). ·Ako je A B1.. proceduralno orijentirane jezike je Prologov deskriptivni (opisni) i dekalrativn i pristup..... Postojeæi interpreteri ne mogu implementirati negaciju. ·veæe moguænosti za iskori tavanje pararelizma ·kori tenje jednog uniformnog formalnog sistema mo e imati korisne posljedice na programski in enjering Za postizanje ovog cilja treba rije iti dva problema. a djelomièno kori tenjem izvanlogièkih osobina jezika.. o osobinama problema i o rje enju (" ta" je problem).izraziti sa dvije komponente: logikom i kontrolom....Bn. Za sada programer mora osigurati malu kolièinu kontrolnih informacija. veæ samo problematiène verzije pravila "negacija preko neuspjeha" (negation by failure). a o kontrolnoj se brine raèunar. zakljuèak.Ak B1. Bse naziva prethodnik ili uslov...Bn tijelo klauz ule.. Prvi problem je kontrola izv odjenja. ·konaèna klauzula je formula oblika A B1. literal ·klauzula oblika Kowalskog je formula oblika A1.. a B1. ·jednostavan prikaz metodologije rje avanja problema.Bn gdje su i B (i=1.. Terminologija logièkog zakljuèivanja: Sintaksa logièkog programiranja obuhvaæa slijedeæe pojmove: ·term ·atom. Osnovna razlika u odnosu na klasiène .. Konaèna klauzula oblika A naziva se jedinièna klauzula ·ciljna klauzula je formula oblika B1. djelomièno pravi lnim poretkom klauzula i ciljeva u programu.. gdje su A i Bt atomi. Taj ideal jo do sada nije postignut. Idealni cilj logièk og programiranja je da programer specificira samo logièku komponentu algoritma..Bn. gdje su Bt atomi. Prolog se vrlo uspje no primjenjuje u podruèju umjetne inteligencije ("artificial .. t = 1." Logièka komponenta predstavlja izjavu o problemu.. rezultat ili konzekvent. a Ai Aitt posljedica. za dedukciju negativnih informacija treba koristiti po sebna pravila. Prolog Prolog je programski jezik koji se koristi za istra ivanje programske logike..k .. Prednosti logièkog programiranja su: ·jednostavnije razmi ljanje i zakljuèivanje o problemu....

engineering") i in enjering znanja ("knowledge engineering"). Prolog je programski jezik baziran na malom skupu osnovnih mehanizama ukljuèujuæi 151 .

B1n Tipovi podataka: . Strukture se po nekad nazivaju slo eni termi ("complex terms" ili "compound terms").... Klauzulam a se mo e dati deklarativna ili proceduralna interpretacija. Klauzula mo e biti èinjen ica ili pravilo.B pozivaju. Strukture se oznaèavaju funktorom iza koga slijedi otvorena okrugla zagrada. stablaste strukture podataka i autom atsko povlaèenje ("backtracking"). Program u Prologu sastoji se od skupa procedura... Strukture se sastoje od fu nktora (koji je atom) i jedne ili vi e komponenata (koji su termi). a zatim dolazi N komponenata razdvojenih zarezima i zatvorena okrugla zagrada.Bn. Klauzule koje nemaju ciljeva nazivaju se èinjenice.a prikazana je termima.. ·ili proceduralno: Procedura A mo e se izvesti ako su izvedene sve procedure koje . Atomi se sastoje od alfanumerièkih atoma i znakovnih ato ma ("sign"). pogotovo strukturirane objekte i relacije medju njima. Prolog je posebno pogodan za probleme koji ukljuèuju objekte. Pretpostavimo da su A.>.. Kao to je reèeno klauzule su èinjenice ili pravila i oznaèavaju se kao termi. Procedura se sastoji od jedne ili vi e tvrdnji ili klauzula. Pravilo (klauzula): A :.Bn termi.?. Term je konstanta.B1.. . Konstante su atomske ili cjelobrojne (neke verzije Prologa dozvoljavaju realne brojeve i negativne cijele brojeve). Varijable su stringovi koji pocinju velikim slovom ili znakom "_". Taèna sintaksa terma varira u razlièitim verzijama Prologa ali najèe æe se koristi tako zvana Edinburgh sintaksa. Atomi znakova su stringovi koji se sastoje od znakova +.. te uglavnom za nenumerièko programir anje. Takodjer se svaki string okru en znakovima navoda (') smatra atomom. u kojoj se Bi naziva cilj (goal) mo e èitati na dva naèina: ·kao deklarativnu izjavu: Dokazivost A proizilazi iz dokazivosti Bi .prepoznavanje uzoraka ("pattern matching").B1.itd. Svaka procedura definira odredj en broj logièki odnos ili predikat.$. brojeve i znak "_"...Ovaj mali skup formira fleksibilnu i djelotvornu progr amsku okolinu. Funktor koji ima dimenziju N i ma N komponenata. varijabla ili strukutra. Alfanumerièki atom je skup znakova koji poèinju malim slovom i mogu sadr avati sva slova.

::=) 152 . Varijable se od atoma razlikuju po velik om poèetnom slovu. i mogu biti vezane za objekt bilo kojeg tipa ukljuèujuæi i neku drugu nevezanu varijablu. dva. x _Z5_y) 2.. Tip podatka je jedinstveno odreðen sintaksom. ..1 . brojeva i znakova "_" koji poèinju malim poèetnim slovom (jedan.niz specijalnih znakova (<__>.Prolog definira relativno malo tipova podataka.. Atomi mogu imati jedan od sljedeæa tri oblika: 1. kao to se mo e vidjeti na slici 1.niz slova.

Strukture su objekti koji se sastoje od vi e komponenata. naprimjer. F unktor). uz prikaz koji se koristi u ostal im programskim jezicima. Prethodnom programu se mogu postaviti razna "pitanja".2001). dok armin i jasmin oznaèavaju objekt e nad kojima ta relacija vrijedi.april. Slijede dva primjera unifikacije struktura u kojima _GXXX p redstavlja novu varijablu koju u cilju unifikacije uvodi prevodioc: ?-datum(D. Dva izraza se medjusobno mogu unificirati (prilagoditi) ako su ili identièni. jasmin) U prethodnom stavku roditelj oznaèava relaciju. brojeva.3.niz znakova unutar literala ('Bosna'. Unifikacija: Unifikacija je najèe æe kori tena operacija nad podacima. èinjenica da je Armin Jasminov roditelj.1983) = datum(D1. ako elimo sazna ti da li je Armin Ivanov roditelj. U ovom primjeru. Funktor je definisan imenom koje ima sintaksu atoma i brojem argumenata.roditelj(armin. Naprimjer. datum predstavlja ime strukture (tzv.G) D=D1=_G283 M=april G=1983 Opisivanje relacija: Upotreba èinjenica u Prologu se mo e ilustrirati na primjeru relacije roditelj. ili mogu postati identièni uz o dgovarajuæa vezivanja varijabli.M. mo e predstaviti sljedeæom stavkom : roditelj(armin. ruzica) No Znak "?-" oznaèava da je Prolog spreman za "pitanje". Primjer takvog objekta b io bi datum(17. mo emo postaviti upit: ?. Opisivanje pravila: . 'Sarajevo') Brojevi mogu biti cijeli ili sa pomiènim zareom. Dozvoljeni oblik varijabli je niz slova. i znak "_". dok je "No" dobiveni odgovor .oktobar. koji poèinje ili vel ikim slovom ili znakom "_". dok su objekti odvojeni zarezom u zagradama. Tako se.

Pravilima se na temelju postojeæih relacija definiraju nove. roditelj(armin. Mo e se reæi da svako pra vilo definira jednu uzroèno posljediènu vezu. mogu opisa ti nove relacije majka i otac. Tako se na temelju relacije roditelj iz pre thodnog primjera te novih dviju elementarnih unarnih relacija musko i zensko. jasmin) 153 .

I zraz (*) se u Prologu standardno mo e predstaviti strukturiranim objektom.a.c)).random. (**) gdje su + i * funktori.Z). medjutim.Z) roditelj(Y. % . otac(X. (*). ali i roditelj od bilo kojeg drugog predaka roditelj(X. prefiksnom obl iku sa zagradama: +(*(2.sqrt).a temelji se na evaluacijskom predikatu is /2.musko(armin) . a 2. Vi e stavki koji definiraju jednu relaciju èine proceduru. o ni prirodno opisuju rekruzijom. Operatorska sintaksa predikata i strukutra: Operatorski prikaz je posebno pogodan za èitko predstavljanje èestih operacija: 2*a + b*c.b..**. + i * predstavljaju operatore. (b. Buduæi da se vrijedn ost aritmetièkog izraza odredjuje konvencionalnim metodama. U Prologu se. U konvencionaln im jezicima.pi.Y).. Slijedeæi ilustrativni program iz pro log primjera roditelj mo e se definirati rekruzivna relacija predak: % predak je roditelj predak(X. Predikat is/2 vraæa istinu ako mu se prvi argument mo e unificirati sa artimetièkom vrijedno æu drugog argumenta.Y) : roditelj(X.Y) :roditelj( X. Pri tome drugi argument mo e biti i slo en aritmetièki izraz.a. Najjednostavnija primjena rekruzije je modeliranje rekruzivnih relacija.c njihovi argumenti.*. Relacija predak je opisana sa dva stavka to znaèi da vrijedi ako je zadovoljen bilo koji od njih. Zato je podr ka za numerièke operacije u Prologu relativno skromna. Nepo tiva nje tog . dok su 2.. eventualne varijable u dru gom argumentu predikata is/2 moraju biti vezane u trenutku poziva predikata.b. èija vrijednost se odredjuje ugradjenim procedurama koje su pridru ene predefiniranim aritmetièkim funktorima (+. U izrazu (*).. ti problemi se opisuju programskim petljama. Artimetièke operacije: Prolog nije namjenjen za opisivanje numerièkih postupaka. u tkz. musko(X) Rekruzivna pravila: Veliki broj problema u raèunarstvu se rje ava iterativnim pristupom.a).Y)..c atomi.

X is 1+2 154 .X=1+2 X=1+2 ?. ?. koja obièno rezultira nasilnim prekidom izvodjenja programa.ogranièenja dovodi do iznimke.

nl. Smaller.M is (X*Y)/D . Smalls. lcm(X. Pivot.X=3 Izvan-logièke osobine: Kori tenje Prologa u "stvarnim" aplikacijama zahtjeva ponekad kori tenje jeziènih osob ina koje ne ulaze u èistu logiku. X. Primjer programa Quicksort(algoritam za sortiranje): partition([]. [X].Y. Rest. Pivot. Bigs = [X Rest].M) :-gcd(X. Ugradjeni predikati za modificiranje programa koriste se za dodavanje i brisanje klauzula iz baze podataka. Ulazno/izlazne operacij e karakterizirane su popratnim djelovanjem pa su stoga izvan-logièke. Bigs) .R is X mod Y. quicksort(Smaller).D).X). Na taj je nacèin moguæe napraviti samomodificirajuæe procedure. Primjeri u Prologu: Primjer programa Hello world: ?.0. gcd(X. []. Bigs) : ( X @< Pivot -> Smalls = [X Rest]. Pivot.R. ulaz i izlaz. Primjer programa za trazenja najveæeg zajednièkog djelitelja i najmanji zajednièkog sadr aoca: gcd(X. partition([X Xs]. _.Y. quicksort([X Xs]) --> { partition(Xs.Y. Smalls.D). predikati za modificiranje programa i kontrola izvodjenj a. gcd(Y. quicksort(Bigger). []).Ove osobine omoguæene su ugradjenim predikatima koji se mogu klasificirati u pet kategorija: aritmetièki predikati i operatori. partition(Xs. Rest) ). quicksort([]) --> []. Bigger) }.D) :. partition(Xs.write('Hello World!'). baratanje znakovnim nizovima. Ulaz i izlaz su potrebni zbog komunikacije s korisnikom.

Primjer programa Fibonaæijevi brojevi: fib(1. fib(N1.R is R1+R2 155 .R) :-N >= 3.1) fib(N. fib(N2.1) fib(2.R1). N1 is N-1.R2). N2 is N-2.

156 .

Sign up to vote on this title
UsefulNot useful