Pascal (programski jezik) – razlika između verzija

Uklonjeni sadržaj Dodani sadržaj
m Poništena izmjena 40929250 korisnika Obsuser (razgovor)
oznaka: poništenje
očigledno nemate namjeru doprinositi; Poništena izmjena 40929318 korisnika Punk Rollonja (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 francuskom filozofu, fizičaru i matematičaru, [[Blaise Pascal|Blaiseu Pascalu]], koji je 1641. izumio [[Pascalina|mehanički kalkulator]].
{{Izmjena_u_toku}}
 
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.
'''Pascal''' je [[programski jezik]] nastao na [[ETH Zürich]] institutu 1970. godine. Dizajnirao ga je [[Niklaus Wirth]], švicarski računalni znanstvenik, i imenovao prema francuzkom filozofu, fizičaru i matematičaru, [[Blaise Pascal|Blaiseu Pascalu]], koji je 1641. izumio [[Pascalina|mehanički kalkulator]].
 
Kasnija izvedba jezika, [[Object Pascal]], proširuje struktuiriranu imperativnu paradigmu, omogućujući pored proceduralnoga i [[objektno-orijentirano programiranje]].
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.
 
Kasnije neformalne ekstenzije pod skupnim nazivom [[Object Pascal]] proširuju struktuiriranu 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.
=== Inicijalni 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 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, 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 ''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. UvodjenjemUvođenjem podprograma izbjegava se nužnost da program sekvencijalno, to jest redoslijedno izvrši sve blokove koda dok ne dodjedođ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.
 
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 progamiratiisprogramirati dijelove[[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.
 
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 raditibiti 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]].
 
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>
 
=== BorlandBorlandov Pascal ===
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>
 
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, korekcija 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 bio popularan, 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>
 
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
Linija 32 ⟶ 27:
| publisher = "Glas", Banja Luka
| year = 1990
| pages = 88;}}</ref> (''Modula-2'' je kasnija revizija jezika), ''Modula'';za obačije je dizajniraokreiranje također zaslužan [[''Niklaus Wirth]]'', autor prvobitnoga Pascala). Mogućnost je dodana počev s verzijom 4.000 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 sledeć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>
 
ZadnjaPosljednja verzija Turbo Pascala izišla je 1993. pod brojem 7.0. Nakon toga, Borland napušta dalji razvoj TP-aovoga 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'').
 
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''.
 
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 zadnjaposljednja 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 itakođer zadnjaposljednja 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-tarez služi kao ''terminator'' naredbi, umjesto kao ''separator'', što je slučaj u Pascalu.
 
Blokovi naredbi se zatvaraju izmedjuizmeđu 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'').
 
ZadnjaPosljednja <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 77 ⟶ 70:
 
=== 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 izhoda toka programa na osnovi uslova navedena u ''izrazu'' iza ključne riječi <code>if</code>. Ako je uslov ispunjen, 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.
 
'''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 101 ⟶ 92:
 
==== 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 uslov 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 108 ⟶ 98:
</source>
 
Ovdje vrijedi isto pravilo o zatvaranju blokova višestrukih naredbi izmedjuizmeđu <code>begin { ... } end;</code> direktiva:
 
<source lang="pascal">
Linija 128 ⟶ 118:
 
==== Case ====
''Case'' grananje koristi se kao preglednija alternativa za izbor višestrukih izhoda toka programa.
 
'''Case''' grananje koristi se kao preglednija alternativa za izbor višestrukih izhoda toka programa.
 
<source lang="pascal">
Linija 142 ⟶ 131:
 
=== Naredbe ponavljanja - petlje ===
 
Naredbe ponavljanja su <code>for</code>, <code>while</code> i <code>repeat</code>, a njihova upotreba izgleda ovako:
 
Linija 151 ⟶ 139:
</source>
 
Petlja <code>for</code> izvršava neku naredbu ili blok naredbi točno odredjenodređen broj puta, a varijabla brojača se navodi kao područje izmedjuizmeđu dviju cjelobrojnih vrijednosti, oddvojenih 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).
 
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''.
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 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 171 ⟶ 157:
 
==== Relacijski operatori ====
 
= : jednako;
<> : nejednako;
Linija 180 ⟶ 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 198 ⟶ 180:
 
=== 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 predhodnika 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č'' 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č]]''' (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''.
 
==== Enumeracije ====
''Enumeracije'' ili ''pobrojani tip'' su izvedeni ordinarni tip podataka. Npr:<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 238 ⟶ 215:
 
==== Tipovi dosega ====
Pascal podržava varijable u određenom dosegu (području, podobsegu) nekoga drugoga ordinarnoga tipa podataka:
 
Pascal podržava varijable u odredjenom dosegu (području, podobsegu) nekoga drugoga ordinarnoga tipa podataka:
 
<source lang="pascal">
Linija 247 ⟶ 223:
</source>
 
Moguće je takodjertakođer deklarirati varijablu u dosegu enumeriranoga tipa kojega smo predhodno definirali, pa s obzirom na gornji primjer definicije tipa možemo imati:
 
<source lang="pascal">
Linija 262 ⟶ 238:
 
==== 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 299 ⟶ 274:
</source>
 
=== ProcedurePotprogrami (funkcije i funkcijeprocedure) ===
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 309 ⟶ 283:
 
==== 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 '''vrijednostni'vrijednosni'' 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> izpredispred deklaracije parametra.
 
<source lang="pascal">
Linija 319 ⟶ 292:
</source>
 
Za razliku od vrijednostnihvrijednosnih parametara, varijabilni parametri ne mogu prihvatiti konstantne vrijednosti (recimo neki broj ili string), nego samo ''identifikatore'' varijabli koje mijenjaju. VrijednostniVrijednosni 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 339 ⟶ 310:
</source>
 
Za izpisispis postoje procedure <code>Write</code> i <code>WriteLn</code>. Razlika izmedjuizmeđu njih je u tome što ova druga izpisujeispisuje 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 361 ⟶ 331:
 
== Programski primjeri ==
=== "Dobar dan!" ===
Najjednostavniji program koji ispisuje pozdrav na zaslonu:
 
<source lang="pascal">
program DobarDan;
 
begin
WriteLn("Dobar dan!");
ReadLn;
end;
</source>
 
=== Fibonaccijevi brojevi ===
 
Slijedi programProgram koji izpisujeispisuje [[Fibonaccijev niz]].:<ref>http://progopedia.com/language/pascal/</ref>
 
<source lang="pascal">
Linija 389 ⟶ 370:
 
=== 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 413 ⟶ 393:
 
== 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.
 
* ''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>
* '''UCSD Pascal''' - Implementacija Pascala za virtuani stroj [[p-Machine]] na [[p-System]] OS-u.
 
* ''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>
* '''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].
 
* '''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 ==
 
=== FreewareBesplatna ===
* ''[[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 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]]
* '''[[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]]
 
* ''[[MSEide]]'' - još jedan ''Free Pascal'' IDE, za ''Linux'' i ''Windows'', no puno jednostavniji i manji od ''Lazarusa''. [http://homepage.bluewin.ch/msegui/ [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]]
 
* '''[[MSEideBloodshed Dev-Pascal]]''' - jošIntegrirano jedanrazvojno okruženje (IDE) za ''Free Pascal'' IDE,Compiler za ''Linux(FPC)'' ina ''Windows'', no puno jednostavniji i manji od ''Lazarusa''platformi. [http://homepagewww.bluewinbloodshed.ch/mseguinet/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];
* '''[[Bloodshed Dev-Pascal]]''' - Integrirano razvojno okruženje (IDE) za ''Free Pascal Compiler (FPC)'' na ''Windows'' platformi. [http://www.bloodshed.net/devpascal.html [link]]
 
* ''[[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 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.
* '''[[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];
 
* ''[[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]].
* '''[[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.
 
* ''[[PascalABC.NET]]'' - Razvojno okruženje za [[.NET Framework]]. [http://pascalabc.net/ [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]]
 
=== Komercijalna ===
* [[CodeGear]] ''[[Delphi]]'' - [http://www.codegear.com/products/delphi [link]]
 
== Navodi ==
* [[CodeGear]] '''[[Delphi]]''' - [http://www.codegear.com/products/delphi [link]]
{{reflist}}
 
== DokumentiVanjske i drugi resursipoveznice ==
{{Commonscat|Pascal (programming language)}}
=== Povijesni dokumenti ===
* [https://inf.ethz.ch/personal/wirth/Miscellaneous/ComputersAndComputing.pdf Computers and Computing: A Personal Perspective, by Niklaus Wirth]
 
=== Standardi ===
* ''Computers and Computing: A Personal Perspective'', by Niklaus Wirth [https://inf.ethz.ch/personal/wirth/Miscellaneous/ComputersAndComputing.pdf ComputersAndComputing.pdf]
* [http://www.moorecad.com/standardpascal/iso7185.pdf ISO/IEC 7185:1990 Pascal]
* ''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/iso10206.pdf ISO/IEC 10206:1990 Extended Pascal]
* ''Sa bejzika na pascal'' - Novinski prilog časopisa ''Računari'' iz 1987 [http://www.dejanristanovic.com/refer/bas2pas.zip bas2pas.zip]
* ''Roby's Pascal Tutorial'' [http://web.archive.org/20090905012947/www.geocities.com/siliconvalley/park/3230/pas/pasles00.html Arhivirane HTML stranice]
 
=== NavodiTutorijali ===
* [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]]