Bedingungen
Mehrere Anweisungen fasst man mit begin ... end zusammen. Vor else steht kein Semikolon:
program Bedingungen;
var
n: Integer;
note: Integer;
begin
n := 15;
if n mod 15 = 0 then
writeln('FizzBuzz')
else if n mod 3 = 0 then
writeln('Fizz')
else
writeln(n);
note := 2;
case note of
1: writeln('sehr gut');
2, 3: writeln('gut bis befriedigend');
4..5: writeln('ausreichend bis mangelhaft');
else
writeln('ungültig');
end;
if (n > 10) and (n < 20) then
begin
writeln('zwischen 10 und 20');
writeln('zweite Zeile');
end;
end.Ausgabe
FizzBuzz gut bis befriedigend zwischen 10 und 20 zweite Zeile
Schleifen
program Schleifen;
var
i, j, summe: Integer;
begin
for i := 1 to 5 do write(i, ' ');
writeln;
for i := 5 downto 1 do write(i, ' ');
writeln;
i := 0;
while i < 3 do
begin
write('w', i, ' ');
Inc(i);
end;
writeln;
i := 10;
repeat
write(i, ' ');
i := i + 1;
until i >= 13;
writeln;
summe := 0;
for i := 1 to 10 do
begin
if i mod 2 = 0 then Continue;
if i > 7 then Break;
summe := summe + i;
end;
writeln(summe);
for i := 1 to 3 do
begin
for j := 1 to 3 do write(i * j:3);
writeln;
end;
end.Ausgabe
1 2 3 4 5 5 4 3 2 1 w0 w1 w2 10 11 12 16 1 2 3 2 4 6 3 6 9
repeat ... until läuft mindestens einmal und endet, wenn die Bedingung wahr wird.
Prozeduren und Funktionen
Eine Prozedur liefert keinen Wert, eine Funktion schon (Rückgabe über den Namen oder Result):
program Routinen;
function Quadrat(x: Integer): Integer;
begin
Result := x * x;
end;
function Fakultaet(n: Integer): Int64;
begin
if n <= 1 then
Result := 1
else
Result := n * Fakultaet(n - 1);
end;
procedure Begruesse(name: String; gruss: String = 'Hallo');
begin
writeln(gruss, ', ', name, '!');
end;
procedure Tausche(var a, b: Integer); { var = Übergabe per Referenz }
var
tmp: Integer;
begin
tmp := a; a := b; b := tmp;
end;
procedure Addiere(const a, b: Integer; out summe: Integer);
begin
summe := a + b;
end;
var
x, y, s: Integer;
begin
writeln(Quadrat(7), ' ', Fakultaet(15));
Begruesse('Mia');
Begruesse('Tom', 'Servus');
x := 1; y := 2;
Tausche(x, y);
writeln(x, ' ', y);
Addiere(3, 4, s);
writeln(s);
end.Ausgabe
49 1307674368000 Hallo, Mia! Servus, Tom! 2 1 7
Parameter-Arten: Wert (Standard), var (veränderbar, Referenz), const (unveränderbar), out (nur Ausgabe).
Überladen und verschachtelte Routinen
program Ueberladen;
{$mode objfpc}
function Verdopple(x: Integer): Integer; overload;
begin Result := x * 2; end;
function Verdopple(s: String): String; overload;
begin Result := s + s; end;
function Fibonacci(n: Integer): Int64;
function Schritt(a, b: Int64; i: Integer): Int64;
begin
if i = 0 then Result := a else Result := Schritt(b, a + b, i - 1);
end;
begin
Result := Schritt(0, 1, n);
end;
begin
writeln(Verdopple(21), ' ', Verdopple('ab'));
writeln(Fibonacci(50));
end.Ausgabe
42 abab 12586269025
Merke
if ... then ... else(kein;vorelse),case ... of,for/while/repeat- Mehrere Anweisungen mit
begin ... endbündeln procedure(ohne Rückgabe) undfunction(mitResult)- Parameter: Wert,
var,const,out;overloaderlaubt gleiche Namen
Aufgabe
Schreibe eine Funktion IstPrim(n) und gib alle Primzahlen bis 50 aus.