Pascal (programski jezik) – razlika između verzija

Uklonjeni sadržaj Dodani sadržaj
revert
m Poništena izmjena 40932598 korisnika 5.43.78.148 (razgovor)
oznaka: poništenje
Red 1:
'''Pascal''' je [[programski jezik]] nastao na [[ETH Zürich]] institutu 1970. godine. Dizajnirao ga je [[Niklaus Wirth]], švicarski računalni znanstvenik, i imenovao prema francuskomfrancuzkom filozofu, fizičaru i matematičaru, [[Blaise Pascal|Blaiseu Pascalu]], koji je 1641. izumio [[Pascalina|mehanički kalkulator]].
 
Pascal je [[imperativno programiranje|imperativni]] i [[proceduralno programiranje|proceduralni]] programski jezik, smišljen s namjerom da omogući i popularizira [[strukturirano programiranje]], a nastao je po uzoru na stariji jezik [[ALGOL]], nakon pokušaja da se isti izmijeni i poboljša. Veliku popularnost stekao je tokom 70-ih i 80-ih godina 20. stoljeća, zahvaljujući svojoj zastupljenosti kao jezika na kojem se podučavalo [[programiranje]] na sveučilištima.
 
KasnijaKasnije izvedbaneformalne jezika,ekstenzije pod skupnim nazivom [[Object Pascal]], proširujeproširuju strukturiranu imperativnu paradigmu, omogućujući pored proceduralnoga i [[objektno-orijentirano programiranje]].
 
== Povijest ==
=== Rani razvoj ===
''Niklaus Wirth'' je sudjelovao u projektu ''ALGOL X'', čija je svrha bila poboljšanje i standardizacija jezika ''ALGOL 60''. Nakon što je njegov prijedlog izmjena pod nazivom ''ALGOL W'' odbijen 1968. godine, Wirth napušta projekt i dizajnira novi programski jezik koji dovršava 1970. Rad na ''Algolu'' i ''Pascalu'' poduzet je radi savladavanja poteškoća koje su se javljale programiranjem u dotadašnjim programskim jezicima ([[FORTRAN]], [[COBOL]], [[ALGOL]] i [[BASIC]]), zbog njihove strogo sekvencijalne i nestrukturirane naravi; postojala je potreba za malim i laganim programskim jezikom za učenje u školama i na sveučilištima koji bi omogućivao ''strukturirano programiranje'', za razliku od ''BASIC-a'' koji je isto tako smišljen kao edukativni programski jezik, jer se ''FORTRAN'' pokazao kao vrlo težak studentima za učenje.
 
''Niklaus Wirth'' je sudjelovao u projektu ''ALGOL X'', čija je svrha bila poboljšanje i standardizacija jezika ''ALGOL 60''. Nakon što je njegov prijedlog izmjena pod nazivom ''ALGOL W'' odbijen 1968. godine, Wirth napušta projekt i dizajnira novi programski jezik kojega dovršava 1970. Rad na ''Algolu'' i ''Pascalu'' poduzet je radi prevladavanja problema koji su se javljali programiranjem u dotadašnjim programskim jezicima ([[FORTRAN]], [[COBOL]], [[ALGOL]] i [[BASIC]]), zbog njihove strogo sekvencijalne i [[Nestrukturirano programiranje|nestrukturirane]] naravi; postojala je potreba za malim i laganim programskim jezikom za učenje u školama i na sveučilištima koji bi omogućivao [[strukturirano programiranje]], za razliku od ''BASIC-a'' koji je isto tako smišljen kao edukativni programski jezik, jer se ''FORTRAN'' pokazao kao vrlo težak studentima za učenje.
Prva specifikacija programskoga jezika Pascala objavljena je 1971, sljedeća revizija napravljena je 1973. Već od 1972. Pascal se počinje izučavati na sveučilištima kao jezik prikladan za uvod u programiranje.<ref>http://www.pascal-central.com/ppl/#Origins</ref> Prvobitna standardizacija jezika dogodila se 1983. (ISO 7185:1983).
 
Prva specifikacija programskoga jezika Pascala objavljena je 1971, sledeća revizija napravljena je 1973. Već od 1972. Pascal se počinje izučavati na sveučilištima kao jezik prikladan za uvod u programiranje.<ref>http://www.pascal-central.com/ppl/#Origins</ref> Prvobitna standardizacija jezika dogodila se 1983. (ISO 7185:1983).
Pascal uvodi paradigmu ''strukturiranoga'' i ''proceduralnoga'' programiranja, što znači da se programski kod razlaže na samostalne strukture - ''podatke'' i ''potprograme'', koji se ne izvršavaju nužno u istom redoslijedu kako su i navedeni, niti je potrebno numeriranje redaka kao u sekvencijalnim programskim jezicima (''BASIC'', ranije specifikacije ''Fortrana'' itd), nego se po potrebi pozivaju i izvode. Uvođenjem potprograma izbjegava se nužnost da program sekvencijalno, to jest redoslijedno izvrši sve blokove koda dok ne dođe do naredbe koja označava kraj programa ili bezuvjetni skok ([[GoTo]]), što može uzrokovati probleme pri pisanju ili revidiranju ozbiljnijih programa, jer je korištenje <code>goto</code> naredbe vodilo do nepregledna i nečitljiva koda s jedne strane (fenomen nazvan [[Špageti-kod]]), s druge strane zahtijevalo učitavanje čitava programa u memoriju, umjesto pozivanja pojedinačnih procedura prema potrebi.
 
Pascal uvodi paradigmu ''strukturiranoga'' i ''proceduralnoga'' programiranja, što znači da se programski kod razlaže na samostalne strukture - ''podatke'' i ''podprograme'', koji se ne izvršavaju nužno u istom redoslijedu kako su i navedeni, niti je potrebno numeriranje redaka kao u sekvencijalnim programskim jezicima (''BASIC'', ranije specifikacije ''Fortrana'' itd), nego se po potrebi pozivaju i izvode. Uvodjenjem podprograma izbjegava se nužnost da program sekvencijalno, to jest redoslijedno izvrši sve blokove koda dok ne dodje do naredbe koja označava kraj programa ili bezuvjetni skok ([[GoTo]]), što može uzrokovati probleme pri pisanju ili revidiranju ozbiljnijih programa, jer je korištenje <code>goto</code> naredbe vodilo do nepregledna i nečitljiva koda s jedne strane (fenomen nazvan [[Špageti-kod]]), s druge strane zahtijevalo učitavanje čitava programa u memoriju, umjesto pozivanja pojedinačnih procedura prema potrebi.
U isto vrijeme (1972.) Amerikanac [[Dennis Ritchie]] razvija [[C (programski jezik)|programski jezik C]] zasnovan na istoj proceduralnoj filozofiji kao i Pascal, koji je za razliku od prvobitnoga Pascala, podržavao i osnovne tipove podataka kao što su realni brojevi dvostruke preciznosti (<code>double</code>). Kao što je programski jezik C poslužio [[Ken Thompson|Kenu Thompsonu]] i [[Dennis Ritchie|Dennisu Ritchieju]] za programiranje [[UNIX]]-a sedamdesetih godina, tako je [[UCSD Pascal|UCSD]] izvedba Pascala korištena na [[University of California]] u [[San Diego|San Diegu]] za pisanje [[p-System|p-Systema]], prvoga [[virtualni stroj|virtualnoga stroja]].<ref>http://pascal.retro8bits.com/UCSDhistory.html</ref> ''p-System'' se moglo prenijeti na veliki broj tadašnjih računala zahvaljujući činjenici da je trebalo samo isprogramirati [[Modul (programiranje)|module]] specifične za hardver računala. Program preveden na nekom [[p-machine|p-stroju]] pomoću UCSD Pascal prevoditelja može se izvršavati na svakom računalu koje ima p-System.
 
U isto vrijeme (1972) Amerikanac [[Dennis Ritchie]] razvija [[C (programski jezik)|programski jezik C]] zasnovan na istoj proceduralnoj filozofiji kao i Pascal, koji je za razliku od prvobitnoga Pascala, podržavao i osnovne tipove podataka kao što su realni brojevi dvostruke preciznosti (<code>double</code>). Kao što je programski jezik C poslužio [[Ken Thompson|Kenu Thompsonu]] i [[Dennis Ritchie|Dennisu Ritchieju]] za programiranje [[UNIX]]-a sedamdesetih godina, tako je [[UCSD Pascal|UCSD]] izvedba Pascala korištena na [[University of California]] u [[San Diego|San Diegu]] za pisanje [[p-System|p-Systema]], prvoga [[virtualni stroj|virtualnoga stroja]].<ref>http://pascal.retro8bits.com/UCSDhistory.html</ref> ''p-System'' se moglo prenijeti na veliki broj tadašnjih računala zahvaljujući činjenici da je trebalo samo progamirati dijelove specifične za hardver računala. Program preveden na nekom [[p-machine|p-stroju]] pomoću UCSD Pascal prevoditelja može se izvršavati na svakom računalu koje ima p-System.
Sedamdesetih godina Pascal stiče veliku popularnost jer se puno koristi za aplikacijsko i sistemsko programiranje. Operacijski sistemi za [[Apple]] računala [[Apple Lisa|Lisa]] i [[Macintosh]] s kraja sedamdesetih i početka osamdesetih bili su programirani u Pascalu,<ref>http://www.taoyue.com/tutorials/pascal/history.html</ref> zbog čega pisanje programa u C-u za navedene sisteme nije imalo puno smisla, jer su programi morali biti pisani tako da rade s tipovima podataka koje podržava standardni Pascal kao i [[API]] Apple OS-a. Prvobitni [[Object Pascal]] je najprije nastao u tvrtki [[Apple Computers]], gdje je služio za sistemsko i aplikacijsko programiranje. Kasnije je ''Object Pascal'' proširen, nadopunjen i populariziran u [[Borland|Borlandu]], kroz komercijalne verzije jezika [[Turbo Pascal]] i [[Delphi]].
 
Operacijski sistemi za [[Apple]] računala [[Apple Lisa|Lisa]] i [[Macintosh]] s kraja sedamdesetih i početka osamdesetih bili su programirani u Pascalu,<ref>http://www.taoyue.com/tutorials/pascal/history.html</ref> zbog čega pisanje programa u C-u za navedene sisteme nije imalo smisla, jer su programi morali raditi s tipovima podataka koje podržava standardni Pascal kao i [[API]] Apple OS-a. Prvobitni [[Object Pascal]] je najprije nastao u tvrtki [[Apple Computers]], gdje je služio za sistemsko i aplikacijsko programiranje. Kasnije je ''Object Pascal'' proširen, nadopunjen i populariziran u [[Borland|Borlandu]], kroz komercijalne verzije jezika [[Turbo Pascal]] i [[Delphi]].
 
Do 1980-ih Pascal je izučavan na većini sveučilišta i fakulteta informatičkoga usmjerenja u svijetu.<ref>http://www.pascal-central.com/ppl/#Origins</ref>
 
=== BorlandovSintaksa PascalPascala ===
Godine 1983. pojavljuje se [[Turbo Pascal]] tvrtke [[Borland]], prvo integrirano razvojno okruženje ([[Integrirano razvojno okruženje|IDE]]) za sisteme [[CP/M]] i [[DOS]].<ref>http://www.experiencefestival.com/a/Turbo_Pascal_-_History/id/4865059</ref> ''Turbo Pascal'' objedinjuje sve funkcije ciklusa razvoja softvera u jedan cjelovit program (pisanje koda, kompilacija, linkovanje, ispravljanje grešaka). To je doprinijelo još većoj popularizaciji Pascala u softverskoj industriji, jer su programeri do tad morali pokretati zasebno nekoliko različitih programa ([[editor]], [[kompilator]], [[linker]]) da bi dovršili konačan program. IDE Turbo Pascal je mnogo korišten, kako zbog mogućnosti velike uštede vremena pri razvoju softvera, tako i zbog svoje povoljne cijene i "knjižne licence" koja je omogućivala kupovinu samo jedne kopije proizvoda bez obzira na broj instalacija. Osim Turbo Pascala, Borland je prodavao i skuplju varijantu IDE-a pod nazivom [[Borland Pascal]] koja se od Turbo Pascala neznatno razlikovala po mogućnostima i imala uključen [[izvorni kod]] standardnih modula. Vremenom se Turbo Pascal razvija kao zasebna varijanta programskoga jezika i ostaje u širokoj uporabi sve do početka devedesetih, kada Pascal gubi prvenstvo u odnosu na [[C++]] i [[Java (programski jezik)|Javu]]. Već 1999. Pascal je zamijenjen C-plus-plusom kao standardom na svim američkim sveučilištima.<ref>http://www.taoyue.com/tutorials/pascal/history.html</ref>
 
[[Datoteka:Latex Pascal Listing.png|mini|Ilustracija izvornoga koda u Pascalu, kreirana pomoću programskoga tipografskoga podesivača [[LaTeX]]]]
Od novosti koje uvodi Borland u Turbo Pascal dijalekt značajna je mogućnost dijeljenja koda na odvojene datoteke, takozvane [[Modul (programiranje)|module]] (<code>unit</code>). Ovaj koncept preuzet je iz Pascalu slična programskoga jezika [[Modula]], odnosno [[Modula-2]]<ref>{{cite book
| author = Milan Kukrika
| title = Računari i programiranje
| publisher = "Glas", Banja Luka
| year = 1990
| pages = 88;}}</ref> (kasnija revizija jezika), za čije je kreiranje također zaslužan ''Niklaus Wirth'', autor prvobitnoga Pascala. Mogućnost je dodana počev s verzijom 4.00 Turbo Pascal IDE-a, a u programski paket sadržavao je i standardnu zbirku modula, spočetka u jednoj datoteci <code>TURBO.TPL</code> (.TPL = ''Turbo Pascal Library''), a kasnije u broju odvojenih binarnih .TPU (''Turbo Pascal Unit'') datoteka. Sedma verzija TP-a uključivala je sljedeće module: <code>APP, COLORSEL, CRT, CURSU, DIALOGS, DRIVERS, EDITORS, GRAPH, GRAPH3, HISTLIST, MEMORY, MENUS, MSGBOX, OBJECTS, OUTLINE, STDDLG, STRINGS, TEXTVIEW, TGKSI, TURBO3, VALIDATE, VIEWS, WINDOS.</code>
 
Osnovni elementi Pascal programa su ''naredbe'' ili ''direktive'' (engl. ''statement''), koje se mogu sastojati od ''izraza'' (''ekspresija'') i drugih direktiva. Izrazi se sastoje od ''operatora'' i ''operanada''. Operandi mogu biti ''literalne'' (''doslovne'') vrijednosti, ili reference ''identifikatora''.
Posljednja verzija Turbo Pascala izišla je 1993. pod brojem 7.0. Nakon toga, Borland napušta dalji razvoj ovoga proizvoda<ref>http://www.experiencefestival.com/a/Turbo_Pascal_-_History/id/4865059</ref> i umjesto njega 1995. izdaje [[Delphi]] za 16-bitni [[Windows]] 3x, [[Rapid Aplication Development|RAD]] okružje za Borland Pascal koji se od tad razvija kao poseban programski jezik Delphi. Delphi, kao [[Object Pascal|objektno-orijentirani]] Pascal osobito pogodan za razvijanje grafičkih Windows aplikacija zadržao se u širokoj upotrebi sve do danas, a stekao je i široku popularnost zbog lakoće korištenja i vizualnoga sučelja za kreiranje [[Grafičko korisničko sučelje|GUI]]-ja. Od 2006. razvojem Delphija bavi se [[CodeGear]], Borlandova podružnica za razvojne programe ranije poznata kao ''Borland Developers Tool Group'' (DTG).<ref>http://delphi.about.com/od/humorandfun/a/codegear.htm</ref> [[Open Source|OpenSource]] alternativa Delphiju su [[Free Pascal Compiler]] i [[Lazarus]] IDE.
 
== Sintaksa Pascala ==
Osnovni elementi Pascal programa su ''naredbe'' ili ''direktive'' (engl. ''statement''), koje se mogu sastojati od ''izraza'' (''ekspresija'') i drugih direktiva. Izrazi se sastoje od ''operatora'' i ''operanada''. Operandi mogu biti ''literalne'' (''doslovne'') vrijednosti, ili ''identifikatori''. Identifikatori su imena deklariranih ''varijabli'' i ''potprograma'' (''procedura'' i ''funkcija'').
 
U ''direktive'' spadaju ''deklaracije'' (konstanti, varijabli, labela, procedura i funkcija), ''definicije'' (tipova podataka), te tri osnovne vrste naredbi za ''sekvenciju'' (tok), ''iteraciju'' (ponavljanje) i ''selekciju'' (izbor).
 
Po pravilu naredbe moraju završavati znakom ''točka-zarez'' (<code>;</code>), osim ako je naredba posljednjazadnja u ''dosegu'' (bloku, proceduri, funkciji ili programu), u kojem slučaju se može izostaviti, ali je dobra praksa ipak staviti <code>;</code> iza svake naredbe, zbog eventualnih kasnijih dodavanja novih naredbi. Izuzetak je takođeri posljednjazadnja naredba prije ključne riječi <code>else</code> u [[If-Then-Else]] konstrukciji, ali u ovom se slučaju može smatrati da je ''If-Then-Else'' jedna naredba, posebna vrsta i drugačija od ''If-Then''. Za <code>else</code> naredbu, ako je dio <code>case</code> konstrukcije, ne vrijedi ovaj "izuzetak". Ovo je jedna od karakteristika Pascala koje ga razlikuju od jezika kao što su ''C'' i ''C++'', koji zahtijevaju točka-zarez iza svake ''if-then'' naredbe, što praktično znači da se <code>else</code> u C/C++ prevodiocima smatra posebnom naredbom, umjesto dijelom jedne strukture ''If-Then-Else'', kao u Pascalu, a točka-zareztarez služi kao ''terminator'' naredbi, umjesto kao ''separator'', što je slučaj u Pascalu.
 
Blokovi naredbi se zatvaraju izmeđuizmedju ključnih riječi <code>begin</code> i <code>end</code>, što je još jedna od karakterističnih razlika Pascala u odnosu na jezike [[C (programski jezik)|C]], [[C++]], [[C Sharp|C#]], [[Java (programski jezik)|Java]] itd, koji koriste vitičaste zagrade <code>{ }</code>. Ponekad se u programerskom žargonu ovi jezici nazivaju ''jezici vitičastih zagrada'' (engl. ''curly-brace languages'').
 
PosljednjaZadnja <code>end</code> naredba u programu završava ''točkom'' (<code>.</code>) umjesto ''točka-zarezom'', i to je ujedno naredba zatvaranja bloka glavne procedure programa.
 
=== Deklaracije podataka ===
 
''Konstante'' i ''varijable'' se deklariraju ključnim riječima <code>const</code> i <code>var</code>.
'''Konstante''' i '''varijable''' se deklariraju ključnim riječima <code>const</code> i <code>var</code>.
 
<source lang="pascal">
Linija 70 ⟶ 62:
 
=== Naredbe izbora - grananja ===
 
Naredbe za izvršavanje izbora (grananja) toka programa su [[If-Then]], [[If-Then-Else]] i [[Case]].
 
==== If-Then ====
 
''If-Then'' se koristi za odlučivanje o jednom od mogućih ishoda toka programa na osnovi uvjeta navedena u ''izrazu'' iza ključne riječi <code>if</code>. Ako je uvjet ispunjen, izvršava se sljedeća naredba ili blok nakon ključne riječi <code>then</code>, a ako nije, programski tok preskače naredbu ili blok iza <code>then</code> direktive, to jest nastavlja s izvršavanjem sljedeće naredbe koja nije u sklopu ''If-Then'' strukture, ukoliko postoji.
'''If-Then''' se koristi za odlučivanje o jednom od mogućih izhoda toka programa na osnovi uslova navedena u ''izrazu'' iza ključne riječi <code>if</code>. Ako je uslov izpunjen, izvršava se sledeća naredba ili blok nakon ključne riječi <code>then</code>, a ako nije, programski tok preskače naredbu ili blok iza <code>then</code> direktive, to jest nastavlja s izvršavanjem sledeće naredbe koja nije u sklopu ''If-Then'' strukture, ukoliko postoji.
 
<source lang="pascal">
Linija 92 ⟶ 86:
 
==== If-Then-Else ====
 
Za izbor između dvaju mogućih tokova programa koristi se ''If-Then-Else'' struktura; prvi tok izvršava se u slučaju da je ispunjen uvjet napisan između <code>if</code> (''ako'') i <code>then</code> (''onda''), drugi u slučaju da nije, a stoji nakon ključne riječi <code>else</code> (''inače''):
Za izbor izmedju dvaju mogućih tokova programa koristi se '''If-Then-Else''' struktura; prvi tok izvršava se u slučaju da je izpunjen uslov napisan izmedju <code>if</code> (''ako'') i <code>then</code> (''onda''), drugi u slučaju da nije, a stoji nakon ključne riječi <code>else</code> (''inače''):
 
<source lang="pascal">
Linija 98 ⟶ 93:
</source>
 
Ovdje vrijedi isto pravilo o zatvaranju blokova višestrukih naredbi izmeđuizmedju <code>begin { ... } end;</code> direktiva:
 
<source lang="pascal">
Linija 118 ⟶ 113:
 
==== Case ====
 
''Case'' grananje koristi se kao preglednija alternativa za izbor višestrukih ishoda toka programa.
'''Case''' grananje koristi se kao preglednija alternativa za izbor višestrukih izhoda toka programa.
 
<source lang="pascal">
Linija 131 ⟶ 127:
 
=== Naredbe ponavljanja - petlje ===
 
Naredbe ponavljanja su <code>for</code>, <code>while</code> i <code>repeat</code>, a njihova upotreba izgleda ovako:
 
Linija 139 ⟶ 136:
</source>
 
Petlja <code>for</code> izvršava neku naredbu ili blok naredbi točno određenodredjen broj puta, a varijabla brojača se navodi kao područje izmeđuizmedju dviju cjelobrojnih vrijednosti, odvojenihoddvojenih ključnom riječju <code>to</code>. Petlja <code>while</code> provjerava neki uvjet naveden u ''izrazu'' prije izvršavanja ''naredbe'' (engl. ''statement'') ili bloka naredbi, za razliku od <code>repeat</code> petlje, koja najprije izvršava naredbu ili blok najmanje jedanput, a zatim provjerava uvjet u izrazu.
 
=== Operatori ===
Operatori se dijele, s obzirom na to koliko operanda obrađuju, na ''unarne'' (jedan operand) i ''binarne'' (dva operanda).
 
Operatori se dijele, s obzirom na to koliko operanda obradjuju, na ''unarne'' (jedan operand) i ''binarne'' (dva operanda).
Pascal koristi operator <code>:=</code> za pridruživanje vrijednosti, nasuprot jezicima kao što su ''C'' ili ''C++'', gdje za to služi obični znak jednakosti (<code>=</code>). U Pascalu je znak <code>=</code> relacijski operator za logičke izraze - ''ekspresije'' (''C/C++'' za to upotrebljava ''dvostruki znak jednakosti'', <code>==</code>). Ova razlika može dovesti do konfuzije i grešaka u programiranju, naročito kod programera s iskustvom u Pascalu koji tek počinju programirati u jezicima C/C++, jer se izraz <code>if (i = 0)</code> (umjesto <code>if (i == 0)</code>) prevodi u C/C++ kompilatorima kao valjan ''statement''.
 
Pascal koristi operator <code>:=</code> za pridruživanje vrijednosti, nasuprot jezicima kao što su ''C'' ili ''C++'', gdje za to služi obični znak jednakosti (<code>=</code>). U Pascalu je znak <code>=</code> relacijski operator za logičke izraze - ''ekspresije'' (''C/C++'' za to upotrebljava ''dvostruki znak jednakosti'', <code>==</code>). Ova razlika može dovesti do konfuzije i grešaka u programiranju, naročito kod programera s izkustvom u Pascalu koji tek počinju programirati u jezicima C/C++, jer se izraz <code>if (i = 0)</code> (umjesto <code>if (i == 0)</code>) prevodi u C/C++ kompilatorima kao valjan ''statement''.
 
Slijedi popis operatora u Pascalu.<ref>https://www.pilotlogic.com/sitejoom/index.php/104-wiki/pascal-basics/chapter-1/118-pascal-operators</ref>
 
==== Aritmetički operatori ====
 
+ : sabiranje;
- : oduzimanje;
Linija 157 ⟶ 156:
 
==== Relacijski operatori ====
 
= : jednako;
<> : nejednako;
Red 165:
 
==== Logički operatori ====
 
not : logička negacija;
and : logičko '''i''';
or : logičko '''ili''';
xor : logičko '''ili''' s negacijom;
 
==== Operatori bitova ====
 
shl : lijevo pomjeranje;
shr : desno pomjeranje;
 
==== Ostali operatori ====
 
with : selekcija sloga (record);
in : pripadnost skupu (set);
Linija 180 ⟶ 183:
 
=== Vrste podataka ===
 
Tipovi podataka u Pascalu dijele se na osnovne (skalarne) i strukturirane (izvedene), koji se uglavnom definiraju kao polja i slogovi sastavljeni od osnovnih ili drugih strukturiranih podataka.
 
==== Osnovni tipovi ====
 
Skalarne vrste podataka u Pascalu su:
 
* '''[[Cijeli broj|cijeli brojevi]]''' (<code>Integer</code>);
* '''[[Realan broj|realni brojevi]]''' (<code>Real</code>);
* '''[[Alfanumerički znak|znakovi]]''' (<code>Char</code>);
* '''[[Booleova algebra|logičke vrijednosti]]''' (<code>Boolean</code>).
 
Nadalje, pojedini tipovi podataka se klasificiraju kao '''ordinarni''', što znači da se mogu sortirati prema veličini i manipulirati standardnim funkcijama <code>Pred</code>, <code>Succ</code>, <code>Ord</code>. Od osnovnih tipova podataka, u ordinarne spadaju svi osim <code>Real</code>,<ref>https://freepascal.org/docs-html/ref/refsu4.html</ref> jer decimalni broj ne može imati prethodnikapredhodnika ili sljedbenika po veličini.
 
==== Strukturirani tipovi ====
 
U strukturirane vrste podataka spadaju:
 
* '''[[niz]]''' ili polje (<code>array</code>);
* '''[[niz znakova]]''' (<code>string</code>);
* '''[[slog]]''' (<code>record</code>);
* '''[[datoteka]]''' (<code>file</code>).
 
==== Posebni tipovi ====
* ''[[pokazivač]]'' (Pointer);
 
* '''[[pokazivač]]''' (Pointer)
''Pokazivač'' je metapodatak koji ukazuje na adresu nekoga podatka u memoriji. Ovisno o tome pokazuju li na specifični tip podatka ili samo na memorijsku lokaciju, pokazivači se dijele na ''tipizirane'' i ''generičke''.
 
'''Pokazivač''' je metapodatak koji ukazuje na adresu nekoga podatka u memoriji. Ovisno o tome pokazuju li na specifični tip podatka ili samo na memorijsku lokaciju, pokazivači se dijele na ''tipizirane'' i ''generičke''.
 
==== Enumeracije ====
 
''Enumeracije'' ili ''pobrojani tip'' su izvedeni ordinarni tip podataka. Primjer:<ref>https://wiki.freepascal.org/Enumerated_types</ref>
'''Enumeracije''' ili '''pobrojani tip''' su izvedeni ordinarni tip podataka. Npr:<ref>https://wiki.freepascal.org/Enumerated_types</ref>
 
<source lang="pascal">
Linija 215 ⟶ 223:
 
==== Tipovi dosega ====
 
Pascal podržava varijable u određenom dosegu (području, podopsegu) nekoga drugoga ordinarnoga tipa podataka:
Pascal podržava varijable u odredjenom dosegu (području, podobsegu) nekoga drugoga ordinarnoga tipa podataka:
 
<source lang="pascal">
Linija 223 ⟶ 232:
</source>
 
Moguće je takođertakodjer deklarirati varijablu u dosegu enumeriranoga tipa kojega smo prethodnopredhodno definirali, pa s obzirom na gornji primjer definicije tipa možemo imati:
 
<source lang="pascal">
Linija 238 ⟶ 247:
 
==== Setovi ====
 
Jedna od distinktivnih karakteristika Pascala u odnosu na druge programske jezike jest podrška za operacije sa [[Teorija skupova|skupovima]], odnosno tip podataka <code>set</code>.
Jedna od distinktivnih karakteristika Pascala u odnosu na druge programske jezike jest podržka za operacije sa [[Teorija skupova|skupovima]], odnosno tip podataka <code>set</code>.
 
<source lang="pascal">
Linija 246 ⟶ 256:
</source>
 
Ova vrsta ''sintaksnogsintaksnoga šećerasladora'' (engl. ''sytactic sugar'') omogućuje pisanje elegantnijega i konciznijega koda. Provjera pripadnosti elementa (vrijednosti varijable) nekom skupu vrši se pomoću operatora <code>in</code>. Dakle, možemo napisati ovo:
 
<source lang="pascal">
Linija 274 ⟶ 284:
</source>
 
=== Potprogrami (funkcijeProcedure i procedure)funkcije ===
 
Pascal razlikuje dvije vrste potprograma, ''procedure'' i ''funkcije''. Funkcije za razliku od procedura vraćaju neku vrijednost, pa se prema tipu podataka koji vraćaju razlikuju i tipovi funkcija, što se navodi u deklaraciji. Drugi programski jezici uglavnom sve potprograme nazivaju isto, ''funkcije'', ''subrutine'' itd. Naprimjer, u programskom jeziku ''C'', procedura je obična funkcija koja vraća vrijednost <code>void</code> (ništa). Primjeri deklaracija procedure i funkcije, bez ''definicija'':
Pascal razlikuje dvije vrste podprograma, '''procedure''' i '''funkcije'''. Funkcije za razliku od procedura vraćaju neku vrijednost, pa se prema tipu podataka koji vraćaju razlikuju i tipovi funkcija, što se navodi u deklaraciji. Drugi programski jezici uglavnom sve podprograme nazivaju isto, ''funkcije'', ''subrutine'' itd. Naprimjer, u programskom jeziku ''C'', procedura je obična funkcija koja vraća vrijednost <code>void</code> (ništa). Primjeri deklaracija procedure i funkcije, bez ''definicija'':
 
<source lang="pascal">
Linija 283 ⟶ 294:
 
==== Parametri ====
 
Parametri neke funkcije ili procedure su deklarirane unosne vrijednosti, a deklariraju se u u malim zagradama iza imena funkcije ili procedure, na isti način kao i varijable u <code>var</code> sekcijama programa.
 
Parametri mogu biti ''vrijednosni'vrijednostni''' ili '''varijabilni'''. Varijabilni parametri mijenjaju vrijednost varijable pristupajući joj direktno (poziv po '''referenci''') umjesto da rade s njezinom kopijom (poziv po '''vrijednosti'''), što se specificira ključnom riječju <code>var</code> ispredizpred deklaracije parametra.
 
<source lang="pascal">
Linija 292 ⟶ 304:
</source>
 
Za razliku od vrijednosnihvrijednostnih parametara, varijabilni parametri ne mogu prihvatiti konstantne vrijednosti (recimo neki broj ili string), nego samo ''identifikatore'' varijabli koje mijenjaju. VrijednosniVrijednostni parametri mogu primati obje vrste ''argumenata'', i doslovne vrijednosti, i imena varijabli.
 
=== Standardne procedure i funkcije ===
 
==== I/O ====
 
Standardne procedure za unos su <code>Read</code> i <code>ReadLn</code>; <code>Read</code> zahtijeva najmanje jedan parametar, naziv varijable čija se vrijednost učitava, dok <code>ReadLn</code> pravi novi redak za svaku učitanu varijablu. Primjer:
 
Linija 310 ⟶ 324:
</source>
 
Za ispisizpis postoje procedure <code>Write</code> i <code>WriteLn</code>. Razlika izmeđuizmedju njih je u tome što ova druga ispisujeizpisuje tekst skupa sa prijelomom reda (linije), odnosno znakom za novi red (<code>CR/LF</code>).
 
==== Aritmetičke operacije ====
 
Neke od standardno ugrađenih aritmetičkih funkcija u Pascalu su:
Neke od standardno ugradjenih aritmetičkih funkcija u Pascalu su:
 
abs : absolutna vrijednost broja (broj bez predznaka);
Linija 323 ⟶ 338:
cos : kosinus;
tan : tangens;
pred : prethodnikpredhodnik cijeloga broja;
succ : sljedbenik cijeloga broja;
round: zaokruživanje (vraća Integer);
Linija 330 ⟶ 345:
frac : decimalni dio razlomka (vraća Real);
 
==== Operacije sa stringovima ====
== Programski primjeri ==
=== "Dobar dan!" ===
Najjednostavniji program koji ispisuje pozdrav na zaslonu:
 
Neke od funkcija za rad s nizovima znakova (stringovima):
<source lang="pascal">
program DobarDan;
 
length : duljina stringa;
begin
copy : kopiranje stringa;
WriteLn("Dobar dan!");
pos : pozicija pojavljivanja podniza u nizu;
ReadLn;
delete : brisanje znakova;
end;
insert : umetanje znakova;
</source>
str : pretvara broj u string;
val : pretvara string u broj ili vraća grešku;
 
== Programski primjeri ==
 
=== Fibonaccijevi brojevi ===
 
ProgramSlijedi program koji ispisujeizpisuje [[Fibonaccijev niz]]:.<ref>http://progopedia.com/language/pascal/</ref>
 
<source lang="pascal">
Linija 370 ⟶ 386:
 
=== Faktorijel ===
 
Naredni program računa [[Faktorijel]] zadanih brojeva:<ref>http://progopedia.com/language/pascal/</ref>
Naredni program računa [[Faktorijel]] zadanih brojeva.<ref>http://progopedia.com/language/pascal/</ref>
 
<source lang="pascal">
Linija 393 ⟶ 410:
 
== Varijante i dijalekti Pascala ==
* ''ISO Pascal'' - standardni Pascal, prema specifikacijama [http://www.moorecad.com/standardpascal/iso7185.pdf ISO 7185 :1990]. Sve druge implementacije manje ili više proširuju ISO izvedbu.
 
* '''UCSD Pascal''' - Implementacija Pascala za virtuani stroj [[p-Machine]] na [[p-System]] OS-u.
* ''Turbo Pascal'' - uvodi mnoge nove mogućnosti kojih nema u ISO izvedbi, između ostalih podršku za [[objektno-orijentirano programiranje]] u jeziku ''Object Pascal'' (počev od verzije ''Turbo Pascal 5.5'').<ref>http://dn.codegear.com/article/20693</ref>
 
* '''ISO Pascal''' - Standardni Pascal, prema specifikacijama [http://www.moorecad.com/standardpascal/iso7185.pdf ISO/IEC 7185:1990 Pascal] i [http://www.moorecad.com/standardpascal/iso10206.pdf ISO/IEC 10206:1990 Extended Pascal].
* ''Object Pascal'' - Objektno orijentirani Pascal, danas zastupljen u dvama dijalektima: ''Delphi'' i ''Free Pascal''. Object Pascal prvi put je implementiran na Apple računalima 1985.<ref>http://www.experiencefestival.com/object_pascal_-_early_history_at_apple</ref>
 
* '''Turbo Pascal''' - Uvodi mogućnosti kojih nema u ISO varijanti: programske ''module'' (počev od verzije ''Turbo Pascal 4.0''), podržku za [[objektno-orijentirano programiranje|OOP]] (s verzijom ''Turbo Pascal 5.5'').<ref>http://dn.codegear.com/article/20693</ref>
 
* '''Object Pascal''' - Objektno orijentirani Pascal, danas zastupljen u dvama dijalektima: ''Delphi'' i ''Free Pascal''. Object Pascal prvi put je implementiran na Apple računalima 1985.<ref>http://www.experiencefestival.com/object_pascal_-_early_history_at_apple</ref>
 
== Razvojna okruženja za programiranje u Pascalu ==
 
=== BesplatnaFreeware ===
* ''[[Free Pascal]]'' - Multiplatformski Pascal i Object Pascal kompilator, u potpunosti kompatibilan s ''Turbo Pascal'' dijalektom i s djelomičnom podrškom za ''Delphi''. Programski paket sadrži ''Free Pascal Compiler (FPC)'' i ''FP IDE'', editor koji izgledom i funkcionalnošću imitira ''Turbo Pascal IDE''. Postoje verzije FP paketa za sljedeće [[PC]] [[Operacijski sustav|OS]]-ove: [[DOS]], [[OS/2]], [[Windows]], [[Linux]], [[BSD]], [[MacOS]], [[Netware]] i [[MorphOS]], te druge platforme: [[Windows CE]], [[Game Boy Advance]], [[Nintendo DS]], zatim za različite procesorske arhitekture: [[x86]] (i386), [[x86-64]] (amd64), [[PowerPC|PPC]], PPC64, [[SPARC]] i [[arm]]. [http://www.freepascal.org/ [link]]
 
* '''[[Free Pascal]]''' - Multiplatformski Pascal i Object Pascal kompilator, u podpunosti kompatibilan s ''Turbo Pascal'' dijalektom i s djelomičnom podržkom za ''Delphi''. Programski paket sadrži ''Free Pascal Compiler (FPC)'' i ''FP IDE'', editor koji izgledom i funkcionalnošću imitira ''Turbo Pascal IDE''. Postoje verzije FP paketa za sledeće [[PC]] [[Operacijski sustav|OS]]-ove: [[DOS]], [[OS/2]], [[Windows]], [[Linux]], [[BSD]], [[MacOS]], [[Netware]] i [[MorphOS]], te druge platforme: [[Windows CE]], [[Game Boy Advance]], [[Nintendo DS]], zatim za različite procesorske arhitekture: [[x86]] (i386), [[x86-64]] (amd64), [[PowerPC|PPC]], PPC64, [[SPARC]] i [[arm]]. [http://www.freepascal.org/ [link]]
* ''[[Lazarus]]'' IDE - Grafičko sučelje za ''Free Pascal Compiler (FPC)'' i vizualno Pascal/Delphi programiranje. Podržava ''Windows'', ''Linux'' i ''MacOS''. Lazarus je skoro u potpunosti o [[API]]-ju neovisna platforma, tako da se jedanput napisan izvorni kôd može prevoditi na svim sistemima s [[Free Pascal|FPC]]-om (''"Napiši jedanput, kompiliraj svugdje"''<ref>http://www.lazarus.freepascal.org/index.php?page=about</ref>) [http://www.lazarus.freepascal.org/ [link]]
 
* '''[[Lazarus]]''' IDE - Grafičko sučelje za ''Free Pascal Compiler (FPC)'' i vizualno Pascal/Delphi programiranje. Podržava ''Windows'', ''Linux'' i ''MacOS''. Lazarus je skoro u podpunosti o [[API]]-ju neovisna platforma, tako da se jedanput napisan izvorni kôd može prevoditi na svim sistemima s [[Free Pascal|FPC]]-om (''"Napiši jedanput, kompiliraj svugdje"''<ref>http://www.lazarus.freepascal.org/index.php?page=about</ref>) [http://www.lazarus.freepascal.org/ [link]]
* ''[[MSEide]]'' - još jedan ''Free Pascal'' IDE, za ''Linux'' i ''Windows'', no puno jednostavniji i manji od ''Lazarusa''. [http://homepage.bluewin.ch/msegui/ [link]]
 
* '''[[Bloodshed Dev-PascalMSEide]]''' - Integriranojoš razvojno okruženje (IDE) zajedan ''Free Pascal'' CompilerIDE, (FPC)za ''Linux'' nai ''Windows'', platformino puno jednostavniji i manji od ''Lazarusa''. [http://wwwhomepage.bloodshedbluewin.netch/msegui/devpascal.html [link]]
 
* '''[[Bloodshed Dev-Pascal]]''' - Integrirano razvojno okruženje (IDE) za ''Free Pascal Compiler (FPC)'' na ''Windows'' platformi. [http://www.bloodshed.net/devpascal.html [link]]
* ''[[Borland]] [[Turbo Pascal]]'' - Linkovi za preuzimanje: [http://www.uv.tietgen.dk/staff/mlha/download/dos/borland/tp55.zip TP 5.5] i [http://debian.udsu.ru/pub/soft/win/turbo-pascal/TP70.EXE TP 7.0];
 
* '''[[Borland]] [[Turbo Pascal]]''' - Linkovi za preuzimanje: [http://www.uv.tietgen.dk/staff/mlha/download/dos/borland/tp55.zip TP 5.5] i [http://debian.udsu.ru/pub/soft/win/turbo-pascal/TP70.EXE TP 7.0];
* ''[[Virtual Pascal]]'' - Samostalan projekt autora ''Allana Mertnera'' i ''Vitalyja Miryanova'' od 1995 do 2005. Virtual Pascal je razvojno okruženje za ''Windows'' i ''OS/2'' s eksperimentalnom podrškom za ''Linux''. ''Virtual Pascal Compiler (VPC)'' može linkovati 32-bitne egzekutivne datoteke za ''Windows'' ([[Portable Executable|PE]]) i ''OS/2''; u potpunosti je kompatibilan s ''Turbo Pascalom'', dok ''VP IDE'' editor izgledom imitira ''Turbo Pascal IDE'', pa je zbog svega toga VP svojevrsna prilagodba TP-a s 16-bitnoga DOS-a na 32-bitni Windows. [http://web.archive.org/web/20051229123611/www.vpascal.com/news.php[link]] na arhiviranu web stranicu; [http://www.softpedia.com/get/Programming/Coding-languages-Compilers/Virtual-Pascal.shtml Softpedia link] za preuzimanje posljednje verzije 2.1.279 iz 2004.
 
* '''[[Virtual Pascal]]''' - Samostalan projekt autora ''Allana Mertnera'' i ''Vitalyja Miryanova'' od 1995 do 2005. Virtual Pascal je razvojno okruženje za ''Windows'' i ''OS/2'' s eksperimentalnom podržkom za ''Linux''. ''Virtual Pascal Compiler (VPC)'' može linkovati 32-bitne egzekutivne datoteke za ''Windows'' ([[Portable Executable|PE]]) i ''OS/2''; u podpunosti je kompatibilan s ''Turbo Pascalom'', dok ''VP IDE'' editor izgledom imitira ''Turbo Pascal IDE'', pa je zbog svega toga VP svojevrstna prilagodba TP-a s 16-bitnoga DOS-a na 32-bitni Windows. [http://web.archive.org/web/20051229123611/www.vpascal.com/news.php[link]] na arhiviranu web stranicu; [http://www.softpedia.com/get/Programming/Coding-languages-Compilers/Virtual-Pascal.shtml Softpedia link] za preuzimanje zadnje verzije 2.1.279 iz 2004.
* ''[[Pascal Gladiator IDE]]'' - IDE za [[Free Pascal|FPC]] na MacOS platformi; autor Gladiatora ''Ryan Joseph'' tvrdi da ga programira za osobnu uporabu i nudi besplatno za download i korištenje kao jednostavniju alternativu [[XCode]] editoru na MacOS-u. [http://www.web-scripter.com/pascal/ [link]].
 
* '''[[Pascal Gladiator IDE]]''' - IDE za [[Free Pascal|FPC]] na MacOS platformi; autor Gladiatora ''Ryan Joseph'' tvrdi da ga programira za osobnu uporabu i nudi bezplatno za download i korištenje kao jednostavniju alternativu [[XCode]] editoru na MacOS-u. [http://www.web-scripter.com/pascal/ [link]].
* ''[[PascalABC.NET]]'' - Razvojno okruženje za [[.NET Framework]]. [http://pascalabc.net/ [link]]
 
* '''[[PascalABC.NET]]''' - Razvojno okruženje za [[.NET Framework]]. [http://pascalabc.net/ [link]]
 
=== Komercijalna ===
* [[CodeGear]] ''[[Delphi]]'' - [http://www.codegear.com/products/delphi [link]]
 
* [[CodeGear]] '''[[Delphi]]''' - [http://www.codegear.com/products/delphi [link]]
== Navodi ==
{{reflist}}
 
== VanjskeDokumenti poveznicei drugi resursi ==
{{Commonscat|Pascal (programming language)}}
=== Povijesni dokumenti ===
* [https://inf.ethz.ch/personal/wirth/Miscellaneous/ComputersAndComputing.pdf Computers and Computing: A Personal Perspective, by Niklaus Wirth]
 
* ''Computers and Computing: A Personal Perspective'', by Niklaus Wirth [https://inf.ethz.ch/personal/wirth/Miscellaneous/ComputersAndComputing.pdf ComputersAndComputing.pdf]
=== Standardi ===
* ''Pascal: Skripta sa zadacima i rješenjima'' [http://oscavnik.weebly.com/uploads/4/1/2/6/4126619/pascal1.pdf pascal1.pdf]
* [http://www.moorecad.com/standardpascal/iso7185.pdf ISO/IEC 7185:1990 Pascal]
* ''Sa bejzika na pascal'' - Novinski prilog časopisa ''Računari'' iz 1987 [http://www.dejanristanovic.com/refer/bas2pas.zip bas2pas.zip]
* [http://www.moorecad.com/standardpascal/iso10206.pdf ISO/IEC 10206:1990 Extended Pascal]
* ''Roby's Pascal Tutorial'' [http://web.archive.org/20090905012947/www.geocities.com/siliconvalley/park/3230/pas/pasles00.html Arhivirane HTML stranice]
 
=== TutorijaliNavodi ===
* [http://oscavnik.weebly.com/uploads/4/1/2/6/4126619/pascal1.pdf Pascal: Skripta sa zadatcima i rješenjima (PDF)]<!--
* [http://dzs.ffzg.hr/text/Pascal/index.htm Pascal i programiranje - Zdravko Dovedan] -->
* [http://www.dejanristanovic.com/refer/bas2pas.zip Sa bejzika na pascal - Novinski prilog časopisa "Računari" iz 1987]
* [http://web.archive.org/20090905012947/www.geocities.com/siliconvalley/park/3230/pas/pasles00.html Roby's Pascal Tutorial]
 
{{reflist}}
 
{{Commonscat|Pascal (programming language)}}
[[Kategorija:Programski jezici]]