Razlike između izmjena na stranici "Pascal (programski jezik)"

Obrisano 414 bajtova ,  prije 2 mjeseca
m
Poništena izmjena 40987430 korisnika DannyS712 (razgovor)
m (Update syntaxhighlight tags - remove use of deprecated <source> tags)
m (Poništena izmjena 40987430 korisnika DannyS712 (razgovor))
oznake: mobilno uređivanje mobilno veb-uređivanje poništenje napredna mobilna izmjena
''Konstante'' i ''varijable'' se deklariraju ključnim riječima <code>const</code> i <code>var</code>.
 
<syntaxhighlightsource lang="pascal">
const
PROG_NAME = 'Custom Program (C) 2019 by Custom Company';
TheValue: Integer;
By1, By2: Byte;
</source>
</syntaxhighlight>
 
Izvedeni tipovi podataka deklariraju se pomoću ključne riječi <code>type</code> i drugih poznatih ili deklariranih tipova podataka. Npr:
 
<syntaxhighlightsource lang="pascal">
type
TShortString = array [1..128] of Char;
Phone: LongInt;
end;
</source>
</syntaxhighlight>
 
=== Naredbe izbora - grananja ===
''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.
 
<syntaxhighlightsource lang="pascal">
if { izraz } then { naredba };
</source>
</syntaxhighlight>
 
Za izvršenje višestrukih naredbi koristi se <code>begin { ... } end</code> blok:
 
<syntaxhighlightsource lang="pascal">
if { izraz } then
begin
{ ... }
end;
</source>
</syntaxhighlight>
 
==== 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''):
 
<syntaxhighlightsource lang="pascal">
if { izraz } then { naredba1 } else { naredba2 };
</source>
</syntaxhighlight>
 
Ovdje vrijedi isto pravilo o zatvaranju blokova višestrukih naredbi između <code>begin { ... } end;</code> direktiva:
 
<syntaxhighlightsource lang="pascal">
if { izraz } then
begin
{ ... }
end;
</source>
</syntaxhighlight>
 
==== Case ====
''Case'' grananje koristi se kao preglednija alternativa za izbor višestrukih ishoda toka programa.
 
<syntaxhighlightsource lang="pascal">
case Varijabla of
1: { naredba1 };
{ ... etc. }
end; { case }
</source>
</syntaxhighlight>
 
=== Naredbe ponavljanja - petlje ===
Naredbe ponavljanja su <code>for</code>, <code>while</code> i <code>repeat</code>, a njihova upotreba izgleda ovako:
 
<syntaxhighlightsource lang="pascal">
for Counter := X to Y do { naredba };
while { izraz } do { naredba };
repeat { naredba } until { izraz };
</source>
</syntaxhighlight>
 
Petlja <code>for</code> izvršava neku naredbu ili blok naredbi točno određen broj puta, a varijabla brojača se navodi kao područje između dviju cjelobrojnih vrijednosti, odvojenih 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.
''Enumeracije'' ili ''pobrojani tip'' su izvedeni ordinarni tip podataka. Primjer:<ref>https://wiki.freepascal.org/Enumerated_types</ref>
 
<syntaxhighlightsource lang="pascal">
type
TMonth = (January, February, March, April, May, June,
July, August, September, October, November, December);
</source>
</syntaxhighlight>
 
==== Tipovi dosega ====
Pascal podržava varijable u određenom dosegu (području, podopsegu) nekoga drugoga ordinarnoga tipa podataka:
 
<syntaxhighlightsource lang="pascal">
var
SmallNum: 1..128;
SmallLtr: 'a'..'z';
</source>
</syntaxhighlight>
 
Moguće je također deklarirati varijablu u dosegu enumeriranoga tipa kojega smo prethodno definirali, pa s obzirom na gornji primjer definicije tipa možemo imati:
 
<syntaxhighlightsource lang="pascal">
var
Summer: June..August;
</source>
</syntaxhighlight>
 
Ista se sintaksa za dosege, naravno, može upotrijebiti i za definiranje tipova:
 
<syntaxhighlightsource lang="pascal">
type
TDay = 1..31;
</source>
</syntaxhighlight>
 
==== 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>.
 
<syntaxhighlightsource lang="pascal">
var
SmallNum: set of 1..128;
SmallLtr: set of 'a'..'z';
</source>
</syntaxhighlight>
 
Ova vrsta ''sintaksnog šećera'' (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:
 
<syntaxhighlightsource lang="pascal">
if Number in [1..128] then
{ ... }
</source>
</syntaxhighlight>
 
... ili još bolje ovo, s obzirom da smo deklarirali <code>SmallNum</code>:
 
<syntaxhighlightsource lang="pascal">
if Number in SmallNum then
{ ... }
</source>
</syntaxhighlight>
 
... umjesto ovoga:
 
<syntaxhighlightsource lang="pascal">
if (Number > 0) and (Number < 129) then
{ ... }
</source>
</syntaxhighlight>
 
Ovo je naročito zgodno kad treba izvršiti provjeru pripadnosti u većem broju ne-susjednih područja vrijednosti:
 
<syntaxhighlightsource lang="pascal">
if Number in [1..5, 17, 23, 25..32] then
{ ... }
</source>
</syntaxhighlight>
 
=== Potprogrami (funkcije i procedure) ===
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'':
 
<syntaxhighlightsource lang="pascal">
function FileExists(Name: string): Boolean;
procedure PrintFile(Name: string);
</source>
</syntaxhighlight>
 
==== Parametri ====
Parametri mogu biti ''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> ispred deklaracije parametra.
 
<syntaxhighlightsource lang="pascal">
procedure CheckIfFileExists(Name: string; var Exists: Boolean);
procedure MergeFiles(File1, File2: string; var NewFile: file);
</source>
</syntaxhighlight>
 
Za razliku od vrijednosnih parametara, varijabilni parametri ne mogu prihvatiti konstantne vrijednosti (recimo neki broj ili string), nego samo ''identifikatore'' varijabli koje mijenjaju. Vrijednosni parametri mogu primati obje vrste ''argumenata'', i doslovne vrijednosti, i imena varijabli.
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:
 
<syntaxhighlightsource lang="pascal">
var
Number: LongInt;
ReadLn;
end.
</source>
</syntaxhighlight>
 
Za ispis postoje procedure <code>Write</code> i <code>WriteLn</code>. Razlika između njih je u tome što ova druga ispisuje tekst skupa sa prijelomom reda (linije), odnosno znakom za novi red (<code>CR/LF</code>).
Najjednostavniji program koji ispisuje pozdrav na zaslonu:
 
<syntaxhighlightsource lang="pascal">
program DobarDan;
 
ReadLn;
end;
</source>
</syntaxhighlight>
 
=== Fibonaccijevi brojevi ===
Program koji ispisuje [[Fibonaccijev niz]]:<ref>http://progopedia.com/language/pascal/</ref>
 
<syntaxhighlightsource lang="pascal">
program fibonacci;
 
writeln('...');
end.
</source>
</syntaxhighlight>
 
=== Faktorijel ===
Naredni program računa [[Faktorijel]] zadanih brojeva:<ref>http://progopedia.com/language/pascal/</ref>
 
<syntaxhighlightsource lang="pascal">
program factorial;
 
writeln(n, '! = ', fact(n):-1:0);
end.
</source>
</syntaxhighlight>
 
== Varijante i dijalekti Pascala ==
576

izmjena