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

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

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

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

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

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

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

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

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

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

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

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

ièano programiranje

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

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

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

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

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

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

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

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

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

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

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

U svim sljedeæim dijagramima. zajedno sa otpornikom i vrijednosnim kondenzatorom. 15 . 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. a izlazni je zelena linija. ulazni val je plava.

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

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

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

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

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

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

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

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

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

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

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

22 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Obièno su veæi i drugaèiji skup rijeèi iz samostalan Forth je PAUSE r ijeè za izradu zadatka. ovjesa. 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). a mnogi daju nastavcima koji zapo ljavaju raspored osigura va operativni sustav. Takvi prevodioci definiraju rijeèi za pristup ciljano j memoriji 33 . Kompilator rijeèi koristi pos ebnu verziju pod nazivom za preuzimanje i èuvanje koja se mogu preusmjeriti u spremniku u podruèju memorije. 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. Uobièajeno je da se redef inira pregr t rijeèi koje su sastavljene od bitova u memoriji.OS ili Windows sustava.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. odvojene zarezima. K 43 . Primjeri: INTEGER WIDTH REAL NUM.

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

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

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

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

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

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

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

.

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

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

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

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

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

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

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

CO BOL ima preko 400 kljuènih rijeèi. world u COBOLU: 51 . i procj enjuje da godi nje nastane jo dodatnih 5 milijardi linija koda. no u kasnijim verzijama je to ispravljeno. Primjer programa Hello. 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 . dodjeljivanje dinamièkoj memoriji te struktuirane programske strukture. COBOL dozvoljava identifikatore duge do 30 karaktera.vanja obavlja upravo programski jezk COBOL sa preko 200 milijardi linija koda. COBOL nije podr avao lokalne varijable. rekurzije.

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

jer programa koji tekstualnoj datoteci dodaje brojeve. 52 .

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

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

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

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

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

num) daje prvih num slova stringa str LEN(str) daje du inu stringa MEM daje vrijednost preostale memorije u bajtima 56 . varijabla ili neka druga operacija ili funkcija koja sadr i numerièku vrijednost str znaèi da se tra i string. 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.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. a ako nije da je vrijednost nula INT(num) daje cijeli broj (integer) od numerièke vrijednost LEFT$(str. 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. Za device 0 se podrazumijeva da su u pitanju ekran i tastatura. To mo e biti fiksni broj.

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

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

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

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

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

60 .analizirati korisno strukturirani program.

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

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

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

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

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

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

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

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

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

65 .

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

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

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

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

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

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

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

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

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

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

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

h>. koje se mo e dohvatiti i po staviti pomoæu fegetround () / fesetround () funkcija definisanim u <fenv. obièno prema nuli. round-down. 73 . funkcija parametara progla ena kao pokretna mo e zapravo biti donesen kao dvostruka. to je suprotno od prevodjenja koje zaokru uje vrijednost kako bi se uklopio u manji broj bita frakcije. Round-up.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. Neki kompajleri æe tiho pretvoriti pokretnu vrijednost do udvostruèene u nekim kontekstima. i round-to-zero). U ma inama koji su u skladu sa IEEE standardima o pokretnom zarezu. Prevodjenje pokretne vrijednosti za double tip èuva brojèanu vrijednost taèno. npr.

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

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

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

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

prijenos memorije. Dok su mnogi programi napisani u C-u . Perl i Python. Najuobièajenija C biblioteka je C standard libraby . Svaka bibliot eka je tipièno te a datoteka koja sadr i prototipe funkcija sadr anim u biblioteci koju mo e koristiti program. 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. i[x] = 1. i deklaracije specijalnih tipova podataka i makro simbola kor i tenim u ovim funkcijama. U C u s e biblioteka sje ta u funkciju sadr anu u jedinstvenoj arhivskoj datoteci. Ova tri pristupa variraju od situacije do situaciju. 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. izraz: i[x]. ali taèna: i[x] je ekvivalntno *(i + x) */ Primjetiti da je posljednja linija neobièna. Memory management Jedna od najva nijih funkcija programerskog jezika je da omoguæi rukavanje memorijom i objektima koje su pohranjene u memoriji. koji mijenja indeks varijabli i sa varijablom x. ali njegova upotreba je strana i èudna medju C programerima. ali uglavnom ih posjeduju s vi C programi. ALGOL 60 je meðutim postavio standarde za izradu algoritama i imao je velik uticaj na buduæi razvoj jezika. postoji irok krug drugih dostupnih biblioteka. C omoguæava tri puta da se smjesti objekat u memoriju. koja je specifièna po ISO i ANS I C standardima i dolazi sa svakom C implementacijom.*(i + x) = 1. Ova biblioteka podr avca input i output tok. /* neobièna upotreba. 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. 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. ali semantiècki taèna. . mamtematièkih stringova i vrijednosti vremena.Biblioteke su èesto napisane u C-u zbog toga sto C kompajleri generi u ob jektni kod.

ALGOL 60 naèelno nije posjedovao ulazno / izlazne objekte. Nasuprot tome. ALGOL 68 je ponudio opse ne biblioteke transput objekata (ALGOL 68 sinonim za ulazno/izlazne). 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 . primjena im je bila samodefini uæa te su rijetko bili kompatibilni jedni s drugima.

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

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

Ova skraæenica se podudarala sa skraæenicom za Britanski nacionalni laboratorij fizike te je zamijenjen sa MPPL. god) je bi o dizajniran kao zajednièka ma inska arhitektura za oba tipa korisnika. Tako su poslovno orjentisani s e koristili Autocoders-om preko COMTRANa do COBOLa. IBM je uzeo NPL kao poèetnu taèku i dovr io dizajn do nivoa pisanja prvog kompajlera: NPL-ove definicije su bile nepotpune u detaljima i opsegu.tl(l))) filter(p. Projekt je osnovan . Nadali su se da bi FORTRAN mogao biti pro iren za potrebe poslovno orjentisanih programera. 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.proc if l elif else fi. list l) list: is nil then nil p(hd(l)) then cons(hd(l). Kontrola PL/I je obav ljana najprije u Centru za programiranje u Njujorku a kasnije u IBM-ovoj laboratoriji u Hursliju. 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. 1965 godine sa PL/I (sa rimsko I kao FORTRAN-ov IV ). cons(hd(l). Prva definicija se pojavila u aprilu 1964 godine. tl(l)) proc sieve = (list l) list: if l is nil then nil else proc not multiple = (int n) bool: n mod hd(l) . IBM-ov System 360 (najavljen 1964. Velika Britanija. tl(l) ))) fi. filter = (proc (int) bool p. 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. IBM je elio jedinstven programski jezik za sve korisnike. 0. Slièno. proc primes = (int n) list: sieve( tl( one to(n) )). Pokazalo se da tako veliki jezik ima potrebu za formalnom definicijom PL/I-ja. sieve( filter( not multiple. 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 . a kasnije. filter(p. nasljednika sv ih postojeæih IBM arhitektura. dok su nauèno orjentisani korisnici programirali u FORTRANu.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

e za 97 .

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

.

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

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

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

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

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

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

kontrole kako bi smo kreirali specijalizovane programe poput Web browsera za par minuta. 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. 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.

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

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

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

close Borde rStyle Odreðuje stil prozora ( npr.' ) C lie ntHeight Visina 'korisnog' dijela prozora C lientWidth irina 'korisnog' dijela prozora Color Boja Constraints Ogranièenja ( npr. Sizeable -moguæe je mijenjati velièinu u rad u ) BorderWidth irina okvira C aption Naslov ( 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. u ovom prozoru je naslov 'Programiranje: Osobine. 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.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. 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 ... maximize.

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

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

Width < 600 do Form1. Èak i ako se vr i vi e radnji begin.. Primjer.Widht + 1. prozor ( Form1 ) poveæava while Form1. Meðuti m. razlika je u tome to se ponavljanje vr i dok je uslov ispunjen. . 105 irinu dok god je ona manja od 600.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.end blok nije potreban.Width := Form1.

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

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

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

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

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

ali to uop te nije tako. Vrlo je jednostavan za kori tenje. èini komplikovan. 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. Slika 7. Proces se. n Slika 6.-Help Workshop slu i za kreiranje Windows Help datoteke za na a poèetku. InstallShield 110 .

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

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

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

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

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

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

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

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

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

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

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

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

117 .

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

.

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

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

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

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

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

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

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

. 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. .2......... elif . . .. . >>> .. >>> >>> .. Iza ove reèi nalazi se uslov koji se testira i odgov arajuæi blok naredbi koji se izvr ava ako je uslov zadovoljen. . a = 12 if a < 0: print 'a je negativno' else: print 'a je nenegativno' a je nenegativno Ako elimo da izvr imo detaljnije ispitivanje neke vrednosti mo emo da upotrebimo iska z koji sadr i rezervisanu reè elif.. Blok naredbi koji odgovara else reze rvisanoj reèi izvr ava se jedino ako je uslov rezultirao False vredno æu. .. . Ovo oznaèavanje bloka iskaza uvlaèenjem koristi se kod svih kontrolnih struktura... 6.. elif . 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. . .Blok iskaza koji pripada if iskazu oznaèava se pisanjem ispod i uvlaèenjem u odnosu na rezervisanu reè if udesno. Ovaj iskaz se koristi za prolaz kroz jedan niz vrijednosti....... . elif blok mo e da se ponovi proizvoljan broj puta. ... na primjer listu ili nisku. >>> >>> . 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...... else.. Umjesto nje se koristi iskaz if .

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

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

124 .

Kreiranje du ih programa sastoji se obièno iz pisanja modula koji mogu da budu grupisani u pakete (packages)...uvecaj(10) . . .py koja sadr i sledeæi tekst: nula = 0 jedan = 1 def uvecaj(x.. Da bi ih saèuvali mo emo na e definicije funkcija i promjenljivih da smjes timo u jednu ili vi e datoteka.jedan 1 >>> mm.nula 0 >>> mm. korak = 1): return x + korak def umanji(x. Takve datoteke se zovu moduli... Za to mo emo da upotrebimo tekst editor.1) >>> f(5) 120 >>> f(50) 30414093201713378043612608166064768844377641568960512000000000000L 8. Evo jednog jednostavnog modula koji kreiram kao datoteku u trenutnom direktoriju mu sa nazivom mm. Potom definicije iz tako kreiranih modula mo emo da uve emo i koristimo bilo u interaktivnom modu ili u nekom drugom modulu. if n == 0: return 1 else: return n*f(n . korak = 1): return x .. Moduli Ako interpretator stane sa radom sve definicije koje su kreirane u interaktivnom modu biæe izgubljene. ..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..

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

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

.

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

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

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

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

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

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

uz jedinstvenu blok sintaksu Doslovna notacija za polja. Person.age end def to_s "#@name (#@age)" end end group = [ Person. 16). 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. klase. i lokalne) obilje eni s igils i kapitalizaciju Automatski odvoz smeæa First-class nastavak Stroga pravila boolean prisile (sve je istina osim la ne i nil) Iznimka rukovanje Operator preoptereæenja Izgraðena podr ka za racionalne brojeve.new("Ash". age end def <=>(person) # Comparison operator for sorting @age <=> person. regularnih izraza i simbola Ugradnja koda u ice (interpolacija) Standardni argumenata Èetiri razine varijable opsega (globalno. :age def initialize(name. 23) ] . presjeci.new("Bob".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. na primjer. Person. @age = name. Iterators i generatora.new("Chris". 33).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.

reverse 130 .sort.puts group.

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

Chambe rlin i Raymond F. razvijenim 1974. Berkeley-u. Donald D. razvi jen u MIT-u ranih 1970-ih. 131 . Boyce su zatim napravili Structured English Query Language (SEQUEL il i SEQL) za upravljanje podacima smje tenim u System R. C. sistem upravljanja relacionim bazama podataka. a praæen jako brzo Ingres-om. godine u U. Ingres je koristio upitni jezik (query language) QUEL. kojeg je kasnije potisnuo sa tr i ta SQL. 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.razvio System R.

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

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

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

133 .NATURAL JOIN Book_Author GROUP BY title.

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

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

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

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

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

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.

SQL standard preko SQL/JRT ekstenzija (SQL rutine i tipovi za . Na primjer: GRANT SELECT. Ipak. na primjer kontrola toka programa.· GRANT daje ovlasti za izvoðenje operacija nad objektima. · REVOKE ukida GRANT. PROCEDURALI DODACI SQL je dizajniran za specifiènu namjenu: za dohvatanje podataka iz relacione baze podataka. ne naredbeni jezik kao C ili BASIC. REVOKE SELECT. UPDATE ON My_table FROM some_user. UPDATE ON My_table TO some_user. another_user. 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. another_user. SQL je skupovno-bazirani deklarativni upitni jezik.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1 (* n (factorial (.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 .

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

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

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

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

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

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

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

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

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

[15]. ali su od prona ao mno go vi e koristi. H askell glavni inovacijama na ovom podruèju je dodati tip nastave. 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. vrsta sustava temelji na Hindley-Milner tipa zakljuèak.Haskell je jaka. Monadama su opæi okvir koji mo e 149 .

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

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

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

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

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

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

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

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. mogu opisa ti nove relacije majka i otac. roditelj(armin. jasmin) 153 .Pravilima se na temelju postojeæih relacija definiraju nove.

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

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

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

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

156 .

Sign up to vote on this title
UsefulNot useful