EMZETT.
Login

Kurz: Mehrere Anweisungen fasst man mit begin … end zusammen. Vor else steht kein Semikolon:

Teil des Kurses Pascal

Kapitel 2 von 8 im Kurs Pascal. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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

Achtung

Bei zusammengesetzten Bedingungen müssen die Teilausdrücke in Klammern stehen: (a > 1) and (b < 2) — sonst bindet and stä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  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 ; vor else), case ... of, for/while/repeat
  • Mehrere Anweisungen mit begin ... end bündeln
  • procedure (ohne Rückgabe) und function (mit Result)
  • Parameter: Wert, var, const, out; overload erlaubt gleiche Namen

Übungsaufgabe

Schreibe eine Funktion IstPrim(n) und gib alle Primzahlen bis 50 aus.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Einführung und erstes Programm

Weiter: Strings, Arrays, Mengen und Records

Alle Kapitel: Pascal im Überblick