Kurz: Mehrere Anweisungen fasst man mit begin … end zusammen. Vor else steht kein Semikolon:
Teil des Kurses Pascal
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 ZeileAchtung
Bei zusammengesetzten Bedingungen müssen die Teilausdrücke in Klammern stehen:
(a > 1) and (b < 2)— sonst bindetandstärker als der Vergleich.
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 9repeat ... 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
7Parameter-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
12586269025Merke
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
Übungsaufgabe
Schreibe eine Funktion IstPrim(n) und gib alle Primzahlen bis 50 aus.
Quiz zur Selbstkontrolle
Wann endet eine repeat-Schleife?
- Wenn die until-Bedingung wahr wird (richtig)
- Wenn die Bedingung falsch wird
- Nie
- Nach einem Durchlauf
Wofür steht var bei einem Parameter?
- Übergabe per Referenz (Wert änderbar) (richtig)
- Neue Variable
- Konstante
- Optionaler Parameter
Wie gibt eine Funktion einen Wert zurück?
- Über Result (oder den Funktionsnamen) (richtig)
- Mit return
- Mit yield
- Mit out
Weiter im Kurs
Zurück: Einführung und erstes Programm
Weiter: Strings, Arrays, Mengen und Records
Alle Kapitel: Pascal im Überblick