Home / DOS / Pascal - TurboPascal

Pascal - TurboPascal (7)


Diese Seite beinhaltet



Ein paar Worte vorweg

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.







Bezugsquelle und Installation

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)


Programmieren in Notepad++ unter Windows

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 :-/



Einige Befehle in der Übersicht

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;
0 Black 4 Red 8 Gray 12 LightRed
1 Blue 5 Magenta (lila) 9 LightBlue 13 LightMagenta (rosa)
2 Green 6 Brown 10 LightGreen 14 Yellow
3 Cyan (türkis) 7 LightGray 11 LightCyan (helltürkis) 15 White

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)
GotoXY(10, 10); Writeln('Huhu');

   
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 COM und LPT-Port
OUT (Adresse) siehe Ansteuern von COM und LPT-Port
   
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


Die Option Drucken funktioniert erst ab Netscape V4.0 bzw. I-Explorer 5.0 !
[erstellt 07.04.2026 - letzte Aktualisierung 07.04.2026]