Michael Neuhold Homepage
Startseite > Informatikunterricht > Einführung in Turbo Pascal

Einführung in Turbo Pascal


Syntax

Ein Pascalprogramm hat immer folgenden Aufbau:

{"Programmkopf":}
PROGRAM ProgrammName;
USES Unit1, Unit2, Unit3;       {für Ausgabe auf Bildschirm: USES crt;}
{Deklarationsteil:}
CONST
  Konstante1 = Wert;            {Wertzuweisung mit Gleichheitszeichen}
  Konstante2 = Wert;
TYPE
  Typ1 = Typendefinition1;      {Definitionszuweisung mit Gleichheitszeichen}
  Typ2 = Typendefinition2;
VAR
  Variable1, Variable2: TypA;   {Typenzuweisung mit Doppelpunkt}
  Variable3, Variable4: TypB;

PROCEDURE TueDies (Parameter: Typ);
{Prozedurdeklaration}
FUNCTION RechneWas (Parameter: Typ): ErgebnisTyp;
{Funktionsdeklaration}
{Programmteil:}
BEGIN

  {Hauptprogramm}

END.  {Punkt!}

Einfache Datentypen

Art der Daten Name Wertebereich Beispiele Byte
ganze Zahlen INTEGER -32768..32767 0, 123, -9999, 1995 2
WORD 0..65535 2
SHORTINT -128..127 1
BYTE 0..255 1
LONGINT -2,14..2,14 Mia. 4
Kommazahlen REAL 2.9e-39..1.7e38 3.14, -0.08, 2.607e03, 1.23e-4 6
DOUBLE 5.0e-324.. 1.7e308 8
EXTENDED 3.4e-4932.. 1.1e4932 10
einzelne Zeichen CHAR   'a', '?', '3', ' ' (Leerz.), #13, #27 1
Zeichenketten STRING   'Hans', '1995', '' (Leerstring) -255
Wahr/Falsch BOOLEAN TRUE, FALSE TRUE, x>5, FALSE, n/2=16 1

Operatoren

Arithmetische: *, /, DIV, MOD, SHL, SHR, +, -

/Division, Ergebnis ist vom Typ REAL
DIVGanzzahldivision, Ergebnis ist vom Typ INTEGER
MODliefert den Rest einer Ganzzahldivision, ist vom Typ INTEGER
SHL (Shift left)verschiebt alle Bits um eine Stelle nach links
SHR (Shift right)verschiebt alle Bits um eine Stelle nach rechts

Vergleichsoperatoren: =, <, >, <=, >=, <> (ungleich), IN

Logische: NOT, AND, OR, XOR

Zuweisung: :=. Beachte den Unterschied zwischen der Zuweisung eines Wertes (:=) und dem Vergleich zweier Werte (=):
IF zahl=10 THEN ... {Vergleich}
zahl:= zahl+1; {Zuweisung}

PROGRAM IntegerDemo;
USES   crt;
VAR    a,b: Integer;
BEGIN
  Write ('a='); ReadLn (a);
  Write ('b='); ReadLn (b);
  WriteLn (a); WriteLn (b);
  WriteLn ('a+b=',a+b);
  WriteLn ('a-b=',a-b);
  WriteLn ('a*b=',a*b);
  WriteLn ('a/b=',a/b);
  WriteLn (a:4,'/',b:4,'=',a/b:4:5);      
  ReadLn;
END.
PROGRAM RealDemo;
USES   crt;
VAR    x,y: Real;
BEGIN
  Write ('x='); ReadLn (x);
  Write ('y='); ReadLn (y);
  WriteLn (x); WriteLn (y);
  WriteLn ('x+y=',x+y);
  WriteLn ('x-y=',x-y);
  WriteLn ('x*y=',x*y:0:5);
  WriteLn ('x/y=',x/y:4:7);
  ReadLn;
END.
PROGRAM CharDemo;
USES   crt;
VAR    taste: Char;
BEGIN
  REPEAT
    taste:= ReadKey;
    Write (Taste,' hat Nr. ');
    WriteLn (Ord (taste));
  UNTIL taste=#27;
END.
PROGRAM StringDemo;
USES   crt;
VAR    name: String;
BEGIN
  Write ('Dein Name: ');
  ReadLn (name);
  WriteLn (name);
  WriteLn (name:20);
  WriteLn (name, ' besteht aus ',Length (name), ' Zeichen.');
  WriteLn (name+name+name);
  ReadLn;
END.

Einfache Aus- und Eingabebefehle

Die folgenden Befehle und Funktionen gehören zum Großteil zur Unit CRT (cathode ray tube = Kathodenstrahlröhre, Bildschirm), also: USES crt;!

Ausgabe

Mit WRITE und WRITELN können alle einfachen Datentypen ausgegeben werden. Mehrere Parameter werden durch Beistrich getrennt. Auch arithmetische Ausdrücke und Funktionsaufrufe sind als Parameter erlaubt. WRITELN setzt den Cursor im Anschluß an die Ausgabe an den Anfang der nächsten Zeile (Return).

Write ('Geben Sie eine ganze Zahl ein: ');
WriteLn (zahl);
WriteLn ('Lieber ', Vorname, '! Du hast ', UebGw, 'kg Übergewicht.');
Write (Celsius*5/9-32);
WriteLn ('Das Ergebnis lautet ', Sqr (wert)+Ord (ziffer));
WriteLn;
{ohne Parameter; setzt den Cursor auf den Anfang der nächsten Zeile}

Realzahlen werden in Exponentialdarstellung ausgegeben. Dies kann geändert werden durch die Formatierungsanweisung RealZahl:Weite:Nachkommastellen. Weite gibt an, wieviele Stellen mindestens für den ganzzahligen Anteil freigehalten werden sollen. Nachkommastellen ist die Anzahl der Ziffern hinter dem Komma, fehlt dieser Parameter, wird in Exponentialdarstellung ausgegeben.
WriteLn (Sqrt (zahl):0:2);

Zur Ausgabe auf dem Drucker benötigt man die Unit PRINTER. Als erster Parameter muß LST (Abk. für Lister) stehen.
WriteLn (Lst, 'Das kommt aus dem Drucker.');

GOTOXY (x,y) setzt den Cursor auf die x-te Spalte in die y-te Zeile (x: 1..80, y: 1..25) des Bildschirms. Die momentane Cursorposition kann man mit den Funktionen WHEREX und WHEREY ermitteln. GOTOXY kann nicht zur Ausgabe auf dem Drucker verwendet werden!
GotoXY (10,5);
GotoXY (spalte, WhereY+1);

CLRSCR: löscht den Bildschirm (clear screen).
CLREOL: löscht von der Cursorposition bis zum Ende der Zeile (clear end of line).
TEXTCOLOR (Farbnummer): legt die Zeichenfarbe für die Ausgabe fest.
TEXTBACKGROUND (Farbnummer): legt die Hintergrundfarbe für die Ausgabe fest.

Eingabe

READ und READLN lesen die Tastatureingabe in die als Parameter angegebene Variable ein. Der Programmablauf wird erst fortgesetzt, wenn der Benutzer seine Eingabe mit der Returntaste abgeschlossen hat. READLN setzt den Cursor im Anschluß an die Eingabe an den Anfang der nächsten Zeile. Achtung: Falls die Eingabe mit dem Variablentyp unverträglich ist, bricht das Programm mit einer Fehlermeldung ab!
Read (Vorname);
ReadLn (zahl);
ReadLn;
{ohne Parameter; hält den Programmlauf an, bis Returntaste gedrückt wird}

Die Funktion READKEY liest ein einzelnes Zeichen von der Tastatur, ohne es auf dem Bildschirm auszugeben, und übergibt es als Funktionswert (Typ CHAR).

Die Funktion KEYPRESSED liefert den Wert TRUE, falls der Tastaturpuffer noch Zeichen enthält, ansonsten FALSE: REPEAT {TueWas} UNTIL KeyPressed;

Bedingte Anweisung

Einfache Entscheidung

Oft soll ein Anweisungsteil nur ausgeführt werden, wenn eine Bedingung erfüllt ist, z.B. WENN du müde bist, dann gehe ins Bett (sonst schau dir den Nachtfilm an).

IF Bedingung THEN Anweisung
             ELSE Anweisung;
PROGRAM UeberweisungsGebuehr;
USES   crt;
VAR    betrag, gebuehr: real;
BEGIN
  ClrScr;
  Write ('Wieviele öS wollen Sie überweisen? '); ReadLn (betrag);
  IF betrag <=100 THEN gebuehr:=5 ELSE gebuehr:=10;
  WriteLn ('Überweisungsgebühr beträgt ', gebuehr:8:2, ' öS.');
END.

Mehrfachentscheidung

Manchmal muß eine Mehrfachentscheidung getroffen werden, z.B. FALLS Punktezahl 0-21: Nicht genügend, 22-28: Genügend, 29-37: Befriedigend, 38-43: Gut, 44-48: Sehr gut, SONST Fehler beim Punkteaddieren.

CASE Variable OF
  Wert1: Anweisung;
  Wert2: Anweisung;
  Wert3: Anweisung
  ELSE Anweisung;
END;
PROGRAM MiniCalc;
USES   crt;
VAR    zahl1, zahl2: real;
       taste: char;
BEGIN
  ClrScr; WriteLn ('Grundrechnungsarten'); WriteLn;
  Write ('Erste Zahl: '); ReadLn (zahl1);
  Write ('Zweite Zahl: '); ReadLn (zahl2);
  Write ('Rechenoperation (+ - * /): '); ReadLn (taste);
  CASE taste OF
    '+': WriteLn (zahl1+zahl2:8:2);
    '-': WriteLn (zahl1-zahl2:8:2);
    '*': WriteLn (zahl1*zahl2:8:2);
    '/': IF zahl2<>0 THEN WriteLn (zahl1/zahl2:8:2)
                           ELSE WriteLn ('Division durch Null!');
    ELSE WriteLn ('Falsche Taste!');
  END;
END.
  ...
  ReadLn(ch);
  CASE ch OF
    '+','-','*','/':   WriteLn('Operator'); {Aufzählung}
    '0'..'9':          WriteLn('Digit');    {Bereich}
    'A'..'Z','a'..'z': WriteLn('Letter')    {Aufzählung von Bereichen}
    ELSE WriteLn('Special character');
  End;

Schleifen

Determinierte Schleife (Zählschleife)

Die Anzahl der Wiederholungen steht bereits fest; z.B. schreibe 20mal deinen Namen oder zähle von 100 bis 1 herunter und gib die Quadratzahlen dazu aus.

FOR Variable:= Startwert TO Endwert DO Anweisung;
FOR Variable:= Endwert DOWNTO Anfangswert DO Anweisung;
PROGRAM Begruessung;
USES   crt;
VAR    i: integer; name: string;
BEGIN
  ClrScr;
  Write ('Wie heißt du? ');
  FOR i:=1 TO 20 DO
    WriteLn ('Grüß dich, ', name);
  ReadLn;
END.
PROGRAM CountDown;
USES   crt;
VAR    zaehler: integer;
BEGIN
  ClrScr;
  FOR zaehler:=60 DOWNTO 1 DO
  BEGIN
    GotoXY (38,10); ClrEol;
    Write ('Noch ', zaehler,' Sekunden');
    Delay (1000);   {wartet 1000 ms}
  END;
  WriteLn ('Fertig!'); ReadLn;
END.

Fußgesteuerte Schleife

Wiederholungen, bei denen man eine Bedingung für den Abbruch festlegt, z.B. schreibe etwas auf den Bildschirm, bis der Benutzer eine Taste drückt.

REPEAT
  Anweisung(en)
UNTIL Abbruchbedingung;
PROGRAM BunteSternchen;
USES   crt;
BEGIN
  ClrScr;
  REPEAT
    GotoXY (Random (80)+1, Random (24)+1);  {Random (x) erzeugt Zufallszahlen}
    TextBackground (Random (16));           {zwischen 0 und x-1}
    TextColor (Random (16));
    Write ('*');
  UNTIL KeyPressed;
END.

Kopfgesteuerte Schleife

Wiederholungen, bei denen eine Bedingung angegeben ist, unter der sie überhaupt durchgeführt werden (abweisende Schleife), z.B. solange nicht eine Taste gedrückt wird, erzeuge Töne.

WHILE Eintrittsbedingung DO
  Anweisung;
PROGRAM KatzenMusik;
USES   crt;
BEGIN
  ClrScr;
  WriteLn ('Press any key to quit the funny music');
  WHILE NOT KeyPressed DO
  BEGIN
    Sound (Random (5000));  {Sound (f) erzeugt einen Ton von f Hz, der solange erklingt,}
    Delay (100);            {bis die Tonhöhe durch einen neuen Sound-Befehl geändert wird}
  END;                      {oder der Ton durch NoSound wieder abgeschaltet wird}
  NoSound;
END.

Schleifenabbruch

Bei allen diesen Schleifen kann im Schleifenkörper ein Abbruch mit EXIT oder HALT erfolgen. EXIT springt aus einer Prozedur oder Funktion in den aufrufenden Programmteil zurück, EXIT im Hauptprogramm bricht das Programm ab. HALT bricht immer das Programm ab.

PROGRAM NamenEingeben;
USES   crt;
VAR name: string;
BEGIN
  ClrScr;
  REPEAT
    Write ('Namen eingeben (Abbruch mit Return!)');
    ReadLn (name);
    IF name='' THEN exit;     {Ohne diese Zeile würde das Programm vor dem Austritt aus}
    WriteLn ('Hallo ',name);  {der Schleife noch einmal 'Hallo' schreiben}
  UNTIL name='';
END.

Autor: Michael Neuhold (E-Mail-Kontakt)
Letzte Aktualisierung: 9. Juni 2024