Michael Neuhold Homepage
Startseite >
Informatikunterricht >
Einführung in Turbo Pascal
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!}
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 |
IntZahl:= TRUNC (RealZahl);
AsciiWert:= ORD
('M')
(AsciiWert muß eine Ganzzahl-Variable sein); den ASCII-Wert
in sein Zeichen umwandeln kann mit der Funktion CHR: WriteLn (CHR
(AsciiWert))
.VAR KurzWort:
STRING [10]
. Die tatsächliche Länge eines Strings ermittelt
man mit der Funktion LENGTH: StrLen := LENGTH (name)
.Fertig:=
Zaehler=0
.Arithmetische: *, /, DIV, MOD, SHL, SHR, +, -
/ | Division, Ergebnis ist vom Typ REAL |
DIV | Ganzzahldivision, Ergebnis ist vom Typ INTEGER |
MOD | liefert 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.
Die folgenden Befehle und Funktionen gehören zum Großteil zur
Unit CRT (cathode ray tube = Kathodenstrahlröhre, Bildschirm), also:
USES crt;
!
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: ');
{ohne Parameter; setzt den Cursor auf den Anfang der nächsten Zeile}
WriteLn (zahl);
WriteLn ('Lieber ', Vorname, '! Du hast ', UebGw, 'kg Übergewicht.');
Write (Celsius*5/9-32);
WriteLn ('Das Ergebnis lautet ', Sqr (wert)+Ord (ziffer));
WriteLn;
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.
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);
{ohne Parameter; hält den Programmlauf an, bis Returntaste
gedrückt wird}
ReadLn (zahl);
ReadLn;
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;
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;
Gleichheit | =IF a=b THEN WriteLn ('Zahlen haben gleichen Wert'); |
Ungleichheit | >, <, >=, <=, <> (ungleich)IF b<>0 THEN c:= a/b ELSE WriteLn ('Division durch Null!'); |
Enthaltensein | IN [Wertemenge] Die Wertemenge kann eine Aufzählung von Elementen ([#13,#27]) oder
ein Wertebereich aus einem ordinalen Datentyp (['a'..'z']) sein: |
9;IF (a>2) AND (a<=9) THEN WriteLn ('OK, Zahl zwischen 3 und 9');
IF (a<=2) OR (a>9) THEN WriteLn ('UPS, Zahl nicht zwischen 3 und 9');
IF NOT (a=3) THEN WriteLn ('Zahl verschieden von 3');
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.
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;
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.
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.
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.
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: E-Mail-Kontakt)
Letzte Aktualisierung: 9. Juni 2024