![]() |
Die Programmiersprache Pascal wurde 1970 von Niklaus Wirth entwickelt. Ebenso
wie BASIC war sie als einfache Sprache für den Programmier-Einstieg gedacht,
legte aber im Gegensatz zu BASIC von Anfang an Wert auf eine saubere Struktur.
Ihren Durchbruch erlebte die Sprache in den 1980er-Jahren mit der Turbo Pascal
IDE von Borland. Unter DOS gehörte Pascal damals zu den populären
Programmiersprachen. Dazu trug vor allem der Turbo-Pascal-Compiler bei, weniger
die Sprache allein.
Ich selbst kam jedoch erst sehr spät, über einen
Umweg, zu Pascal – Anfang der 2000er Jahre, von Delphi kommend. In den
90er-Jahren hatte ich zwar schon einen flüchtigen Kontakt mit Pascal, bevorzugte
aber BASIC, da mir die strikte Einhaltung der Programmstruktur wie ein enges
Korsett vorkam. Da mir Delphi als IDE jedoch deutlich besser zusagte als Visual
Studio, ließ ich mich notgedrungen auf Pascal ein. Gleiches gilt für Turbo
Pascal und QBasic: Hier hatte Borland einfach das bessere IDE-Konzept.
![]() |
Auf der ehemaligen Borland-Seite standen verschiedene Versionen von Turbo
Pascal zum freien Download bereit. Auf der heutigen Embarcadero-Seite werden
solche Downloads offenbar nicht mehr prominent angeboten. Bei einer rund 40
Jahre alten Software, die mit modernen Systemen längst nicht mehr kompatibel
ist, überrascht das kaum. Eine kurze Suche im Internet liefert jedoch zahlreiche
Downloadquellen in verschiedenen Versionen und Sprachen. Ich würde hier klar die
letzte offizielle Version 7 empfehlen.
Um es an
dieser Stelle ganz einfach zu machen, stelle ich hier mal eine DOSBox-Mini inkl.
TurboPascal 7 in Deutsch zum Download bereit. Bezüglich der DOS-Box bitte auch mal
hier vorbeischauen.
Installation:
Die Installation beschränkt sich auf das Entpacken des Zip-Archivs. Dann die
DOSBox.exe starten und im DOS-Prompt "turbo" oder "tp" eingeben.
DOSBox-Mini mit TurboPascal 7 (3.9 MB)
![]() |
Möchte man seine Programme (.PAS) auf einem modernen Windows-PC bearbeiten
oder einsehen, so bekommt man mit dem Windows-eigenen Notepad Sonderzeichen wie
z. B. Umlaute nicht richtig dargestellt. Gleiches gilt für den Weg zurück, vom
Windows- zum DOS-Rechner. Der Grund liegt darin, dass DOS die Zeichenkodierung
OEM-Codepage (850 für W-EU, 437 US) nutzt, während Notepad je nach
Windows-Version ANSI bzw. UTF-xxx nutzt. In Notepad++ hat man jedoch die
Möglichkeit, auf OEM 850 umzustellen. Die Einstellung erfolgt über das
Hauptmenü:
Codierung/Weitere/Westeuropäisch/OEM 850
Dies muss leider bei jedem Neuladen der Datei eingestellt werden :-/
Auch wenn Pascal eine recht einfache Sprache ist, so hat man den Syntax doch
rasch vergessen, wenn man nur alle Jubeljahre mal eine Kleinigkeit
zusammenklickert. Darum hier mal eine ganz, ganz grobe Übersicht zum Auffrischen
und Reinkommen, falls die letzte Programmierung mal wieder einige Monate oder
gar Jahre zurückliegt... Für den Einstieg ist wohl eher ein strukturiertes
Tutorial zu empfehlen.
Code kommentieren mittels { } oder (* *)
| Programmaufbau | program Programmname; uses Crt; var { globale Variablen } procedure MeinUnterprogramm; var { lokale Variable } begin { Anweisungen } end; begin { Hauptprogramm } ReadKey; { Trick um am Programende den Bildschirm zu pausieren } end. |
||||||||||||||||||||||||||||||||
| Procedure | Eine Procedure ist ein Unterprogramm das aus dem Hauptprogramm
heraus aufgerufen werden kann. procedure Subi(a: string); begin Writeln('Hallo ', a); end; |
||||||||||||||||||||||||||||||||
Aufruf: |
Subi('Welt'); |
||||||||||||||||||||||||||||||||
| Function | Eine Function ist eine Procedure mit Rückgabewert function MeineFunktion(x: string): string; begin Writeln('Ich sehe: ', x); MeineFunktion := 'Hier die Rückgabe'; end; |
||||||||||||||||||||||||||||||||
Aufruf: |
s := “Hallo Welt“ Writeln('ich sehe: ' +MeineFunktion(s)); |
||||||||||||||||||||||||||||||||
| Variable | Lokale Variablen müssen innerhalb der Prozedur bzw. Funktion vor "begin"
und "end;" deklariert werden. Mehrere Variablen vom gleichen Typ können
auf einmal, durch ein Komma getrennt deklariert werden. procedure MeineProzedur(); var n,i,z: Integer; {Ganzzahl} r: Real; {Gleitkommazahl} c: Char; {Zeichen} a: String; {Zeichenkette} b: Boolean; {wahr/falsch} |
||||||||||||||||||||||||||||||||
| Feldvariable |
fVari: array[1..10] of Integer; fVari: array[1..3, 1..4] of Integer; { zweidimensional } |
||||||||||||||||||||||||||||||||
| Typ wandeln | von Integer nach String: Str(n, s); von String nach Integer: Val(s, n, code); s = Stringvariable n und Code = Integervariable der Integer landet in der Variable n, eventuelle Fehler (Zeichenposition) in code |
||||||||||||||||||||||||||||||||
| Zahlenausgabe Formatieren | Str(n:0:2); {0 = keine feste Breite, 2 =
zwei Nachkommastellen } Writeln(n:0:2); |
||||||||||||||||||||||||||||||||
| Abs(Zahl) | Absolutbetrag ermitteln: Abs(70,5 – 100) -> 29,5 | ||||||||||||||||||||||||||||||||
| Tunc(X) | Abrunden auf Ganzzahl (Nicht Kaufmännisch! - alles was nach dem Komma steht wird gestrichen) | ||||||||||||||||||||||||||||||||
| Randomize | Zufallszahl – Beispiel Zahl 0-9: Randomize; { initialisiere Zufallsgenerator } Writeln(Trunc(10 * Random)); |
||||||||||||||||||||||||||||||||
| Sgn (Zahl) | Vorzeichen einer Zahl ermitteln: xy = 1, -xy = -1, 0 = 0 | ||||||||||||||||||||||||||||||||
| Sqr (Zahl) | Quadratwurzel | ||||||||||||||||||||||||||||||||
| Sin(), Cos(), Tan() | Winkelfunktionen | ||||||||||||||||||||||||||||||||
| Writeln | Ausgabe von festem Text und Variable – siehe Variablen |
||||||||||||||||||||||||||||||||
| Beispiel: | Writeln('Hallo Welt'); Writeln('Hallo':10); { Hallo wird an Position 10 ausgegeben } Writeln('Hallo ' +s); { anhängen einer Variable vom Typ String } Writeln('Hallo ', n); { anhängen einer Variable beliebigen Typs } |
||||||||||||||||||||||||||||||||
| ClrScr | löscht den ganzen Bildschirm, benötigt uses Crt; | ||||||||||||||||||||||||||||||||
| TextColor(Farbe); TextBackground(Farbe); Benötigt uses Crt; |
Es darf sowohl der Zahlenwert als auch die geschriebene Farbe angegeben werden. |
||||||||||||||||||||||||||||||||
| GotoXY(Spalte, Zeile) Benötigt uses Crt; |
Cursor für Ausgabe positionieren (max. 23 Zeilen ohne dass
gescrollt wird) |
||||||||||||||||||||||||||||||||
| WhereY | Gibt aktuelle Cursor-Zeile aus - Benötigt uses Crt; | ||||||||||||||||||||||||||||||||
| WhereX | Gibt aktuelle Cursor-Spalte aus - Benötigt uses Crt; | ||||||||||||||||||||||||||||||||
| Readln(Variable) | Writeln('Gib was ein?'); Readln(s); Writeln('Du hast ' +s +' eingegeben'); |
||||||||||||||||||||||||||||||||
| ReadKey | var t: Char; Writeln('Taste druecken!'); t := ReadKey; Writeln('Du hast ' +t +' gedrückt'); |
||||||||||||||||||||||||||||||||
| if… then | if x = 5 then Writeln('X ist fünf'); if x <> 5 then begin Writeln('X ist...'); Writeln('nicht fünf'); end; if x > 5 then Writeln('X ist größer fünf') else if x < 5 then Writeln('X ist kleiner fünf') else Writeln('X muss dann wohl genau 5 sein'); if not (x > 5) then Writeln('X ist nicht größer als fünf'); if (x > 5) and (x < 20) then Writeln('X liegt zwischen 5 und 20'); |
||||||||||||||||||||||||||||||||
| Chr(Zahl) | Zeichen über ASCII-Wert – ASCII-Wert von einem Zeichen: ASC (Zeichen) | ||||||||||||||||||||||||||||||||
| pos(SuchString, String) | Zeichen oder Zeichenkette in String suchen. Nicht enthalten = 0 | ||||||||||||||||||||||||||||||||
| length(String) | Länge eines Strings (Anzahl Zeichen) | ||||||||||||||||||||||||||||||||
| copy(String, Begin, Anzahl) | String schneiden. Alles Begin = Position des ersten Zeichens, Anzahl = wie viele Zeichen. | ||||||||||||||||||||||||||||||||
| delay(ms) | Programmpause in Millisekunden |
||||||||||||||||||||||||||||||||
| for to | for n := 1 to 10 do begin Writeln(n); end; |
||||||||||||||||||||||||||||||||
| repeat... until | Wiederhole bis eine Bedingung erfüllt ist | ||||||||||||||||||||||||||||||||
| Beispiel: | repeat x := x +1; Writeln(x); until x = 10; |
||||||||||||||||||||||||||||||||
| INP (Adresse) | siehe Ansteuern von
|
||||||||||||||||||||||||||||||||
| OUT (Adresse) | siehe Ansteuern von
|
||||||||||||||||||||||||||||||||
| Exec(Anwendung, Optionen) | Mit Exec kann man DOS Anwendungen aus einem Laufenden Programm
heraus Starten. Benötigt uses Dos; Mittels Command.com lassen sich auch DOS Befehle absetzen. |
||||||||||||||||||||||||||||||||
| Beispiele: | Exec('EDIT.COM', 'C:\TEXT.TXT'); Exec('COMMAND.COM', '/C DIR'); |
||||||||||||||||||||||||||||||||
| Sound(Hz) NoSound |
Abspielen von Tönen. Benötigt uses Crt; | ||||||||||||||||||||||||||||||||
| Beispiel: | Sound(3000); { 3 kHz} Delay(500); { warte 500ms = 0.5 Sek } NoSound; { Ton aus } |
||||||||||||||||||||||||||||||||
| GetTime() | Aktuelle Uhrzeit ermitteln. Benötigt uses Dos; | ||||||||||||||||||||||||||||||||
| Beispiel: | var H, M, S, HS: Word; GetTime(H, M, S, HS); Writeln(H:2, ':', M:2, ':', S:2); |
||||||||||||||||||||||||||||||||
AnsiUpperCase()
function AnsiUpperCase(const S: string): string;
var
I: Integer;
begin
AnsiUpperCase := S;
for I := 1 to
Length(AnsiUpperCase) do
AnsiUpperCase[I] := UpCase(AnsiUpperCase[I]);
end;
AnsiLowerCase()
function AnsiLowerCase(const
S: string): string;
var
I: Integer;
begin
AnsiLowerCase := S;
for I := 1 to Length(AnsiLowerCase)
do
if (AnsiLowerCase[I] >= 'A') and (AnsiLowerCase[I] <=
'Z') then
AnsiLowerCase[I] := Chr(Ord(AnsiLowerCase[I])
+ 32);
end;
Nützliche Sonderzeichentabelle der Codepage 850, z. B. zum
Darstellen von Boxen.
Codepage 850 Sonderzeichen -
PDF
![]()