EMZETT.
Login

Kurz: procedure Hanoi(n: Integer; von, nach, hilf: Char); begin if n = 0 then Exit; Hanoi(n - 1, von, hilf, nach); writeln(‘Scheibe ’, n, ’: ’, von, ’ -> ’, nach); Hanoi(n - 1, hilf, nach, von); end;

Teil des Kurses Pascal

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

Rekursion und Algorithmen

program Algorithmen;
{$mode objfpc}{$H+}
 
procedure Hanoi(n: Integer; von, nach, hilf: Char);
begin
  if n = 0 then Exit;
  Hanoi(n - 1, von, hilf, nach);
  writeln('Scheibe ', n, ': ', von, ' -> ', nach);
  Hanoi(n - 1, hilf, nach, von);
end;
 
function GGT(a, b: Integer): Integer;
begin
  if b = 0 then Result := a else Result := GGT(b, a mod b);
end;
 
procedure BubbleSort(var a: array of Integer);
var
  i, j, t: Integer;
begin
  for i := High(a) downto 1 do
    for j := 0 to i - 1 do
      if a[j] > a[j + 1] then
      begin
        t := a[j]; a[j] := a[j + 1]; a[j + 1] := t;
      end;
end;
 
function BinaereSuche(const a: array of Integer; x: Integer): Integer;
var
  lo, hi, mitte: Integer;
begin
  lo := 0; hi := High(a); Result := -1;
  while lo <= hi do
  begin
    mitte := (lo + hi) div 2;
    if a[mitte] = x then begin Result := mitte; Exit; end
    else if a[mitte] < x then lo := mitte + 1
    else hi := mitte - 1;
  end;
end;
 
var
  feld: array[0..5] of Integer = (42, 7, 19, 3, 88, 25);
  i: Integer;
begin
  Hanoi(3, 'A', 'C', 'B');
  writeln(GGT(48, 18));
  BubbleSort(feld);
  for i := 0 to High(feld) do write(feld[i], ' ');
  writeln;
  writeln(BinaereSuche(feld, 25), ' ', BinaereSuche(feld, 5));
end.

Ausgabe:

Scheibe 1: A -> C
Scheibe 2: A -> B
Scheibe 1: C -> B
Scheibe 3: A -> C
Scheibe 1: B -> A
Scheibe 2: B -> C
Scheibe 1: A -> C
6
3 7 19 25 42 88
3 -1

Lazarus und die LCL

Lazarus ist eine freie Entwicklungsumgebung mit visuellem Formular-Designer und der LCL (Lazarus Component Library). Damit entstehen native Anwendungen für Windows, Linux, macOS und mobile Systeme.

procedure TForm1.Button1Click(Sender: TObject);
begin
  Label1.Caption := 'Hallo, ' + Edit1.Text + '!';
  ShowMessage('Gruß gesendet');
end;
WerkzeugZweck
Free Pascal (fpc)Quelloffener Compiler für viele Plattformen
LazarusIDE mit visuellem Designer
Delphi (Embarcadero)Kommerzielle IDE, FireMonkey für Cross-Plattform
Online Package ManagerPakete für Lazarus
FPCUnitUnit-Tests
Indy, SynapseNetzwerk
mORMotSchnelles Server-Framework
fpcupdeluxeInstallation von Free Pascal und Lazarus

Tests mit eigener Hilfsroutine

program Tests;
{$mode objfpc}{$H+}
uses SysUtils;
 
var
  ok, fehler: Integer;
 
procedure Pruefe(const name: String; bedingung: Boolean);
begin
  if bedingung then begin Inc(ok); writeln('ok     ', name); end
  else begin Inc(fehler); writeln('FEHLER ', name); end;
end;
 
function Fak(n: Integer): Int64;
begin
  if n <= 1 then Result := 1 else Result := n * Fak(n - 1);
end;
 
begin
  Pruefe('Fak(5)', Fak(5) = 120);
  Pruefe('Fak(0)', Fak(0) = 1);
  Pruefe('UpperCase', UpperCase('abc') = 'ABC');
  Pruefe('absichtlich falsch', 1 + 1 = 3);
  writeln(ok, ' bestanden, ', fehler, ' fehlgeschlagen');
end.

Ausgabe:

ok     Fak(5)
ok     Fak(0)
ok     UpperCase
FEHLER absichtlich falsch
3 bestanden, 1 fehlgeschlagen

Merke

  • Free Pascal ist der freie Compiler, Lazarus die freie IDE mit visuellem Designer
  • Pascal-Code lässt sich plattformübergreifend übersetzen
  • Algorithmen wie Sortieren und Suchen lassen sich klar und lesbar ausdrücken
  • Delphi ist die kommerzielle Variante mit demselben Sprachkern

Übungsaufgabe

Baue ein Lazarus-Formular mit einem Eingabefeld und einem Button, der den Text umdreht.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: Dateien, Ausnahmen und Standardbibliothek

Weiter: Praxisprojekte

Alle Kapitel: Pascal im Überblick