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
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 -1Lazarus 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;| Werkzeug | Zweck |
|---|---|
| Free Pascal (fpc) | Quelloffener Compiler für viele Plattformen |
| Lazarus | IDE mit visuellem Designer |
| Delphi (Embarcadero) | Kommerzielle IDE, FireMonkey für Cross-Plattform |
| Online Package Manager | Pakete für Lazarus |
| FPCUnit | Unit-Tests |
| Indy, Synapse | Netzwerk |
| mORMot | Schnelles Server-Framework |
| fpcupdeluxe | Installation 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 fehlgeschlagenMerke
- 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
Was ist Lazarus?
- Eine freie IDE für Free Pascal mit Formular-Designer (richtig)
- Ein Compiler für C
- Eine Datenbank
- Ein Betriebssystem
Wofür steht LCL?
- Lazarus Component Library (richtig)
- Large Code Library
- Linux Core Layer
- Logic Control Language
Was ist Delphi?
- Kommerzielle Entwicklungsumgebung für Object Pascal (richtig)
- Eine Skriptsprache
- Ein Betriebssystem
- Ein Browser
Weiter im Kurs
Zurück: Dateien, Ausnahmen und Standardbibliothek
Weiter: Praxisprojekte
Alle Kapitel: Pascal im Überblick