Free Pascal
Aus Ubuntu-Forum Wiki
Dieser Artikel bedarf einer Aktualisierung. |
Dieser Artikel enthält Lücken und ist nicht vollständig. |
Wenn Du Dich mit dem Thema auskennst, hilf mit und vervollständige ihn. |
Inhaltsverzeichnis |
1 Free Pascal
Der Free Pascal Compiler (FPC) ist ein freier Pascalcompiler, welcher mit vielen Pascal Dialekten, wie z.B. GNU Pascal, Turbo Pascal oder Delphi, kompatibel ist und zudem auf vielen Betriebssystemen (Linux, Windows, Mac OS, Dos, Amiga OS, etc.) läuft.
2 Installation
Um alle Komponenten von Free Pascal auf einmal zu installieren stellt Ubuntu das Metapaket
- fpc
zur Verfügung.
sudo apt-get install fpc
Dieses Paket enthält neben dem eigentlichen Compiler, der benötigten Laufzeitbibliothek, der Free Component Library und verschiedenen Units, unter anderem auch eine Kommandozeilen basierte IDE.
3 Benutzung
Die Grundlagen von Free Pascal sind mit denen anderer Pascaldialekten beinahe identisch. Trotzdem soll in der folgenden Anleitung näher auf Freepascal eingegangen werden.
3.1 Kompilieren
Das kompilieren eines Freepascalprogrammes verläuft relativ einfach.
Es reicht aus in einem Terminal den Befehl
fpc *.pas
einzugeben, wobei * durch den Dateinamen zu ersetzen ist. Die Endung .pas steht für eine Pascaldatei.
Das kompilierte Programm kann man mit
./Dateiname
ausführen.
3.2 Hello World
Um einen kleinen Einblick in Free Pascal zu erhalten, wollen wir zunächst ein sogennantes Hallo Welt Progamm programmieren. Dazu legen wir mit einem beliebigen Texteditor eine Datei namens hello.pas an und schreiben in sie:
program Sayhello; begin WriteLn('Hello World'); end.
Nach dem Kompilieren und ausführen, wird auf dem Terminal der Satz Hello World angezeigt.
3.2.1 Erläuterung
Mit der Anweisung program Sayhello; wird dem Compiler mitgeteilt, dass nun ein Programm namens Sayhello beginnt. Das Semikolon am Ende beendet diesen Befehl.
Zwischen begin und end. befindet sich die auszuführenden Anweisungen. In diesem Fall wäre das lediglich der Befehl WriteLn. WriteLn ermöglicht es Text auf dem Terminal auszugeben. Ln sorgt dabei für einen Zeilenumbruch, dass heißt mit den Befehl Write würde die Ausgabe ohne Zeilenumbruch erfolgen.
3.3 Kommentare
program Kommentare; begin //Dies ist ein einzeiliger Kommentar { Dieser Kommentar ist mehrzeilig } writeln('Dies ist kein Kommentar'); end.
3.3.1 Erläuterung
Kommentare werden von Programmieren benutzt um Quelltexte näher zu erläutern. Dies ist nicht nur für andere Leute hilfreich, sondern hilft einem auch selbst, den Quelltext im Nachhinein noch zu verstehen. In Freepascal gibt es zwei Arten von Kommentare, einzeilige und mehrzeilige. Einzeilige Kommentare beginnen mit zwei Slashs eingeleitet, mehrzeilige Kommentare dagegen stehen in Geschweiften Klammern.
3.4 Variablen
In einer Variable können Daten gespeichert, genutzt und geändert werden. Wie Variablen in Freepascal definiert und genutzt werden können zeigt folgendes Beispiel:
program Variablen; //Definition var Zahl: Integer = 5; Wahrheitswert: Boolean; Text: String; begin //Wertzuweisung Zahl:=10; Wahrheitswert:=false; Text:='Dies ist ein String'; //Ausgabe WriteLn(Zahl); WriteLn(Wahrheitswert); WriteLn(Text); end.
3.4.1 Erläuterung
Die Dekleration von Variablen erfolgt im sogennanten Deklerationsbereich, welcher mit var eingeleitet wird und vor begin steht. Für jede Variable muss ihr Name und ihr Variablentyp angegeben werden. Der Variablentyp bestimmt dabei, welche Art von Daten in der Variable gespeichert werden sollen. Dieser Variablentyp steht hinter dem Variablenname und wird mit einem Doppelpunkt eingeleitet. Einen Überblick über die wichtigsten Variablentypen bietet folgende Tabelle:
Variablentyp | Enthaltene Daten | Beispiel |
---|---|---|
Integer | Ganzzahlen | 5, 6, 2, 12000 |
Real, Double, Single | Gleitkommazahlen | 4.24, 5.12, 7.234 |
Char | Zeichen | A, d, Ö, :, ? |
String | Zeichenkette | Hello World, @2233?# |
Boolean | Wahrheitswert | true, false |
Zuweisung von Daten an Variablen erfolgen immer mit :=, es sei denn, die Zuweisung erfolgt im Definitionsbereich. Hier genügt ein einfaches =. Die im Definitionsbereich zugewiesenen Werte können aber im Nachhinein noch geändert werden.
3.5 Konstanten
In Konstanten können wie in Variablen Daten gespeichert werden, welche aber im Gegensatz zu Variablen nicht mehr verändert werden.
program Konstante; const myname = 'Robin'; begin writeln('Mein Name ist ' + myname); end.
3.5.1 Erläuterung
Im Gegensatz zu Variablen muss bei Konstanten nicht der entsprechende Typ wie Integer oder String angegeben werden. Es reicht die Konstante einfach mit const zu deklarieren und mit = einen Wert zuzuweisen. Der Compiler erkennt automatisch, wie er mit der Konstante umzugehen hat.
3.6 Eingabe
Das Einlesen von Benutzereingaben ist in Freepascal recht einfach:
program Input; var Eingabe:String; begin readln(Eingabe); writeln('Du hast gesagt: ' + Eingabe ); end.
3.6.1 Erläuterung
Mit Hilfe des Befehls "readln" wird die Wingabe des Benutzers auf dem Terminal in der Variable Eingabe als String gespeichert. Über writeln wird die Eingabe ganz normal auf dem Terminal ausgegeben.
3.7 If-Anweisungen
Mit sogennanten If-Anweisungen, können bestimmte Befehle ausgeführt werden, wenn eine spezielle Bedingung erfüllt ist.
program Rechner; var Zahl1, Zahl2:Integer; var roperation: Char; begin writeln('Willst du addieren "+" subtrahieren "-" multiplizieren (*) oder dividieren (:)'); readln(roperation); write('Zahl1: '); readln(Zahl1); write('Zahl2: '); readln(Zahl2); if roperation = '+' then begin writeln('Zahl1 + Zahl2 ergibt'); writeln(Zahl1 + Zahl2); end else if roperation = '-' then begin writeln('Zahl1 - Zahl2 ergibt'); writeln(Zahl1 - Zahl2); end else if roperation = '*' then begin writeln('Zahl1 mal Zahl2 ergibt'); writeln(Zahl1 * Zahl2); end else if roperation = ':' then begin writeln('Zahl1 durch Zahl2 ergibt'); writeln(Zahl1 / Zahl2); end; end.
3.7.1 Erläuterung
Das hier dargestellte Beispiel zeigt einen einfachen Rechner. Zunächst wird der Char roperation eingelesen, welcher ein Rechenoperationszeichen enthält (+, -, *, :). Im folgenden Programm, wird der Inhalt dieses Chars mithilfe einer IF-Anweisung ausgewertet und je nach Eingabe zwei Zahlen addiert, subtrahiert, multipliziert oder dividiert. Eine IF-Anweisung funktioniert folgendermaßen:
Zunächst wird sie mit IF eingeleitet. Darauf folgt die Variable, welche mit einem Wert verglichen werden soll. Die Art des Vergleiches wird hierbei durch den sogenannten Vergleichsoperator festgelegt, in diesem Fall ein einfaches '='. Die Überprüfung der Bedingung wird durch ein then beendet worauf die auszuführenden Befehle zwischen begin und end, dem sogenannten Anweisungsblock, ausgeführt werden. Soll lediglich eine Anweisung ausgeführt werden, benötigt man keinen Anweisungsblock, sondern man kann den Befehl direkt nach then schreiben. Nach der ersten IF-Anweisung folgt im Beispiel ein else, übersetzt ansonsten. Dies sorgt dafür, das wenn die Bedingung nicht erfüllt wurde, ein anderer Befehl, oder eine andere IF-Anweisung ausgeführt wird. Steht kein else vor einer IF-Anweisung, wird diese immer ausgeführt, auch wenn die Bedingung davor erfüllt wurde.
Häufiger Fehler: Vor dem else darf kein Semikolon stehen. |
Die folgende Tabelle zeigt die häufigsten genutzten Vergleichsoperatoren:
Vergleichsoperator | Bedeutung |
= | gleich |
< | kleiner |
> | größer |
<= | kleiner oder gleich |
>= | größer oder gleich |
<> | ungleich |
3.8 IF-Anweisung mit mehren Bedingungen
Es ist auch möglich in einer IF-Anweisung mehrere Bedingungen abzufragen:
program Nahrungsmat; var Tier:String; begin writeln('Willkommen beim Nahrungs-O-Mat'); writeln('Welcher Tierart gehörst du an?'); readln(Tier); if (Tier = 'Pinguin') or (Tier = 'Tux') then begin writeln('Hier ist dein Fisch:'); writeln(' _') writeln('<°_><') end else writeln ('Leider haben wir kein Essen für dich vorrätig.'); end.
3.8.1 Erläuterung
In dieser IF-Anweisung werden gleich zwei Bedingungen abgefragt, nämlich wird verglichen ob der String Tier als Inhalt das Wort Pinguin oder (or) Tux enthält. Bei mehreren Bedingungen müssen die Bedingugnen in Klammern gesetzt werden und mit einem Vergleichsoperator (in diesem Fall or) abgetrennt werden, welcher festlegt, ob die Hauptbedingung entweder wahr ist, wenn einer der Teilbedingungen wahr ist (or), falls beide Bedingugnen wahr sind (and). Diese Bedingungen können auch miteinander verknüpft werden:
if ((A < B) and (B > C)) or ((A < D) and (B > E)) then
3.9 CASE-OF
Soll eine Variable auf sehr viele verschiedene Werte überprüft und je nach Ergebnis eine andere Anweisung ausgeführt werden, benutzt man eine CASE-OF-Anweisung:
3.10 Schleifen
Schleifen wiederholen bestimmte Befehle so lange, bis eine bestimmte Bedingung erfüllt ist. In Freepascal gibt es drei Arten von Schleifen, die While-Scheleife, die for - Schleife und die until/repeat - Schleife.
3.10.1 While Schleife
program Whileschleife; var Eingabe:String; begin while Eingabe <> 'exit' do begin write('Eingabe:'); readln(Eingabe); end; writeln('Sie haben exit eingegeben, dass Programm wird nun beendet...'); end.
3.10.1.1 Erläuterung
Man sieht, dass der Aufbau einer while Schleife der einer IF-Bedingung ähnelt. Als erstes wird dem Kompiliere mit while mitgeteilt, dass nun eine WHILE-Schleife beginnt, danach folgt eine Bedingung und dann der Anweisungsblock. Statt then benutzt man bei Schleife do. In unseren Beispiel wird die Schleife so lange ausgeführt, bis der Benutzer exit eingibt.
3.10.2 FOR-Schleifen
Bei FOR-Schleifen wird eine Variable bei jedem Durchlauf der Schleife erhöht bzw. erniedrigt:
program forschleife; var i:Integer; var j:Char; begin for i := 1 to 10 do begin writeln(i); end; for j := 'A' to 'Z' do begin writeln(j); end; end.
3.10.2.1 Erläuterung
Nachdem eine FOR-Schleife mit dem Befehl for eingeleitet wurde, schreibt man die Variable, deren Wert geändert werden soll, die sogenannte Zählvariable. In unserem Fall also die Variable i. Nachfolgend muss der Anfangswert der Variablen und der Endwert angegeben werden, zwischen diesen bedien Werten steht, ob der Wert der Vraiablen zu dem Endwert hin steigt (to) oder fällt (downto). Der Syntax einer For-Schleife sieht also ungefähr folgendermaßen aus:
for Zählvariable := Anfangswert to Endwert do
bzw.
for Zählvariable := Anfangswert downto Endwert do
In F0R-Schleifen wird als Zählvariable häufig i benutzt. |
3.10.3 Repeat-Until-Schleife
program RepeatUntil; var Zahl:Integer; begin Zahl:=2; repeat Writeln('Obwohl die Bedingung erfüllt ist, wird die Schleife einmal ausgeführt!'); until Zahl=2; Writeln('Nun jedoch ist sie vorbei!'); end.
3.10.3.1 Erläuterung
Im Gegensatz zu den zuvor erwähnten Schleifentypen, wird in der Repeat-Until-Schleife die Schleifenbedingung erst am Ende der Schleife abgefragt. Deshalb werden Schleifen von diesem Schleifentyp, selbst wenn die Bedingung nicht erfüllt wurde, mindestens einmal durchlaufen, was man am Beispiel erkennen kann.