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. interni rad na objektima mo e biti promjenjen bez da se u tièe RekonstrukcijaColossusaiz 2006.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. Ovo je najuticajnija programska parad igma u komercijalnom razvoju softvera. Java. Eiffel.godine 4 . U ovim jezicima. ranih 1980-ih je razvijeno objektno-orjentisani programiranje. Radi ovoga. Primj eri su Simula. C++. Smalltalk. itd. To znaèi da je brzina i efikasnost programa najvi e zavise od sposobnosti i iskustva programera. Nakon toga.

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

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

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

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

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

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

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

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

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

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

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

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) . U svim sljedeæim dijagramima. a izlazni je zelena linija. zajedno sa otpornikom i vrijednosnim kondenzatorom. 15 .I ovo je shema sklopa koji smo izgradili.

Svi izlazni oblici valova proizvod e karakteristièni termalni um. Osim toga. kao sto su bili za ASIC procesi. Moguænost a uriranja funkcionalnosti poslije dostave i niskih bespovratnih tro kova. koja sadrzi trenutne implementacije. U veæini FPGA. N eki dizajneri takoðer sadr e vi e arhitekture i konfiguracija.Kvadratni val Sinusni val Efekti uma su zapa eni kod svih izlaznih valova. 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 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. veæina dizajnera uvozi zbirke modula. barem u smislu va nosti. 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. Jednostavno AND kolo u VHDL-u bi izgledalo otprilike ovako : 16 . dizajn se sastoji od minimuma cjelina koje opisuju suèelje i arhitekturu. ali je ovo izuzetno rijetko). 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. FPGA je integrisani sklop dizajniran da bude pode en od strane kupca/korisnika ili dizajnera poslije procesa proizvodnje-odakle i programibilno polje . U VHDL. 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. tehnièki. bez obzira na ulazni val. (sklopni dijagrami su se prethodno koristili za odreðene konfiguracije. FPGA se moze koristiti za implementa ciju bilo koje logicne funkcije koju moze obavljati ASIC. Takoðer se mo e primijetiti da je izlazni oblik valova za ovaj sklop bio vrlo slièan. Ovaj sklop je takoðer dao bolji odg ovor. relativno ko ta ASIC dizajn (ne odupiruci se opæenito veæoj jedinstvenoj cijeni) nudeæi prednost za mnoge aplikacije/zahtjeve. logika blokova ukljuèuje pamæenje elemenata koji mogu biti jednostavni flip-flopovi ili vi e cjelokupnih blokova mem orije.

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

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

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

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

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

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

heksadekadno kodira kao 7C. 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). na primer) ili adresa nekog bajta memorije. Naredba LD A. Skraæenica LD dolazi od "load" i znaèi: prenesi sadr aj registra H u registar A (akumulator). (7530). shvatiti strukturu na redbi. C. Ova j adresni deo mo e da bude neki od procesorskih registara (B. A. D. H. Iza skr aæenice se pi e adresni deo koji govori raèunaru gde se nalaze podaci koje treba da obraðuje. L kod procesora Z80. Za pisanje programa na ma inskom jeziku potrebno je. na primer. najpre. 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 . E.

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

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

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

22 .

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

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

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

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

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

R9 . R8 <. increment pointer for B[k. j] ADDF2 R9.b #OUTCH. R9 <. (R6). k]*B[k. 0 je wait_on_input xor EAX. k] ADDL2 #400. increment pointer for A[i. R6 .A[i. R8 . a drugi podr avaju 28 . continue if > 0 Makroji (Macro) Mnogi asembleri podr avaju predefinirane makronaredbe. j] SOBGTR R7.b (a2)+.l a1. loop3 . decrement loop count. k]*B[k.d7 move.print_s move. [EBX] pop edi Vax 11 (3 adresni): loop3: MULF3 (R5)+.a2 print_s_loop add. j] and .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.

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

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

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

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

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

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

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

ako je uspje na. tuma izvr ava kod vezan uz rijeè. Ako rijeè nije pronaðena. a zatim se vraæa u ra èlanjivanje ostatka. Interpreter èita ulazne podatke iz ureðaja korisnièkog unosa. Kad interpreter pronaðe rijeè. 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. Ako je rijeè pronaðena. onda ra èlanjuje rijeèi u prostoru ogranièenja.Neki sustavi prepoznaju dodatni razmak znakova.Sadr aji Forth gramatièko ra èlanjavanje je jednostavno. poku ava pronaæi rijeèi u rjeèniku. uprkos tome to nema eksplicitne gramatike. U 32 .

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

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

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

backward ptr to previous word address: codeword \ ptr to the code to execute this word any-array: parameterfield \ unknown length of data. odreðene komponente su gotovo uvijek prisutne.Taèan format unosa rjecnika nije propisan. or opcodes end-structure forthword 34 . Opisan kao struktura. words. 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. i implementacije se razlikuju. iako se taèno velièina i red mogu razlikovati. Meðutim.

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

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

odgoditi. Neposredna rijeè Rijeè TRENUTAN obilje ava najnoviju definiciju kao neposredna rijeèi. ali to se mo e nadjaèati koje programer. Slièno tome. 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. odnosno. 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. . Izvr enju tokena mogu biti pohranjeni u varijable. 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. Rijeèi '(karta) uzima ime rijeèi kao parametar i vraæa token izvr enje povez anih s tom rijeè o podacima stog. ((Paren) i \ (backslash) mora bi ti odvojen razmakom od sljedeæih komentar tekst. U ANS Forth. ' i: NoName primjeri su ra èlanjivanja rijeèi koje se iz svoje argumente za unos korisnik umjesto podataka stog. To omoguæava primjenu tzv dr avnom pametnih rijeèi s pona anjem koji se mijenja u skladu s trenutno stanje tumaèa.ulaze tumaèenje dr ave ili kompilaciju dr ave. Struktura koda U veæini Forth sustava. respektivno. djelotvorno zamijeniv i svoju kompilaciju semantike s tumaèenjem semantike. rijeè \ (backslash) koristi se za komentare koje nas tavljaju kraj trenutne linije. slièno djelovanje upuæuje na C programskog jezika. (kompajl iratizarez) traje izvr enje tokena iz podataka stog i dodaje povezana semantika na trenutnu definiciju. Je primjer neposredne rijeèi. ili neki oblik . ANS u Forth. Neimenovane rijeèi Neimenovani rijeèi se mo e definirati s rijeèi: NoName koji kompilira sljedeæe rijeèi do sljedeæeg. 'RANDOM-rijeè EXECUTE jednak je RANDOM-word. Izvr enja tokena daje neprozirni ruèka za sastavio semantika. ne sastavlja. u bilo dr ave. 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. [21] Trenutan rijeèi obièno se izvode tijekom kompilaciju. [22] Ra èlanjivanje rijeèi i komentare rijeèi: : . 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. tijelo kod definiranja sastoji se od bilo strojnom jeziku. Da se rastaviti ispravno. U interpretaciji stanja. Rijeè EXECUTE traje izvr en je tokena iz podataka stog i obavlja povezana semantika. (polu-debelo) i odlazi na izvr enje tokena podataka stog.

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

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

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

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

Obe. sve razlièite.i CHAR i [C HAR] su unaprijed definirane u Forth ANS. Zamjene kontroliraju 38 . Kori tenje neposrednih i odgoðenih operacija [CHAR ] mogu su definirani ovako: : [CHAR] CHAR POSTPONE LITERAL . IMMEDIATE Kompletan program RC4 cipher U 1987 Ron Rivest razvio je RC4 cipher-sustav za RSA Data Security. 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. Imamo niz od 256 bitova.Ova se definicija koristi \ (backslash) za opisivanje komentara.

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

.R SPACE 4C ARCFOUR 2 . CREATE KEY: 64 CHARS ALLOT : !KEY ( c1 c2 . 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 . HEX 61 8A 63 D2 FB 5 !KEY KEY: COUNT ARCFOUR-INIT CR DC ARCFOUR 2 .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. PostScript je najpoznatiji po tome to je jezik za .. Ovo je jedan od mnogih testova za provjeru koda.R SPACE 2C ARCFOUR 2 .R CR .R SPACE EE ARCFOUR 2 .R SPACE F9 ARCFOUR 2 .

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

. jer treba imatii izgled stack-a na umu. PostScript je intrepetirani. Kao opæe konvenci je. ali èitanje program zahti jeva malo vje be. to èini redoslijed operacija jednoznaèanim. Veæina operatora ( to je u drugim jezicima pojam funkcije) uzima svoje argumente iz stack-a.orijentiran je i na garbage collection. buduæi da je jezik na razini 2.moguæe je pisanje raèunalnih programa u PostScript kao u bilo kojem drugom programskom jeziku. Simbol "%" se koristi za uvoðenje komentara u PostScript programe. tako da s vako daljnje pisanje æe biti primenjeno na korisnièki definiran "tip" koji je lijevo od k oda koji ih provodi.scoped memori ji i. Literala (npr.. brojevi) imaju uèinak postavljanja svoje kopije na stack-u . Meðutim. svaki PostScript program bi trebao poèeti sa znakovima "%!" tako da svi ureðaji mogu to ispravno protumaèiti kao PostScript. ali s jako dinamièanim pisanjem i strukture podataka inspirirane kao one u Lisp. 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. stack-based jezik slièan Forth-u. za razliku od nekih drugih . Sofisticirani strukture podataka mogi biti izgraðene na polju i rjeènik tipa. 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. i mjesto njihovih rez ultati je na stack-u. Hello World Hello World program je uobièajen naèin da se poka e mali primjer kompletanog programa u odreðenom jeziku. Jezik kori sti Reverse Polish notaciju. ali ne mo e biti progla en u sistemu pisanja. koji ih vidi sve samo kao polja i rjeènicima.

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

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

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

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

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

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

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

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

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

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

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

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

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

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. 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. koja je vrlo slièna READ izjavi: PRINT *. 2 -1) ne dobije uvijek kao rezultat cijeli broj. X . PROGRAM izjava Programu se opcionalno mo e dati ime tako da poèinje sa jednom PROGRAM izjavom. output_list output_list je jedna konstanta. 7 / 5) ili podizanjem cijelog broja na cijeli broj (npr. Ovo pravilo nije u skladu s pravilima iz aritmetike.Y PRINT izjava ispisuje izlazne liste na ekranu terminala u standardnom formatu. u kojem se dijeljenjem jedn og cijelog broja sa drugim (npr. Ako je jedan operand INTEGER a drugi REAL. Expression Promjenljivi Rule tip tip INTEGER REAL Pretvori u Real REAL INTEGER Skratiti PRINT izjava Izlaz mo e biti printan koristeæi PRINT izjavu. pravila navedena pod 'Type rules (Tip pravila) se primjenjuju. odvojenih zarezima.'THE RESULTS ARE'.2. tj. Primjer: PRINT *. INTEGER operand se pretvara u svoj pravi ekvivalent prije nego to se operacija izvede. 47 . varijabla ili izraz ili popis stavki.'AND'. a vrijednost rezultata je REA L. To je oblik: PROGRAM program_name gdje program_name je naziv u skladu s pravilima za Fortran varijable.

.

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

5 48 .2 INTEGER STOPS.FILLUP 8 USED = 40*STOPS + FILLUP 9 C COMPUTES THE PETROL USED AND CONVERTS IT TO REAL 10 KPL = KM/USED + 0. 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 *.STOPS. KM.

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

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

ERR=75.1) GO TO 35 WRITE (6.1000) MSGOK TO 60 45 WRITE (6.1000) MSGNG IF (FOUND.LNAME (ENDSW.ERR=75.500.EQ.700) READ (5.0) GO TO 75 IF (EMPSER.IOSTAT=INT) SERNO.LNAME IF (INT.1.500.LNAME IF (FNTYPE.1) GO TO 65 READ (11.EQ.EQ.GT.ERR=75.500.500.FNAME.FNAME.1000) MSGOK WRITE (12.LNAME GO TO 10 15 FOUND = 0 ENDSW = 1 GO TO 25 20 FOUND = 1 25 IF (FNTYPE.NE.0) GO TO 55 65 CLOSE (UNIT=11) CLOSE (UNIT=12) STOP .EQ.IOSTAT=INT.600) FNAME WRITE (6.IOSTAT=INT) SERNO.FOUND.FNAME.EQ.LNAME (INT.800) READ (5.FNAME.900) FNAME.END=15) SERNO.FOUND.600) LNAME 50 55 IF 60 IF WRITE (6.END=65) SERNO.1.AND.IOSTAT=INT.ERR=75.3) GO TO 40 TO 45 WRITE (6.EQ.AND.SERNO) GO TO 20 WRITE (12.0) GO TO 65 GO TO 55 30 FNAME = BNAME LNAME = BNAME GO TO 45 35 GO 40 GO IF (FNTYPE.0) GO TO 30 IF (FNTYPE.EQ.EQ.4) GO TO 50 SERNO = EMPSER WRITE (6.EQ.10 READ (11.

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

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

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

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

jer programa koji tekstualnoj datoteci dodaje brojeve. 52 .

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

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

1977. BASIC je i danas odlièan alat za uèenje programiranja. 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. a Apple II i TRS-80 su imali sliènu ali noviju verziju. Osmislili su ga maðarski matematièar i informatièar John George Kemeny i amerièki informatièar Thomas E. koji je glavni jezik za .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. Koji je sadr avao mnogo novih strukturalnih naredbi. èime su irili veliku familiju verzija BASIC-a. Samim time. f amilija verzija BASIC-a je najveæa od svih programskih jezika.NET platforme. 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. koji je razvijen od strane Aco m Computers Ltd. kao programski jezik koji bi pribli io sv ijet programiranja osobama kojima to nije primarna struka. Kako su dolazili novi kompjuteri na tr iste svaki je dolazio sa no vijom verzijom. Mnogi kuæni kompjuteri 80-tih su u ROM memoriji dobijali neku verziju BASIC-a. Primjer jednog koda u BASIC-u: . BBC je izdao BBC Basic. s obzirom da je svaka upot reba kompjutera zahtjevala pravljenje posebnog softvera. BASIC BASIC (Beginner's All-purpose Symbolic Instruction Code) je napredni programski jezik. 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. Tako je recimo. Commodore PET je imao verziju Micro-Soft BASIC . Kurtz 1964. ali i kao osnova mnogo slo enij ih jezika poput Microsoft Visual Basic. godine.

A$ 100 IF LEN(A$) = 0 THEN GOTO 90 54 . U$ 30 INPUT "How many stars do you want: ".10 INPUT "What is your name: ". U$ 20 PRINT "Hello ". 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? ".

110 120 130 140 A$ = LEFT$(A$. Stringovi su se uvodili dodavanjem znaka $ nakon imenovanja varijable. Multidimenzionalne matrice su mogle imati i numerièku i slovnu vrijednost. Imena varijabli u BASIC-u su morala na prvom mjestu sadr avati slova. U$ END Varijable Klasièni BASIC je razumio samo jedan tip varijable i stringove.54 Jedina numerièka varijabla je bila binarna implementacija pokretnog zareza . Primjer: A=5 A$="THIS IS A STRING" K7=10 BB$="HELLO!" ZZ=1. tako i za string varij able: + sabiranje . 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 ". Svaka varijabla je zauzimala 5 bajta memorije i mogla je biti u opsegu od -1E+38 do 1E +37.3)=4 A$(2.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 .2)="XYZ123" Operatori i simboli BASIC ima nekoliko operatora za kako matematièke operacije. dok je na drugom mjestu moglo biti ili slovo ili broj.

To mo e biti fiksni broj. 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.num) daje prvih num slova stringa str LEN(str) daje du inu stringa MEM daje vrijednost preostale memorije u bajtima 56 . 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.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. varijabla ili neka druga operacija ili funkcija koja sadr i numerièku vrijednost str znaèi da se tra i string. 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.

y num) daje boju na grafikonu na poziciji x. Ako name nije zadan. otvara sljedeæi program CLOADM [ name ] otvara program u ma inskom jeziku iz kasete. 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. te se izvr ava po tom podprogramu. Ako nije naveden name ..var. 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}].start num.. zatvara kasetu) CLS(num) èisti ekran.MID$(str. a ako je negativan daje vrijednos num 0 num u radijanima u string jezièni podprogram na lokaciji 275 i 276 u memoriji. tj.. 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. 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.y RIGHT$(str..NEXT (num) stvara FOR petlju sa zadan im parametrima 57 .. 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.var.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. otvara sljedeæi dostupni program CLOSE [device number] zatvara ureðaj (u COLOR BASIC-u ovo jedino mo e biti #-1.

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. 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 . 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.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.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. data zapisuje vrijedonst data (0-255) na adresi memorije (0 65535) RESET (x.

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

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

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

60 .analizirati korisno strukturirani program.

Debate Godine 1967 pismo od Dijkstra pojavilo se u Communications of the ACM s naslovom "GOTO naredbe smatra tetnim. 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.. ali on se nije slo ilo (i jo uvijek se ne sla e ) i ukidanje GOTO naredbe.. prilag odljivost programa ili upravljanja bit æe jo jedan . on je dao primjere gdje je vjerova o da direktno vodi do skoka jasnije i uèinkovite bez rtvovanja logiènosti. sve unatrag grane na desnoj strani. U svom radu 1974. 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.. kvaliteta. 1969 u svojim Nap omene o strukturirano programiranje.. koje je naveo Böhm i Jacopini dokaz. i nema kri anja je dnih i drugih. 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. ." U pismu. Mnogi od onih koji poznaju prevodioce i teorije grafova su zagovarali do pu tajuæi samo reducirati tok grafova. pozvao na ukidanje nesputan GOTO od jezika visoke razine u interesu pobolj anja kvalitete koda. "srtuktuirano programiranje s Goto izvje taji". 198 7 je jo . Donald Knuth je prihvatio naèelo da programi moraju biti napisani s logièno na umu. Projekt je bio veliki in enjering uspjeh. Dijkstra je napisao: Kada smo zauzeli stav da to nije jedino zadatak programera za izradu odgovarajuc eg programa. to vi e znaèajnih spora u nadolazeæim godinama je bilo strukturirano programiranje zaprav o mogao pobolj ati softvera jasnoæa. iako je Dijk stra kritizirao naèina na koje Millsovo tumacenje razlikuje od objavljianih radova. i razvoj dovoljno vremena da se opravd a obuku programera u njemu. 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. Ovo pismo se obièno navodi kao poèetak rasprave strukturirano programiranje. U nastavku æe postati jasno da plan korektnosti nije moja jedina briga. mnogi programeri koji nisu upoznati s teoremom sumnjao je u svoja potra ivanja. Iako. a menad eri u drugi m kompanijama navode u prilog usvajanja strukturiranog programiranja.

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

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

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

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

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. 63 .

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

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

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

65 .

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

Djelimièno slabi tipovi (na primjer.. Slo ene funkcije kao to su I /O.. znakovi se mogu koristiti kao cijeli brojevi) Nizak nivo pristupa memoriji raèunara . definiran u aritmetickim podacima.. a Algol 80 ( ) ). kori tenje stringova.end. i uvjetnu kombilaciju. 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. na primjer: Znak { . kao to je u Fortran-u.Znak = se koristi za raspored (kopiranje). dok je u Algol-u: = .. Relativno mali skup unaprijed odredjenih fraza Govorne structure koje vi e lièe na B nego na ALGOL. } (Algol 60 koristi begin. matematièkih funkcija dosljedno prevedenih na biblioteke programa. Oznaka == se koristi za 66 . kod za ukljuèivanje datoteka.

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

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

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

Do 1973 . Ova knjiga.(Raniji primjeri ukljuèuju Multic s sistem (napisane u PL / I)i MCP (Master Control Program) za Burroughs B5000 napisane u Algol-u 1961. slu io dugi 68 . C jezik je postao dovoljno sna an da su veæina UNIX jezgara operativnih sistema iznova napisana u C-u.· Originalne PDP-11 verzije UNIX sistema razvijene su u asemblerski jezik. uz dodatak struktura tipova.) U 1978. 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".

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. test1 = SomeFunction (). * / / * Int * / CallingFunction () ( long int test1. ako (test1> 0) test2 = 0. ako se koriste prije definicije funkcije. Dok K & R deklaracije funkcija ne ukljuèuju bilo kakve informaciju o argumentu fun kcije. jer su mnogi stariji kompajleri jo uvijek bili u upot rebi. Funkcija koja se kor istila bez ikakve prethodne deklaracije se . a drugo izdanje knjige poslije pokriva ANSI C standardom. ako je njeg ova vrijednost veæ kori tena. / * OtherFunction int (). Na primjer: long int SomeFunction (). vracala na cijeli broj. po pretpostavci .int deklaracije mogu biti ispu teni u K & R C . . samo funkcije koje su vratile ne -cjelobrojnu vrijednost tr ebale su biti deklarisane. Verzija C koji opisuje se najèe æe spominju kao K & R C. U ranim verzijama C. ) Sve navedene komentare out .10 umjesto eventualno namijenjene I = -10 Èak i nakon objavljivanja 1989 Standard C. povratak test2. 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. drugo test2 OtherFunction = (). koji je bio interpretiran kao i =.niz godina kao neformalni specifikaciju jezika. Registrirajte / * int * / test2.

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

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

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 =, ^ =, <<=,>> =) )

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

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

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

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

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

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

mamtematièkih stringova i vrijednosti vremena.*(i + x) = 1. ali uglavnom ih posjeduju s vi C programi. ali taèna: i[x] je ekvivalntno *(i + x) */ Primjetiti da je posljednja linija neobièna. ALGOL 60 je meðutim postavio standarde za izradu algoritama i imao je velik uticaj na buduæi razvoj jezika. ali semantiècki taèna. 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. C omoguæava tri puta da se smjesti objekat u memoriju. postoji irok krug drugih dostupnih biblioteka. Ova zadnja linija mo e biti pronadjena u C kod u. Algol 60 ALGOL 60 je kori ten uglavnom u svrhu istra ivanja od strane raèunarskih nauènika u Sjedinjenim Dr avama i Evropi. koja je specifièna po ISO i ANS I C standardima i dolazi sa svakom C implementacijom. koji mijenja indeks varijabli i sa varijablom x. Statièko smje tanje u memoriju: mjesto za objekte je osigurano za vrijeme kompajliranja ti objekti imaju ivotni vijek samo dok ono traje. 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. . prijenos memorije. U C u s e biblioteka sje ta u funkciju sadr anu u jedinstvenoj arhivskoj datoteci. Dok su mnogi programi napisani u C-u . /* neobièna upotreba. Njegova upotreba u komercijalne aplikacije je bila uskraæena usljed nedostatka opisa u standardno ulazno / izlaznim objektima nezainteresovanosti velikih raèunarskih kompanija. Ova biblioteka podr avca input i output tok. ali njegova upotreba je strana i èudna medju C programerima. izraz: i[x]. 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.Biblioteke su èesto napisane u C-u zbog toga sto C kompajleri generi u ob jektni kod. Memory management Jedna od najva nijih funkcija programerskog jezika je da omoguæi rukavanje memorijom i objektima koje su pohranjene u memoriji. i[x] = 1. i deklaracije specijalnih tipova podataka i makro simbola kor i tenim u ovim funkcijama. Biblioteke: Programski jezik C koristi biblioteke kao primarnu metodu za ekstenziju. Perl i Python.

Nasuprot tome. ALGOL 68 je ponudio opse ne biblioteke transput objekata (ALGOL 68 sinonim za ulazno/izlazne). Poziv-po-imenu imao je odreðe na 76 .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). primjena im je bila samodefini uæa te su rijetko bili kompatibilni jedni s drugima.

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

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

Projekt je osnovan . Ova skraæenica se podudarala sa skraæenicom za Britanski nacionalni laboratorij fizike te je zamijenjen sa MPPL. Nadali su se da bi FORTRAN mogao biti pro iren za potrebe poslovno orjentisanih programera.tl(l))) filter(p. 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. Velika Britanija. 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. 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. IBM-ov System 360 (najavljen 1964. Kontrola PL/I je obav ljana najprije u Centru za programiranje u Njujorku a kasnije u IBM-ovoj laboratoriji u Hursliju. 0. IBM je elio jedinstven programski jezik za sve korisnike. Prva definicija se pojavila u aprilu 1964 godine. list l) list: is nil then nil p(hd(l)) then cons(hd(l). 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. 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 . 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. sieve( filter( not multiple. tl(l) ))) fi. filter = (proc (int) bool p. a kasnije. Slièno. filter(p. nasljednika sv ih postojeæih IBM arhitektura. tl(l)) proc sieve = (list l) list: if l is nil then nil else proc not multiple = (int n) bool: n mod hd(l) . god) je bi o dizajniran kao zajednièka ma inska arhitektura za oba tipa korisnika. Pokazalo se da tako veliki jezik ima potrebu za formalnom definicijom PL/I-ja. 1965 godine sa PL/I (sa rimsko I kao FORTRAN-ov IV ). proc primes = (int n) list: sieve( tl( one to(n) )).proc if l elif else fi.

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

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

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

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

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

oba iz Xerox-a. FROM InOut IMPORT ReadInt. j := Next (j). j). 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. Done. end loop. Dizajn jezika je bio pod uticajem programskog jezika Mesa i novi h moguænosti za programiranje osobnih raèunara Xerox Alto. procedure Print (j: in out Integer) is function Next (k: in Integer) return Integer is begin return k + 1..Put_Line ('The total is: '. MODULE SumAndAverage. WriteString. CloseOutput. begin Ada. OpenInput. 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. begin while i < Integer'Last loop Print (i). VAR . OpenOutput. end Next. end Print. end Mine. kao revizija Pascala da bi slu io kao jedini program ski jezik za operativni i aplikacijski softver radne stanice Lilith. WriteInt. CloseInput.package Mine is type Integer is range 1 . koje je Wir th vidio tokom 1976 u Xerox PARC-u.Text_IO. i : Integer := Integer'First. WriteLn. 11.

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

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

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

wave () DECLARE SUB save. unaprijeðe nim programskim strukturama. ":acquire:complete 1". razvijanog od stran e Microsoft korporacije za kori tenje u MS-DOS operativnom sistemu.n. boljom diskovnom i grafièkom podr kom te kompajlerom u dodatku interpreteru. DECLARE SUB init () DECLARE SUB get. END SUB SUB measure FOR count% = 1 TO 6 PRINT #1. CALL enter(servofreq(count%)) 'input vav motorv(count%) = TIMER NEXT count% END SUB BCPL . ":digitize channel1". PRINT #1. PRINT #1. lf$. Zasnovan je u ma njoj mjeri na GW-BASICu ali je podpomognut sa korisnièki-definisanim tipovima.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. Microsoft je prodavao QuickBASIC kao komercijalni paket za razvoj. lf$. ":acquire:type normal".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.@ 11. lf$. ":measure:freq?".8" FOR RANDOM AS #1 LEN = 2 PRINT #1.6 SAY "COMPROMISSO: " + COMPRO @ 15. lf$.

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

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". simplified from a compiler example. (Na primjer. ) Da bi ovo moglo raditi.TO/K". 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". 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. // Routine to compute a checksum of a // named file.nije bila rijeè veæ byte. + je sabirao dvije vrijednosti zajedno treti rajuæi ih kao cjelobrojne tipove. znak ! uno eno u vrijednosti. 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. efektivno tretirajuæi kao pokazivaè. realizirano je tako da se ne vr i provjera tipa. kori tenu za obradu vrijednosti. sum) .

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

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

Osnovna svojstva OO metodologije Sada æemo se ukratko baviti nekim osnovnim svojstvima OO metodologije. 85 . Olak ano odr avanje softvera: Kori æenjem OO metodologije znaèajno se olak ava odr avanje softvera.Pona anje se odnosi na to kako objekti reaguju na poruke. Spoljni svet. 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. kao je veæ reèe no. to jest kako menjaju sop stveno stanje (atribute) i/ili aktiviraju svoje metode. jer je jednostvnija identifikacija modulèa koje treba menjati. data hiding) Enkapsulacija je jedan va an koncept u OO programiranju. Enkapsulacija (Encapsulation. Vi estruko kori æenje klasa: Jedanput dizajnirana klasa mo e biti iskori æena u raznim aplikacijama.

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

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

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

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

string name. Ovi èlanovi su varijable (ukljuèujuæi i èlanove drugih objekata i klasa). Gornje definicije su funkcionalno ekvivalentne. name (eng. int main () . }. funkcije (specifièni identifikatori ili preoptereæenje operatora) poznatije kao metode. 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. struct personclass person {{ string name. Nakon jedne od ovih deklaracija (naravno ne obje). Svaki èlan nakon to je nai ao na razvrstaè imat æe povezani pristup sve dok drugi razvrstavaè ne naiðe. }. ime) i age (eng. class person { public: string name. osoba) koja ima dva javna èlana baze. T aèkazarez nakon vitièaste zagrade je obavezna. Osnovne deklaracijske I èlanske varijable Klase se deklari u sa rijeèima class ili struct.public: int age. Tu je i nasljedst vo izmeðu klasa koji mo e koristiti protected: razvrstaè. È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. Deklaracija èlanova se nalazi unutar ove deklaracije. int age. konstruktori i destruktori. int age. }.Deklaracija i upotreba C + + klase imaju svoje èlanove. godine). Oba koda æe difinisati objekat tip a person (eng.

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

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

Uz èlana funkcije print(). 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 .*/ } U gornjem primjeru print () funkcija je deklarisana u tijelu klase i definisana sa kvalificiranjem iste sa imenom klase praæenom sa ::.print (). gdje su a i b gore nazvani kao po iljaoci. ispis se mo e pojednostaviti u: a. Na primjer. ali ovo nije potrebno po standardu. Nasljeðivanje Izgled ne-POD klase u memoriji se ne odreðuje C + + standardom.print () b. 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.

ali zvanjem integer * i nteger suma.Na primjer. Osoba mo e proglasiti struk turu kao integer u kojoj varijabla really pohranjuje cijeli broj.*/ mogu biti preoptereæeni kako bi odgovarali potr ebema programera. 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. ali ovo nije tra eno. cijeli brojevi se mogu vratiti : struct integer . umjesto umno ka cijelih brojeva. 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. preoptereæeni operatori bi se trebali pona ati skoro isto kao to se pona aju u ugraðenim baznim tipovima (int. Po konvenciji. razmislite o class P { int x. Pravilno napisam C++ program ne bi trebao praviti pretpostavke u vezi sa izgledom naslijeðenog polja. class C : public P { int y. Preoptereæeni operatori U C ++-u operatori kao to su + . }. ni u kom sluèaju.). Ovi se operatori nazivaju preoptereæeni operatori.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. }. itd.

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

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

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

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

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

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

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

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

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

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

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

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

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

e za 97 .

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

.

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

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

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

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

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

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. 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. 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 . 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. u ovom prozoru je naslov 'Programiranje: Osobine.' ) C lie ntHeight Visina 'korisnog' dijela prozora C lientWidth irina 'korisnog' dijela prozora Color Boja Constraints Ogranièenja ( npr. maximize.

Object Inspector 104 .PopupMenu Odreðuje popup meni za objekat Position Odreðuje poziciju prozora ( npr. Maximized -starta se maximizovan ) Slika 2. 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.

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

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

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

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

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

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

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

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

omoguæavajuæi asemblerske dijelove i sistem znakova direktnih CPU kodova. nije potrebno imati memoriju niti menad era memorije. Metarazred je prvi razred instrukcija ili objekata. onda jednostv ano trebaju da ponovo prikupe podatke iz nove verzije. Iako Delphi koristi programski jezik visoke kvalitete. 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.PREDNOSTI Delphi je visoko razvijeni program namijenjen mnogim korisnicima jer se lako upo trebljava i bazira se na raniji Object Pascal jezik. Delphi nije. terminate-kraj) Nizovi mogu biti uvezani u lanace koristeæi + znak. Za one koji vi e vole nizove i vrste nizova. 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). radije nego koristeæi funkcije. Programski jezik je prilagoðen Rapid Application Development (RAD) i ima integrisa n IDE (Integrated Development Environment) . Postoje reference namijenjene za numerisane vrste (tipove) u nizu (kao i niz za poèetak i zavr etak. Svi Delphi proizvodi imaju veliku bibliot eku koja se zove VCL (Visual Component Library) i ukljuèuje veæinu njihovih izvornih kodova. Koristeæi razredne pomoænike (class helpers) mo e se uvrstiti nova funkcija u jezgro R . Biblioteke od treæe strane trebaju nadogradnju od strane prodavaèa ili ako veæ imaju izvorni kod. null-poèetak. VCL je sofisticirani sastavni model koji se mo e iznova koristiti i iri ti od strane razvojnog programera. 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. 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. VCL je rano usvojio Dependency inject ion ili Inversion of Control. u veæini sluèajeva. Iako je Pascal napravljen iskljuèivo za p otrebe edukacije. 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. a takoðer podr ava i mali niv o programiranja.

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

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

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

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

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

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

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

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

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

vezu ka relacionim bazama podataka. 3. Predstavljanje podataka Podaci u programskom jeziku Pajton su predstavljeni objektima (engl. Postoje moduli za kreiranj e grafièkog korisnièkog interfejsa. Standardna biblioteka modula omoguæava pisanje programa vezanih za Internet podr avajuæi veliki broj standardnih formata i protokola. 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. za rad na leksièkoj analizi primenom regularn ih izraza. 2. Organizacija podataka 3. 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.1. Standardne biblioteke modula Za programski jezik Pajton razvijen je veliki broj standardnih modula koji omoguæa vaju efikasan rad u mnogim oblastima. kada je potrebno sistemsko programiranje ili kada je brzina izvr avanja kritièna.3. Razvoj novih modula Ukoliko je potrebno razviti novi modul. 3. Ali to mo e da bude na primer i Java ili Pyrex jezik k oji predstavlja me avinu programskog jezika Pajton i C jezika. S vaki podatak je predstavljen objektom ili relacijom meðu objektima. 116 . objects).2.2. Sve vrijedosti promjen ljivih su objekti. kao i standardni moduli za mnoge druge poslove. Promjenljive i tip podataka Tip podatka u programskom jeziku Pajton nije vezan za promjenljivu. Obièno je to C jezik.2. za aritmetiku sa proizvoljnim eljenim brojem decimala. Tip podatka vezan je za vrijednost koju sadr i promenljiva. to je moguæe izvesti u Pajtonu ili u nekom drugom podr anom jeziku.

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

117 .

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

.

25/2. Kompleksni brojevi Podr ani su i kompleksni brojevi. >>> (5+4j) .(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.napisan bez ovih uvodnih znakova. >>> 7. oni se razl ikuju od cijelih brojeva po prisustvu decimalne taèke ili eventualno eksponencijalne not acije. Ukoliko oprerator ima kao operande cijele i brojeve u pokretnom zarezu.0/2 3.5 6.5 >>> 1e1/4 # Deset (jedan puta deset na prvi stepen) podeljeno na cetiri dela 2. Imaginarni dio kompleksnog broja se oznaèava sufik som "j" ili "J".5 . vr i se ko nverzija svih operanada u oblik sa pokretnim zarezom. Sintaksno. Ovo omoguæuje prelazak (p o potrebi) na brojeve proizvoljne du ine: >>> 2**1024 # 2 na stepen 1024 . 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. Kompleksni brojevi èiji je realni deo razlièit od nule pi u se u oblim za gradama. .5 >>> 5*3.

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

' + '.5+2j) (4+1j) . 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.' >>> print niska Mujo je rekao "Ja volim da programiram". Niske mogu da se pove u upotrebom operatora "+" i da se ponove vi e puta pomoæu operatora "*": >>> 'Ja' + 'Mislim' 'JaMislim' >>> 'Ja' + 3*' mislim.. Niske Rad sa niskama (engl.50 >>> brojKomada = 4 >>> cijena * brojKomada 14.. Niske sadr e nizove znakov a i nisu izmenljive.5j) / (1. 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". >>> rijec = "prestolonaslednica" >>> rijec[0] .' Djelovima niske mo e da se pristupi putem indeksa. Dodjeljivanje vrijednosti Znak "=" koristi se kod dodeljivanja vrednosti promenljivim: >>> cijena = 3.>>> 2 + 3j*3 (2+9j) >>> (4+9..' 'Ja mislim.. mislim.

'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. pozicije 6 >>> rijec[:6] # Prvih sest znakova 120 . ali ne ukljucujuci.

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

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

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

Blok iskaza koji pripada if iskazu oznaèava se pisanjem ispod i uvlaèenjem u odnosu na rezervisanu reè if udesno.. Ovaj iskaz se koristi za prolaz kroz jedan niz vrijednosti......... Iza ove reèi nalazi se uslov koji se testira i odgov arajuæi blok naredbi koji se izvr ava ako je uslov zadovoljen. 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.. elif blok mo e da se ponovi proizvoljan broj puta. Pridru eni blok naredbi izvr ava se jedanput za svaki element niza. . Blok naredbi koji odgovara else reze rvisanoj reèi izvr ava se jedino ako je uslov rezultirao False vredno æu. elif .. .. . . . na primjer listu ili nisku.2. .. .. ... 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..... Ovo oznaèavanje bloka iskaza uvlaèenjem koristi se kod svih kontrolnih struktura... . else... >>> >>> .. >>> >>> .. elif . >>> .... .. 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. . Umjesto nje se koristi iskaz if .. 6.. FOR iskaz For iskaz Pajton jezika se djelimièno razlikuje od istoimene kontrolne strukture u paskalskim jezicima.

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

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

124 .

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

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

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

.

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

Programer mo e da se usredsredi na pisanje objekata ostavljajuæi da se Zope brine o HTTP i CGI detaljima. 127 . 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.Osnovni skript jezik kojim se ovaj server prilagoðava specifiènim potrebama je takoðe Pajton jezik.

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

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

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

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

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. presjeci. 23) ] . Iterators i generatora.age end def to_s "#@name (#@age)" end end group = [ Person. regularnih izraza i simbola Ugradnja koda u ice (interpolacija) Standardni argumenata Èetiri razine varijable opsega (globalno. Person. :age def initialize(name. uz jedinstvenu blok sintaksu Doslovna notacija za polja. Person. 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. @age = name.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.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.new("Bob". na primjer. age) @name.new("Chris". age end def <=>(person) # Comparison operator for sorting @age <=> person.new("Ash". klase. 16). 33).

reverse 130 .sort.puts group.

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

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

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

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

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

NATURAL JOIN Book_Author GROUP BY title. 133 .

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

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

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

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

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

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 .

ne naredbeni jezik kao C ili BASIC. UPDATE ON My_table TO some_user. UPDATE ON My_table FROM some_user. PROCEDURALI DODACI SQL je dizajniran za specifiènu namjenu: za dohvatanje podataka iz relacione baze podataka. na primjer kontrola toka programa. another_user. proceduralno i objektn oorijentisano programiranje je dostupno na mnogim SQL platformama preko DBMS integracije sa ostalim jezicima. · REVOKE ukida GRANT. postoje dodaci za standardni SQL koji dodaju funkcionalnosti proceduralnih programskih jezika. SQL je skupovno-bazirani deklarativni upitni jezik. another_user. REVOKE SELECT. SQL standard preko SQL/JRT ekstenzija (SQL rutine i tipovi za . 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. Na primjer: GRANT SELECT. Ipak.

137 . KRITIKE SQL-a SQL je deklarativni kompjuterski jezik za kori tenje uz relacione baze podataka. poput MySQL i Postgres.NET komponenti u databazu. Tcl-a i C-a. Ostale platforme. SQL Server 2005 koristi SQLCLR (SQL Ser ver Common Language Runtime) za smje tanje . dozvoljavaju da fun kcije budu pisane u mnogim razlièitim jezicima poput Perla. Pythona. 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.Java programski jezik) podr ava Java kod u SQL databazama.

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

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

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

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

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

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

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

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

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

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

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. dok funkcionalni programi imaju tendenciju da se na glasi sastav i raspored funkcija. i Facebook. bio je prvobitno kori æen za sprovoðenje gre aka otpornih na sisteme telekomuni kacije.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. OCaml. G). jer je izgradio spektar aplikacija u kompanijama kao to s u T-Mobile. Meðutim. Erlang programski jezik. koji je uveden sredinom 1990-ih godina.Imperativni programi imaju tendenciju da se naglasi niz koraka preduzetih od str ane programa u sprovoðenju akcije. Python kod . 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. Nortel. je do ivio komercijalnu upotrebu u oblastima kao to su finansijska analiza. B: lambda x: A(B(x)) # Define how to apply two generic transformations target = map(compose2(F. ema dijalekta u LISP-u je kori tena kao osnova za nekoliko apli kacija u ranijim Apple Macintosh raèunarima. On je postao popularan. u praksi je èesto napisana sa listom razumijevanja. koji je razvijen od strane vedske kompanije Eri csson u kasnim 1980-im. nekoli ko uglednih funkcionalnih programskih jezika se koristi u komercijalne i industrijs ke primjene. 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. èesto bez navoðenja eksplicitnih koraka. funkcionalni stil opisuje matematièki odnos izmeðu izvorne liste i cilja. Na primjer. verifikacije voz .

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

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

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 (.

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

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

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

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

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

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

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

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

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

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

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

Osnovna teza logièkog programiranja prema Kowalskom glasi: "algoritam se mo e korisn o 150 . 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).

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

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

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

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

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

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

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

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

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

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

156 .