P. 1
-Skripta Iz Uvoda U Računarske Nauke.pdf-

-Skripta Iz Uvoda U Računarske Nauke.pdf-

|Views: 841|Likes:
Published by Rijad Hadzic
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............................
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............................

More info:

Published by: Rijad Hadzic on Apr 26, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as TXT, PDF, TXT or read online from Scribd
See more
See less

04/13/2013

pdf

text

original

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,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Nije te ko razumeti rad programa. Zatim se od korisnika tra i da otkuca neki bro j (podrazumeva se da je taj broj manji od 256). 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. 21 .

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

22 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Takvi prevodioci definiraju rijeèi za pristup ciljano j memoriji 33 . uni tenje i mijenjanje prioriteta. Obièno su veæi i drugaèiji skup rijeèi iz samostalan Forth je PAUSE r ijeè za izradu zadatka. ovjesa. Kompilator rijeèi koristi pos ebnu verziju pod nazivom za preuzimanje i èuvanje koja se mogu preusmjeriti u spremniku u podruèju memorije. je tehnika koja se obièno naziva meta-kompilacija by Forth programera (iako se termin ne odgovaraju toèno meta-kompilaciju jer je obièno definirana).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.OS ili Windows sustava. Uobièajeno je da se redef inira pregr t rijeèi koje su sastavljene od bitova u memoriji. Self i cross kompilacije Potpuno opremljen Forth sustav sa svim izvornim kodovima koje æe sam sastaviti.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

redovi (numeriran skup varijabli istog tipa). PROGRAMSKI JEZICI Da bi bio izvediv. plan mora biti napisan u binarni ma inski kod. koji poznaje pro cesor. 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. Uvoðenje polja u ne-strukturiranim j ezicima bio je znaèajan korak naprijed. Nadalje.

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

2.73.REAL tip Konstante tipa REAL su brojevi koji mogu ukljuèivati razlomke. 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. Ukoliko je broj nap isan bez 42 .

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

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

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

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

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

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

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

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

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

.

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

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

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

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

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

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

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

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

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

52 .jer programa koji tekstualnoj datoteci dodaje brojeve.

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

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

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

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

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

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

te se izvr ava po tom podprogramu. otvara sljedeæi dostupni program CLOSE [device number] zatvara ureðaj (u COLOR BASIC-u ovo jedino mo e biti #-1.. 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. a ako je negativan daje vrijednos num 0 num u radijanima u string jezièni podprogram na lokaciji 275 i 276 u memoriji.. Ako nije naveden name . 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.MID$(str.NEXT (num) stvara FOR petlju sa zadan im parametrima 57 . nakon èega se dobija rezultat izvr ene operacije Komande AUDIO [ON/OFF] ukljuèuje i iskljuèuje zvuk iz audio kasete CLOAD [ name ] otvara BASIC program iz kasete. Ako name nije zadan..var.. zadaje podatke u BASIC programu koji se pozovu sa READ komandom END kraj programa EXEC [adresa memorije] izvr ava program u ma inskom jeziku na adresi u memoriji FOR {num}={broj} TO {broj} [STEP {broj}].var. otvara sljedeæi program CLOADM [ name ] otvara program u ma inskom jeziku iz kasete. zatvara kasetu) CLS(num) èisti ekran.length num) daje novi string iz str poèev od pozicije uzimajuæi narednih length num znakova PEEK(num) daje vrijednost memorije na lokaciji num (0-65535) POINT(x num.start num.y RIGHT$(str. tj. y num) daje boju na grafikonu na poziciji x.. 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.

ako je taèna onda izvr ava THEN a ako nije onda ELSE LIST [poèetni red] zadanim linijama LLIST [poèetni red] [zavr ni red] isto kao i LIST. samo to izlistava na printeru [zavr ni red] izlistava linije programa poèev i zavr avajuæi sa NEW bri e sadr aj memorije (i program i varijable) POKE adresa memorije. 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 .GOSUB {broj linije} poziva podprogram na datoj liniji GOTO {broj linije} program se nastavlja od date linije IF {ne to} THEN {komanda} [ELSE {komanda}] izvr ava kondicionu naredbu. data zapisuje vrijedonst data (0-255) na adresi memorije (0 65535) RESET (x.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.

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

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

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

analizirati korisno strukturirani program. 60 .

koje je naveo Böhm i Jacopini dokaz. Dijkstra je napisao: Kada smo zauzeli stav da to nije jedino zadatak programera za izradu odgovarajuc eg programa. i nema kri anja je dnih i drugih. on je dao primjere gdje je vjerova o da direktno vodi do skoka jasnije i uèinkovite bez rtvovanja logiènosti. . Knuth je predlo i o bla a strukturna ogranièenja: Trebalo bi biti moguæe donositi plan dijagram toka sa sv im naprijed granama na lijevo. to vi e znaèajnih spora u nadolazeæim godinama je bilo strukturirano programiranje zaprav o mogao pobolj ati softvera jasnoæa. 1969 u svojim Nap omene o strukturirano programiranje. i razvoj dovoljno vremena da se opravd a obuku programera u njemu. kvaliteta. sve unatrag grane na desnoj strani. "srtuktuirano programiranje s Goto izvje taji". 198 7 je jo .. U svom radu 1974. U nastavku æe postati jasno da plan korektnosti nije moja jedina briga. Donald Knuth je prihvatio naèelo da programi moraju biti napisani s logièno na umu. 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. 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.. Projekt je bio veliki in enjering uspjeh. iako je Dijk stra kritizirao naèina na koje Millsovo tumacenje razlikuje od objavljianih radova. Iako. Ovo pismo se obièno navodi kao poèetak rasprave strukturirano programiranje.." U pismu. ali i takoder da se demonstruje njegova ispravnost na uvjerljiv naèin pa ove gore navedene primjedbe imaju dobok utjecaj na aktivnosti programera: object koj i stvara mora biti korisno strukutirano. mnogi programeri koji nisu upoznati s teoremom sumnjao je u svoja potra ivanja. Mnogi od onih koji poznaju prevodioce i teorije grafova su zagovarali do pu tajuæi samo reducirati tok grafova.Debate Godine 1967 pismo od Dijkstra pojavilo se u Communications of the ACM s naslovom "GOTO naredbe smatra tetnim. a menad eri u drugi m kompanijama navode u prilog usvajanja strukturiranog programiranja. 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.

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

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

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

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

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

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

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

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

65 .

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

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

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

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

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

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.) U 1978. Ova knjiga.· Originalne PDP-11 verzije UNIX sistema razvijene su u asemblerski jezik.(Raniji primjeri ukljuèuju Multic s sistem (napisane u PL / I)i MCP (Master Control Program) za Burroughs B5000 napisane u Algol-u 1961. uz dodatak struktura tipova. Brian Kernighan i Dennis Ritchie objavio je prvo izdanje The C Programming Language. Do 1973 . poznata kao C programer "K & R". slu io dugi 68 .

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

kao to su neke usluge Unixa razvijeni su da (izmeðu ostalog) mogu provjeriti dosljednost funkcije kori æene na vi e izvornih datoteka. uz potporu AT & T kompajlera i nekih drugih dobavljaèa. iako æe neki prevodioci izdati upozorenje. Meðu njima su: 69 .parametri funkcije se ne provjeravaju. 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. ako je lokalna funkcija nazvana krivim brojem argumenta. U godinama nakon objave K & R C. Odvojeni alati.

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

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

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

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

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

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

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

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. Èetiri dodjele odgovaraju propisanom c kodu.specijalne propise za deklarisanje vi edimenzionalnih variabli. 75 . Interesantan prika z moguænosti unutra nje promjene pointera i variabli je pokazan ispod. i ne zahtijeva da varijabla bude pravilna (bounds checking carinska provjera). /* ekvivalntno *(x + i) */ *(x + i) = 1.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

*/ } 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. 89 . gdje su a i b gore nazvani kao po iljaoci. ali ovo nije potrebno po standardu. Nasljeðivanje Izgled ne-POD klase u memoriji se ne odreðuje C + + standardom. 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. Na primjer.print ().print () b. mnogi popularni C++ kompajleri implementiraju jednu ba tinu kao splet roditeljske klase sa djeèijom klasom. Uz èlana funkcije print(). ispis se mo e pojednostaviti u: a.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

e za 97 .

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

.

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

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

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

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

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.' ) C lie ntHeight Visina 'korisnog' dijela prozora C lientWidth irina 'korisnog' dijela prozora Color Boja Constraints Ogranièenja ( npr.Action Izaberete neku proceduru koja æe biti obavljena pri otvaranju prozora Izabe rete neku proceduru koja æe biti obavljena pri otvaranju prozora ActiveC ontrol Pokazuje objekat koji je aktivan nakon otvaranja prozora Align Prijanjanje uz neku od ivica ekrana Anchors Pokazuje kako je objekat vezan za 'roditelj' objekat AutoScroll Odreðuje da li æe se automatski pojaviti scrollbarovi ako je to potrebno AutoSize Odreðuje da li æe objekt tako prilagoditi velièinu da nema slobodnog prosto BiDiMode Pravac objekata Borde rIcons Ikone poput minimize. close Borde rStyle Odreðuje stil prozora ( npr.. Sizeable -moguæe je mijenjati velièinu u rad u ) BorderWidth irina okvira C aption Naslov ( npr.. maximize. u ovom prozoru je naslov 'Programiranje: Osobine. visine ) Ctl3D Odreðuje da li æe objekat biti 3D renderisan C ursor Odreðuje kakav æe kursor biti iznad objekta DefaultMonitor Odreðuje koji objekat æe biti glavni DockSite Odreðuje da li je objekat vezan DragKind Odreðuje vrstu povlaèenja objekta DragMode Odreðuje naèin povlaèenja objekta Enabled Pokazuje da li je objekat ' iv' Font Odreðuje font na objektu FormStyle Stil prozora ( npr. 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 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

117 .

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

.

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

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

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

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

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

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

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

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

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

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

124 .

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

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

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

.

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

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

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

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

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

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

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

puts group.sort.reverse 130 .

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

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

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

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

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

NATURAL JOIN Book_Author GROUP BY title. 133 .

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

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

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

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

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

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 .

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

jasmin) 153 . roditelj(armin. Mo e se reæi da svako pra vilo definira jednu uzroèno posljediènu vezu. mogu opisa ti nove relacije majka i otac.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.

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

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

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

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

156 .

You're Reading a Free Preview

Download
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->