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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

22 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.i CHAR i [C HAR] su unaprijed definirane u Forth ANS.Ova se definicija koristi \ (backslash) za opisivanje komentara. Zamjene kontroliraju 38 . Obe. sve razlièite. Inc kod je k rajnje jednostavan i mo e biti napisan kao i veæina programera iz opisa. Kori tenje neposrednih i odgoðenih operacija [CHAR ] mogu su definirani ovako: : [CHAR] CHAR POSTPONE LITERAL . Imamo niz od 256 bitova.

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

.R SPACE 4C ARCFOUR 2 .R CR .. HEX 61 8A 63 D2 FB 5 !KEY KEY: COUNT ARCFOUR-INIT CR DC ARCFOUR 2 . Ovo je jedan od mnogih testova za provjeru koda.R SPACE F9 ARCFOUR 2 . 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 .( Should be: F1 38 29 C9 DE ) PostScript (PS) je dinamièki programski jezik (concatenative) koga su stvorili Joh n Warnock i Charles Geschke u 1982.R SPACE 2C ARCFOUR 2 .R SPACE EE ARCFOUR 2 . PostScript je najpoznatiji po tome to je jezik za .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 . CREATE KEY: 64 CHARS ALLOT : !KEY ( c1 c2 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

.

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

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. KM.STOPS.5 48 . FILLUP 3 C 4 C THESE VARIABLES WOULD OTHERWISE BE TYPED REAL BY DEFAULT 5 C ANY TYPE SPECIFICATIONS MUST PRECEDE THE FIRST EXECUTABLE STATEMENT 6 C 7 READ *.

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

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

1000) MSGOK WRITE (12.EQ.LNAME GO TO 10 15 FOUND = 0 ENDSW = 1 GO TO 25 20 FOUND = 1 25 IF (FNTYPE.FNAME.EQ.500.FOUND.ERR=75.FNAME.FNAME.1) GO TO 35 WRITE (6.0) GO TO 65 GO TO 55 30 FNAME = BNAME LNAME = BNAME GO TO 45 35 GO 40 GO IF (FNTYPE.FNAME.IOSTAT=INT) SERNO.LNAME IF (INT.LNAME IF (FNTYPE.ERR=75.500.600) LNAME 50 55 IF 60 IF WRITE (6.ERR=75.FOUND.EQ.IOSTAT=INT.SERNO) GO TO 20 WRITE (12.LNAME (ENDSW.4) GO TO 50 SERNO = EMPSER WRITE (6.10 READ (11.800) READ (5.0) GO TO 30 IF (FNTYPE.1) GO TO 65 READ (11.EQ.EQ.AND.500.END=65) SERNO.GT.EQ.500.IOSTAT=INT.EQ.AND.1.EQ.NE.0) GO TO 55 65 CLOSE (UNIT=11) CLOSE (UNIT=12) STOP .EQ.IOSTAT=INT) SERNO.1.0) GO TO 75 IF (EMPSER.700) READ (5.600) FNAME WRITE (6.3) GO TO 40 TO 45 WRITE (6.LNAME (INT.END=15) SERNO.1000) MSGOK TO 60 45 WRITE (6.900) FNAME.1000) MSGNG IF (FOUND.ERR=75.

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

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

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

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

jer programa koji tekstualnoj datoteci dodaje brojeve. 52 .

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

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

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

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

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

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

a ako je negativan daje vrijednos num 0 num u radijanima u string jezièni podprogram na lokaciji 275 i 276 u memoriji. otvara sljedeæi dostupni program CLOSE [device number] zatvara ureðaj (u COLOR BASIC-u ovo jedino mo e biti #-1.var.y RIGHT$(str. 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 .. y num) daje boju na grafikonu na poziciji x..var.. Ako nije naveden name .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. Ako name nije zadan.. otvara sljedeæi program CLOADM [ name ] otvara program u ma inskom jeziku iz kasete. tj. position num) daje novi string poèev od pozicije stringa RND(number) daje proizvoljan broj od 0 do number SGN(num) daje vrijednost t-1.start num. te se izvr ava po tom podprogramu. nakon èega se dobija rezultat izvr ene operacije Komande AUDIO [ON/OFF] ukljuèuje i iskljuèuje zvuk iz audio kasete CLOAD [ name ] otvara BASIC program iz kasete. a ako je 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. 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..MID$(str. zatvara kasetu) CLS(num) èisti ekran.

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

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

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

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

60 .analizirati korisno strukturirani program.

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

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

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

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

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

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

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

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

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

65 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C28-6 571 napisanog u Njujorku 1965 godine. dodatno uvrstiti aplikacije78 . te izmijenjen u priruèniku Specifikacije jezika P L/I. 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. a standard za PL/I je odobren 1976 godine.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. nazvanih VDM. IBM je nastavio razvijat PL/I kasnih 60-tih i r anih 70tih. Odbor The Share 3by3 je postavio sljedeæe ciljeve za NPL : · Korisni opseg koji æe ukljuèivati postojeæi FORTRAN. GY33-6003 u Hursliju 1967 godine.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

onda se destruktor poziva automatski. Pozivaju se kada je uni ten dio kl ase. ~person () 94 . 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.z specijalnih vrijednosti inicijalizirana. Destruktori Destruktori su ustvari suprotni konstruktorima. Sintaksa za deklaraciju destruktora je slièna onoj za konstruktora.

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

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

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

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

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

e za 97 .

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

.

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

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

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

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

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

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

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

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

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

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

u ovom prozoru je naslov 'Programiranje: Osobine..' ) C lie ntHeight Visina 'korisnog' dijela prozora C lientWidth irina 'korisnog' dijela prozora Color Boja Constraints Ogranièenja ( npr. 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 . 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. 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. maximize..Action Izaberete neku proceduru koja æe biti obavljena pri otvaranju prozora Izabe rete neku proceduru koja æe biti obavljena pri otvaranju prozora ActiveC ontrol Pokazuje objekat koji je aktivan nakon otvaranja prozora Align Prijanjanje uz neku od ivica ekrana Anchors Pokazuje kako je objekat vezan za 'roditelj' objekat AutoScroll Odreðuje da li æe se automatski pojaviti scrollbarovi ako je to potrebno AutoSize Odreðuje da li æe objekt tako prilagoditi velièinu da nema slobodnog prosto BiDiMode Pravac objekata Borde rIcons Ikone poput minimize. close Borde rStyle Odreðuje stil prozora ( npr.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

117 .

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

.

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

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

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

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

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

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

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

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

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

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

124 .

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

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

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

.

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

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

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

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

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

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

@age = name. :age def initialize(name. age end def <=>(person) # Comparison operator for sorting @age <=> person. Person. 23) ] . klase. Person. regularnih izraza i simbola Ugradnja koda u ice (interpolacija) Standardni argumenata Èetiri razine varijable opsega (globalno.new("Ash". 16). age) @name.new("Bob".age end def to_s "#@name (#@age)" end end group = [ Person.new("Chris". uz jedinstvenu blok sintaksu Doslovna notacija za polja.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. na primjer. Iterators i generatora.Sve je izraz (èak i izjave) i sve je izvr eno imperativno (èak deklaracije) Jezgrovita i fleksibilna sintaksa koja minimizira buku sintaktièke i slu i kao temel j za domenu odreðenih jezika Dinamièko razmi ljanje i mijenjanje objekata kako bi se olak alo metaprogramming Leksièki zatvaraèi. 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. presjeci. 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. 33).

puts group.reverse 130 .sort.

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

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

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

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

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

133 .NATURAL JOIN Book_Author GROUP BY title.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Pravilima se na temelju postojeæih relacija definiraju nove. 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. Mo e se reæi da svako pra vilo definira jednu uzroèno posljediènu vezu. roditelj(armin. jasmin) 153 .

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

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

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

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

156 .

Sign up to vote on this title
UsefulNot useful