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,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

22 .

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

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

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

Za razliku od programskih jezika vi e razine. obièno postoji jedan-na-jedan korespondencija izmeðu jednostavnog asemblerskog i instrukcija ma inskog jezika. u nekim sluèajevima .meðu procesor dizajnerima. 24 . disassebler -a. Meðutim. i (djelomièno) obrnutog od asemblera tj. 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Svaki put polje koje se koristi zamjeni dva bajta.Ova se definicija koristi \ (backslash) za opisivanje komentara. sve razlièite. Imamo niz od 256 bitova. Zamjene kontroliraju 38 . Inc kod je k rajnje jednostavan i mo e biti napisan kao i veæina programera iz opisa.i CHAR i [C HAR] su unaprijed definirane u Forth ANS. 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. Obe.

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

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 ..R CR . PostScript je najpoznatiji po tome to je jezik za ..R SPACE F9 ARCFOUR 2 .R SPACE 2C ARCFOUR 2 . Ovo je jedan od mnogih testova za provjeru koda.( 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. cn n store the specified key of length n ) DUP 63 U> ABORT" key too long (<64)" DUP KEY: C! KEY: + KEY: 1+ SWAP ?DO I C! -1 +LOOP .R SPACE EE ARCFOUR 2 . CREATE KEY: 64 CHARS ALLOT : !KEY ( c1 c2 . HEX 61 8A 63 D2 FB 5 !KEY KEY: COUNT ARCFOUR-INIT CR DC ARCFOUR 2 .R SPACE 4C ARCFOUR 2 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.

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

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

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

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

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

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

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

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

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

52 .jer programa koji tekstualnoj datoteci dodaje brojeve.

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

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

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

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

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

a u COLOR BASIC-u device#-1 znaèi kasetu a #-2 printer Funkcije ABS(num) daje apsolutnu vrijednost za dati broj ASC(str) daje prvom znaku ASCII string kod CHR$(num) daje string znaku ACCII numerièki kod EOF(device number) daje vrijednost 0 ako u fajlu imaju podaci ili -1 ako nema INKEY$ daje neki znak ako je pritisnututa neka tipka na tastaturi.num) daje prvih num slova stringa str LEN(str) daje du inu stringa MEM daje vrijednost preostale memorije u bajtima 56 . To mo e biti fiksni broj.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. a ako nije da je vrijednost nula INT(num) daje cijeli broj (integer) od numerièke vrijednost LEFT$(str. Za device 0 se podrazumijeva da su u pitanju ekran i tastatura. To mo e biti 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.

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

data zapisuje vrijedonst data (0-255) na adresi memorije (0 65535) RESET (x.GOSUB {broj linije} poziva podprogram na datoj liniji GOTO {broj linije} program se nastavlja od date linije IF {ne to} THEN {komanda} [ELSE {komanda}] izvr ava kondicionu naredbu. du ina daje zvuk sa frekvencijom tona (1-255) i trajanjem (1-255) STOP program staje sa izvr avanjem VAL (str) daje numerièku vrijednost iz stringa ako su u stringu brojevi 58 .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. 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. 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.

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

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

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

analizirati korisno strukturirani program. 60 .

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

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

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

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.

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

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

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

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

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

65 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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".TO/K". Interpretacije bilo koje vrijednosti je odreðivao operater. GET "libhdr" LET start() = VALOF $( LET args = VEC 50 LET instream = 0 LET outstream = 0 LET sum = 314159 IF rdargs("FROM/A. // Routine to compute a checksum of a // named file. sum) . znak ! uno eno u vrijednosti. ) Da bi ovo moglo raditi. + je sabirao dvije vrijednosti zajedno treti rajuæi ih kao cjelobrojne tipove. (Na primjer. efektivno tretirajuæi kao pokazivaè. simplified from a compiler example. 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". args.nije bila rijeè veæ byte. realizirano je tako da se ne vr i provjera tipa. kori tenu za obradu vrijednosti.

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

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

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

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

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

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

nema korisnièki definisanu dodjelu operatora niti kor isnièki definisan destruktor.}. POD-struktura se ponekad kolokvijalno naziva i "struktura u C-stilu . // initialize an object of type C with an initializer-list C c = { 1. POD-struktura æe imati istu memoriju kao odgovarajuæa struktura deklarisana u C. 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. In such cases initializerclauses can be nestedC++ D d = { 10. 20. // D has a sub-aggregate of type C. 2 } }. 87 . { 1. Iz tog razloga. U veæini sluèajeva.

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

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

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

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

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

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

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

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

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

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

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

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

Kada objekat klase kreiran u bloku (par vitièastih zagrada {} ) je obrisan nakon zat varanja zagrade. npr. Pozivaju se kada je uni ten dio kl ase. onda se destruktor poziva automatski. Destruktori Destruktori su ustvari suprotni konstruktorima. 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.z specijalnih vrijednosti inicijalizirana. ~person () 94 .

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

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

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

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

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

e za 97 .

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

.

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

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

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

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

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

MDIChild -prozor unutar drugog Height Visina objekta ( dimenzija po y-osi ) HelpC ontext Dio Help file koji æe biti prikazan po pritisku He lpFile Odreðuje koji file slu i kao Help file Hint Tekst koji se nalazi u utom okviru koji slu i kao obja Horz ScrollBar Odreðuje osobine horizontalnog scrollbara Icon Ikona u gornjem lijevom uglu prozora Ke yPreview Odreðuje da li æe objekat reagovati na tastaturu prozora ) na 'What's this?' njenje prije aktivne kontrole Left Udaljenost objekta od lijeve strane 'roditelj' objekta ( ovdje ekrana ) Menu Pokazuje na meni tog prozora Name Ime objekta ( automatski je Form1. maximize. 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 .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... Sizeable -moguæe je mijenjati velièinu u rad u ) BorderWidth irina okvira C aption Naslov ( npr.' ) C lie ntHeight Visina 'korisnog' dijela prozora C lientWidth irina 'korisnog' dijela prozora Color Boja Constraints Ogranièenja ( npr. u ovom prozoru je naslov 'Programiranje: Osobine.

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

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

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. Primjer. Meðuti m.Lako se zakljuèuje da æe se radnja obaviti bar jednom. WHILE petlja Kao i Repeat petlja i While se koristi ako broj ponavljanja nije apsolutan.Widht + 1.. Èak i ako se vr i vi e radnji begin.Width < 600 do Form1. .Width := Form1. prozor ( Form1 ) poveæava while Form1.

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

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

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

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

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

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

omoguæavajuæi asemblerske dijelove i sistem znakova direktnih CPU kodova. 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. u veæini sluèajeva. 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. Za one koji vi e vole nizove i vrste nizova. Iako Delphi koristi programski jezik visoke kvalitete. Iako je Pascal napravljen iskljuèivo za p otrebe edukacije. Delphi nije. terminate-kraj) Nizovi mogu biti uvezani u lanace koristeæi + znak. onda jednostv ano trebaju da ponovo prikupe podatke iz nove verzije. IDE ukljuèuje GUI za lokalizaciju i prevoðenje kreiranih programa koji se mogu drugaèije rasporediti tako da nema dodatnih tro kova za prevoðenje (neki programeri ele da koriste proizvode od treæe stra ne radi toga jer time dobivaju veæu funkcionalnost). null-poèetak. 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. radije nego koristeæi funkcije. VCL je sofisticirani sastavni model koji se mo e iznova koristiti i iri ti od strane razvojnog programera.PREDNOSTI Delphi je visoko razvijeni program namijenjen mnogim korisnicima jer se lako upo trebljava i bazira se na raniji Object Pascal jezik. Metarazred je prvi razred instrukcija ili objekata. 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. a takoðer podr ava i mali niv o programiranja. 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. nije potrebno imati memoriju niti menad era memorije. 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. VCL je rano usvojio Dependency inject ion ili Inversion of Control. Svi Delphi proizvodi imaju veliku bibliot eku koja se zove VCL (Visual Component Library) i ukljuèuje veæinu njihovih izvornih kodova.

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

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

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

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

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

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

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

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

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

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

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

117 .

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

.

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

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

mislim. Strings) je sna no podr an u Pajtonu. Niske Rad sa niskama (engl. Poèetni indeks je nula...' 'Ja mislim.' >>> print niska Mujo je rekao "Ja volim da programiram".>>> 2 + 3j*3 (2+9j) >>> (4+9. >>> rijec = "prestolonaslednica" >>> rijec[0] .5j) / (1...' + '.0 Podr ano je vi estruko dodjeljivanje vrijednosti: >>> >>> 17 >>> 17 >>> 17 x = y = z = 17 x y z .5+2j) (4+1j) . Niske sadr e nizove znakov a i nisu izmenljive.' Djelovima niske mo e da se pristupi putem indeksa. Dodjeljivanje vrijednosti Znak "=" koristi se kod dodeljivanja vrednosti promenljivim: >>> cijena = 3.50 >>> brojKomada = 4 >>> cijena * brojKomada 14. 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". mislim.. Niske mogu da se pove u upotrebom operatora "+" i da se ponove vi e puta pomoæu operatora "*": >>> 'Ja' + 'Mislim' 'JaMislim' >>> 'Ja' + 3*' 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. ali ne ukljucujuci. pozicije 6 >>> rijec[:6] # Prvih sest znakova 120 .

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

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

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

. . >>> >>> .... Ovo oznaèavanje bloka iskaza uvlaèenjem koristi se kod svih kontrolnih struktura... elif .2...... Blok naredbi koji odgovara else reze rvisanoj reèi izvr ava se jedino ako je uslov rezultirao False vredno æu. .. 6. .. . 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. .. FOR iskaz For iskaz Pajton jezika se djelimièno razlikuje od istoimene kontrolne strukture u paskalskim jezicima..... . Pridru eni blok naredbi izvr ava se jedanput za svaki element niza. a = 12 if a < 0: print 'a je negativno' else: print 'a je nenegativno' a je nenegativno Ako elimo da izvr imo detaljnije ispitivanje neke vrednosti mo emo da upotrebimo iska z koji sadr i rezervisanu reè elif... elif .. >>> >>> .. Umjesto nje se koristi iskaz if .. . .. ..Blok iskaza koji pripada if iskazu oznaèava se pisanjem ispod i uvlaèenjem u odnosu na rezervisanu reè if udesno. . 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... na primjer listu ili nisku. else. elif blok mo e da se ponovi proizvoljan broj puta. 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...

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

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

124 .

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

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

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

.

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

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. Programer mo e da se usredsredi na pisanje objekata ostavljajuæi da se Zope brine o HTTP i CGI detaljima. 127 .

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

128 .je poèela. 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. koja je kasnije i besplat no objavljena u javnosti zbog daljnjeg irenja usvajanja Ruby meðu engleskog govornika.

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

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

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

sort.puts group.reverse 130 .

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

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

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

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

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

133 .NATURAL JOIN Book_Author GROUP BY title.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Problematièna sluèaj (kad je n negativna) pokazuje kori tenje ML moæni iznimka sustava. 1) end 146 . acc) = fac (n-1. 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. "akumulator". Napokon. kao da stoga ne treba rasti proporcionalno broju funkcije poziva. To se posti e dodavanjem dodatnih. parametar za unutarnje funkcije. n*acc) in if (n < 0) then raise Fail "negative argument" else fac (n.

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

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

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

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

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

koji su izvorno zami ljen kao principijelan naèin za dodavanje preoptereæenja na jezik. statièki. [16] Tip koji predstavlja nuspojava je primjer monada.Haskell je jaka. 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. ali su od prona ao mno go vi e koristi.

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

te Colmerauer (implementacija) u Marseillesu. 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. Osnovna teza logièkog programiranja prema Kowalskom glasi: "algoritam se mo e korisn o 150 .Rezolucija je generalizacija principa "modus ponens" i omoguæava kori tenje operacij a uporedjivanja i prepoznavanja nazvanih unifikacija (izjednaèavanja).

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

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

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

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

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

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

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

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

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

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

156 .

Sign up to vote on this title
UsefulNot useful