Free Pascal

Aus Ubuntu-Forum Wiki

Wechseln zu: Navigation, Suche

904.png

Edit l.png Dieser Artikel bedarf einer Aktualisierung. Edit.png
Edit l.png Dieser Artikel enthält Lücken und ist nicht vollständig. Edit.png
Wenn Du Dich mit dem Thema auskennst, hilf mit und vervollständige ihn.

Inhaltsverzeichnis

1 Free Pascal

Die mitgelieferte Free Pascal IDE

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

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.

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Forum
Navigation
Internes
Bearbeitungshilfen
Werkzeuge