home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Best of German Only 2
/
romside_best_of_german_only_2.iso
/
dos
/
lernbild
/
itg
/
entpack.exe
/
DOC
/
ITG.DOC
< prev
next >
Wrap
Text File
|
1993-11-17
|
239KB
|
6,448 lines
ITG-PASCAL
(C) R.Hamann
Kiel 1990/93
Lizenzbedingungen
Für Einzelplatzlizenzen gelten die üblichen Bedingungen, daß ITG-PASCAL zur
Zeit nur auf einem Computer ausgeführt werden darf.
Bei Schullizenzen darf ITG-PASCAL gleichzeitig auf beliebig vielen Computern
dieser Schule ausgeführt werden. Außerdem ist die Weitergabe an alle Lehrer und
Schüler der Schule erlaubt.
Aus dem als ASCII-Datei mitgelieferten Handbuch dürfen beliebige Teile für den
Einsatz im Unterricht beliebig oft vervielfältigt werden oder in eigene Texte
übernommen werden, die dem Unterricht dienen.
#FF
Einleitung
Am Gymnasium in Schleswig-Holstein wird die Informationstechnische Grundbildung
(ITG) in Klasse 8 häufig mit COMAL begonnen, während in der Informatik der
Oberstufe überwiegend TURBO-PASCAL verwendet wird. Die besseren Schüler haben
bei dem dann nötigen Umstieg auf eine völlig andere Programmierumgebung im
allgemeinen keine größeren Probleme, für die anderen ergeben sich aber neue
Hindernisse, die die Motivation stark absinken lassen können. Oft hört man von
diesen Schülern "Warum haben wir denn erst COMAL gelernt? Hätten wir nicht
gleich PASCAL lernen können?" oder "Warum müssen wir jetzt PASCAL lernen, geht
es denn nicht auch mit COMAL?". Es ist schwierig, diesen Schülern verständlich
zu machen, daß Programm- und Datenstrukturen eng verknüpft sind und sich manche
Probleme mit geeigneten Datenstrukturen, die in dieser Weise in COMAL nicht zu
definieren sind, sehr viel einfacher lösen lassen.
Viele Gymnasien beginnen die Informationstechnische Grundbildung deshalb gleich
mit PASCAL, wobei dann fast ausschließlich TURBO-PASCAL 4.0-6.0 verwendet wird,
selten vielleicht auch QUICK-PASCAL. Mit diesen Compilern entstehen für Schüler
gerade im Anfangsunterricht neue Probleme, weil vor dem ersten eigenen Programm
der Umgang mit der für Schüler völlig überladenen Programmierumgebung und die
formale Gestaltung eines Programms einschließlich der Einbindung eigener Units
gelernt werden muß. So kann es mehrere frustrierende Stunden bis zum ersten
Erfolgserlebnis dauern. Dieser Nachteil ist bei einem Interpreter wie COMAL
nicht vorhanden.
Aus dieser Erfahrung begann an unserer Schule die Einheit ITG mit dem Programm
IGEL, das von einem Kollegen erstellt wurde. Mit IGEL können wahlweise
Anweisungen für Igel-(Turtle-)Grafik direkt ausgeführt werden oder es kann eine
Anweisungsliste eingegeben werden, die dann linear abgearbeitet wird. Es fehlen
aber alle Möglichkeiten der Programmverzweigung oder der Schleifenbildung. Nach
den ersten Erfahrungen mit IGEL kannten die Schüler etliche Anweisungen für
Igel-Grafik und ihre Syntax. Sie hatten schnell Erfolgserlebnisse und waren
dann auch bereit, den jetzt nötigen Umstieg in TURBO-PASCAL zu vollziehen. Als
Ergebnis dieser Vorarbeit war zu vermerken, daß der vorhandene Motivationsschub
schnell erfolgreich umgesetzt werden konnte. Die nötige Lernphase für
Formalitäten wurde jetzt im allgemeinen mit mehr Mut und Zutrauen angegangen.
Trotzdem war nach wie vor ein Bruch vorhanden, der hauptsächlich durch
spezielle Eigenschaften von TURBO-PASCAL entstand, das für einen ganz anderen
Einsatz als den schulischen Unterricht entwickelt wurde.
Oftmals lief bei Schülern ein Programm fehlerfrei ab, die Ergebnisse
verschwanden aber sofort vom Bildschirm, weil TURBO-PASCAL in den Editor
zurückschaltete. Die übliche Reaktion war "Unser Programm hat gar nichts
gemacht!". Es dauerte relativ lange, bis alle Schüler selbständig mit der
Tastenkombination ALT/F5 auf den Ausgabebildschirm umschalteten. Auch die
Fehlermeldungen bei einem durch einen Laufzeitfehler abgebrochenen Programm
irritierten die Schüler sehr, da keine Meldungen im Klartext vorlagen. Das
übliche Vorgehen in diesem Fall war eine eigene Interpretation oder das
Heraussuchen der Fehlerbeschreibung nach dem Fehlerindex und Suchen der
Programmstelle mit dem Compiler. Beides ist für Schüler im Anfangsunterricht
sehr problematisch, weil es den Eindruck verstärkt, daß Computer nur etwas für
Freaks seien. Häufig fand der Compiler auch keine Programmstelle, die zu der
angegebenen Fehlerposition paßte. Damit sind Schüler bei einer selbständigen
Fehlersuche dann vollständig überfordert. Störend wirkte es sich auch aus, daß
Lehrer und Schüler verschiedene Compilerschalter oder Programmpfade setzten und
in der Konfiguration abspeicherten. Die Folge davon war, daß Programme die "in
der letzten Stunde noch liefen", jetzt nicht einmal mehr compiliert wurden.
Wegen der geschilderten Probleme entstand immer mehr die Idee, einen Compiler
zu schaffen, der speziell für den Unterricht geeignet ist und auf
professionelle Möglichkeiten verzichtet. Aufbauend auf einem von Niklaus Wirth
#FF
in seinem Buch "Compilerbau" beschriebenen Buch entstand ITG-PASCAL. Es war
relativ schnell klar, daß es sich um einen P-Code-Compiler handeln muß, der den
Quelltext in einen Pseudo-Maschinen-Code übersetzt, der dann durch einen
Interpreter ausgeführt wird. Ein Vorteil ist in diesem Fall die einfachere
Entwicklung des Compilers, der in einer Hochsprache programmiert werden kann
und diese auch zur Programmausführung benutzt, denn erst dadurch wurde die
Entwicklung von ITG-PASCAL möglich. Weil keine selbst ausführbaren Programme
erzeugt werden, hat der Interpreter zur Laufzeit Zugriff auf den Quelltext des
Programms und alle Compilertabellen. Deshalb kann bei Laufzeitfehlern eine
detaillierte Fehlermeldung mit dem Quelltext der Zeile, in der der Fehler
auftrat, der Fehlerposition und der augenblicklichen Belegung aller Variablen
in aktiven Prozeduren / Funktionen (Post-Mortem-Dump) ausgegeben werden. Die
Schüler finden den Fehler dann sehr schnell, wenn sie den zugrunde liegenden
Algorithmus verstanden haben.
Aufbauend auf dem Post-Mortem-Dump konnte ein einfacher Debugger geschaffen
werden, für den anfangs nur bekannt sein muß, wie Variablen im Quelltext zum
Debuggen markiert werden und wie die Ausgabe der Debug-Informationen gestartet
wird. Nach ersten Erfahrungen kommen Schüler damit sehr schnell zurecht und
können ihr Programm damit gut von Fehlern bereinigen. Als Nebeneffekt ist es
möglich, mit dem Debugger die Anlage lokaler Variablen auf dem Stack bei
Aufrufen von Funktionen und Prozeduren zu zeigen.
ITG-PASCAL lehnt sich in der Struktur der Oberfläche sehr stark an TURBO-PASCAL
4.0-5.5 an, wobei aber der Umfang auf das für den Unterricht nötige Maß
reduziert wurde. Die SAA-Oberfläche von TURBO-PASCAL 6.0 wurde bewußt nicht
übernommen, weil viele Schüler sehr viel besser mit der einfacheren
Menüstruktur als mit SAA-Oberflächen zurechtkommen. Der Sprachumfang von
ITG-PASCAL ist eine Untermenge des Sprachumfangs von TURBO-PASCAL 4.0-6.0,
wobei auch die Syntax übernommen wurde, um den Umstieg auf TURBO-PASCAL so
einfach wie möglich zu gestalten. Insbesondere für die Grafik, aber auch für
die Write- und Read-Anweisungen wurden Erweiterungen eingeführt. So ist es z.B.
möglich, Arrays und Records mit einer einzigen Write-Anweisung auszugeben oder
in der Read-Anweisung die einzulesende Variable vorzubelegen, in der Eingabe zu
editieren und bei Real-Variablen Terme einzugeben. Nicht alle aufgezählten
Eigenschaften lassen sich durch entsprechende Units nachbilden.
Für den Einstieg in die Programmierung oder kurze Tests kann ein Direktmodus
gewählt werden, in dem Anweisungen eingegeben und dann sofort ausgeführt werden
können. Auf Wunsch werden sie im Editor mitgeschrieben und zu einem lauffähigen
Programm ergänzt. Damit ist ein einfaches von Syntaxfehlern freies Programm
auch für ungeübte Schüler innerhalb weniger Minuten zu schreiben, wenn sie die
Syntax einiger Befehle kennen. Dieses erste Programm kann beliebig verändert
und ergänzt werden.
Die beschriebenen Vorteile werden dadurch erkauft, daß ITG-PASCAL keine
EXE-Files im Maschinencode erzeugen kann, im Umfang des Quelltextes je nach
Komplexität auf 1500-2000 Programmzeilen begrenzt ist, im Speicherplatz für
Variablen begrenzt ist und Programme etwas langsamer als TURBO-PASCAL ausführt.
Das Datenformat für INTEGER-Variablen ist immer LONGINT, das für REAL-Variablen
immer EXTENDED nach TURBO-PASCAL-Deklaration.
Mengen sind nur teilweise implementiert, um z.B. Tastaturabfragen zu
vereinfachen.
#FF
Für weitere Anregungen zu ITG-PASCAL wäre ich dankbar.
R.Hamann
Kiel, im Mai 1991.
Seit Mai 1991 sind eine Reihe von Erweiterungen wie dynamische Variablen,
parallele Prozesse und andere im Sprachumfang hinzugekommen, die jetzt den
Einsatz von ITG- PASCAL in großen Bereichen des Informatik-Unterrichts der
Oberstufe ermöglichen.
#FF
Installation
Das Installationsprogramm INSTALL richtet auf einer Diskette / Festplatte mit
während der Installation frei wählbaren Verzeichnisnamen ein, in die alle
Dateien kopiert werden, die in den Archiven ITG-???.EXE im Unterverzeichnis
\PRG gepackt enthalten sind. Anpassungen in der AUTOEXEC.BAT oder einer
Batch-Datei zum Starten von ITG-PASCAL müssen von Hand vorgenommen werden.
Das Programmpaket von ITG-PASCAL umfaßt mehrere Dateien, auf die zum Teil
während des Betriebes zugegriffen werden muß. Damit diese Dateien von ITG.EXE
gefunden werden, kann das Directory, in dem sie sich befinden, in der
Environment-Variablen ITG angegeben werden. Wenn ITG-PASCAL sich auf der
Festplatte C: im Verzeichnis \ITG befindet, muß dazu in der AUTOEXEC.BAT oder
in einer anderen Batch-Datei, mit der ITG-PASCAL gestartet wird, die Anweisung
"SET ITG=C:\ITG" stehen. Für andere Laufwerke und andere Verzeichnisse ist
entsprechend zu verfahren. Wenn die Environment-Variable ITG nicht existiert,
sucht ITG-PASCAL in dem Verzeichnis, in dem sich ITG.EXE befindet.
ITG-PASCAL kann dazu veranlaßt werden, beim Start auf ein bestimmtes Laufwerk
und ein bestimmtes Verzeichnis zuzugreifen, damit Schüler auf ihre
gespeicherten Programme ohne Laufwerks- und Verzeichniswechsel zugreifen
können. Dazu gibt es zwei Möglichkeiten :
1) Vor dem Start von ITG-PASCAL wird die Environment-Variable USERPFAD mit
Laufwerk und Pfad gesetzt. Beispiel : SET USERPFAD=D:\ITG\BSP\USER1
2) ITG-PASCAL wird mit dem Parameter USERPFAD=Pfadangabe gestartet.
Beispiel : ITG USERPFAD=D:\ITG\BSP\USER1
Folgende Dateien werden benötigt :
1) Standard-Version
ITG.EXE : Entwicklungsumgebung mit Compiler und Interpreter
oder / und
2) Overlay-Version
ITG-OVR.EXE : Entwicklungsumgebung mit Compiler und Interpreter für
Computer mit Festplatte, EMS oder schnellem Netzwerk,
benötigt ITG.OVR
ITG.OVR : Overlay-Datei zu ITG-OVR.EXE (enthält Teile der
Entwicklungsumgebung)
oder / und
3) Protected-Mode-Version
ITGX.EXE : Entwicklungsumgebung mit Compiler und Interpreter für
Computer mit 286-, 386(SX/DX)- oder 486(SX/DX)-CPU
und mindestens 2MB Hauptspeicher. Der größte freie
Speicher steht zur Verfügung, wenn kein Treiber für die
Verwaltung des EXTENDED-/ EXPANDED-Memory
geladen wurde.
RTM.EXE : Protected-Mode-Interface, nötig für die Speicherverwaltung
und die Schnittstelle zwischen ITGX.EXE und DOS
DPMI16BI.OVL : Overlay-Datei dazu
ITG.HLP : Online-Hilfe (Textdatei)
Änderungen durch den Benutzer sind möglich
ITG.NDX : Online-Hilfe (Index-Datei)
ITG.SYN : enthält die vom Benutzer definierten Synonyme
LIZENZ.ITG : enthält den Lizenznehmer
ITG.CFG : Datei mit den Steuercodes des Druckers und den Bildschirm-
Attributen
#FF
Diese Dateien werden nicht unbedingt benötigt :
PROGRAMM.TXT : In dieser Datei ist der Programmrumpf enthalten, der bei
einem neuen Programm automatisch geladen wird.
EDIT.MAC : enthält die Tastatur-Makros des Editors. Diese Datei wird
beim Starten von ITG.EXE (ITG-OVR.EXE) geladen.
HELPCOMP.EXE : erzeugt die Index-Datei ITG.NDX zu ITG.HLP. Wenn
Änderungen in ITG-HLP.TXT vorgenommen wurden, müssen
mit HELPCOMP eine neue Hilfe- und eine neue Index-Datei
erstellt werden.
ITG-CFG.EXE : Konfigurationsprogramm zum Bearbeiten der Datei ITG.CFG
RUN.EXE : Interpreter für die Ausführung von PRG-Dateien
RUNX.EXE : Protected-Mode-Version des Interpreters für die Ausführung
von PRG-Dateien
Die mitgelieferten Beispielprogramme können auch einem anderen Verzeichnis
untergebracht werden.
#FF
Einführung
In diesem Abschnitt soll gezeigt werden, wie im Unterricht über den Direktmodus
ein Programm erstellt wird, das anschließend unter Ausnutzung der Eigenschaften
von ITG-PASCAL schrittweise mit einer Wiederhol-Schleife versehen wird, wie mit
dem Debugger Variableninhalte verfolgt werden und Speicherung der Inhalte auf
dem Stack gezeigt wird.
Igel-Grafik im Direktmodus
Nach dem Starten von ITG-PASCAL mit "ITG" erscheint das Eröffnungsbild, von dem
aus man durch Drücken einer beliebigen Taste zu dem Menüpunkt "File / Datei
laden" gelangt. Durch zweimaliges Drücken der Pfeiltaste "Cursor nach rechts"
kommt man in das Menü "Run", durch dreimaliges Drücken der Pfeiltaste "Cursor
nach unten" erreicht man den Unterpunkt "Igel-Grafik", der durch "RETURN"
aktiviert wird. Es erscheint die Frage, ob die Eingaben im Editor
mitgeschrieben werden sollen. Wenn diese Frage mit JA ("J") beantwortet wird,
was in diesem Fall geschehen sollte, damit das folgende Beispiel nachvollzogen
werden kann, wird der eventuell im Editor vorhandene Text gelöscht. Falls
Änderungen an diesem Text vorgenommen wurden, die noch nicht abgespeichert
wurden, hat man vor dem Löschen aber noch die Möglichkeit, ihn auf Diskette zu
speichern. ITG-PASCAL schaltet jetzt in den Grafikmodus um und unterteilt den
Bildschirm in zwei Fenster. In dem oberen Fenster erscheint in der Mitte der
Igel (die Turtle) und zeigt nach oben, bei dem unteren handelt es sich wie in
der Überschrift angegeben um das Eingabefenster, in dem die Anweisungen
eingegeben werden, während sie in dem oberen ausgeführt werden.
Durch folgende Anweisungen, die ohne "1>", "2>" usw. eingegeben werden und
durch "RETURN" ausgeführt werden erhält man schrittweise die darauf folgende
Zeichnung.
Anweisungen :
1> Vorne(100);
2> Rechts(90);
3> Vorne(100);
4> Rechts(90);
5> Vorne(200);
6> Rechts(90);
Zeichnung :
┌───────┐
│ │
│ │
│ │
│
│
│
<┘
Durch Drücken der Taste "ESC" verläßt man den Direktmodus. Jetzt wird der
Menüpunkt "Editor / Programm-Text bearbeiten" angewählt ("Cursor nach links"
und "RETURN"). Im Editor stehen die Anweisungen, die im Direktmodus der
Igel-Grafik ausgeführt wurden ergänzt um den Programmrahmen eines
Pascal-Programms und um die Anweisungen GrafikSchirm und TextSchirm.
#FF
Programm-Listing :
PROGRAM DirectModus;
BEGIN
GrafikSchirm;
Vorne(100);
Rechts(90);
Vorne(100);
Rechts(90);
Vorne(200);
Rechts(90);
TextSchirm;
END.
Damit ist ein lauffähiges Pascal-Programm entstanden, ohne daß
Programmstrukturen bekannt sein müssen. Mit der Taste "F2" kann dieses
Programm auf Diskette gespeichert werden, wobei der Dateiname noch geändert
werden kann. Unter dem Menüpunkt "Run / Programm starten" kann dieses kleine
Programm beliebig oft wiederholt werden.
Durch viermaliges Wiederholen der im Direktmodus eingegebenen Anweisungen
entsteht folgendes Bild :
┌───────┬───────┐
│ │ │
│ │ │
^ │ │
├───────┼───────┤
│ │ │
│ │ │
│ │ │
└───────┴───────┘
Das vorliegende Programm soll jetzt so abgewandelt werden, daß die Anweisungen
innerhalb einer Schleife viermal wiederholt werden. Dazu wird die
REPEAT-UNTIL-Schleife verwendet. Dieses Beispiel wird bewußt schrittweise
eingeführt, damit die Schüler aus ihren Anfangsfehlern mit Unterstützung des
Compilers, des Hilfesystems und des Unterrichtenden lernen und erfahren, wie
sie möglichst selbständig ein fehlerfrei arbeitendes Programm erstellen können.
Einführung einer Schleife
In der mitgelieferten Synonym-Datei ITG.SYN sind für REPEAT und UNTIL die
alternativen Bezeichner WIEDERHOLE und BIS aufgeführt. Dadurch kann für den
Schleifenkopf sowohl REPEAT als auch WIEDERHOLE verwendet werden.
Entsprechendes gilt für UNTIL und BIS. Die Synonym-Datei ist eine Datei im
ASCII-Format, in der zu jedem Standardbezeichner von ITG-PASCAL eine
Alternative definiert werden kann. Damit können die Bezeichner weitgehend
eigenen Wünschen angepaßt werden.
Durch Einfügen des Schleifenkopfes und des Schleifenendes ergibt sich als
Listing :
#FF
PROGRAM DirectModus;
BEGIN
GrafikSchirm;
Wiederhole
Vorne(100);
Rechts(90);
Vorne(100);
Rechts(90);
Vorne(200);
Rechts(90);
Bis Zähler = 4;
TextSchirm;
END.
Mit "F9" als Hot-Key kann direkt aus dem Editor heraus compiliert werden. In
dem obigen Beispiel wird der Compiler auf dem "Z" von "Zähler" stehenbleiben
und in der obersten Zeile des Editors die Fehlermeldung "nicht definierter
Bezeichner" ausgeben. Über "F1" kann man Informationen zu diesem Fehler und
seinen möglichen Abhilfen bekommen. In diesem Beispiel werden drei denkbare
Fehlerursachen aufgezählt, von denen "Variable deklarieren" hell unterlegt ist.
Zu diesem Stichwort gibt es weitere Hilfsinformationen, die mit "RETURN"
angewählt werden können. Mit der Taste "Cursor nach unten" können weitere
Stichworte der Hilfedatei gesucht werden. Falls eines vorhanden sein sollte,
wird der entsprechende Begriff im Hilfefenster unterlegt. Die Hilfe wird mit
"ESC" verlassen.
Unter "Variable deklarieren" wird gezeigt, in welcher Weise die Deklaration zu
geschehen hat. Dieses soll nun auch in unserem Beispielprogramm geschehen.
PROGRAM DirectModus;
VAR
Zähler : GanzZahl; (* Synonym für INTEGER in ITG.SYN *)
BEGIN
GrafikSchirm;
Wiederhole
Vorne(100);
Rechts(90);
Vorne(100);
Rechts(90);
Vorne(200);
Rechts(90);
Bis Zähler = 4;
TextSchirm;
END.
Durch "Strg-F9" wird das Programm aus dem Editor heraus gestartet. Der Compiler
findet keine Fehler mehr und die Ausführung des Programms beginnt. Wie nicht
anders zu erwarten ist, endet das Programm nicht. Durch genaues Hinsehen ist zu
erkennen, daß der Igel kurzzeitig immer wieder an verschiedenen Stellen der
Grafik erscheint. Mit "Strg-B" wird die Programm-Ausführung abgebrochen.
Nach Drücken einer Taste erfolgt der Post-Mortem-Dump, in dem angezeigt wird,
an welcher Stelle das Programm beendet wurde und welche Werte die gerade
aktiven Variablen haben. Diese Informationen werden auch in das zweite
Editorfenster geschrieben, daß man sich unter dem Menüpunkt
"Editor-/Programm-/Fehler-Ausgabe ansehen" ansehen kann. Bei unserem Beispiel
werden folgende Informationen ausgegeben :
#FF
Programm mit Strg-B in Zeile 9 beendet.
9> Vorne(100);
^Fehler-Position
ZÄHLER = 0
Wenn das Beispiel von mehreren Gruppen in der angegebenen Form bearbeitet wird,
ist die Fehlermeldung in allen Fällen gleich. Das ist insofern zuerst etwas
überraschend, weil die meisten Compiler, so auch TURBO-PASCAL, Variablen nicht
initialisieren. In ITG-PASCAL erfolgt die Initialisierung aller globalen und
lokalen Variablen Grundsätzlich mit dem Wert Null, sodaß eine Anweisung
"Variable := 0" anfangs wegfallen kann. Grundsätzlich ist es aber ratsam,
Variablen selbst zu initialisieren. Durch Einfügen einer Anweisung zur Erhöhung
des Inhaltes von "Zähler" innerhalb der Schleife erreicht man ein Beendigung
der Programm-Ausführung. ITG-PASCAL wartet anschließend solange, bis eine
beliebige Taste gedrückt wird, damit man sich den Bildschirm noch in Ruhe
ansehen kann.
korrigiertes Programm :
PROGRAM DirectModus;
VAR
Zähler : GanzZahl;
BEGIN
GrafikSchirm;
Wiederhole
Vorne(100);
Rechts(90);
Vorne(100);
Rechts(90);
Vorne(200);
Rechts(90);
Erhöhe(Zähler); (* Synonym für INC *)
Bis Zähler = 4;
TextSchirm;
END.
#FF
Einführung von parameterlosen Prozeduren
Mit Hilfe des Direkt-Modus ist es möglich, ITG-PASCAL Anweisungsfolgen lernen
zu lassen, sodaß diese Anweisungsfolgen anschließend durch Aufruf ihres Namens
wiederholt werden können. Lernsequenzen werden entsprechend der Definition von
PASCAL intern als Prozeduren behandelt. Wie dabei zu verfahren ist, soll an dem
folgenden Beispiel erklärt werden.
┌───────┬───────┐
│ │ │
│ │ │
│ │ │
├───────┼───────┤
│ │ │
│ │ │
│ │ │
└───────┴───────┘
Die obige Figur ist aus vier kleinen Quadraten zusammengesetzt. Dementsprechend
besteht eine Möglichkeit des Zeichnens dieser Figur darin, viermal jeweils
eines der kleinen Quadrate zeichnen zu lassen. Dazu wechselt man in das
Untermenü RUN und wählt den Unterpunkt "Igel-Grafik fortsetzen", wenn sich noch
kein Programm im Editor befindet, wie es z.B. gleich nach dem Start von
ITG-PASCAL der Fall ist. Andernfalls ist "Igel-Grafik (neues Programm)" zu
wählen.
Zur Einleitung einer Lernsequenz dient der Bezeichner "Lerne", dem ein
Leerzeichen und ein Name für die Lernsequenz folgen müssen. Beendet wird die
Lernsequenz durch den Bezeichner "Ende", ein Leerzeichen und denselben Namen.
Dabei ist zu beachten, daß der Name mit einem Buchstaben oder einem Unterstrich
beginnt. Ab dem zweiten Zeichen dürfen auch Ziffern verwendet werden. Wir
wählen für den Namen "Quadrat" und geben die Anweisungen der linken Spalte ein.
Rechts stehen jeweils Erläuterungen dazu.
Eingabe der Anweisungsfolge
Eingaben Erläuterungen dazu
Lerne Quadrat der Bildschirm wird gelöscht und der Igel wird gezeichnet
Vorne(100) Igel 100 Schritte vorwärts
Rechts(90) Igel um 90° im Uhrzeigersinn drehen
Vorne(100) jetzt das Eingabefeld mit der Cursortaste auf Vorne(100) und Return
Rechts(90) auf Rechts(90) und Return
Vorne(100)
Rechts(90)
Vorne(100) das Quadrat ist geschlossen
Ende Quadrat die Lernsequenz ist beendet, der Bildschirm wird gelöscht
Lerne VierQuadrate neue Lernsequenz einleiten
Quadrat 1.Quadrat zeichnen
Quadrat 2.Quadrat zeichnen
Quadrat 3.Quadrat zeichnen
Quadrat 4.Quadrat zeichnen und fertig
Ende Quadrat Bildschirm löschen
VierQuadrate nacheinander werden alle vier Quadrate gezeichnet
Der Direktmodus wird durch ESC verlassen und es wird auf "Programm-Text
bearbeiten" in dem Untermenü EDITOR gewechselt. Im Editor steht das folgende
#FF
Programm, das durch die Lernsequenzen und die Anweisungen gebildet wird. Wie
schon beschrieben sind die Lernsequenzen als Prozeduren gespeichert.
PROGRAM DirectModus
PROCEDURE Quadrat;
BEGIN
Vorne(100);
Rechts(90);
Vorne(100);
Rechts(90);
Vorne(100);
Rechts(90);
Vorne(100);
END;
PROCEDURE VierQuadrate;
BEGIN
Quadrat;
Quadrat;
Quadrat;
Quadrat;
END;
BEGIN
GrafikSchirm;
VierQuadrate;
TextSchirm;
END.
Korrektur falscher Anweisungen
Wenn in einer Anweisungsfolge wie z.B. in einer Lernsequenz eine falsche
Anweisung oder eine Anweisung mit falsche Parametern gegeben wurde, die von der
Syntax her richtig war und deshalb von ITG-PASCAL ausgeführt wurde, dann läßt
sie sich auf einfache Weise durch Drücken der Tastenkombination Strg-R
rückgängig machen. Gelöscht wird jeweils die letzte Anweisung in der Liste und
alle davorstehenden werden erneut ausgeführt, damit richtig fortgesetzt werden
kann. Durch mehrfaches Drücken von Strg-R lassen sich auch mehrere Anweisungen
löschen. Diese Korrekturmöglichkeit gestattet auf einfache Weise die Erstellung
von Prozeduren bevorzugt für Grafik / Igel-Grafik, wobei jeweils zu erkennen
ist, ob die letzte Anweisung zum Ziel führt oder nicht.
Beispiel :
eingegeben wurde
Vorne(100)
Rechts(90)
Rechts(90)
Vorne(100)
statt
Vorne(100)
Rechts(90)
Vorne(100)
Rechts(90)
#FF
Da die beiden letzten Anweisungen in der falschen Reihenfolge stehen, müssen
beide gelöscht und neu eingegeben werden. Es ist also zweimal die
Tastenkombination Strg-R zu drücken. Anschließend kann mit "Vorne(100)" und
"Rechts(90)" fortgesetzt werden.
Einführung von Prozeduren mit einem Parameter
Wenn Qaudrate mit verschiedenen Seitenlängen gezeichnet werden sollen, dann muß
der Prozedur der Wert der Seitenlänge als Parameter übergeben werden. Dazu
folgt dem Prozedurnamen eine Klammer mit dem Variablennamen, einem
Gleichheitszeichen und einem Wert (einer Konstanten), den ITG-PASCAL während
des Lernens als Wert der Variablen nimmt und aus dem ITG-PASCAL den Typ der
Variablen für die Deklaration im Prozedurkopf entnimmt. Deshalb ist es wichtig,
für Variablen des Typs REAL immer einen Dezimalpunkt mit einer weiteren Ziffer
und für Variablen des Typs STRING immer eine Zeichenkette mit mindestens zwei
Zeichen zu verwenden.
Beispiel :
Lerne Quadrat(Seitenlänge=100);
wird zu
PROCEDURE Quadrat(Seitenlänge:INTEGER);
Lerne Quadrat(Seitenlänge=100.0);
wird zu
PROCEDURE Quadrat(Seitenlänge:REAL);
Eingabe der Anweisungsfolge
Eingaben Erläuterungen dazu
Lerne Quadrat(Seitenlänge=100); Lernsequenz beginnen
Vorne(Seitenlänge); Igel bewegt sich 100 Schritte vorwärts
Rechts(90);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Ende Quadrat Lernsequenz beenden, Bildschirm löschen
Quadrat(100); Quadrat der Seitenlänge 100 zeichnen
Quadrat(50); Quadrat der Seitenlänge 50 zeichnen
Im Editor steht dann folgendes Programm :
PROGRAM DirectModus;
PROCEDURE Quadrat(Seitenlänge:INTEGER);
BEGIN
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
END;
#FF
BEGIN
GrafikSchirm;
Quadrat(100);
Quadrat(50);
TextSchirm;
END.
Einführung von Prozeduren mit mehreren Parametern
Wenn Quadrate mit verschiedenen Seitenlängen an verschiedenen Orten und mit
verschiedenen Winkeln zur x-Achse gezeichnet werden sollen, dann müssen der
Prozedur Quadrate vier Parameter (zwei für den Ort, einer für den Winkel und
einer für die Seitenlänge) übergeben werden. Die einzelnen Parameter können
dann durch eine Komma wie bei der Parameterübergabe beim Prozeduraufruf oder
mit einem Semikolon wie bei der Prozedurdeklaration getrennt werden.
Beispiele :
Lerne Quadrat(x=100,y=50,Winkel=45.0,Seitenlänge=150.0); oder
Lerne Quadrat(x=100;y=50;Winkel=45.0;Seitenlänge=150.0);
werden zu
PROCEDURE Quadrat(x:INTEGER;y:INTEGER;Winkel:REAL;Seitenlänge:REAL);
Eingabe der Anweisungsfolge
Lerne Quadrat(x=100;y=50;Winkel=45.0;Seitenlänge=150.0);
GeheNach(x,y);
DreheAuf(Winkel);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Ende Quadrat
Quadrat(-50,-25,30,100); Quadrat zeichnen
Quadrat(-70,40,12.5,37.5); Quadrat zeichnen
Im Editor steht dann folgendes Programm :
PROGRAM DirectModus;
PROCEDURE Quadrat(x:INTEGER;y:INTEGER;Winkel:REAL;Seitenlänge:REAL);
BEGIN
GeheNach(x,y);
DreheAuf(Winkel);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
Rechts(90);
Vorne(Seitenlänge);
END;
#FF
BEGIN
GrafikSchirm;
Quadrat(-50,-25,30,100);
Quadrat(-70,40,12.5,37.5);
TextSchirm;
END.
#FF
Benutzung des Debuggers
Am Beispiel der rekursiv programmierten Fakultätsberechnung soll in diesem
Abschnitt die Benutzung des Debuggers gezeigt werden. Das Listing des Programms
folgt weiter unten.
Die Ausgabe der Debug-Informationen wird durch die Anweisung DebugEin im
Quelltext des Programms gestartet. Ab diesem Zeitpunkt werden nach jeder
ausgeführten Quelltextzeile alle durch ein in der Deklaration vorangestelltes
"!" markierten Variablen mit ihrem Wert und der Quelltextzeile angezeigt, bis
die Anweisung DebugAus ausgeführt wird. Die lokalen Variablen der aktiven
Funktion stehen links in der Zeile, in der die Bezeichner der Variablen und
ihre Inhalte ausgegeben werden. Jedes "|" kennzeichnet eine weitere aktive
Funktion. Am Schluß folgen schließlich die globalen Variablen des Programms.
Diese Zusammenhänge werden im folgenden Beispiel noch genauer beschrieben.
Zusätzlich zur Anzeige auf dem Bildschirm werden alle Informationen in ein
zweites Editor-Fenster geschrieben, sofern genügend Speicherplatz zur Verfügung
steht, und können nach Beendigung des Programms unter "Editor /
Programm-/Fehler-Ausgabe ansehen" betrachtet und gegebenenfalls auch mit
"Blockschreiben" auf Diskette gespeichert werden.
PROGRAM Fakultät;
VAR
!n, !m : INTEGER;
FUNCTION Fak(!n : GanzZahl) : INTEGER;
VAR
!f : INTEGER;
(* f wird hier benutzt, weil Funktionsergebnisse sonst nicht angezeigt
werden. *)
BEGIN
IF n > 1 THEN BEGIN
f := n * Fak(n-1);
END
ELSE BEGIN
f := 1;
END;
Fak := f;
END;
BEGIN
n := 3;
Write('Berechnung von n! n = ');
ReadLn(n);
DebugEin;
(* Nur während der rekursiven Funktionsaufrufe werden die Inhalte der
Variablen angezeigt. Dabei ist die Rekursionsstufe zu erkennen, wie im
folgenden Beispiel für 3! gezeigt wird. *)
m := Fak(n);
DebugAus;
WriteLn(n, '!=', m);
END.
Während des Programmablaufes wird der folgende Text ohne die eingefügten
Erklärungen auf dem Bildschirm ausgegeben. Er kann auch nach Beendigung des
Programms noch in einem zweiten Editorfenster angesehen werden, das im Menü
über "Editor / Programm-/Fehler-Ausgabe ansehen" zu erreichen ist. In diesem
Editorfenster werden alle Textausgaben des Programms einschließlich der
Debug-Informationen mitgeschrieben, sofern genügend Speicherplatz zur Verfügung
#FF
steht. Weil der Post-Mortem-Dump unter Umständen über mehrere Bildschirmseiten
erfolgt, ist dieses die einzige Möglichkeit alle Informationen in beliebiger
Reihenfolge noch einmal in Ruhe anzusehen.
Die Ausgabe des Programms Fakultät auf dem Bildschirm:
Berechnung von n! n = 3
(* hier normale Textausgabe mit "WRITE" *)
IF n > 1 THEN BEGIN
10> F = 0 N = 3 | M = 0 N = 3
^ Globale Variablen stehen immer am Ende der Liste nach dem
letzten "|".
^ Lokale Variablen führen die Liste vor dem letzten "|" an. Die Variablen der
gerade aktiven Prozedur / Funktion stehen ganz links, danach folgen die
Variablen der Prozedur / Funktion, die aus der gerade aktiven aufgerufen
wurde usw. bis zu den globalen Variablen. Hier stehen in diesem Fall die
Variablen des ersten Aufrufs der Funktion "Fak".
IF n > 1 THEN BEGIN
10> F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
^ globale Variablen
^ erster Aufruf von "Fak"
^ zweiter Aufruf von "Fak"
f := 1;
14> F = 1 N = 1 | F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
^global
^ erster Aufruf von "Fak"
^ zweiter Aufruf von "Fak"
^ dritter Aufruf von "Fak"
Jetzt ist n = 1. Damit werden die rekursiven Aufrufe beendet und es geht
rückwärts.
Fak := f;
16> F = 1 N = 1 | F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
f := n * Fak(n-1);
11> F = 2 N = 2 | F = 0 N = 3 | M = 0 N = 3
Fak := f;
16> F = 2 N = 2 | F = 0 N = 3 | M = 0 N = 3
f := n * Fak(n-1);
11> F = 6 N = 3 | M = 0 N = 3
Fak := f;
16> F = 6 N = 3 | M = 0 N = 3
m := Fak(n);
24> M = 6 N = 3
3!=6
#FF
Die Bediener-Oberfläche
Die Bedieneroberfläche von ITG-PASCAL wurde weitgehend an TURBO-PASCAL 4.0-5.5
angelehnt, um Schülern den Umstieg zu vereinfachen. Ebenso wurde die Bedienung
des Editors und der Oberfläche einschließlich der Hot-Keys von TURBO-PASCAL
übernommen, soweit sie für den Einsatz in der Schule nötig ist.
In Eingabefenstern wird das Fenster gelöscht, wenn als erstes ein Zeichen
eingegeben wird, das im Editorfenster ausgedruckt wird. Bei Cursorbewegungen
und anderen Tasten, die Funktionen im Editor auslösen, bleibt der Inhalt
erhalten. Auf diese Weise können einzelne Zeichen eingegeben oder verändert
werden. Standardmäßig erfolgt die Eingabe im Einfügemodus, der an dem kleinen
Cursor zu erkennen ist. Mit der Taste <Einfg> kann in den Überschreibmodus
gewechselt werden, der an dem großen Cursor zu erkennen ist. Ein erneutes
Drücken der Taste <Einfg> führt zurück in den Einfügemodus.
1. FILE
In einigen Untermenüs von FILE sind Tasten während der Eingabe von gesperrt,
die in Dateinamen nicht vorkommen dürfen, um zu verhindern, daß Programmtexte
unter einem Namen abgespeichert werden, unter dem sie von DOS aus nicht mehr
gelesen werden können.
Sofern Eingaben verlangt werden, kann die angewählte Aktion in jedem Unterpunkt
mit ESC abgebrochen werden.
1.1 neues Programm
Zuerst wird geprüft, ob sich ein Programmtext im Editor befindet, der nach der
letzten Änderung noch nicht gespeichert wurde. Gegebenenfalls ist ein
Abspeichern möglich (s. 1.3 Datei speichern). Anschließend wird mit "Dateiname
: " nach dem Namen Programms gefragt. Dann gelangt man in den Editor, in den
der Text der Datei PROGRAMM.TXT geladen wurde, sofern ITG-PASCAL eine Datei
dieses Namens entweder auf der angemeldeten Laufwerk oder in dem in der
Environmentvariablen ITG angegebenen Pfad gefunden hat. Andernfalls steht im
Editor der Programmrumpf
PROGRAMM NoName;
VAR
BEGIN
END.
Achtung : Wenn dem neuen Programm der Name eines bereits existierenden
Programms gegeben wird, so wird dieses ohne Warnung überschrieben.
Tip : Unter dem Namen PROGRAMM.TXT kann ein beliebig Programm geladen werden,
daß sich in demselben Unterverzeichnis wie ITG.EXE oder auf dem angemeldeten
Laufwerk im aktuellen Unterverzeichnis befindet.
1.2 Datei laden
Wie schon unter 1.1 neues Programm beschrieben, wird zuerst geprüft, ob ein
Programmtext vorher noch gespeichert werden sollte.
#FF
Dann wird mit "Dateiname : *.PAS" nach dem zu ladenden Programm-Text gefragt.
Wenn in dem Dateinamen ein * oder ein ? ist, wird ein Auswahlmenü geöffnet, das
alle Unterverzeichnisse, deren Namen in eckigen Klammern (z.B. [\ITG]) stehen
und alle Dateinamen im aktuellen Unterverzeichnis in alphabetischer Reihenfolge
enthält, auf die die vorgegebene Maske zutrifft. Mit den Cursortasten wird ein
Balken auf die zu ladende Datei verschoben. Pfeile in der rechten unteren Ecke
des Rahmens zeigen an, daß zusätzlich zu den angezeigten Dateien und
Verzeichnisse noch weitere im Auswahlmenü enthalten sind. Mit RETURN wird der
Name der Datei festgelegt, die jetzt in den Editor geladen wird. Anschließend
wird automatisch in den Editor verzweigt.
Wenn ein Unterverzeichnis mit RETURN angwählt wurde, so wird das Vorgehen
wiederholt wie im vorigen Absatz beschrieben.
1.3 Datei speichern
Es erscheint die Frage "Dateiname : ProgName.PAS", wobei ProgName.PAS der
gewählte Dateiname ist. Jetzt kann entweder ein neuer Name eingegeben werden
oder der alte wird beibehalten. Die Eingabe muß mit der Returntaste
abgeschlossen werden. Während der Eingabe sind alle Zeichen gesperrt, die nicht
in DOS-Dateinamen vorkommen dürfen.
Zur Sicherheit legt ITG-PASCAL wie andere Programme auch zuerst eine
Sicherheitsdatei an, die den gewählten Namen mit der Endung .BAK statt .PAS
trägt, wenn der Programmtext schon einmal unter diesem Namen abgespeichert
wurde. Falls beim nachfolgenden Abspeichern etwas schiefgehen sollte, ist immer
noch der zuletzt abgespeicherte Zustand vorhanden. Gegebenenfalls könnte diese
Datei geladen werden, indem ihr Name mit der Endung .BAK beim Laden eingeben
wird. Beim Abspeichern sollte aber wieder die Endung .PAS gewählt werden.
Wenn die Umbenennung der alten Programmdatei erfolgreich verlaufen ist oder
wenn ein neuer Dateiname gewählt wurde, wird der Programmtext unter dem
gewählten Namen abgespeichert.
1.4 Datei drucken
Der Programmtext, der im Editor steht, kann auf diese Weise gedruckt werden.
Dabei ist es möglich, die Programmzeilen numerieren zu lassen, wenn die Frage
"Zeilen numerieren (j/n):" mit "j" oder "J" beantwortet wird.
ITG-PASCAL sendet keine Steuerzeichen an den Drucker. Wenn Schmalschrift
gewünscht wird, weil die Zeilenlänge größer als 80 Zeichen ist, muß die
Einstellung vor Beginn des Druckvorgangs am Drucker vorgenommen werden.
1.5 BAK-Dateien löschen
Wie unter 1.3 Datei speichern beschrieben, wird bei jedem Abspeichern des
Programmtextes eines Datei gleichen Namens mit der Erweiterung .BAK angelegt.
Falls diese Dateien nicht mehr benötigt werden, können sie unter diesem
Menüpunkt gelöscht werden.
Achtung : Es werden alle Dateien mit der Erweiterung .BAK im aktuellen
Unterverzeichnis gelöscht. Abbruch und selektives Löschen sind nicht möglich.
#FF
1.6 Inhaltsverzeichnis
Es wird ein Inhaltsverzeichnis des aktuellen Verzeichnisses angezeigt, das alle
Dateien enthält, die der angegebenen Maske entsprechen. Damit andere
Verzeichnisse eingesehen werden können, muß mit Pfad wechseln erst in das
gewechselt werden.
Mit "Zeige alle Dateien C:\ITG\*.*" wird gefragt, welche Dateien in dem
Unterverzeichnis C:\ITG angezeigt werden sollen.
Beispiele :
*.* zeigt alle Dateien
*.PAS zeigt alle Dateien mit der Erweiterung .PAS
I*.PAS zeigt alle Dateien, die mit dem Buchstaben I beginnen und die
Erweiterung .PAS haben
1.7 Pfad wechseln
In einem Auswahlmenü werden alle Unterverzeichnisse und das übergeordnete
Verzeichnis[..] angezeigt, wobei der Name des angewählten Verzeichnisses in dem
Rahmen oberhalb der Liste steht. Mit den Cursortasten wird der
Markierungsbalken auf das gewünschte Verzeichnis verschoben. Der Wechsel
erfolgt mit RETURN. Wenn das gewünschte Verzeichnis erreicht wurde, ist das
Auswahlmenü mit ESC zu verlassen.
1.8 Laufwerk wechseln
Es wird ein Auswahlmenü geöffnet, in dem durch Drücken einer Taste mit dem
Laufwerksbuchstaben (z.B. "b" oder "B" für Laufwerk B:) oder das Verschieben
des Leuchtbalkens auf das Laufwerk mit den Cursortasten und anschließendes
RETURN auf das gewünschte Laufwerk gewechselt wird. Möglich sind die Laufwerke
A: bis I:.
Achtung : Leider bietet DOS keine dokumentierte Möglichkeit, zu prüfen, welche
Laufwerke zur Verfügung stehen. Deshalb gibt es bei Fehlwahl die unter DOS
üblichen Probleme, die aber von ITG-PASCAL aufgefangen und dem Benutzer bei
Fehlzugriffen auf ein Laufwerk angezeigt werden.
1.9 Makros laden
Der Editor von ITG-PASCAL bietet die Möglichkeit, Makros (Tastenfolgen mit bis
zu 100 Zeichen) durch eine Taste ausführen zu lassen (s. 2.1.3 Makro-Recorder).
Beim Start von ITG-PASCAL wird die Makro-Datei EDIT.MAC automatisch geladen.
Wenn eine andere Makro-Datei gewünscht wird, erfolgt das Laden wie unter 1.2
Datei laden beschrieben, mit dem Unterschied, daß Makro-Dateien immer die
Erweiterung .MAC tragen.
1.10 Makros speichern
Wenn Makros mit dem Makro-Recorder erzeugt wurden, sollten sie unter diesem
Menüpunkt mit der Erweiterung .MAC abgespeichert werden.
Achtung : Das Abspeichern der Makros erfolgt nicht automatisch und es wird beim
Verlassen von ITG-PASCAL auch nicht geprüft, ob Makros verändert und noch nicht
abgespeichert wurden.
#FF
1.11 OS-Shell
Wenn genügend Speicher freigegeben werden kann, wird eine temporäre DOS-SHELL
eingerichtet, aus der mit EXIT nach ITG-PASCAL zurückgekehrt werden kann, das
einschließlich aller nötigen Daten im Speicher verblieben ist.
Diese Möglichkeit wurde vorgesehen, um z.B. Disketten formatieren zu können
oder um Dateien löschen zu können, die nicht mehr benötigt werden, ohne daß der
Programmtext verlorengeht, wenn es Probleme mit der Diskette gibt. Im
allgemeinen reicht der dann zur Verfügung stehende Speicherplatz aber nicht
aus, um größere Utilities zu starten.
1.12 Ende
ITG-PASCAL wird beendet. Wenn sich im Editor ein Programmtext befindet, der
nach der letzten Änderung noch nicht abgespeichert wurde, wird danach gefragt,
ob der Text noch abgespeichert werden soll.
ITG-PASCAL kann außer aus einem laufenden Programm jederzeit über die
Tasten-kombination Alt-X beendet werden.
#FF
2. EDITOR
2.1 Programm-Text bearbeiten
Unter diesem Menüpunkt wird der Editor aufgerufen, in dem Programmtexte
eingegeben und verändert werden können.
Der Editor ist so gestaltet, daß seine Bedienung kompatibel zu dem
TURBO-PASCAL-Editor ist. Allerdings ist der Umfang der zur Verfügung stehenden
Befehle auf das nötige beschränkt. Zusätzlich ist aber noch ein Makro-Recorder
vorhanden, durch den durch Drücken einer Taste bis zu 100 Zeichen auf einmal in
den Programmtext eingefügt werden können.
2.1.1 Editor-Befehle
Pfeiltasten : Cursor um ein Zeichen / eine Zeile in die Pfeilrichtung bewegen
<- (BackSpace) : Zeichen links vom Cursor löschen
Entf : Zeichen unter dem Cursor löschen
ENTER : Text rechts vom Cursor in eine neue Zeile schreiben / neue Zeile
beginnen. Diese Angaben gelten nur, wenn der Einfügemodus aktiv
ist.
Achtung : Im Überschreibmodus, der an dem größeren Cursor und
der Anzeige in der Statuszeile zu erkennen ist, erfolgt kein
Zeilenumbruch!
Einfg : zwischen Einfügen und Überschreiben umschalten. Sowohl am
Cursor als auch an der Statuszeile ist der aktivierte Modus
abzulesen :
Cursor Statusanzeige
Einfügen klein Einfügen
Überschreiben groß Überschreiben
F1 : Hilfe zu ITG-PASCAL (s. EDITOR 2.1.2)
Strg-F1 : Hilfe zum Editor. Diese Befehlsübersicht wird angezeigt.
F2 : Sichern des Programmtextes auf Diskette/Festplatte (s. FILE 1.2)
F3 : Laden eines auf Diskette/Festplatte vorhandenen Programmtextes
(s. FILE 1.3)
F9 : Compilieren des Programms (s. RUN 3.1)
Strg-F9 : Starten des Programms (s. RUN 3.2)
F10, ESC : Verlassen des Editors, Wechsel ins Menü
Strg-BildAuf : Cursor auf den Textanfang setzen
Strg-BildAb : Cursor ans Textende setzen
Strg-QF : Suchen nach Zeichenfolgen im Text. In der obersten
Bildschirmzeile erscheint die Frage "Suchen : ". Die zu suchende
Zeichenfolge ist jetzt einzugeben und mit ENTER abzuschließen.
Anschließend wird nach den Suchoptionen gefragt "Optionen
(g/n/u/w/b) : ". Auch diese Eingabe ist mit ENTER abzuschließen.
Bedeutung der Optionen :
g : global / im ganzen Text suchen
n : nicht nachfragen beim Ersetzen
u : Groß- und Kleinschreibung nicht unterscheiden
w : nur ganze Worte suchen
b : ab der Cursorposition rückwärts suchen
Standardvorgabe beim Suchen ist :
- Suchen ab Cursorposition
- Berücksichtigen von Groß- und Kleinschreibung
- Suchen auch nach Wortteilen
Strg-QA : Suchen und Ersetzen von Zeichenfolgen im Text. Es wird nach
#FF
einer Zeichenfolge gesucht, die anschließend durch eine andere
ersetzt wird. Das Vorgehen entspricht dem unter "Suchen nach
Zeichenfolgen im Text" beschriebenen, zusätzlich wird als
zweites durch "Ersetzen durch:" nach der Zeichenfolge gefragt,
die die erste ersetzen soll. Wenn die Option n nicht gewählt
wurde, wird die gesuchte Zeichenfolge, sofern sie gefunden wurde,
auf dem Bildschirm hervorgehoben und es erscheint in der
obersten Bildschirmzeile die Frage "Ersetzen (j/n):". Wenn "j"
oder "J" wurde, wird ersetzt, bei "n" bzw. "N" nicht.
Strg-L : letztes Suchen bzw. Suchen/Ersetzen wiederholen. Wenn zuletzt
nach einer Zeichenfolge gesucht wurde, wird diese Suche mit den
eingegebenen Optionen wiederholt, andernfalls wird "Suchen und
Ersetzen" wiederholt.
Strg-T : Wort rechts vom Cursor löschen
Strg-KB : Blockanfang markieren
Strg-KK : Blockende markieren. Ein markierter Block, dessen Anfang vor
seinem Ende steht, wird durch eine invertierte Darstellung von
Zeichen und Hintergrund hervorgehoben.
Strg-KH : Blockmarkierung ein- / ausschalten. Die Hervorhebung eines
Blocks wird dadurch aufgehoben bzw. wieder ausgeführt.
Strg-KC : Block kopieren. Wenn ein Block mit Strg-KB und Strg-KK
markiert wurde, wird er an die Cursorposition kopiert. Der
Textblock bleibt an der ursprünglichen Position erhalten.
Strg-KV : Block verschieben. Wenn ein Block mit Strg-KB und Strg-KK
markiert wurde, wird er an die Cursorposition verschoben. Der
Textblock wird an der ursprünglichen Position gelöscht.
Strg-KY : Block löschen. Wenn ein Block mit Strg-KB und Strg-KK markiert
wurde, wird er gelöscht.
Strg-KP : Block drucken. Wenn ein Block mit Strg-KB und Strg-KK markiert
wurde, wird er auf dem Drucker ausgegeben.
Strg-KW : Block in eine Datei schreiben. Wenn ein Block mit Strg-KB und
Strg-KK markiert wurde, wird er in eine Datei geschrieben,
nachdem in der obersten Bildschirmzeile der Dateiname nach
"Block schreiben:" eingegeben wurde.
Strg-KR : Block aus einer Datei lesen. In der obersten Bildschirmzeile wird
mit "Block lesen:" nach dem Namen einer Textdatei gefragt, die
ab der Cursorposition in den Text eingefügt wird, wenn es eine
Textdatei unter diesem Namen gibt.
2.1.2 Hilfesystem
ITG-PASCAL bietet ein Hilfesystem für alle PASCAL-Anweisungen, für
Fehlermeldungen des Compilers (F1) und für die Befehls-übersicht des Editors
(Strg-F1).
Mit der Tastenkombination Strg-F1 erhält man direkt die unter Befehlsübersicht,
die auch über das allgemeine Hilfesystem mit F1 zu erreichen ist.
Für alle PASCAL-Anweisungen bietet ITG-PASCAL mit F1 eine kontextsensitive
Hilfe, bei der zu einem Standard-Bezeichner oder seinem in der Synonym-Datei
deklarierten Synonym ein Hilfstext mit einer Erklärung der Prozedur/Funktion,
ihrer Deklaration und einem Beispielprogramm gezeigt wird, wenn der Cursor auf
einem der Standardbezeichner steht. Andernfalls erscheint eine Liste mit
Gliederungspunkten, unter denen weitere Informationen zu erhalten sind.
Innerhalb der Hilfe können Hilfstexte zu weiteren Stichworten durch Drücken der
RETURN-Taste angefordert werden, wenn das gewünschte Stichwort auf dem
Bildschirm invertiert ist. Mit den Cursortasten nach links bzw. rechts wird das
#FF
vorherige bzw. nächste Stichwort angewählt, für das eine Information vorhanden
ist. Die Cursortasten nach oben / unten überspringen mögliche weitere
Stichworte in der aktuellen Zeile. Zu etlichen Stichworten gibt es mehrere
Bildschirmseiten an Informationen. In diesen Fällen erscheinen auf dem unteren
rechten Rand des Rahmens um den Hilfstext die Angaben PgUp und/oder PgDn. Dann
kann mit den Tasten zwischen den einzelnen Seiten zu diesem Stichwort
geblättert werden. Das Hilfesystem wird mit ESC verlassen.
Wenn beim Compilieren ein Fehler gefunden wurde und in der obersten
Bildschirmzeile eine Fehlermeldung dazu steht, ergibt F1 eine ausführlicher
Beschreibung zu dem Fehler einschließlich möglicher Ursachen. Wegen der
Vielfältigkeit von Fehler-möglichkeiten muß die Beschreibung nicht genau auf
den aufgetretenen Fehler zutreffen.
2.1.3 Makro-Recorder
Im Editor können Zeichenfolgen als Makros definiert werden. Auf diese Weise
lassen sich durch Drücken einer einzigen Taste bis zu 100 Zeichen auf einmal ab
der Cursorposition in den Text einfügen. Eine Übersicht über vorhandene Makros
erhält man durch die Tastenkombination Alt-F5.
Beispiele:
<Alt-P> : PROCEDURE
<Alt-F> : FUNCTION
Diese Angaben bedeuten, daß durch Drücken der Tastenkombination Alt-P ein Makro
eingefügt wird, der einen Prozedurrahmen enthält.
Beim Start von ITG-PASCAL wird die Makro-Datei EDIT.MAC geladen, beim Verlassen
von ITG-PASCAL wird keine Makro-Datei abgespeichert.
Die Aufnahme eines Makros wird durch die Tastenkombination Strg-F5 gestartet.
Anschließend wird die Tastenkombination abgefragt, mit der dieses Makro
gestartet werden soll. Dann können bis zu 100 Tasten eingegeben werden. Die
Aufnahme wird durch Strg-F5 beendet. Jetzt wird ein Informationstext abgefragt,
der mit Alt-F5 angezeigt werden kann. (siehe auch Beispiele oben)
Beispiel:
Aufnahme des Prozedur-Makros Alt-P:
1) Strg-F5 drücken Aufnahme starten
2) Alt-P drücken Tastenkombination festlegen
3) Text wie gewohnt eingeben
PROCEDURE ; Durch Bewegen des Cursors auf das Semikolon
VAR hinter PROCEDURE wird erreicht, daß der
Cursor nachEinfügen des Makros an dieser
BEGIN dieser Stelle stehen bleibt, damit der
Prozedurname eingegeben werden kann.
END;
4) Strg-F5 drücken Aufnahme beenden
5) Informationstext eingeben <ALT-P>: PROCEDURE : aussage-
kräftigen Text mit Tastenkombination und
Wirkung wählen!
Damit ist die Aufnahme beendet. Durch Alt-P kann der Text jetzt beliebig oft
eingefügt werden.
Ein Makro wird mit Strg-F6 gelöscht, indem im Anschluß die Makrotaste gedrückt
wird.
#FF
Beispiel:
1) Strg-F6 Löschen starten
2) Alt-P Tastenkombination Alt-P aus der Makroliste streichen
2.2 Programm-/ Fehler-Ausgabe ansehen
Standardmäßig protokolliert ITG-PASCAL alle Read- und Write-Anweisungen sowie
den Post-Mortem-Dump und die vom Debugger ausgegebenen Variableninhalte in
einem zweiten Editorfenster mit, sofern noch genügend freier Speicherplatz
vorhanden ist. Die Protokollführung für die Read- und Write-Anweisungen kann
durch OhneProtokoll ausgeschaltet und durch MitProtokoll eingeschaltet werden.
Das Mitschreiben des Mortem-Dumps kann außer durch Speicherplatzmangel nicht
unterdrückt werden.
Dieses Protokoll kann unter diesem Menüpunkt eingesehen, verändert und als
Block auf Diskette/Festplatte geschrieben werden.
2.3 Programm-Text formatieren
Weil Schüler Programmtexte oft linksbündig eingeben und Fehler in der
Programmstruktur dann schlecht zu finden sind, besteht unter diesem Menüpunkt
die Möglichkeit, die Struktur durch Einrücken optisch hervorzuheben. Jeder
Ausführungsteil einer Prozedur, einer Funktion und des Hauptprogramms wird um
zwei Zeichen nach rechts eingerückt. Das gleiche gilt für lokale Prozeduren und
Funktionen und für Schleifen und Verzweigungs-anweisungen.
Das Einrücken findet während eines Compilerlaufes statt. Deswegen wird das
Formatieren des Programmtextes auch bei einem Syntaxfehler im Programm
unterbrochen. Nach Beseitigung des Fehlers muß das Formatieren neu durchgeführt
werden, wenn auch der Rest des Programmtextes überarbeitet werden soll.
2.4 automatische Variablen-Deklaration
Da Schüler besonders im Anfangsunterricht Probleme mit der
Variablen-Deklaration haben, ist die Möglichkeit vorhanden, die Deklarationen
je nach Fall vollautomatisch oder halbautomatisch-interaktiv vom Compiler in
den Quelltext einfügen zu lassen. Dazu erscheint beim haöbautomatischen
Einfügen in einem Fenster die noch nicht deklarierte Variable invers unterlegt
und rechts oben auf dem Bildschirm wird eine Liste der möglichen Typen in einem
Menü eingeblendet. Nach der Anwahl des gewünschten Typs wird die
Deklarationszeile immer lokal in der jeweiligen Prozedur / Funktion eingefügt.
#FF
3. RUN
3.1 Programm compileren
Das Programm wird auf Fehler geprüft und in eine Befehlsfolge übersetzt, die
vom Interpreter ausgeführt werden kann. Weil der Prozessor keine
PASCAL-Programme direkt versteht und ausführen kann, muß eine Übersetzung in
die Sprache des Prozessors (Maschinensprache) stattfinden. ITG-PASCAL erzeugt
keine direkten Maschinenspracheanweisungen, sondern einen Zwischencode (p-Code
oder Pseudo-Code), der von einem in Maschinensprache vorliegenden Interpreter
ausgeführt wird.
Dieser Menüpunkt ist enthalten, um die Abfrage nach dem Abspeichern des
Quelltextes zu umgehen, damit Programme mit mehreren Fehlern schneller
korrigiert werden können.
3.2 Programm starten
Zuerst erfolgt bei geändertem Qelltext die Abfrage "NAME.PAS abspeichern
(j/n)?". Hier sind nur die Eingabe "j", "J" für Ja und "n", "N" für Nein
zugelassen.
Wenn die Frage mit Ja beantwortet wird, erscheint als nächstes die Frage
"Dateiname :". Jetzt kann entweder ein neuer Name eingegeben werden oder der
alte wird beibehalten. Die Eingabe muß mit der Returntaste abgeschlossen werden
(s. auch 1.3 Datei speichern).
Im Anschluß daran wird das Programm erst einmal compiliert (siehe auch 3.1
Compilieren), bevor es gestartet werden kann.
Ein laufendes Programm kann durch Drücken der Tastenkombination <Strg><B>
unterbrochen werden. Es erscheint dann das Breakpoint-Menü, unter dem
Variableninhalte eingesehen und verändert werden können und das Programm
fortgesetzt oder abgebrochen werden kann. Im Falle eines Abbruchs erfolgt
anschließend ein Post-Mortem-Dump, aus dem ersichtlich wird, wo das Programm
abgebrochen wurde und wie die Variablenbelegung war.
3.3 Direkt-Modus (Text)
Im Direktmodus können alle Anweisungen, für die keine Variablendeklarationen
nötig sind, direkt ausgeführt werden. Unter diesem Punkt sind allerdings keine
Grafikanweisungen möglich. Dafür ist der Punkt "Igel-Grafik" zu wählen.
Vor dem Starten des Direktmodus erfolgt die Abfrage "Eingaben im Editor
mitschreiben (j/n)? ". Wenn diese Frage mit Ja beantwortet wird, stehen alle
Eingaben, die fehlerfrei erfolgen, anschließend im Editor und sind um den Rumpf
eines PASCAL-Programms ergänzt worden. Sie können unter dem Menüpunkt
"EDITOR/Programm-Text bearbeiten" eingesehen und verändert werden.
Achtung : Wenn die Eingaben im Editor mitgeschrieben werden sollen, wird der
alte Programmtext im Editor gelöscht. Falls es nach der letzten Änderung noch
nicht abgespeichert wurde, wird nachgefragt, ob das jetzt geschehen soll.
#FF
Im Direktmodus ist es auf sehr einfache und komfortable Weise möglich,
Prozeduren ohne und mit Parametern zu deklarieren (zu lernen). Die Lernsequenz
wird durch "Lerne Name" begonnen und durch "Ende Name" beendet. Für "Name" ist
dabei ein geeigneter Name zu verwenden wie es in der Einführung mit "Quadrat"
gezeigt wird. Die Lernsequenz ist dann im Programm unter einer gleichnamigen
Prozedur zu finden. Wenn eine Anweisung ausgeführt wurde, die nicht zu dem
gewünschten Ziel führt, kann sie durch Strg-R rückgängig gemacht werden. Die
Lernsequenz bzw. das Hauptprogramm laufen dann erneut vollständig ab und es
kann eine neue Anweisung eingegeben werden. Eine bereits beendete Prozedur kann
nur noch im Editor korrigiert werden.
Das Lernen von Prozeduren mit einem oder mehreren Parametern erfolgt durch
Angabe des Variablennamens, eines Gleichheitszeichens und des Wertes, der beim
Lernvorgang gültig sein soll. Mehrere Parameter können wahlweise durch ein
Komma wie bei der Variablenübergabe beim Prozeduraufruf oder durch ein
Semikolon wie bei der Prozedurdeklaration getrennt werden. ITG-PASCAL erkennt
aus dem Wert der Konstanten ihren Typ. Deshalb ist es wichtig, bei Parametern,
die vom Typ REAL sein sollen, eine REAL-Variable mit Dezimalpunkt und bei
STRING-Variablen eine Zeichenkette mit mindestens zwei Zeichen zu verwenden, da
sonst die Parameter als INTEGER- bzw. als CHAR-Variable angenommen werden.
Beispiele :
Lerne Quadrat(Seitenlänge=100);
wird zu
PROCEDURE Quadrat(Seitenlänge:INTEGER);
Lerne Quadrat(Seitenlänge=100.0);
wird zu
PROCEDURE Quadrat(Seitenlänge:REAL);
Lerne Quadrat(x=100,y=50,Seitenlänge=30.0);
oder
Lerne Quadrat(x=100;y=50;Seitenlänge=30.0);
werden zu
PROCEDURE Quadrat(x:INTEGER;y:INTEGER;Seitenlänge:REAL);
Der Direktmodus wird durch Drücken der ESC-Taste verlassen.
Mit den Cursortasten kann die Eingabezeile innerhalb der schon vorhandenen
Anweisungszeilen aufwärts oder abwärts verschoben werden. Auf diese Weise
können schon einmal ausgeführte Anweisungen auf einfache Art wiederholt werden.
Die Funktionstaste F1 ruft das Hilfesystem auf.
3.4 Igel-Grafik (neues Programm)
Für diesen Punkt gilt das gleiche wie für "Direkt-Modus (Text)" mit dem
einzigen Unterschied, daß jetzt zusätzlich alle Anweisungen im Grafikmodus
(Igel-Grafik und andere Grafik) ausgeführt werden können, die keinerlei
Deklarationen benötigen.
3.5 Igel-Grafik fortsetzen
Dieser Menüpunkt unterscheidet sich vom vorhergehenden dadurch, daß keine
Abfragen erfolgen, ob die Eingaben im Editor mitgeschrieben werden sollen.
Außerdem wird das Programm, das sich im Editor befindet, ausgeführt. Nach der
letzten Anweisung wartet ITG-PASCAL im Eingabefenster auf weitere Anweisungen,
#FF
die dann ans das Hauptprogramm angehängt werden oder als Prozedur-Deklaration
eingefügt werden. Sonst gilt das gleiche wie unter den beiden vorhergehenden
Menüpunkten.
3.6 PRG-File erzeugen
Wie schon unter 3.1 beschrieben erzeugt ITG-PASCAL keine direkt ausführbaren
Programme in Maschinensprache. Ohne Quelltext ausführbare Programme werden so
erzeugt, daß eine Batchdatei PROGNAME.BAT und eine pCode-Datei PROGNAME.PRG mit
allen nötigen Tabellen erzeugt werden. PROGNAME.EXE startet den Interpreterkern
RUN.EXE und teilt ihm mit, daß PROGNAME.PRG ausgeführt werden soll. Der pCode
wird dann wie auch in der Entwicklungsumgebung interpretierend ausgeführt.
3.7 PRG-File starten
Programme, die als PRG-Datei vorliegen, können hier aus der
Entwicklungsumgebung gestartet werden. Dazu muß der Quelltext des Programms
nicht vorliegen.
#FF
4. DEBUG
4.1 Einzelschrittmodus
Der Einzelschrittmodus dient dem Testen kleinerer Programme. Bei größeren
Programmen ist es sinnvoll, die Anweisungen "EinzelschrittEin" und
"EinzelschrittAus" zu verwenden, weil das Programm dann mit normaler
Geschwindigkeit bis zum Auftreffen auf die Anweisung "EinzelschrittEin"
ausgeführt wird.
Der Bildschirm wird in zwei Bereiche unterteilt : in dem oberen wird die Aus-
und Eingabe des Programms angezeigt, sofern sie in dem Ausschnitt dieses
Fensters stattfindet. In dem unteren wird der Quelltext der jeweiligen
Programmzeile und der vorangegangenen angezeigt.
Nach der Abarbeitung einer Programmzeile, wartet ITG-PASCAL bis zum Drücken
einer Taste, um den Ablauf fortzusetzen.
F2 : Es wird das Breakpoint-Menü aufgerufen, aus dem heraus Variableninhalte
angesehen und verändert werden können.
ESC : Die ESC-Taste bricht die Programmausführung ab.
Leertaste oder Returntaste : Die nächste Programmzeile wird abgearbeitet.
#FF
Interna
ITG-Pascal ist zum größten Teil Turbo-Pascal-kompatibel (Version 4.0 - 6.0),
enthält aber Einschränkungen und viele Erweiterungen, die Schülern das
Programmieren und Fehlersuchen erleichtern.
Bezeichner aus Standard-Pascal oder aus Turbo-Pascal tragen die üblichen Namen,
Erweiterungen sind mit deutschen Namen versehen. Dabei sind auch die deutschen
Sonderzeichen (ä,ö,ü,Ä,Ö,Ü,ß) zugelassen.
ITG-Pascal besteht aus einem Interpreter, mit dem ein Teil der
Pascal-Anweisungen im Grafik- und im Textmodus direkt ausgeführt werden kann
und einem Compiler / Interpreter, der Pascal-Programme in einen Pseudo-Code
(p-Code) übersetzt und durch Interpretation des p-Codes ausführt. Es wird kein
Maschinencode erzeugt.
Alle Anweisungen, die im Direktmodus ausgeführt werden, können auf Wunsch im
Editor mitprotokolliert werden. Dabei werden sie automatisch zu einem
lauffähigen Programm ergänzt, das verändert oder ergänzt, gestartet und
abgespeichert werden kann.
Koordinatensysteme
ITG-Pascal enthält in der vorliegenden Version vier verschiedene
Koordinaten-Systeme:
1) den Textschirm mit 1 ≤ x ≤ 80 und 1 ≤ y ≤ 25, wobei der linke obere
Eckpunkt
die Koordinaten x = 1 und y = 1 hat.
2) die Standardgrafik mit -320 ≤ x ≤ 320 und yMin ≤ y ≤ yMax, wobei yMin und
yMax von der Grafikkarte abhängen, wie unter GetMaxY beschrieben.
Dabei gilt : yMin = - GetMaxY / 2
yMax = GetMaxY / 2.
Der Ursprung des Koordinatensystems liegt in der Mitte des Bildschirms. Die
positive y-Achse zeigt nach oben!
3) die Igelgrafik mit -320 ≤ x ≤ 320 und -240 ≤ y ≤ 240 für alle Grafikkarten.
Gegebenenfalls erfolgt eine Korrektur in y-Richtung. Auch hier liegt der Ursprung
des Koordinatensystems in der Mitte des Bildschirms. Die positive y-Achse zeigt
nach oben! Winkel werden zur positiven x-Achse im mathematisch positiven
Umlaufsinn (entgegen dem Urzeigersinn) gemessen.
4) die Weltgrafik mit beliebig wählbaren Grenzen. Die Einteilung der
Koordinatenachsen erfolgt so, daß die angegebenen Grenzen innerhalb des aktiven
Grafikfensters liegen und ein Raster mit jeweils gleichen Abständen auf jeder der
Achsen entsteht. Dadurch ist der sichtbare Teil des Koordinatensystems im
allgemeinen etwas größer als der angegebene Ausschnitt. Innerhalb der Weltgrafik
werden die Weltkoordinaten automatisch auf die Koordinaten des Grafikfensters
auf dem Bildschirm umgerechnet.
Debugger
Debug-Anweisungen werden im Quelltext eingefügt (s. auch Debugger), wobei die
Informationen nach jeder Quelltextzeile auf dem Bildschirm ausgegeben werden
und zusätzlich in einem zweiten Editor-Fenster mitprotokolliert werden, damit
sie später in Ruhe angesehen werden können.
#FF
Synonyme
Aufbau der Synonym-Datei ITG.SYN :
Kommentare werden wie in Pascal eingefügt. Das erste Wort gibt den alten
Bezeichner, das zweite den neuen zusätzlichen an. Pro Zeile ist nur ein
Wortpaar zugelassen. Kommentare dürfen nie in einer Zeile VOR Bezeichnern
stehen. Kommentar-Klammern dürfen nicht in Kommentaren stehen.
Beispiele :
Achtung : Es handelt sich hier nur um Beispiele! Die gültigen Synonyme
entnehmen Sie bitte Ihrer Datei ITG.SYN!
INTEGER GANZZAHL (* Hier ist ein Kommentar zulässig *)
REAL KOMMAZAHL
INC ERHÖHE
REPEAT WIEDERHOLE
UNTIL BIS
Datenstrukturen
Alle globalen und lokalen Variablen werden in ITG-PASCAL auf dem Stack in einem
varianten Record abgelegt. Es gibt kein spezielles Datensegment wie in
TURBO-PASCAL. Durch die Art der Speicherung belegt jeder einfache Datentyp
einen Speicherplatz auf dem Stack. Das größtmögliche Element ist eine
REAL-Variable, die 10 Byte als Typ EXTENDED benötigt, dazu kommt ein Byte für
den Variablentyp. Ein Speicherplatz belegt also 11 Byte. STRING- und
Dateivariablen werden über Zeiger auf dem Stack adressiert. Jede
STRING-Variable belegt außer dem Speicherplatz auf dem Stack nur soviel Platz,
wie unbedingt nötig ist. Die Verwaltung erfolgt dynamisch.
Um Schülern die Programmierung zu vereinfachen, wird in ITG-PASCAL nicht
zwischen den Typen BYTE, INTEGER, WORD und LONGINT unterschieden. Alle vier
Typen werden intern im LONGINT-Format verarbeitet. Ebenso wird nicht zwischen
REAL, DOUBLE und EXTENDED unterschieden. Die Bearbeitung erfolgt immer im
Format EXTENDED.
In Dateien werden die Daten in der in TURBO-PASCAL üblichen Form gespeichert.
Zum Datenaustausch mit TURBO-PASCAL muß lediglich darauf geachtet werden, daß
in der Deklaration der Datenstrukturen keine Variablen der Typen BYTE, INTEGER,
WORD, REAL und DOUBLE enthalten sind. Sie sind jeweils durch LONGINT bzw.
EXTENDED zu ersetzen! Ansonsten gelten für Zugriffe auf typisierte und
sequentielle Dateien und Textdateien dieselben Regeln wie in TURBO-PASCAL.
In READ-Anweisungen für Tastatureingaben wird auf dem Bildschirm ein
Editor-Fenster geöffnet, in dem der derzeitige Inhalt der Variablen editiert
bzw. neu eingegeben wird. Anders als in TURBO-PASCAL können die einzulesenden
Variableninhalte vor dem Aufruf mit Werten vorbelegt werden, weil die
Parameterübergabe bei READ hin und zurück erfolgt! Für REAL-Variablen kann auch
ein Term eingegeben werden, der Konstanten und die im Befehlsumfang
beschriebenen mathematischen Funktionen enthält.
#FF
Erweiterungen
Gegenüber TURBO-PASCAL sind folgende Erweiterungen implemeniert:
Initialisierung aller Variablen (auch lokaler) mit Null
zusätzlicher Direkt-(Interpreter-)Modus
strenge, nicht abschaltbare Indexprüfung
Protokoll der Ein- und Ausgabe in einem zweiten Editorfenster
Post-Mortem-Dump mit Protokoll in einem zweiten Editorfenster
vereinfachte Standard-Grafik
Igel-(Turtle-)Grafik
Weltkoordinatensysteme
Fenstertechnik
Menütechnik
erweiterte READ-Anweisung
- mit Editor für alle Tastatureingaben
- mit Termeingaben für REAL-Variablen
- mit der Möglichkeit, ARRAYs und RECORDs einzulesen
- mit der Möglichkeit, die Eingabe auf Diskette umzulenken
erweiterte Write-Anweisung
- mit der Möglichkeit, ARRAYs und RECORDs auszugeben
- mit der Möglichkeit, die Ausgabe auf den Drucker umzulenken
- mit der Möglichkeit, die Ausgabe auf Diskette umzulenken
Eingabemasken
Auswahlfenster
vereinfachte Diskettenzugriffe
Demonstration von Multitasking und Mehrprozessorbetrieb durch parallele Prozesse
- Prozeßwechsel
- Prozeßsynchronisation
Hardware-Voraussetzungen
Hauptspeicher : 640kB
Grafikkarte : CGA, Herkules, EGA oder VGA
automatische Erkennung
Datenspeicher : 1 Laufwerk mit 360kB knapp ausreichend
besser : 2 Laufwerke mit 360kB oder 1 Laufwerk mit
höherer Kapazität oder 1 Festplatte oder Netzwerk mit
wenigstens 1 Festplatte
#FF
Tabellen-Größen
Die folgenden Werte sind Maximalwerte.
Anzahl der Programmzeilen im Editor : 2000
Anzahl der Zeichen pro Bezeichner : 30
Anzahl der Record-Deklarartionen : 30
Anzahl der Array-Deklarationen : 30
Anzahl der REAL-Konstanten : 50
Anzahl der Fallunterscheidungen für CASE-Strukturen : 30
maximale Schachtelungstiefe für Prozedur-Deklarationen : 7
Größe des Programmcodes : 4096
Größe des Stacks in Speicherplätzen : 5888
Anzahl der STRING-Variablen : 1000
Anzahl der Dateien : 20
Anzahl der Eingabefelder für eine Dateneingabe : 20
Anzahl der Auswahlelemente für eine Datenauswahl : 100
Anzahl der maximal geöffneten Fenster : 20
#FF
Der Befehlsumfang
Operatoren
+ Addition 2 + 5 = 7
- Subtraktion 5 - 2 = 3
* Multiplikation 2 * 5 = 10
/ Division 2 / 5 = 0.4
DIV Ganzzahl-Division 7 DIV 5 = 1 (= 1 Rest 2)
MOD Divisionsrest 7 MOD 5 = 2 (= 1 Rest 2)
^ Potenz 2 ^ 3 = 8 (= 2 * 2 * 2)
Standard-Bezeichner
AND ARRAY BEGIN CASE CONST
DISPOSE DIV DO DOWNTO ELSE
END EXIT FILE FOR FORWARD
FUNCTION GOTO HALT IF IN
INCLUDE LABEL MOD NEW NIL
NOT OF OR PACKED PROCEDURE
PROGRAM RECORD REPEAT SET THEN
TO TYPE UNTIL USES VAR WHILE
WITH
Die Bedeutung der Standard-Bezeichner kann jedem PASCAL-Lehrbuch entnommen
werden.
DISPOSE
DISPOSE gibt den Speicherplatz, den eine Zeigervariable (dynamische Variable)
belegte, wieder frei. Der Wert des Zeigers ist anschließend NIL.
Beispiel :
NEW(Zeigertyp); Platz für eine Zeigervariable auf dem Heap anfordern.
. Erst dann dürfen Zuweisungen vorgenommen werden.
DISPOSE(Zeigertyp); Wenn der Inhalt der Zeigervariablen nicht mehr
benötigt wird, wird der Platz auf dem Heap wieder
freigegeben.
INCLUDE
Mit der Anweisung INCLUDE [Pfad\]Dateiname kann im Deklarationsteil eines
Programms oder einer Prozedur / Funktion der Quelltext einer Datei in das
Programm an der vorgesehenen Stelle eingebunden werden, ohne daß der Quelltext
der Datei im Editor vorhanden ist. Die Pfadangabe kann entfallen, wenn die
Datei im aktuellen Verzeichnis zu finden ist. Es kann auch die Syntax von
TURBO-PASCAL mit {$I [Pfad\]Dateiname} verwendet werden.
Beispiel :
INCLUDE C:\ITG\BSP\PRG1.INC, C:\ITG\BSP\PRG2.INC;
oder
{$I C:\ITG\BSP\PRG1.INC}
#FF
{$I C:\ITG\BSP\PRG2.INC}
NEW
NEW fordert Speicherplatz auf dem Heap für eine Zeigervariable an.
Beispiel :
NEW(Zeigertyp); Platz für eine Zeigervariable auf dem Heap anfordern.
. Erst dann dürfen Zuweisungen vorgenommen werden.
DISPOSE(Zeigertyp); Wenn der Inhalt der Zeigervariablen nicht mehr
benötigt wird, wird der Platz auf dem Heap wieder
freigegeben.
#FF
Konstanten
Blau CR Dunkelblau Dunkelgelb Dunkelgrau
Dunkelgrün Dunkelkobalt Dunkelrot Dunkelviolett ESC
Euler FALSE Gelb Grau Grün
Kobalt LST Pi Rot Schwarz
StrgBildAb2 StrgBildAuf2 TRUE Violett Weiß
Blau
Blau ist eine INTEGER-Konstante, die auf VGA-Karten blaue Schrift oder blaue
Grafik erzeugt. Ihr Zahlenwert ist 9.
CR
CR ist eine CHAR-Konstante, deren Wert beim Drücken der RETURN-Taste an das
Programm übergeben wird.
Dunkelblau
Dunkelblau ist eine INTEGER-Konstante, die auf VGA-Karten blaue Schrift oder
dunkelblaue Grafik erzeugt. Ihr Zahlenwert ist 1.
Dunkelgelb
Dunkelgelb ist eine INTEGER-Konstante, die auf VGA-Karten gelbe Schrift oder
dunkelgelbe Grafik erzeugt. Ihr Zahlenwert ist 6.
Dunkelgrau
Dunkelgrau ist eine INTEGER-Konstante, die auf VGA-Karten graue Schrift oder
dunkelgraue Grafik erzeugt. Ihr Zahlenwert ist 8.
Dunkelgrün
Dunkelgrün ist eine INTEGER-Konstante, die auf VGA-Karten grüne Schrift oder
dunkelgrüne Grafik erzeugt. Ihr Zahlenwert ist 2.
Dunkelkobalt
Dunkelkobalt ist eine INTEGER-Konstante, die auf VGA-Karten blaue Schrift oder
dunkelblaue Grafik erzeugt. Ihr Zahlenwert ist 3.
Dunkelrot
Dunkelrot ist eine INTEGER-Konstante, die auf VGA-Karten rote Schrift oder
dunkelrote Grafik erzeugt. Ihr Zahlenwert ist 4.
#FF
Dunkelviolett
Dunkelviolett ist eine INTEGER-Konstante, die auf VGA-Karten violette Schrift
oder dunkelviolette Grafik erzeugt. Ihr Zahlenwert ist 5.
ESC
ESC ist eine CHAR-Konstante, deren Wert beim Drücken der ESC-Taste an das
Programm übergeben wird.
Euler
Die Konstante Euler ist die Eulersche Zahl e=2.718281828.. . Die Abkürzung e
kann für die Eulersche Zahl nicht verwendet werden, weil e in PASCAL für die
Exponentialschreibweise einer reellen Zahl verwendet wird (z.B. 5.4e-3).
FALSE
FALSE (Falsch) ist der Wahrheitswert einer Aussage. FALSE kann nur einer
Variablen des Typs BOOLEAN zugeordnet werden.
Beispiel :
VAR
IstWahr : BOOLEAN;
BEGIN
IstWahr := FALSE;
IF IstWahr = FALSE THEN BEGIN Für IstWahr = FALSE kann auch NOT
TueDasEine; IstWahr geschrieben werden.
END
ELSE BEGIN
TueDasAndere;
END;
END;
Gelb
Gelb ist eine INTEGER-Konstante, die auf VGA-Karten gelbe Schrift oder gelbe
Grafik erzeugt. Ihr Zahlenwert ist 14.
Grau
Grau ist eine INTEGER-Konstante, die auf VGA-Karten graue Schrift oder graue
Grafik erzeugt. Ihr Zahlenwert ist 7.
Auf CGA- und Herkules-Karten wird das erreicht, indem niemals zwei waagerecht
oder senkrecht nebeneinanderliegende Punkte in derselben Farbe gezeichnet
werden. Ein Punkt hat jeweils die Farbe Weiß und seine vier Nachbarn haben die
Farbe Schwarz.
#FF
Grün
Grün ist eine INTEGER-Konstante, die auf VGA-Karten grüne Schrift oder grüne
Grafik erzeugt. Ihr Zahlenwert ist 10.
Kobalt
Kobalt ist eine INTEGER-Konstante, die auf VGA-Karten blaue Schrift oder blaue
Grafik erzeugt. Ihr Zahlenwert ist 11.
LST
LST ist eine Konstante des Dateityps TEXT. Sie dient dazu, WRITE-Anweisungen
auf den Drucker umzulenken.
In ITG-PASCAL können stattdessen auch die Anweisungen AusgabeAufDrucker und
AusgabeAufBildschirm zur Umlenkung der Ausgabe verwendet werden. Dadurch können
im Unterschied zu TURBO-PASCAL mit derselben Anweisungsfolge Informationen
sowohl auf den Bildschirm als auch auf den Drucker ausgegeben werden.
Beispiele :
TURBO-PASCAL und ITG-PASCAL :
WriteLn(LST, 'Dieser Text erscheint auf dem Drucker.');
WriteLn('Dieser Text erscheint auf dem Bildschirm.');
alternativ in ITG-PASCAL :
AusgabeAufDrucker;
WriteLn("Dieser Text erscheint auf dem Drucker.");
AusgabeAufBildschirm;
WriteLn("Dieser Text erscheint auf dem Bildschirm.");
Pi
Die Konstante PI ist die Kreiszahl π=3.141592654.. .
Rot
Rot ist eine INTEGER-Konstante, die auf VGA-Karten rote Schrift oder rote
Grafik erzeugt. Ihr Zahlenwert ist 12.
Schwarz
Schwarz ist eine INTEGER-Konstante, die auf CGA-, Herkules- und VGA-Karten
schwarze Schrift oder schwarze Grafik erzeugt. Ihr Zahlenwert ist 0.
Strg-Bild-Ab2
StrgBildAb2 ist eine CHAR-Konstante, deren Wert beim Drücken der
Tastenkombination Strg-Bild-Ab (Ctrl-PgDn) als zweites Zeichen an das Programm
übergeben wird. Mit dieser Tastenkombination kann die Prozedur LiesEingaben
beendet werden, um auf den folgenden Datensatz zu wechseln.
#FF
Beispiel:
TYPE
EinEintrag = RECORD
Nachname, Vorname, Ort, Straße : STRING[20];
Plz, HausNr, Vorwahl, TelNr : LONGINT;
END;
CONST
Anzahl = 3;
VAR
TelefonListe : ARRAY[1..Anzahl] OF EinEintrag;
n : INTEGER;
BEGIN
n := 1;
REPEAT
WITH TelefonListe[n] DO BEGIN
EingabeFeld( 1, 3, "Name : ", Nachname);
EingabeFeld( 1, 4, "Vorname : ", Vorname);
EingabeFeld( 1, 5, "Plz : ", Plz);
EingabeFeld(25, 5, "Ort : ", Ort);
EingabeFeld( 1, 6, "Straße : ", Straße);
EingabeFeld(35, 6, "Nr. : ", HausNr);
EingabeFeld( 1, 7, "Vorwahl : ", Vorwahl);
EingabeFeld(30, 7, "Telefon-Nr : ", TelNr);
LiesEingaben;
END;
CASE LetzteTaste OF
CR, StrgBildAb2 : nächsten Datensatz bearbeiten
n := n + 1;
ESC :
n := Anzahl + 1;
StrgBildAuf2 : vorigen Datensatz noch einmal
IF n > 1 THEN BEGIN bearbeiten
n := n - 1;
END;
END;
UNTIL n > Anzahl;
END;
StrgBildAuf2
StrgBildAuf2 ist eine CHAR-Konstante, deren Wert beim Drücken der
Tastenkombination Strg-Bild-Auf (Ctrl-PgUp) als zweites Zeichen an das Programm
übergeben wird. Mit dieser Tastenkombination kann die Prozedur LiesEingaben
beendet werden, um auf den vorangegangenen Datensatz zu wechseln.
Beispiel:
TYPE
EinEintrag = RECORD
Nachname, Vorname, Ort, Straße : STRING[20];
Plz, HausNr, Vorwahl, TelNr : LONGINT;
END;
#FF
CONST
Anzahl = 3;
VAR
TelefonListe : ARRAY[1..Anzahl] OF EinEintrag;
n : INTEGER;
BEGIN
n := 1;
REPEAT
WITH TelefonListe[n] DO BEGIN
EingabeFeld( 1, 3, "Name : ", Nachname);
EingabeFeld( 1, 4, "Vorname : ", Vorname);
EingabeFeld( 1, 5, "Plz : ", Plz);
EingabeFeld(25, 5, "Ort : ", Ort);
EingabeFeld( 1, 6, "Straße : ", Straße);
EingabeFeld(35, 6, "Nr. : ", HausNr);
EingabeFeld( 1, 7, "Vorwahl : ", Vorwahl);
EingabeFeld(30, 7, "Telefon-Nr : ", TelNr);
LiesEingaben;
END;
CASE LetzteTaste OF
CR, StrgBildAb2 : nächsten Datensatz bearbeiten
n := n + 1;
ESC :
n := Anzahl + 1;
StrgBildAuf2 : vorigen Datensatz noch einmal
IF n > 1 THEN BEGIN bearbeiten
n := n - 1;
END;
END;
UNTIL n > Anzahl;
END;
TRUE
TRUE (Wahr) ist der Wahrheitswert einer Aussage. TRUE kann nur einer Variablen
des Typs BOOLEAN zugeordnet werden.
Beispiel :
VAR
IstWahr : BOOLEAN;
BEGIN
IstWahr := TRUE;
IF IstWahr = TRUE THEN BEGIN Für IstWahr = TRUE kann auch
TueDasEine; IstWahr geschrieben werden.
END
ELSE BEGIN
TueDasAndere;
END;
END;
#FF
Violett
Violett ist eine INTEGER-Konstante, die auf VGA-Karten violette Schrift oder
violette Grafik erzeugt. Ihr Zahlenwert ist 13.
Weiß
Weiß ist eine INTEGER-Konstante, die auf CGA-, Herkules- und VGA-Karten weiße
Schrift oder weiße Grafik erzeugt. Ihr Zahlenwert ist 15.
#FF
Typen
CHAR STRING BOOLEAN BYTE INTEGER
WORD LONGINT REAL DOUBLE EXTENDED
FILE TEXT SIGNAL
ITG-PASCAL unterscheidet nur 8 verschiedene Datentypen voneinander.
1) CHAR : einzelner Buchstabe
2) STRING : Zeichenkette, eine Aneinanderfügung von Zeichen und Buchstaben
3) BOOLEAN : Aussagetyp, WAHR oder FALSCH
4) LONGINT : ganze Zahlen im Bereich von -2147483648 bis 2147483647
5) EXTENDED : Dezimalzahlen mit einem Betrag von 3.4*10-4932 bis 1.1*104932
6) FILE : Datei-Variable beliebigen Typs
7) TEXT : Datei-Variable für Strings (Zeichenketten)
8) SIGNAL : zur Synchronisation paralleler Prozesse
Aufzählungstypen
Aufzählungstypen sind vollständig implementiert. Zusätzlich ist es möglich, die
READ- und WRITE-Anweisungen direkt auf eine Variable eines Aufzählungstyps
anzuwenden. Dabei kann alternativ zur Ordnung der Variablen auch der Inhalt der
Variablen direkt verwendet werden.
Beispiel :
TYPE
Arbeitstage = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag);
VAR
Arbeitstag : Arbeitstage;
.
.
Write("Welcher Arbeitstag ?");
ReadLn(Arbeitstag); Hier kann für Mittwoch sowohl
"Mittwoch" als auch "2" einge-
geben werden. Montag hat die
Ordnung Null;
Write("Der eingegebene Arbeitstag war :");
WriteLn(Arbeitstag); ergibt "MITTWOCH"
Write("Er steht an ");
Write(ORD(Arbeitstag)+1); ergibt 3 ( = 2 + 1 )
WriteLn(". Stelle in der Deklaration");
.
.
CHAR
CHAR : einzelner Buchstabe oder einzelnes Zeichen
Beispiel :
VAR
c : CHAR; Deklaration
BEGIN
#FF
c := "b"; erlaubte Zuweisung, c hat jetzt den Wert "b"
c := "ABC"; falsch! c kann nur ein Zeichen / einen Buchstaben aufnehmen
c := 65; falsch! c kann keine Zahlenwerte annehmen
c := CHR(65); c wird der Wert "A" zugewiesen
. ( 65. Zeichen der ASCII-Tabelle )
END;
STRING
STRING : Zeichenkette, eine Aneinanderfügung von Zeichen und Buchstaben. Bei
der Deklaration sollte die benötigte Zeichenzahl angegeben werden, weil alle
READ-Anweisungen ein Eingabefenster entsprechend der Deklarationslänge öffnen.
ITG-PASCAL verwaltet STRINGS dynamisch, sodaß immer nur der tatsächlich
benötigte Speicherplatz belegt wird.
Deklarations-Beispiele:
s255 : STRING; 255 Zeichen
s10 : STRING[10]; 10 Zeichen
s : STRING[Max]; mit 1 <= Max <= 255
BOOLEAN
BOOLEAN : Aussagetyp, WAHR oder FALSCH
BYTE, INTEGER, WORD, LONGINT
LONGINT : ganze Zahlen im Bereich von -2147483648 bis 2147483647. Die
Datentypen BYTE, INTEGER und WORD werden intern als LONGINT verwaltet und
können deshalb Werte in dem selben Bereich wie LONGINT-Variablen annehmen.
REAL, DOUBLE, EXTENDED
EXTENDED : Dezimalzahlen mit einem Betrag von 3.4*10-4932 bis 1.1*104932 mit
einer Genauigkeit von 19 bis 20 Stellen. Die Datentypen REAL und werden intern
im Datenformat EXTENDED verwaltet und können deshalb Werte in dem selben
Bereich wie EXTENDED-Variablen annehmen.
FILE
FILE : Datei-Variable beliebigen Typs. Im Unterschied zu TURBO-PASCAL können
einer Datei-Variablen beliebige Datentypen außer FILE- und TEXT-Typen
zugeordnet werden, ohne daß eine spezielle Deklaration erfolgen muß. Auf diese
Weise können in einer Datei beliebig viele Variablen nacheinander abgespeichert
werden. Die Operationen READ und WRITE in ITG-PASCAL entsprechen dann BLOCKREAD
UND BLOCKWRITE in TURBO-PASCAL. Typisierte Dateien werden wie in TURBO-PASCAL
behandelt.
TEXT
TEXT : Datei-Variable für Strings (Zeichenketten). In ITG-PASCAL können nur die
Anweisungen READLN (TextDatei, Zeichenkette) und WRITELN (TextDatei,
#FF
Zeichenkette) verwendet werden. READ, WRITE und Char-Variablen dürfen nicht
verwendet werden.
SIGNAL
SIGNAL : Synchronisation von Prozessen. Wenn zwei Prozesse, die gleichzeitig
ausgeführt werden, auf Zwischenergebnisse des jeweils anderen Prozesses
angewiesen sind, kann einer der Prozesse durch WarteAuf-Signal(SignalVar) zum
Warten veranlaßt werden, bis der andere Prozeß durch SendeSignal(SignalVar)
mitteilt, daß die Zwischenergebnisse bereitgestellt sind.
Zeiger-Variablen
Als Zeigertypen sind nur ARRAYs und RECORDs zugelassen. Speicherplatz wird mit
NEW angefordert und mit DISPOSE freigegeben. Vor einem Zugriff auf eine
Zeigervariable erfolgt immer eine Prüfung, ob bereits Speicherplatz angefordert
wurde. Wenn das nicht der Fall war, wird das Programm mit einer Fehlermeldung
abgebrochen. ITG-PASCAL speichert alle über NEW zurückgegebenen Zeigeradressen
in einer Tabelle, damit lokale Zeigervariablen beim Verlassen einer Prozedur
und globale Zeigervariablen bei der Beendigung des Programm wieder freigegeben
werden können, falls dieses vorher vergessen wurde. Dazu stehen in der
vorliegenden Version 500 Plätze in ITG.EXE und 1000 Plätze in ITG-OVR.EXE zur
Verfügung.
Auch der Inhalt von Zeigervariablen kann über READ eingelesen werden, soweit
dieses sinnvoll ist, und über WRITE ausgegeben werden. WRITE ermöglicht es
damit, den Inhalt einer verketteten Liste bzw. eines Baumes mit einer Anweisung
auszugeben. Bei einer vorwärts und rückwärts verketteten Liste führt es auf
Grund der Datenstruktur immer zu einer endlosen Ausgabe. Die WRITE-Anweisung
kann dann mit Strg-B unterbrochen werden.
#FF
Igel-Grafik
DreheAuf GeheNach Hinten IgelWinkel
IgelZeigen LinkerBogen Links Maßstab
MitIgel MitStift OhneIgel OhneStift
RechterBogen Rechts StiftFarbe Ursprung
Vorne WoIgelX WoIgelY
DreheAuf
DreheAuf richtet den Igel auf einen absoluten Winkel aus, der von der positiven
x-Achse aus gegen den Uhrzeigersinn im mathematisch positiven Umlaufsinn in
Winkelgrad gemessen wird.
Deklaration:
PROCEDURE DreheAuf(AbsoluterWinkel : REAL);
Beispiel:
DreheAuf(90); Der Igel zeigt nach oben.
DreheAuf(180); Der Igel zeigt nach links. (Drehung um 180° entgegen dem
Uhrzeigersinn von der positiven x-Achse aus)
DreheAuf(-180); Auch hier zeigt der Igel nach links. (Drehung um 180° im
Uhrzeigersinn von der positiven x-Achse aus)
GeheNach
Der Igel wird in seinem Koordinatensystem, dessen Ursprung der Mittelpunkt des
Grafikfensters ist, dessen positive x-Achse nach rechts und dessen positive
y-Achse nach oben zeigt, zu den angegebenen Koordinaten bewegt, ohne daß er
dabei zeichnet. Die Maximalwerte sind in x-Richtung -320 und 320 und in
y-Richtung -240 und 240 für alle Grafikkarten. Es gibt zwei weitere
Koordinatensysteme für Grafik ohne Igel (s. auch MoveTo, WeltGeheNach) und für
den Textcursor (s. auch GotoXY).
Deklaration:
PROCEDURE GeheNach(xPos, yPos : INTEGER);
Beispiel:
GeheNach(0, 0); bewegt den Igel auf den Ursprung seines Koordinatensystems.
GeheNach(200, 100); bewegt den Igel vom Ursprung seines Koordinaten-
systems aus gesehen um 200 Schritte nach rechts und
um 100 nach oben.
Hinten
Durch die Anweisung Hinten(x) wird der Igel x Schritte rückwärts bewegt. Wenn
die Bewegung mit Stift erfolgt, ist seine Spur anschließend sichtbar.
Deklaration:
PROCEDURE Hinten(Schritte : REAL);
Beispiel:
Hinten(50); bewegt den Igel 50 Schritte rückwärts.
#FF
IgelWinkel
Die Funktion IgelWinkel liefert den Winkel zwischen der Bewegungsrichtung
vorwärts und der positiven x-Achse im mathematisch positiven Umaufsinn
gemessen.
Deklaration:
FUNCTION IgelWinkel : REAL;
Beispiel:
DreheAuf(100);
Write(IgelWinkel); druckt den Wert 100 für den Winkel aus.
IgelZeigen
Die Funktion IgelZeigen ergibt den Wert wahr (TRUE), wenn der Igel nach jeder
Igelbewegung gezeichnet werden soll. Andernfalls ergibt sie den Wert falsch
(FALSE).
Deklaration:
FUNCTION IgelZeigen : BOOLEAN;
Beispiel:
MitIgel;
Write(IgelZeigen); druckt TRUE,
OhneIgel;
Write(IgelZeigen); druckt FALSE aus.
LinkerBogen
Mit LinkerBogen beschreibt der Igel einen Bogen von seiner augenblicklichen
Position und Richtung aus nach links und hinterläßt dabei eine Spur, wenn die
Bewegung mit Stift erfolgt.
Deklaration:
PROCEDURE LinkerBogen(Radius, Winkel : REAL);
Beispiel:
LinkerBogen(100, 45); Der Igel beschreibt einen Bogen nach links mit einem
Radius von 100 Schritten und einem Winkel von 45°.
Links
Links(x) veranlaßt den Igel, sich aus seiner augenblick-lichen Richtung um x
Grad nach links zu drehen.
Deklaration:
PROCEDURE Links(Winkel : REAL);
Beispiel:
DreheAuf(0); Der Igel zeigt nach rechts.
Links(90); Der Igel zeigt nach oben.
#FF
Maßstab
Mit der Anweisung Maßstab wird festgelegt, mit welchem Faktor die in GeheNach,
Vorne und Hinten übergebenen Werte multipliziert werden. Damit ist es z.B.
möglich, im Heft ein Dreieck zu konstruieren und den Igel dieses Dreieck auf
dem Bildschirm zeichnen zu lassen, ohne jede einzelne Strecke an die
Schrittzahl auf dem Bildschirm anzupassen.
Deklaration:
PROCEDURE Maßstab(MaßstabsFaktor : REAL);
Beispiel:
Maßstab(1);
Vorne(100); Igel 1*100 Schritte vorwärts bewegen
Maßstab(50);
Vorne(1.5); Igel um 1.5*50=75 Schritte vorwärts bewegen
MitIgel
Nach der Anweisung MitIgel ist der Igel sichtbar und wird jeweils nach einer
Bewegung neu gezeichnet bis die Anweisung OhneIgel ausgeführt wird. Durch die
Funktion IgelZeigen läßt sich feststellen, ob der Igel gezeigt wird.
Deklaration:
PROCEDURE MitIgel;
Beispiel:
MitIgel; Igel zeigen.
Vorne(100); Igel wegwischen, 100 Schritte vorwärts bewegen und neu
zeichnen.
OhneIgel; Igel wegwischen und nicht wieder neu zeichnen.
Vorne(100); Igel um 100 Schritte vorwärts bewegen, ohne ihn zu zeichnen.
Es ist nur seine Spur sichtbar.
MitStift
Durch MitStift wird festgelegt, daß die Spur des Igels gezeichnet werden soll.
Deklaration:
PROCEDURE MitStift;
Beispiel:
OhneIgel; Igel nicht zeigen.
MitStift; Stift absenken.
Vorne(100); Igel 100 Schritte vorwärts bewegen und seine Spur zeichnen.
OhneStift; Stift anheben.
Vorne(100); Der Igel hinterläßt keine Spur.
OhneIgel
Nach der Anweisung OhneIgel ist der Igel nicht sichtbar. Es wird aber seine
Spur gezeichnet, wenn die Bewegung mit Stift erfolgt. Durch die Funktion
IgelZeigen läßt sich feststellen, ob der Igel gezeigt wird.
#FF
Deklaration:
PROCEDURE OhneIgel;
Beispiel:
MitIgel; Igel zeigen.
Vorne(100); Igel wegwischen, 100 Schritte vorwärts bewegen und neu
zeichnen.
OhneIgel; Igel wegwischen und nicht wieder neu zeichnen.
Vorne(100); Igel um 100 Schritte vorwärts bewegen, ohne ihn zu zeichnen.
Es ist nur seine Spur sichtbar.
OhneStift
Durch OhneStift wird festgelegt, daß die Spur des Igels nicht gezeichnet werden
soll.
Deklaration:
PROCEDURE OhneStift;
Beispiel:
OhneIgel; Igel nicht zeigen.
MitStift; Stift absenken.
Vorne(100); Igel 100 Schritte vorwärts bewegen und seine Spur zeichnen.
OhneStift; Stift anheben.
Vorne(100); Der Igel hinterläßt keine Spur.
RechterBogen
Mit RechterBogen beschreibt der Igel einen Bogen von seiner augenblicklichen
Position und Richtung aus nach rechts und hinterläßt dabei eine Spur, wenn die
Bewegung mit Stift erfolgt.
Deklaration:
PROCEDURE RechterBogen(Radius, Winkel : REAL);
Beispiel:
RechterBogen(100, 45); Der Igel beschreibt einen Bogen nach rechts mit einem
Radius von 100 Schritten und einem Winkel von 45°.
Rechts
Rechts(x) veranlaßt den Igel, sich aus seiner augenblick-lichen Richtung um x
Grad nach rechts zu drehen.
Deklaration:
PROCEDURE Rechts(Winkel : REAL);
Beispiel:
DreheAuf(0); Der Igel zeigt nach rechts.
Rechts(90); Der Igel zeigt nach unten.
#FF
Ursprung
Die Anweisung Ursprung entspricht der Anweisung GeheNach(0,0) und bewegt den
Igel zum Ursprung seines Koordinatensystems. Er zeigt dabei nach oben. Sein
Winkel zur positiven x-Achse beträgt dann 90°. Eine Beschreibung des
Koordinatensystems ist unter GeheNach zu finden.
Deklaration:
PROCEDURE Ursprung;
Beispiel:
Ursprung; plaziert den Igel mitten im Grafikfenster.
Vorne
Durch die Anweisung Vorne(x) wird der Igel x Schritte vorwärts bewegt. Wenn die
Bewegung mit Stift erfolgt, ist seine Spur anschließend sichtbar.
Deklaration:
PROCEDURE Vorne(Schritte : REAL);
Beispiel:
Vorne(50); bewegt den Igel 50 Schritte vorwärts.
WoIgelX
Durch die Funktion WoIgelX läßt sich die x-Koordinate des Aufenthaltsortes des
Igels in seinem Koordinatensystem feststellen.
Deklaration:
FUNCTION WoIgelX : INTEGER;
Beispiel:
GeheNach(200, 100);
Write(WoIgelX); druckt den Wert 200.
WoIgelY
Durch die Funktion WoIgelY läßt sich die y-Koordinate des Aufenthaltsortes des
Igels in seinem Koordinatensystem feststellen.
Deklaration:
FUNCTION WoIgelY : INTEGER;
Beispiel:
GeheNach(200, 100);
Write(WoIgelY); druckt den Wert 100.
#FF
Standard-Grafik
Circle GetMaxX GetMaxY GetX
GetY Line LineTo MoveTo
Circle
Circle zeichnet einen Kreis auf dem Bildschirm. Da bei CGA- und Hercules-Karten
der Abstand zweier benachbarter Bildpunkte in x- und in y-Richtung verschieden
ist, werden die y-Koordinaten mit einem Korrekturfaktor multipliziert. (s. auch
yKorrekturFaktor)
Deklaration:
PROCEDURE Circle(xm, ym, Radius);
Beispiel:
Circle(50, 100, 30); zeichnet einen Kreis mit dem Mittelpunkt M(50/100)
und dem Radius r=30, der in x-Richtung 30 Bildpunkten
entspricht.
GetMaxX
GetMaxX gibt die Anzahl der Bildpunkte minus eins in x-Richtung auf dem
Grafikschirm an. ITG-PASCAL verwendet für alle Grafikkarten einheitlich 640
Punkte in x-Richtung.
Deklaration:
FUNCTION GetMaxX : INTEGER;
Beispiel:
Write(GetMaxX); druckt 639=640-1 für alle Grafikkarten aus.
GetMaxY
GetMaxY gibt die Anzahl der Bildpunkte minus eins in y-Richtung auf dem
Grafikschirm an.
Deklaration:
FUNCTION GetMaxY : INTEGER;
Beispiel:
Write(GetMaxX); druckt
199=200-1 für CGA-Karten
347=348-1 für Herculeskarten
349=350-1 für EGA-Karten
479=480-1 für VGA-Karten
GetX
GetX liefert die x-Koordinate des Grafik-Cursors zurück.
Deklaration:
FUNCTION GetX : INTEGER;
#FF
Beispiel:
MoveTo(100, 50);
Write(GetX); druckt 100 aus.
LineTo(-200, 40);
Write(GetX); druckt -200 aus.
GetY
GetY liefert die y-Koordinate des Grafik-Cursors zurück.
Deklaration:
FUNCTION GetY : INTEGER;
Beispiel:
MoveTo(100, 50);
Write(GetY); druckt 50 aus.
LineTo(-200, 40);
Write(GetY); druckt 40 aus.
Line
Line(x1,y1,x2,y2) zeichnet eine Strecke zwischen zwei Punkten P1(x1/y1) und
P2(x2/y2) auf dem Grafikschirm. Der Ursprung des Koordinatensystems liegt in
der Mitte des Bildschirmfensters. Die Lage des Grafik-Cursors wird nicht
beeinflußt.
Deklaration:
PROCEDURE Line(x1, y1, x2, y2 : INTEGER);
Beispiel:
Line(-100, -30, 50, 80); zeichnet die Strecke mit den Endpunkten
P1(-100/-30) und P2(50/80).
LineTo
LineTo(x,y) verbindet den Punkt, auf dem sich der Grafik-Cursor befindet, mit
dem Punkt P(x/y). Anschließend wird der Grafik-Cursor auf den Punkt P(x/y)
gesetzt. (s. auch MoveTo)
Deklaration:
LineTo(x, y : INTEGER);
Beispiel:
MoveTo(-100, -30); setzt den Grafik-Cursor auf P(-100/-30).
LineTo(50, 80); verbindet P(-100/-30) mit Q(50/80) und setzt den
Grafik-Cursor auf Q(50/80). [Ergibt das gleiche wie
Line(-100,-30,50,80)]
LineTo(0, 70); verbindet Q(50/80) mit R(0/70).
MoveTo
ITG-PASCAL hat vier verschiedene Cursor für Text, Standard-Grafik, Igel-Grafik
und Weltkoordinaten. MoveTo bewegt den Grafik-Cursor an eine neue Position. Es
entspricht den Anweisungen GeheNach für den Igel und GotoXY für den
Text-Cursor.
#FF
Deklaration:
MoveTo(x, y : INTEGER);
Beispiel:
MoveTo(-100, -30); setzt den Grafik-Cursor auf P(-100/-30).
LineTo(50, 80); verbindet P(-100/-30) mit Q(50/80) und setzt den
Grafik-Cursor auf Q(50/80).
MoveTo(-15, -45); setzt den Grafik-Cursor auf R(-15/-45).
LineTo(0, 70); verbindet R(-15/-45) mit S(0/70).
#FF
ITG-Pascal-Grafik
Bogen DefiniereWelt DruckeBildschirm
Färben FunktionsGraf FunktionstermFehler
GrafGotoXY GrafikFenster GrafikKorrekturAus
GrafikKorrekturEin GrafikSchirm GrafWrite
Kreis MitWeltRaster OhneweltRaster
PapierFarbe Punkt SetzeFontWerte
StiftFarbe Strecke TextSchirm
WähleFont WeltGeheNach WeltPixelDX
WeltPixelDY WeltPunkt WeltStrecke
WeltStreckeNach WeltXMax WeltXMin
WeltYMax WeltYMin Wischen
WoGrafikX WoGrafikY yKorrekturFaktor
Bogen
Mit Bogen wird ein Kreisbogen gezeichnet.
Deklaration:
PROCEDURE Bogen(xm, ym, Radius, AnfangsWinkel, DrehWinkel : INTEGER);
Beispiel:
Bogen(0, 0, 100, 45, 90); zeichnet einen Bogen, der auf einem Kreis mit dem
Mittelpunkt M(0/0) liegt und dessen Radius r=100 ist,
beginnend bei dem Winkel α=45° zur positiven
x-Achse, wobei das Ende des Bogens bei
ß=45°+90°=135° liegt.
DefiniereWelt
Mit DefiniereWelt wird ein Koordinatensystem gezeichnet, in dem mit den
Welt-Prozeduren WeltPunkt, WeltStrecke, WeltGeheNach und WeltStreckeNach
orientiert an den Koordinaten des Systems gezeichnet wird. Die geforderten
Grenzen des Systems werden als Minimum angesehen. ITG-PASCAL zeichnet das
kleinste Koordinatensystem, das größer ist als das geforderte, wobei darauf
geachtet wird, daß der Rasterabstand auf den Achsen gleichmäßig ist. Auf CGA-,
Herkules- und EGA-Karten muß dazu vorher der Schalter yKorrekturAus gesetzt
werden. Andernfalls ergibt sich für das Raster in y-Richtung keine gleichmäßige
Einteilung. Wenn kein Raster gezeichnet werden soll, ist OhneWeltRaster vorher
auszuführen.
Deklaration:
PROCEDURE DefiniereWelt(LinkeGrenze, UntereGrenze,
RechteGrenze, ObereGrenze : REAL);
Beispiel:
yKorrekturAus; gleichmäßiges Raster
MitWeltRaster; Punktraster zeichnen, wenn eine Welt definiert wird
DefiniereWelt(-5, -2.5, 10, 4.5); Koordinatensystem mit
5,0 <= x <= 10,0 und
-2,5 <= y <= 4,5 definieren und zeichnen
WeltStrecke(-3, -2.2, 7.3, 3.4); Strecke mit den Endpunkten P(-3/-2,2) und
Q(7,3/3,4) zeichnen
#FF
DruckeBildschirm
Mit DruckeBildschirm wird der Inhalt des Bildschirms sowohl im Textmodus als
auch im Grafikmodus mit dem Drucker gedruckt. Weil bei einem Drucker das
Längenverhältnis von Strecken in x- und y-Richtung anders ist als auf dem
Bildschirm, erscheinen Kreise als Ellipsen und Quadrate als Rechtecke.
Deklaration:
PROCEDURE DruckeBildschirm;
Beispiel:
GrafikSchirm;
ZeichneIrgendetwas; Hier kann eine beliebige Zeichnung erstellt werden.
DruckeBildschirm; Die Zeichnung wird gedruckt.
TextSchirm;
SchreibeIrgendetwas; Hier kann beliebiger Text geschrieben werden.
DruckeBildschirm; Der Text wird gedruckt.
Färben
Färben(x,y,Farbe) färbt einen Bereich beginnend im Punkt P(x/y) in der Farbe
Farbe ein, der von einer Linie begrenzt ist, die nicht die Papierfarbe hat. Als
Farben sind schwarz, grau und weiß zugelassen.
Deklaration:
PROCEDURE Färben(x, y, Farbe : INTEGER);
Beispiel:
PapierFarbe(Schwarz);
StiftFarbe(Weiß);
Kreis(100, 50, 30);
Färben(100, 50, Grau); Weil der Punkt P(100/50) innerhalb des Kreises liegt,
wird der Kreis grau ausgefüllt. Für einen Punkt auf
dem Kreis geschieht nichts, für einen Punkt außerhalb
des Kreises wird der Bereich außerhalb grau gefärbt.
FunktionsGraf
FunktionsGraf zeichnet den Grafen einer Funktion mit der Variablen x innerhalb
der angegebenen Grenzen. Dabei wird versucht, eine gleichmäßige Einteilung der
Achsen zu erhalten. Der tatsächlich gezeichnete Ausschnitt ist etwas größer als
angegeben. Zum Zeichnen wird ein Verfahren benutzt, das pro Bildpunkt zwei bis
zu drei Funktionswerten berechnet, damit auch in ungünstigen Fällen ein
vernünftiger Funktionsgraf entsteht.
Achtung : Die unabhängige Variable ist mit "x" festgelegt!
Deklaration:
PROCEDURE FunktionsGraf(FunktionsTerm : STRING;
LinkeGrenze, UntereGrenze,
RechteGrenze, ObereGrenze : REAL);
Beispiel:
GrafikKorrekturAus; gleichmäßiges Raster in y-Richtung
#FF
FunktionsGraf("sin(x)", -5, -1.5, 5, 1.5); Graf der Sinus-Funktion für
-5 <= x <= 5 und -1.5 <= y <= 1.5
FunktionsGraf("sin(2x)", -5, -2, 5, 2); richtig : 2*x !
Write(FunktionstermFehler); ergibt den Wert 6, weil das 6. Zeichen
fehlerhaft ist.
FunktionstermFehler
Wenn den Prozeduren FunktionsGraf oder DefiniereFunktionsterm ein fehlerhafter
Funktionsterm übergeben wurde, ergibt die Funktion FunktionstermFehler die
Stelle, an der der Fehler auftrat, ansonsten ergibt sie Null.
Deklaration:
FUNCTION FunktionstermFehler : INTEGER;
Beispiel:
FunktionsGraf("sin(2x)", -5, -2, 5, 2); richtig : 2*x !
Write(FunktionstermFehler); ergibt den Wert 6, weil das 6. Zeichen
fehlerhaft ist.
GrafGotoXY
GrafGotoXY(x,y) setzt den Grafikcursor auf den Punkt P(x/y). Für die
Koordinaten gelten die Werte des Koordinatensystems im Grafikmodus. Der
Mittelpunkt des Bildschirms hat die Koordinaten (0/0). Die x-Werte nehmen nach
rechts bis 320, nach links bis -320 zu, die y-Werte nach oben je nach
Grafikkarte bis 240, nach unten bis -240.
Deklaration :
PROCEDURE GrafGotoXY(x, y : WORD);
Beispiel :
GrafGotoXY(0, 0); Mittelpunkt des Bildschirms
GrafGotoXY(-320, 240); linker oberer Eckpunkt
GrafikFenster
Wenn nur ein bestimmter Bereich des Grafikschirms für eine Zeichnung verwendet
werden soll, kann der übrige Bereich gesperrt werden. Dazu dient die Anweisung
GrafikFenster(x1,y1,x2,y2), mit der ein Rechteck mit bildschirmparallelen
Seiten mit dem linken oberen Eckpunkt P(x1/y1) und dem rechten unteren Eckpunkt
Q(x2/y2) als Zeichenfläche definiert wird. Der Ursprung des Koordinatensystems
liegt innerhalb dieses Fensters automatisch im Mittelpunkt des Fensters.
Deklaration:
GrafikFenster(x1, y1, x2, y2 : INTEGER);
Beispiel:
GrafikFenster(50, 20, 500, 220); öffnet ein Fenster mit x-Werten zwischen -225
und 225 und y-Werten zwischen -100 und 100.
Die linke obere Ecke ist in x-Richtung 50
Punkte, in y-Richtung 20 Punkte von dem linken
oberen Eckpunkt des Bildschirms entfernt.
#FF
GrafikKorrekturAus
GrafikKorrekturAus bewirkt, daß Punkt- und Strecken-Zeich-nungen nicht mehr den
Bildschirmverzerrungen bei CGA- Hercules- und EGA-Karten angepaßt werden.
Deshalb stimmen die y-Koordinaten für Standardgrafik und für Igelgrafik bei
ausgeschalteter Korrektur nicht mehr überein.
Deklaration:
PROCEDURE GrafikKorrekturAus;
Beispiel:
GrafikKorrekturEin; Korrektur in y-Richtung einschalten
Circle(-105, 0, 100); Kreis schlagen
Line(-105, 0, -105, 100); Strecke vom Kreismittelpunkt senkrecht nach oben
zeichnen. Wegen der Korrektur endet sie auf der
Kreislinie.
GrafikKorrekturAus; Korrektur in y-Richtung ausschalten
Circle(105, 0, 100); Kreis schlagen
Line(105, 0, 105, 100); Strecke vom Kreismittelpunkt senkrecht nach oben
zeichnen. Wegen der ausgeschalteten Korrektur endet
sie nicht auf der Kreislinie.
GrafikKorrekturEin
GrafikKorrekturEin bewirkt, daß Punkt- und Strecken-Zeichnungen den
Bildschirm-verzerrungen angepaßt werden. Deshalb stimmen die y-Koordinaten für
Standardgrafik und für Igelgrafik jetzt bei allen Grafikkarten überein.
Deklaration:
PROCEDURE GrafikKorrekturEin;
Beispiel:
GrafikKorrekturEin; Korrektur in y-Richtung einschalten
Circle(-105, 0, 100); Kreis schlagen
Line(-105, 0, -105, 100); Strecke vom Kreismittelpunkt senkrecht nach oben
zeichnen. Wegen der Korrektur endet sie auf der
Kreislinie.
GrafikKorrekturAus; Korrektur in y-Richtung ausschalten
Circle(105, 0, 100); Kreis schlagen
Line(105, 0, 105, 100); Strecke vom Kreismittelpunkt senkrecht nach oben
zeichnen. Wegen der ausge schalteten Korrektur endet
sie nicht auf der Kreislinie.
GrafikSchirm
Mit der Anweisung GrafikSchirm wird aus dem Textmodus in den Grafikmodus
gewechselt. ITG-PASCAL erkennt die vorhandene Grafikkarte automatisch.
Grafikanweisungen werden nur im Grafikmodus ausgeführt, sonst bricht das
Programm mit der Fehlermeldung "Programm wegen Grafikanweisung im Textmodus in
Zeile xxx beendet." ab.
Deklaration:
PROCEDURE GrafikSchirm;
Beispiel:
GrafikSchirm; Zeichnen im Grafikmodus ermöglichen.
Strecke(0, 0, 100, 100); Eine Strecke wird gezeichnet.
#FF
WriteLn("im Grafikmodus"); Auf dem Grafikschirm wird "im Grafikmodus"
gedruckt.
TextSchirm; Zurück in den Textmodus.
WriteLn("im Textmodus"); Auf dem Textschirm wird "im Textmodus"
gedruckt. Die Textausgabe erfolgt hier
wesentlich schneller als im Grafikmodus.
GrafWrite
Mit GrafWrite erfolgt die Textausgabe auf dem Grafikschirm an den mit
GrafGotoXY definierten Koordinaten des Grafikschirms. Es gelten die selben
Bedingungen wie bei der Write-Anweisung im Textmodus.
Achtung : Vor der ersten Verwendung von GrafWrite muß mit "WähleFont" ein
Zeichensatz geladen werden, sonst bricht das Programm mit einer Fehlermeldung
ab.
Deklaration:
PROCEDURE GrafWrite(v : VariableBeliebigenTyps);
Beispiel:
GrafikSchirm; Schreiben im Grafikmodus ermöglichen.
WähleFont("LITT"); Zeichensatz laden
SetzeFontWerte(2,2,90); mit doppelter Schriftgröße senkrecht
GrafWrite("senkrecht"); nach oben "senkrecht" schreiben.
Kreis
Kreis zeichnet einen Kreis auf dem Bildschirm. Da bei CGA-, Hercules- und
EGA-Karten der Abstand zweier benachbarter Bildpunkte in x- und in y-Richtung
verschieden ist, werden die y-Koordinaten mit einem Korrekturfaktor
multipliziert. (s. auch yKorrekturFaktor)
Deklaration:
PROCEDURE Kreis(xm, ym, Radius);
Beispiel:
Kreis(50, 100, 30); zeichnet einen Kreis mit dem Mittelpunkt M(50/100)
und dem Radius r=30, der in x-Richtung 30 Bildpunkten
entspricht.
OhneWeltRaster
OhneWeltRaster bewirkt, daß in dem mit Definierewelt definierten
Koordinatensystem kein Punktraster gezeichnet wird.
Standardeinstellung ist MitWeltRaster.
Deklaration:
PROCEDURE MitWeltRaster;
Beispiel:
yKorrekturAus; gleichmäßiges Raster
OhneWeltRaster; kein Punktraster zeichnen, wenn eine Welt
definiert wird
#FF
DefiniereWelt(-5, -2.5, 10, 4.5); Koordinatensystem mit -5,0 <= x <= 10,0 und
-2,5 <= y<= 4,5 definieren und zeichnen
MitWeltRaster
MitWeltRaster bewirkt, daß in dem mit Definierewelt definierten
Koordinatensystem ein Punktraster gezeichnet wird. Das Raster kann vor der
Definition der Welt mit OhneWeltRaster unterdrückt werden.
Standardeinstellung ist MitWeltRaster.
Deklaration:
PROCEDURE MitWeltRaster;
Beispiel:
yKorrekturAus; gleichmäßiges Raster
MitWeltRaster; ein Punktraster zeichnen, wenn eine Welt
definiert wird
DefiniereWelt(-5, -2.5, 10, 4.5); Koordinatensystem mit -5,0 <= x <= 10,0
und
-2,5 <= y <= 4,5 definieren und zeichnen
PapierFarbe
Mit PapierFarbe wird die Farbe des Hintergrundes für alle Grafikanweisungen
festgesetzt. Der Hintergrund wird aber erst durch die Anweisung Wischen in der
gewählten Farbe dargestellt. Zur Verfügung stehen auf CGA- und Herkules-Karten
die Farben Schwarz(0), Grau(7) und Weiß(15), auf VGA-Karten 16 Farben von
Schwarz bis Weiß mit den Farbwerten 0 bis 15. Andere Werte sind nicht
zugelassen.
Deklaration:
PROCEDURE PapierFarbe(Farbe : INTEGER);
Beispiel:
PapierFarbe(Schwarz);
Wischen; Der Hintergrund erscheint schwarz.
PapierFarbe(Grau);
Wischen; Der Hintergrund erscheint grau.
PapierFarbe(Weiß);
Wischen; Der Hintergrund erscheint weiß.
PapierFarbe(Rot); Nur auf VGA-Karten
Wischen; Der Hintergrund erscheint rot.
Punkt
Mit der Anweisung Punkt(x, y) wird der Punkt P(x/y) auf dem Grafikschirm
gezeichnet. Der Ursprung des Achsenkreuzes liegt in der Mitte des
Grafikfensters.
Deklaration:
PROCEDURE Punkt(x, y : INTEGER);
Beispiel:
Punkt(100, 50); zeichnet den Punkt P(100/50).
#FF
SetzeFontWerte
Nachdem mit WähleFont ein Vektor-Zeichensatz geladen wurde, kann mit
SetzeFontWerte sowohl die Größe der Buchstaben in beiden Richtungen als auch
die Schreibrichtung verändert werden. Die Richtung wird als Winkel gegen den
Uhrzeigersinn zur positiven x-Achse in Grad gemessen.
Deklaration:
PROCEDURE SetzeFontWerte(xGröße, yGröße, Richtung : REAL);
Beispiel:
GrafikSchirm; Schreiben im Grafikmodus ermöglichen.
WähleFont("LITT"); Zeichensatz LITT.CHR laden
SetzeFontWerte(2,2,90); mit doppelter Schriftgröße senkrecht
GrafWrite("senkrecht"); nach oben "senkrecht" schreiben.
StiftFarbe
Mit StiftFarbe wird die Farbe des Zeichenstiftes für alle Grafikanweisungen
festgesetzt, die keine Farbe als Parameter enthalten. Zur Verfügung stehen auf
CGA- und Herkules-Karten die Farben Schwarz(0), Grau(7) und Weiß(15), auf
VGA-Karten 16 Farben von Schwarz bis Weiß mit den Farbwerten 0 bis 15. Andere
Werte sind nicht zugelassen.
Deklaration:
PROCEDURE StiftFarbe(Farbe : INTEGER);
Beispiel:
StiftFarbe(Grau); Zeichenfarbe Grau festlegen.
Strecke(0, 0, 100, 50); Weil nicht jeder Punkt weiß gezeichnet wird, erscheint
die Strecke in ihrer Farbe nicht so intensiv, also grau.
Strecke
Strecke(x1,y1,x2,y2) zeichnet eine Strecke zwischen zwei Punkten P1(x1/y1) und
P2(x2/y2) auf dem Grafikschirm. Der Ursprung des Koordinatensystems liegt in
der Mitte des Bildschirmfensters.
Deklaration:
PROCEDURE Strecke(x1, y1, x2, y2 : INTEGER);
Beispiel:
Strecke(-100, -30, 50, 80); zeichnet die Strecke mit den Endpunkten
P1(-100/-30) und P2(50/80).
TextSchirm
Mit der Anweisung TextSchirm wird aus dem Grafikmodus zurück in den Textmodus
gewechselt.
Deklaration:
PROCEDURE TextSchirm;
#FF
Beispiel:
GrafikSchirm; Zeichnen im Grafikmodus ermöglichen.
Strecke(0, 0, 100, 100); Eine Strecke wird gezeichnet.
WriteLn("im Grafikmodus"); Auf dem Grafikschirm wird "im Grafikmodus"
gedruckt.
TextSchirm; Zurück in den Textmodus.
WriteLn("im Textmodus"); Auf dem Textschirm wird "im Textmodus"
gedruckt. Die Textausgabe erfolgt hier
wesentlich schneller als im Grafikmodus.
WähleFont
Bevor auf dem Grafikschirm mit GrafWrite geschrieben werden kann, muß mit
WähleFont ein Vektor-Zeichensatz nach BORLAND-Standard geladen worden sein.
Mitgeliefert werden die Zeichensätze "LITT.CHR", "GOTH.CHR", "SANS.CHR" und
"TRIP.CHR". Weitere Zeichensätze sind von der Firma BORLAND oder im Bereich
Shareware/Public Domain zu bekommen.
Nach dem erfolgreichen Laden eines Zeichensatzes werden automatisch
Standardwerte mit SetzeFontWerte(1, 1, 0) gesetzt.
Deklaration:
PROCEDURE WähleFont(FontName : STRING);
Beispiel:
GrafikSchirm; Schreiben im Grafikmodus ermöglichen.
WähleFont("LITT"); Zeichensatz LITT.CHR laden
SetzeFontWerte(2,2,90); mit doppelter Schriftgröße senkrecht
GrafWrite("senkrecht"); nach oben "senkrecht" schreiben.
WeltGeheNach
WeltGeheNach setzt den Weltcursor auf die angegebenen Koordinaten des mit
DefiniereWelt definierten Koordinatensystems. Mit WeltStreckeNach wird dieser
Punkt mit einem zweiten verbunden.
Deklaration:
PROCEDURE WeltGeheNach(x, y : REAL);
Beispiel:
yKorrekturAus; gleichmäßiges Raster
DefiniereWelt(-5, -2.5, 10, 4.5); Koordinatensystem mit
-5,0 <= x <= 10,0 und
-2,5 <= y <= 4,5 definieren und zeichnen
WeltGeheNach(-3, -2.2, 7.3, 3.4); Weltcursor auf P(-3/-2,2) setzen
WeltPixelDX
WeltPixelDX liefert die Differenz der x-Koordinaten zweier benachbarter
Bildpunkte in einem mit DefiniereWelt definierten Koordiantensystem.
Deklaration:
FUNKTION WeltPixelDX : REAL;
#FF
Beispiel:
DefiniereWelt(-3, -4, 5, 6); Welt definieren
WriteLn(WeltPixelDX); druckt die Differenz der x-Koordinaten zweier
benachbarter Bildpunkte
WeltPixelDY
WeltPixelDY liefert die Differenz der y-Koordinaten zweier benachbarter
Bildpunkte in einem mit DefiniereWelt definierten Koordiantensystem.
Deklaration:
FUNKTION WeltPixelDY : REAL;
Beispiel:
DefiniereWelt(-3, -4, 5, 6); Welt definieren
WriteLn(WeltPixelDY); druckt die Differenz der y-Koordinaten zweier
benachbarter Bildpunkte
WeltPunkt
WeltPunkt zeichnet einen Punkt in dem mit DefiniereWelt definierten
Koordinatensystem.
Deklaration:
PROCEDURE WeltPunkt(x, y : REAL);
Beispiel:
DefiniereWelt(-5, -2.5, 10, 4.5); Koordinatensystem mit
-5,0 <= x <= 10,0 und
-2,5 <= y <= 4,5 definieren und zeichnen
WeltPunkt(-3, -2.2); zeichnet den Punkt P(-3/-2,2)
WeltStrecke
WeltStrecke verbindet die beiden mit ihren x- und y-Koordinaten angegebenen
Punkte in dem mit DefiniereWelt definierten Koordinatensystem.
Deklaration:
PROCEDURE WeltStrecke(x1, y1, x2, y2 : REAL);
Beispiel:
yKorrekturAus; gleichmäßiges Raster
DefiniereWelt(-5, -2.5, 10, 4.5); Koordinatensystem mit
-5,0 <= x <= 10,0 und
-2,5 <= y <= 4,5 definieren und zeichnen
WeltStrecke(-3, -2.2, 7.3, 3.4); Strecke mit den Endpunkten P(-3/-2,2) und
Q(7,3/3,4) zeichnen
WeltStreckeNach
WeltStreckeNach verbindet den angegebenen Punkt mit dem Punkt in dem mit
DefiniereWelt definierten Koordinaten-system, auf dem sich der Weltcursor
befindet. Der Weltcursor wird anschließend auf den angegebenen Punkt gesetzt.
#FF
Deklaration:
PROCEDURE WeltStreckeNach(x, y : REAL);
Beispiel:
yKorrekturAus; gleichmäßiges Raster
DefiniereWelt(-5, -2.5, 10, 4.5); Koordinatensystem mit
-5,0 <= x <= 10,0 und
-2,5 <= y <= 4,5 definieren und zeichnen
WeltGeheNach(-3, -2.2); Weltcursor auf P(-3/-2,2) setzen
WeltStreckeNach(7.3, 3.4); P(-3/-2,2) und Q(7,3/3,4) verbinden
WeltStreckeNach(-1.3, 0.4); Q(7,3/3,4) und R(-1,3/0,4) verbinden
WeltXMax
WeltXMax liefert die x-Koordinate des äußersten rechten Bildpunktes in einem
mit DefiniereWelt definierten Koordiantensystem. Der Wert ist meistens größer
als der bei DefiniereWelt für diesen Wert übergebene Parameter, da ITG-PASCAL
das Koordiantensystem immer so anlegt, daß gleiche Intervallbreiten auf einer
Achse auch immer gleich viele Bildpunkte enthalten.
Deklaration:
FUNKTION WeltXMax : REAL;
Beispiel:
DefiniereWelt(-3, -4, 5, 6); Welt definieren
WriteLn(WeltXMax); druckt den Wert der x-Koordinate des
äußersten rechten Bildpunktes des Koordinaten-
systems. Der Wert ist etwas größer als 5.
WeltXMin
WeltXMin liefert die x-Koordinate des äußersten linken Bildpunktes in einem mit
DefiniereWelt definierten Koordiantensystem. Der Wert ist meistens kleiner als
der bei DefiniereWelt für diesen Wert übergebene Parameter, da ITG-PASCAL das
Koordiantensystem immer so anlegt, daß gleiche Intervallbreiten auf einer Achse
auch immer gleich viele Bildpunkte enthalten.
Deklaration:
FUNKTION WeltXMin : REAL;
Beispiel:
DefiniereWelt(-3, -4, 5, 6); Welt definieren
WriteLn(WeltXMin); druckt den Wert der x-Koordinate des
äußersten linken Bildpunktes des Koordinaten-
systems. Der Wert ist etwas kleiner als 5.
WeltYMax
WeltYMax liefert die y-Koordinate des obersten Bildpunktes in einem mit
DefiniereWelt definierten Koordiantensystem. Der Wert ist meistens größer als
der bei DefiniereWelt für diesen Wert übergebene Parameter, da ITG-PASCAL das
Koordiantensystem immer so anlegt, daß gleiche Intervallbreiten auf einer Achse
auch immer gleich viele Bildpunkte enthalten.
#FF
Deklaration:
FUNKTION WeltYMax : REAL;
Beispiel:
DefiniereWelt(-3, -4, 5, 6); Welt definieren
WriteLn(WeltYMax); druckt den Wert der y-Koordinate des
obersten Bildpunktes des Koordinatensystems.
Der Wert ist etwas größer als 5.
WeltYMin
WeltYMin liefert die y-Koordinate des untersten Bildpunktes in einem mit
DefiniereWelt definierten Koordiantensystem. Der Wert ist meistens kleiner als
der bei DefiniereWelt für diesen Wert übergebene Parameter, da ITG-PASCAL das
Koordiantensystem immer so anlegt, daß gleiche Intervallbreiten auf einer Achse
auch immer gleich viele Bildpunkte enthalten.
Deklaration:
FUNKTION WeltYMin : REAL;
Beispiel:
DefiniereWelt(-3, -4, 5, 6); Welt definieren
WriteLn(WeltYMin); druckt den Wert der y-Koordinate des
untersten Bildpunktes des Koordinatensystems.
Der Wert ist etwas kleiner als 5.
Wischen
Mit Wischen wird das aktive Grafikfenster gelöscht. Die Farbe des Hintergrundes
kann vorher mit PapierFarbe eingestellt werden.
Deklaration:
PROCEDURE Wischen;
Beispiel:
PapierFarbe(Schwarz);
Wischen; Der Hintergrund erscheint schwarz.
PapierFarbe(Grau);
Wischen; Der Hintergrund erscheint grau.
PapierFarbe(Weiß);
Wischen; Der Hintergrund erscheint weiß.
PapierFarbe(Rot); Nur auf VGA-Karten
Wischen; Der Hintergrund erscheint rot.
WoGrafikX
WoGrafikX liefert die x-Koordinate des Grafik-Cursors zurück.
Deklaration:
FUNCTION WoGrafikX : INTEGER;
Beispiel:
MoveTo(100, 50);
Write(WoGrafikX); druckt 100 aus.
#FF
LineTo(-200, 40);
Write(WoGrafikX); druckt -200 aus.
WoGrafikY
WoGrafikY liefert die y-Koordinate des Grafik-Cursors zurück.
Deklaration:
FUNCTION WoGrafikY : INTEGER;
Beispiel:
MoveTo(100, 50);
Write(WoGrafikY); druckt 50 aus.
LineTo(-200, 40);
Write(WoGrafikY); druckt 40 aus.
yKorrekturFaktor
Bei CGA-, Hercules- und EGA-Grafikkarten stimmen die Abstände zweier
benachbarter Punkte in x- und y-Richtung auf dem Monitor nicht überein. Ohne
Korrektur würde ein Kreis wie eine Ellipse und ein Quadrat wie ein Rechteck
aussehen. Um so etwas zu vermeiden, werden die Strecken in y-Richtung verkürzt
um einen Faktor, dessen Wert die Funktion yKorrekturFaktor zurückliefert.
Deklaration:
FUNCTION yKorrekturFaktor : REAL;
Beispiel:
Write(yKorrekturFaktor); druckt
0.42 für CGA-Karten
0.64 für Hercules-Karten
0.73 für EGA-Karten
1.00 für VGA-Karten
#FF
mathematische Funktionen
ABS ARCCOS ARCCOT ARCSIN ARCTAN
BOGENMAß COS COT EXP GRAD
LG LN SIGN SIN SQR
SQRT TAN
ABS
Mit ABS(x) wird der Betrag einer Zahl bestimmt.
Deklaration:
FUNCTION ABS(Zahl : REAL) : REAL;
Beispiel:
ABS(-3.5) = 3.5;
ABS(-2) = 2;
ABS(4.7) = 4.7
ARCCOS
α=ArcCos(x) ist die Umkehrfunktion zu x=Cos(α). α=ArcCos(x) ist der Winkel α,
für den gilt x=Cos(α).
Deklaration:
FUNCTION ArcCos(Winkel : REAL) : REAL;
Beispiel:
in Grad : ArcCos(0.5) = 60°
im Bogenmaß : ArcCos(0.5) = 1.047
Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
ARCCOT
α=ArcCot(x) ist die Umkehrfunktion zu x=Cot(α). α=ArcCot(x) ist der Winkel α,
für den gilt x=Cot(α).
Deklaration:
FUNCTION ArcCot(Winkel : REAL) : REAL;
Beispiel:
in Grad : ArcCot(0.5) = 63.435°
im Bogenmaß : ArcCot(0.5) = 1.107
Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
#FF
ARCSIN
α=ArcSin(x) ist die Umkehrfunktion zu x=Sin(α). α=ArcSin(x) ist der Winkel α,
für den gilt x=Sin(α).
Deklaration:
FUNCTION ArcSin(Winkel : REAL) : REAL;
Beispiel:
in Grad : ArcSin(0.5) = 30°
im Bogenmaß : ArcSin(0.5) = 0.524
Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
ARCTAN
α=ArcTan(x) ist die Umkehrfunktion zu x=Tan(α). α=ArcTan(x) ist der Winkel α,
für den gilt x=Tan(α).
Deklaration:
FUNCTION ArcTan(Winkel : REAL) : REAL;
Beispiel:
in Grad : ArcTan(0.5) = 26.565°
im Bogenmaß : ArcTan(0.5) = 0.464
Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
BOGENMAß
Die Funktion y=Bogenmaß(α) ergibt das Bogenmaß des Winkels α, der in Grad
gegeben ist.
Deklaration:
FUNCTION Bogenmaß(WinkelInGrad : REAL) : REAL;
Beispiel:
Bogenmaß(60°) = π/3
Bogenmaß(Grad(π/3)) = π/3
COS
Der Cos(α) ist die Länge der Ankathete eines rechtwinkligen Dreiecks mit der
Hypotenusenlänge 1. Er gibt für beliebige rechtwinklige Dreiecke das Verhältnis
von Ankathete zu Hypotenuse an.
Deklaration:
FUNCTION Cos(Winkel : REAL) : REAL;
Beispiel:
in Grad : Cos(60°) = 0.5
im Bogenmaß : Cos(π/3) = 0.5
#FF
Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
COT
Die Funktion y=Cot(α) gibt in einem rechtwinkligen Dreieck das Seitenverhältnis
von Ankathete zu Gegenkathete an.
Deklaration:
FUNCTION Cot(Winkel : REAL) : REAL;
Beispiel:
in Grad : Cot(60°) = 0.577
im Bogenmaß : Cot(π/3) = 0.577
Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
EXP
y=Exp(x)=ex ist die Exponentialfunktion mit der Basis e. e bezeichnet die
Eulersche Zahl 2.718281828... .
Deklaration:
FUNCTION Exp(x : REAL) : REAL;
Beispiel:
Exp(1) = 2.71828
Exp(-4.1) = 0.0167
Exp(Ln(4)) = 4
GRAD
α=Grad(x) ergibt den zu dem Bogen x des Einheitskreises gehörenden Winkel α,
rechnet also den Winkel x im Bogenmaß in Grad um.
Deklaration:
FUNCTION Grad(WinkelImBogenmaß : REAL) : REAL;
Beispiel:
Grad(π/3) = 60°
Grad(Bogenmaß(60°)) = 60°
LG
y=Lg(x) ist der Logarithmus von x zur Basis 10, auch dekadischer Logarithmus
genannt. Lg(x) ist die Umkehrfunktion zu 10^x und nur für x > 0 definiert.
Deklaration:
FUNCTION Lg(x : REAL) : REAL;
#FF
Beispiel:
Lg(0.5) = -0.301
Lg(3.3) = 0.519
Lg(10) = 1
Lg(10^5.7) = 5.7
Lg(-2) ist nicht definiert
LN
y=Ln(x) ist der Logarithmus von x zur Basis e, auch natürlicher Logarithmus
genannt. Ln(x) ist die Umkehrfunktion zu Exp(x) und nur für x > 0 definiert.
Deklaration:
FUNCTION Ln(x : REAL) : REAL;
Beispiel:
Ln(0.5) = -0.693
Ln(3.3) = 1.194
Ln(e) = 1
Ln(Exp(5.7)) = 5.7
Ln(-2) ist nicht definiert
SIGN
Die Signumfunktion y=Sign(x) ist definiert als:
1, wenn x > 0
0, wenn x = 0
-1, wenn x < 0
Deklaration:
FUNCTION Sign(x : REAL) : INTEGER;
Beispiel:
Sign(3.5) = 1
Sign(0) = 0
Sign(-4) = -1
SIN
Der Sin(α) ist die Länge der Gegenkathete eines rechtwinkligen Dreiecks mit der
Hypote-nusenlänge 1. Er gibt für beliebige rechtwinklige Dreiecke das
Verhältnis von Gegenkathete zu Hypotenuse an.
Deklaration:
FUNCTION Sin(Winkel : REAL) : REAL;
Beispiel:
in Grad : Sin(60°) = 0.866
im Bogenmaß : Sin(π/3) = 0.866
Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
#FF
SQR
y=Sqr(x)=x2 ist das Quadrat der Zahl x. Sqr steht für die englische Abkürzung
von Quadrat "Square".
Deklaration:
FUNCTION Sqr(x : REAL) : REAL;
Beispiel:
Sqr(2) = 4
Sqr(Sqrt(2)) = 2
SQRT
y=Sqrt(x) ist die positive Zahl y, deren Quadrat x ergibt. Sqrt ist also die
Wurzelfunktion. y=Sqrt(x) ist die Umkehrfunktion zu y=Sqr(x). Sqrt steht für
die englische Abkürzung von Wurzel "SquareRoot".
Sqrt(x) ist definiert für x ≥ 0.
Deklaration:
FUNCTION Sqrt(x : REAL) : REAL;
Beispiel:
Sqrt(4) = 2
Sqrt(Sqr(2)) = 2
Sqrt(-4) ist nicht definiert.
TAN
Die Funktion y=Tan(α) gibt in einem rechtwinkligen Dreieck das Seitenverhältnis
von Gegenkathete zu Ankathete an.
Deklaration:
FUNCTION Tan(Winkel : REAL) : REAL;
Beispiel:
in Grad : Tan(60°) = 1.732
im Bogenmaß : Tan(π/3) = 1.732
Durch die Schalter "InGrad" und "ImBogenmaß" wird festgelegt, ob die Berechnung
mit Winkeln in Grad oder im Bogenmaß durchgeführt wird.
#FF
Standard-Funktionen
ABS ARCTAN CHR COPY COS
EOF EXP FilePos FileSize FRAC
GetMaxX GetMaxY IORESULT INT KeyPressed
LN LENGTH ODD ORD POS
PRED Random ReadKey ROUND SIN
SQR SQRT STR SUCC TRUNC
UpCase WhereX WhereY
CHR
Mit der Funktion CHR wird eine Typ-Umwandlung einer INTEGER-Zahl aus dem
Bereich 0..255 in ein Zeichen / einen Buchstaben durchgeführt.
Deklaration :
FUNCTION CHR(OrdnungsZahl : INTEGER) : CHAR;
Beispiel :
Write(CHR(65)); druckt "A", weil "A" den ASCII-Code 65 hat.
Write(CHR(ORD("B"))); druckt "B".
COPY
Copy(ZeichenKette, Anfang, Anzahl) liefert als Funktionswert den Teil von
ZeichenKette zurück, der bei dem Zeichenindex Anfang beginnt und Anzahl Zeichen
umfaßt.
Deklaration :
FUNCTION Copy(ZeichenKette : STRING;
Anfang, Anzahl : INTEGER) : STRING;
Beispiel :
Write(Copy("abcdefgh", 3, 4)); druckt "cdef".
Write(Copy("abcdefgh", 7, 9)); druckt "gh". Wenn am Ende der Zeichenkette
weniger Zeichen vorhanden sind als in Anzahl
angegeben, werden nur die noch vorhandenen
zurückgegeben.
EOF
Mit EOF(Datei) kann festgestellt werden, ob beim Lesen einer Datei das Ende
erreicht wurde. In diesem Fall ergibt EOF(Datei) den Wert WAHR (TRUE). Die
Datei darf dabei vom Typ FILE oder vom Typ TEXT sein.
Deklaration :
FUNCTION EOF(t : TEXT) : BOOLEAN;
FUNCTION EOF(f : FILE) : BOOLEAN;
Beispiel :
VAR
t : TEXT;
s : STRING;
#FF
BEGIN
Assign(t, 'ITG.HLP'); Datei öffnen
Reset(t); Lesemarke auf den Anfang setzen
WHILE NOT EOF(t) DO BEGIN solange es noch weiteren Text gibt,
ReadLn(t, s); diesen aus der Datei lesen und
WriteLn(s); auf dem Bildschirm ausgeben
END;
Close(t); Datei schließen
END;
FilePos
FilePos(Dateivariable) gibt den Index des Datensatzes aus, an dessen Ende der
Lesezeiger in der Datei Dateivariable steht.
Deklaration :
FUNCTION FilePos(f : FILE OF Datenstruktur) : WORD;
Beispiel :
TYPE
DatenStruktur = RECORD
x : INTEGER;
s : STRING[20];
END;
VAR
Daten : DatenStruktur;
f : FILE OF DatenStruktur;
BEGIN
Assign(f, "TEST.DAT"); der Datei einen Namen zuweisen
Reset(f); und zum Lesen öffnen
Seek(f, 3); Zeiger auf das Ende des 3.Datensatzes
Read(f, Daten); 4.Datensatz lesen!
Write(FilePos(f)); druckt den Wert 4 aus!
Close(f); Datei schließen
END;
FileSize
FileSize(Dateivariable) gibt an, wieviele Datensätze in einer Datei enthalten sind.
Deklaration :
FUNCTION FileSize(f : FILE OF Datenstruktur) : WORD;
Beispiel :
TYPE
DatenStruktur = RECORD
x : INTEGER;
s : STRING[20];
END;
VAR
Daten : DatenStruktur;
f : FILE OF DatenStruktur;
BEGIN
Assign(f, "TEST.DAT"); der Datei einen Namen zuweisen
Reset(f); und zum Lesen öffnen
#FF
Write(FileSize(f)); druckt aus, wieviele Records des Typs DatenStruktur
in der Datei TEST.DAT enthalten sind
Close(f); Datei schließen
END;
FRAC
Mit Frac wird der Nachkommateil einer Variable des Typs REAL bestimmt und als
Funktionswert zurückgegeben.
Deklaration :
FUNCTION Frac(DezimalZahl : REAL) : REAL;
Beispiel :
Write(Frac(2.561)); druckt 0.561 aus.
IORESULT
Wenn Datensätze von der Diskette/Festplatte gelesen oder auf der
Diskette/Festplatte geschrieben werden, kann mit einem anschließenden Aufruf
von IOResult geprüft werden, ob der Lese-/Schreibvorgang fehlerfrei verlaufen
ist oder nicht. IOResult ergibt nach fehlerfreien Lese-/Schreibzugriffen den
Wert 0, sonst einen Wert > 0.
Deklaration :
FUNCTION IOResult : INTEGER;
Beispiel :
Write(Datei, Datensatz);
IF IOResult = 0 THEN BEGIN
Write("kein Fehler");
END
ELSE BEGIN
Write("Fehler beim Schreiben des Datensatzes");
END;
INT
Mit Int wird der Vorkommateil einer Variablen des Typs REAL bestimmt und als
Funktionswert zurückgegeben.
Deklaration :
FUNCTION Int(DezimalZahl : REAL) : REAL;
Beispiel :
Write(Int(12.561)); druckt 12.000 aus.
KeyPressed
Mit der Funktion KeyPressed wird festgestellt, ob vor dem Zeitpunkt des Aufrufs
eine Taste gedrückt wurde, die noch nicht durch eine Read-Anweisung eingelesen
wurde.
Deklaration :
FUNCTION KeyPressed : BOOLEAN;
#FF
Beispiel :
Read(c); Alle vorhandenen Tastendrücke einlesen.
GrafikSchirm;
REPEAT
ZeichneIrgendEtwas; Solange die Zeichnung wiederholen, bis
UNTIL KeyPressed; eine beliebige Taste gedrückt wird.
LENGTH
Length(ZeichenKette) ergibt die Anzahl der Zeichen und Buchstaben (Länge) von
ZeichenKette.
Deklaration :
FUNCTION Length(ZeichenKette : STRING) : INTEGER;
Beispiel :
Write(Length("abcdefgh")); druckt den Wert 8 aus.
Write(Length("")); ergibt 0, weil die Zeichenkette leer ist.
ODD
Odd(GanzeZahl) prüft, ob GanzeZahl gerade ist oder nicht. Es handelt sich um
eine Aussage. Der Funktionswert ist demnach vom Typ BOOLEAN.
Deklaration :
FUNCTION Odd(GanzeZahl : INTEGER) : BOOLEAN;
Beispiel :
IF Odd(GanzeZufallsZahl(100)) THEN BEGIN
Write("Zufallszahl ist gerade.");
END
ELSE BEGIN
Write("Zufallszahl ist ungerade.");
END;
ORD
Die Funktion Ord(Variable) (Ordnung) liefert bei einem Aufzählungstyp die
Stelle, an der Variable in diesem Typ definiert ist, wobei die erste
vorkommende Variable immer die Ordnung 0 hat.
Deklaration :
FUNCTION Ord(Variable : Aufzählungstyp) : INTEGER;
Beispiel :
Ord("A"); ergibt 65, weil der Buchstabe "A" an 66. (!)
Stelle in der ASCII-Tabelle steht.
TYPE
Farbe = (Schwarz, Grau, Weiß); Aufzählungstyp Farbe definieren.
Ord(Schwarz); ergibt 0.
Ord(Grau); ergibt 1.
Ord(Weiß); ergibt 2.
#FF
POS
Pos(TeilZeichenKette, ZeichenKette) ergibt die Stelle, an der TeilZeichenKette
in ZeichenKette beginnt. Wenn TeilZeichenKette nicht in ZeichenKette enthalten
ist, ist der Funktionswert 0.
Deklaration :
FUNCTION Pos(TeilZeichenKette, ZeichenKette : STRING) : INTEGER;
Beispiel :
Pos("c", "abcdefgh"); ist 3.
Pos("def", "abcdefgh"); ist 4.
Pos("B", "abcdefgh"); ist 0, weil "B" nicht in "abcdefgh" vorkommt.
PRED
Pred(Variable) ergibt den Vorgänger von Variable, wenn es sich um einen
Aufzählungstyp handelt. (s. auch Ord, Succ)
Deklaration :
FUNCTION Pred(Variable : Aufzählungstyp) : Aufzählungstyp;
Beispiel :
Pred(3); ist 2.
Pred("B"); ist "A", weil "A" in der ASCII- Tabelle der
Vorgänger von "B" ist.
TYPE
Farbe = (Schwarz, Grau, Weiß); Aufzählungstyp Farbe definieren.
Pred(Schwarz); ist nicht definiert.
Pred(Grau); ergibt Schwarz.
Pred(Weiß); ergibt Grau.
Random
Random(ObereGrenze) erzeugt eine ganze Zufallszahl zwischen 0 und
ObereGrenze-1! Der Wert für ObereGrenze muß zwischen 0 und 32768 liegen.
Deklaration :
FUNCTION Random(ObereGrenze : WORD) : WORD;
Beispiel :
Write(Random(100)); druckt eine Zufallszahl zwischen 0 und 99!
ReadKey
Mit ReadKey wird eine Taste gelesen, ohne daß die Eingabe mit der
RETURN-(ENTER-) Taste abgeschlossen werden muß.
Deklaration :
FUNCTION ReadKey : CHAR;
Beispiel :
Write("noch einmal (j/n) :"); Meldung ausgeben.
#FF
REPEAT Solange das Einlesen von
CharVariable := UpCase(ReadKey); Zeichen wiederholen, bis
UNTIL (CharVariable = "J") der Großbuchstabe der
OR (CharVariable = "N"); gedrückten Taste "J" oder "N" ist.
ROUND
Durch Round wird eine Variable des Typs REAL in eine Variable des Typs INTEGER
umgewandelt. Dabei wird im Gegensatz zu Trunc auf- oder abgerundet.
Deklaration :
FUNCTION Round(RealVariable : REAL) : INTEGER;
Beispiel :
Round(3.2); ergibt 3.
Round(3.8); ergibt 4.
Round(-3.2); ergibt -3.
Round(-3.8); ergibt -4.
SUCC
Succ(Variable) ergibt den Nachfolger von Variable, wenn es sich um einen
Aufzählungstyp handelt. (s. auch Ord, Pred)
Deklaration :
FUNCTION Succ(Variable : Aufzählungstyp) : Aufzählungstyp;
Beispiel :
Succ(3); ist 4.
Succ("B"); ist "C", weil "C" in der ASCII-Tabelle der
Nachfolger von "B" ist.
TYPE
Farbe = (Schwarz, Grau, Weiß); Aufzählungstyp Farbe definieren.
Succ(Schwarz); ergibt Grau.
Succ(Grau); ergibt Weiß.
Succ(Weiß); ist nicht definiert.
TRUNC
Durch Trunc wird eine Variable des Typs REAL in eine Variable des Typs INTEGER
umgewandelt. Dabei wird im Gegensatz zu Round nicht auf- oder abgerundet.
Deklaration :
FUNCTION Trunc(RealVariable : REAL) : INTEGER;
Beispiel :
Trunc(3.2); ergibt 3.
Trunc(3.8); ergibt 3.
Trunc(-3.2); ergibt -3.
Trunc(-3.8); ergibt -3.
#FF
UpCase
UpCase(Buchstabe) ergibt als Funktionsergebnis den Großbuchstaben von
Buchstabe. Die Umwandlung wird auch für die deutschen Sonderzeichen ä, ö und ü
durchgeführt.
Deklaration :
FUNCTION UpCase(Buchstabe : CHAR) : CHAR;
Beispiel :
Write(UpCase("a")); druckt "A".
Write(UpCase("A")); druckt "A".
Write(UpCase("ö")); druckt "Ö".
WhereX
Die x-Koordinate des Cursors im Textschirm wird durch die Funktion WhereX
ausgelesen. Beim vollen Textschirm hat der linke Rand die x-Koordinate 1 und
der rechte die x-Koordinate 80.
Deklaration :
FUNCTION WhereX : INTEGER;
Beispiel :
GotoXY(5, 3); setzt den Cursor auf den Punkt P(5/3).
Write(WhereX); druckt den Wert 5 aus.
WhereY
Die y-Koordinate des Cursors im Textschirm wird durch die Funktion WhereY
ausgelesen. Beim vollen Textschirm hat der obere Rand die y-Koordinate 1 und
der untere die y-Koordinate 25.
Deklaration :
FUNCTION WhereY : INTEGER;
Beispiel :
GotoXY(5, 3); setzt den Cursor auf den Punkt P(5/3).
Write(WhereY); druckt den Wert 3 aus.
#FF
ITG-Pascal-Funktionen
ARCCOS ARCCOT ARCSIN Bogenmaß
Buchstabe COT DezimalZufallszahl EsGibtDatei
FunktionsWert GanzeZufallsZahl Grad IgelWinkel
IgelZeigen LetzteTaste LiesPort SIGN
TAN WoGrafikX WoGrafikY WoIgelX
WoIgelY yKorrekturFaktor
Buchstabe
Die Funktion Buchstabe(Zeichenkette, nterBuchstabe) liefert das n. Zeichen /
den n. Buchstaben in der Zeichenkette zurück. Dabei muß 1 ≤ n ≤ Anzahl der
Zeichen in der Zeichenkette sein.
Deklaration :
FUNCTION Buchstabe(Zeichenkette : STRING;
nterBuchstabe : INTEGER) : CHAR;
Beispiel :
Write(Buchstabe("abcdefg", 3)); druckt "c" aus.
DezimalZufallszahl
DezimalZufallszahl(ObereSchranke) ergibt eine Zufallszahl x des Typs REAL,
wobei 0 ≤ x < ObereSchranke gilt. Der Wert 0 kann angenommen werden, der Wert
ObereSchranke wird nie angenommen.
Deklaration :
FUNCTION DezimalZufallszahl(ObereSchranke : REAL) : REAL;
Beispiel :
Write(DezimalZufallszahl(4.5)); druckt eine Zahl x mit 0 ≤ x < 4.5! (siehe
auch GanzeZufallszahl)
EsGibtDatei
Die Funktion EsGibtDatei(Dateiname) dient dazu, zu prüfen, ob eine Datei mit
dem Dateinamen auf der Diskette/Festplatte existiert. Sie liefert den Wert
WAHR, wenn es eine solche Datei gibt, sonst den Wert FALSCH. Der Typ der Datei
(Textdatei oder andere) läßt sich nicht feststellen.
Deklaration :
FUNCTION EsGibtDatei(DateiName : STRING) : BOOLEAN;
Beispiel :
Write(EsGibtDatei("ITG.HLP")); druckt WAHR aus, wenn es die Datei
ITG.HLP im aktuellen Verzeichnis gibt,
sonst FALSCH
#FF
FunktionsWert
Wenn mit DefiniereFunktionsterm ein Funktionsterm festgelegt wurde, kann mit
FunktionWert ein Wert an einer Stelle berechnet werden.
Deklaration :
FUNCTION FunktionsWert(x : REAL) : REAL;
Beispiel :
DefiniereFunktionsterm("5*x"); zuerst Funktionsterm festlegen
FOR n := 1 TO 5 DO BEGIN
WriteLn(FunktionsWert(n)); und erst dann Funktionswerte berechnen
END;
GanzeZufallsZahl
GanzeZufallszahl(ObereSchranke) ergibt eine Zufallszahl x des Typs INTEGER,
wobei 0 ≤ x < ObereSchranke gilt. Der Wert 0 kann angenommen werden, der Wert
ObereSchranke wird nie angenommen.
Deklaration :
FUNCTION GanzeZufallszahl(ObereSchranke : INTEGER) : INTEGER;
Beispiel :
Write(GanzeZufallszahl(5)); druckt eine der Zahlen 0..4!
LetzteTaste
Die Funktion LetzteTaste liefert das Zeichen / den Buchstaben der Taste, die
zuletzt gedrückt wurde. Damit kann nach Read-, Auswahl- und
LiesEingaben-Anweisungen festgestellt werden, ob die Anweisungen z.B. mit der
ESC-Taste abgebrochen wurden.
Deklaration :
FUNCTION LetzteTaste : CHAR;
Beispiele :
1)
VAR c1, c2 : CHAR;
c1 := ReadKey;
c2 := LetzteTaste; c1 und c2 sind gleich, weil LetzteTaste das Lesen
eines Zeichen wiederholt.
2)
REPEAT
EingabeFeld(...);
LiesEingaben; Wurde LiesEingaben mit der ESC-Taste
UNTIL LetzteTaste = ESC; beendet? Wenn ja Abbrechen, sonst
wiederholen.
#FF
LiesPort
Mit LiesPort(WelcherPort) kann der momentane Wert, der am Port WelcherPort
anliegt, gelesen werden. Mit dieser Funktion kann z.B. der Druckerstatus oder
der Timer des Computers abgefragt werden oder es können Meßwerte von einem
Interface eingelesen werden.
Achtung : Vor der Benutzung dieser Funktion muß eine genaue Information über
die entsprechende Hardware erfolgen, die abgefragt werden soll.
Deklaration :
FUNCTION LiesPort(WelcherPort : INTEGER) : INTEGER;
Beispiel :
Write(LiesPort(nnn)); druckt den Wert, der am (Drucker-) Port anliegt
(, wenn nnn der im Computer verwendete Drucker-Port
ist).
#FF
Standard-Prozeduren
Assign Circle Close ClrEol ClrScr
DEC Delay Delete EXIT GotoXY
HALT HighVideo INC Insert InversVideo
Line LineTo LowVideo MoveTo NoSound
Random Randomize READ READLN ReName
Reset ReWrite Seek SetBkColor SetColor
Sound STR VAL Window WRITE
WRITELN
Assign
Assign verbindet eine Dateivariable DATEI der Typen FILE oder TEXT mit einem
Dateinamen NAME und öffnet sie für Lese- und Schreibzugriffe. Anschließend
erfolgen alle Operationen mit DATEI mit der Datei des Namens NAME. Vor der
Verknüpfung mit Assign kann kein Zugriff auf die Datei erfolgen!
Deklaration :
PROCEDURE Assign(Datei : FILE; DateiName : STRING);
PROCEDURE Assign(Datei : TEXT; DateiName : STRING);
Beispiel :
VAR
Datei : TEXT;
s : STRING;
BEGIN
Assign(Datei, 'ITG.HLP'); Datei mit dem Namen verknüpfen
Reset(Datei); Anfang der Datei suchen
WHILE NOT EOF(Datei) DO BEGIN wenn das Dateiende noch nicht erreicht
ReadLn(Datei, s); ist, lies eine Zeile aus der Datei in die
WriteLn(s); Variable s und drucke s auf dem
END; Bildschirm aus.
Close(Datei); Schließe die Datei.
END;
Close
Close(DATEI) schließt die Datei. Anschließend können keine weiteren Operationen
mit DATEI mehr erfolgen. Jede Datei, die mit Assign geöffnet wurde, muß im
Laufe des Programms auch mit Close geschlossen werden!
Deklaration :
PROCEDURE Close(Datei : FILE);
PROCEDURE Close(Datei : TEXT);
Beispiel :
VAR
Datei : TEXT;
s : STRING;
BEGIN
Assign(Datei, 'ITG.HLP'); Datei mit dem Namen verknüpfen
Reset(Datei); Anfang der Datei suchen
#FF
WHILE NOT EOF(Datei) DO BEGIN wenn das Dateiende noch nicht erreicht
ReadLn(Datei, s); ist, lies eine Zeile aus der Datei in die
WriteLn(s); Variable s und drucke s auf dem
END; Bildschirm aus.
Close(Datei); Schließe die Datei.
END;
ClrEol
ClrEol löscht das Ende einer Textzeile ab der augenblicklichen Cursorposition.
Die Cursor-position wird dabei nicht verändert.
Deklaration :
PROCEDURE ClrEol;
Beispiel :
HighVideo; Bildschirmattribut auf hell setzen
GotoXY(30, 5); Cursor auf das 30. Zeichen der 5. Zeile setzen
ClrEol; die letzten 50 Zeichen der 5. Zeile mit Leerzeichen auffüllen,
das Attribut "hell" verwenden und den Cursor auf dem
30. Zeichen der 5. Zeile lassen
InversVideo; Bildschirmattribut auf invers setzen
GotoXY(10, 8); Cursor auf das 10. Zeichen der 8. Zeile setzen
ClrEol; die letzten 70 Zeichen der 8. Zeile mit Leerzeichen auffüllen,
das Attribut "invers" verwenden und den Cursor auf dem
10. Zeichen der 8. Zeile lassen
ClrScr
ClrScr löscht das aktive Textfenster. Weil in ITG-PASCAL die Textausgabe auch
im Grafikmodus mit Write(....) erfolgen kann, löscht ClrScr den Grafikschirm -
also auch Grafiken -, wenn der Grafikmodus aktiv ist.
Deklaration :
PROCEDURE ClrScr;
Beispiel :
Write("Irgend etwas"); Text schreiben
Delay(2000); 2s (2000ms) warten
ClrScr; Bildschirm löschen
Delay(2000); wieder warten, damit das Ergebnis betrachtet werden
kann.
DEC
DEC(VARIABLE, WERT) verringert VARIABLE um WERT. VARIABLE kann vom Typ CHAR,
BYTE, INTEGER, WORD oder LONGINT sein. Der zweite Parameter WERT muß nicht mit
angegeben werden. In diesem Fall erfolgt eine Verringerung um 1!
Deklaration :
PROCEDURE DEC(VAR c : CHAR; Wert : LONGINT);
PROCEDURE DEC(VAR c : CHAR);
PROCEDURE DEC(VAR b : BYTE; Wert : LONGINT);
PROCEDURE DEC(VAR b : BYTE);
#FF
PROCEDURE DEC(VAR i : INTEGER; Wert : LONGINT);
PROCEDURE DEC(VAR i : INTEGER);
PROCEDURE DEC(VAR w : WORD; Wert : LONGINT);
PROCEDURE DEC(VAR w : WORD);
PROCEDURE DEC(VAR l : LONGINT; Wert : LONGINT);
PROCEDURE DEC(VAR l : LONGINT);
Beispiel :
c := 'C';
DEC(c, 2); c hat jetzt den Wert 'A', weil 'A' in der ASCII-Tabelle das
zweite Zeichen vor 'C' ist.
l := 12345;
DEC(l); l hat den Wert 12344. Der zweite Parameter wird in diesem
Fall automatisch auf 1 gesetzt!
Delay
Delay(nMilliSekunden) hält die Programmausführung für die angegebenen
Millisekunden an.
Deklaration :
PROCEDURE Delay(MilliSekunden : WORD);
Beispiel :
WriteLn('erster Text');
Delay(3000); wartet 3s (3000ms)
WriteLn('zweiter Text');
Delay(1500); wartet 1,5s (1500ms)
WriteLn('dritter Text');
Delete
Delete(ZEICHENKETTE, AB, ANZAHL) löscht in ZEICHENKETTE ab dem AB.ten Zeichen
ANZAHL von Zeichen.
Deklaration :
PROCEDURE Delete(VAR Zeichenkette : STRING; Ab, Anzahl : WORD);
Beispiel :
Zeichenkette := 'ABCDEFGH'; Wertzuweisung
Delete(Zeichenkette, 4, 2); In der Zeichenkette wird das 4.Zeichen (hier
'D') gesucht. Einschließlich dieses Zeichens
werden 2 Zeichen (hier 'D' und 'E') gelöscht.
WriteLn(Zeichenkette); Druckt 'ABCFGH' auf den Bildschirm.
EXIT
Mit der Anweisung EXIT erreicht man, daß die Ausführung einer Prozedur oder
Funktion sofort abgebrochen wird. Im Hauptprogramm sollte HALT verwendet werden.
Deklaration :
PROCEDURE EXIT;
Beispiel :
PROCEDURE ExitTest(n : INTEGER);
#FF
BEGIN
IF n > 10 THEN BEGIN wenn n > 10, dann
WriteLn("n > 10"); Text ausgeben und
EXIT; die Prozedur sofort verlassen
END
ELSE BEGIN
WriteLn("n <= 10"); sonst Text ausgeben
END;
. und den Rest der Prozedur abarbeiten
END;
GotoXY
GotoXY(x,y) setzt den Cursor auf den Punkt P(x/y). Der linke obere Eckpunkt des
Bildschirms hat die Koordinaten (1/1). Die x-Wertenehmen nach rechts bis 80 zu,
die y-Werte nach unten bis 25.
Deklaration :
PROCEDURE GotoXY(x, y : WORD);
Beispiel :
GotoXY(1, 1); linker oberer Eckpunkt
GotoXY(1, 25); linker unterer Eckpunkt
GotoXY(80, 1); rechter oberer Eckpunkt
GotoXY(80, 25); rechter unterer Eckpunkt
HALT
HALT beendet die Programmausführung sofort.
Deklaration :
PROCEDURE Halt;
Beispiel :
x := Random(100) - 50; Zufallszahl zwischen -50 und 49! erzeugen
IF x < 0 THEN BEGIN für x < 0 ist √x nicht
WriteLn("x < 0!"); definiert, deshalb die
HALT; Programmausführung abbrechen
END
ELSE BEGIN
WriteLn("√", x, "=", SQRT(x)); sonst √x ausdrucken
END;
HighVideo
Setzt das Schreibattribut auf helle Schrift auf dunklem Untergrund.
Deklaration :
PROCEDURE HighVideo;
Beispiel :
HighVideo; helle Schrift auf dunklem Untergrund
WriteLn("helle Schrift");
LowVideo; dunklere Schrift auf dunklem Untergrund
#FF
WriteLn("dunklere Schrift");
InversVideo; dunkle Schrift auf hellem Untergrund
WriteLn("inverse Schrift");
INC
INC(VARIABLE, WERT) erhöht VARIABLE um WERT. VARIABLE kann vom Typ CHAR, BYTE,
INTEGER, WORD oder LONGINT sein. Der zweite Parameter WERT muß nicht mit
angegeben werden. In diesem Fall erfolgt eine Erhöhung um 1!
Deklaration :
PROCEDURE INC(VAR c : CHAR; Wert : LONGINT);
PROCEDURE INC(VAR c : CHAR);
PROCEDURE INC(VAR b : BYTE; Wert : LONGINT);
PROCEDURE INC(VAR b : BYTE);
PROCEDURE INC(VAR i : INTEGER; Wert : LONGINT);
PROCEDURE INC(VAR i : INTEGER);
PROCEDURE INC(VAR w : WORD; Wert : LONGINT);
PROCEDURE INC(VAR w : WORD);
PROCEDURE INC(VAR l : LONGINT; Wert : LONGINT);
PROCEDURE INC(VAR l : LONGINT);
Beispiel :
c := 'C';
INC(c, 2); c hat jetzt den Wert 'E', weil 'E' in der ASCII-Tabelle das
zweite Zeichen nach 'C' ist.
l := 12345;
INC(l); l hat den Wert 12346. Der zweite Parameter wird in diesem
Fall automatisch auf 1 gesetzt!
Insert
Mit Insert wird eine Zeichenkette in eine andere Zeichenkette an einer
vorgegebenen Position eingefügt.
Deklaration :
PROCEDURE Insert(Was : STRING; VAR WoHinein : STRING; Wo : INTEGER);
PROCEDURE Insert(Was : CHAR; VAR WoHinein : STRING; Wo : INTEGER);
Beispiel :
Was := "DE";
WoHinein := "ABCFGH";
Insert(Was, WoHinein, 4); Der erste Buchstabe der Zeichenkette Was
("D") wird als 4. Buchstabe, der zweite aus
Was ("E") als 5.Buchstabe in WoHinein
eingefügt. Die Position der übrigen Zeichen aus
WoHinein verschiebt sich dadurch um zwei
nach rechts. WoHinein hat anschließend den
Wert "ABCDEFGH".
InversVideo
Setzt das Schreibattribut auf dunkle Schrift auf hellem Untergrund.
#FF
Deklaration :
PROCEDURE HighVideo;
Beispiel :
HighVideo; helle Schrift auf dunklem Untergrund
WriteLn("helle Schrift");
LowVideo; dunklere Schrift auf dunklem Untergrund
WriteLn("dunklere Schrift");
InversVideo; dunkle Schrift auf hellem Untergrund
WriteLn("inverse Schrift");
LowVideo
Setzt das Schreibattribut auf dunklere Schrift auf dunklem Untergrund.
Deklaration :
PROCEDURE LowVideo;
Beispiel :
HighVideo; helle Schrift auf dunklem Untergrund
WriteLn("helle Schrift");
LowVideo; dunklere Schrift auf dunklem Untergrund
WriteLn("dunklere Schrift");
InversVideo; dunkle Schrift auf hellem Untergrund
WriteLn("inverse Schrift");
NoSound
NoSound schaltet den im Computer eingebauten Lautsprecher ab.
Deklaration :
PROCEDURE NoSound;
Beispiel :
Sound(1000); Ton mit der Frequenz f=1000Hz 1s (1000ms)
Delay(1000); lang ausgeben,
NoSound; dann die Tonausgabe abschalten
Randomize
Randomize erzeugt den Anfang einer neuer Folge von Zufallszahlen.
Deklaration :
PROCEDURE Randomize;
Beispiel :
Randomize; Anfang einer neuen Folge erzeugen
Write(Random(100)); Zufallszahl zwischen 0 und 99 drucken
READ
Mit Read erfolgen Eingaben über die Tastatur oder die Diskette/Festplatte.
Dabei sind Variablen beliebigen Typs (im Unterschied zu TURBO-PASCAL auch
#FF
ARRAY- und RECORD-Variablen bei der Tastatur-Eingabe) zugelassen. Für
REAL-Variablen können abweichend zu TURBO-PASCAL auch Terme eingegeben werden,
die allerdings keine Variablen enthalten dürfen. Bei STRING-Variablen wird das
Eingabefenster in einer Länge geöffnet, die der Deklaration entspricht.
Im Unterschied zu TURBO-PASCAl können die Variablen mit Werten vorbelegt
werden, die dann im Eingabefeld erscheinen und editiert werden können. Dabei
stehen die Tasten <-, ->, Home (Pos1), End (Ende), Del (Lösch), BackSpace (<--)
und Ins (Einf) zur Verfügung. Wenn das erste Zeichen keines dieser
Editorzeichen ist, wird das Eingabefenster gelöscht. Der Cursor bleibt nach der
Eingabe direkt hinter dem letzten eingegebenen Zeichen stehen.
Bei Dateien darf mit READ nur ein Lesevorgang in FILE-Typen vorgenommen werden.
Deklaration :
PROCEDURE Read(VAR v : VariableBeliebigenTyps);
PROCEDURE Read(VAR f : FILE; VAR v : VariableBeliebigenTyps);
Beispiel :
VAR
r : REAL;
s : STRING[20];
a : ARRAY[1..5] OF INTEGER;
f : FILE;
BEGIN
s := "abcd";
Read(s); Es wird ein 20 Zeichen langes Eingabefeld geöffnet.
Eingabe : "ABCD"
Bei dem ersten Zeichen "A" wird das Eingabefenster
gelöscht. Dann wird "A" als erstes Zeichen
geschrieben.
Eingabe : RETURN-Taste
Der Wert wird unverändert übernommen.
Eingabe : ->
Der Cursor bewegt sich um ein Zeichen nach rechts
auf "B". Wenn jetzt "Z" gedrückt wird, wird dieses
Zeichen an der zweiten Stelle eingefügt und es steht
"AZBCD" im Eingabefeld.
Read(r);
Eingabe : 1.234 oder 1.234E+3 oder sin(2*pi*100)
Read(a);
Auf dem Bildschirm erscheint der Text "A[1]". Direkt anschließend
ist das Eingabefeld geöffnet und es kann der erste Wert bearbeitet
werden. Nach <RETURN> erscheint "A[2]" mit dem Eingabefeld usw.
Die Eingabe kann mit <ESC> vorzeitig abgebrochen werden.
Assign(f, 'DATEN.DAT'); Datei öffnen
Reset(f); Lesemarke auf den Anfang setzen
Read(f, a); das Array a aus der Datei lesen
Close(f); Datei schließen
END;
READLN
Die Prozedur ReadLn entspricht weitgehend der Prozedur Read. Es gibt aber zwei
Unterschiede :
1) Nach ReadLn wird der Cursor auf den Anfang der folgenden Zeile gesetzt.
2) Bei Dateien darf mit ReadLn nur ein Lesevorgang in TEXT-Typen vorgenommen werden.
#FF
Deklaration :
PROCEDURE ReadLn(VAR v : VariableBeliebigenTyps);
PROCEDURE ReadLn(VAR t : TEXT; VAR v : VariableBeliebigenTyps);
Beispiel :
Read(s); Cursor bleibt hinter dem letzten Zeichen stehen
WriteLn; Cursor an den Anfang der nächsten Zeile
ReadLn(s); Cursor an den Anfang der nächsten Zeile (Kombination aus
Read(s) und WriteLn)
ReName
ReName ändert den Namen einer Datei.
Deklaration :
PROCEDURE ReName(f : FILE; NeuerName : STRING);
PROCEDURE ReName(t : TEXT; NeuerName : STRING);
Beispiel :
VAR
Datei : TEXT;
BEGIN
Assign(Datei, 'ITG.HLP'); Datei mit dem Namen verknüpfen
ReName(Datei, 'ITG.BAK'); Namen von ITG.HLP auf der Diskette /
Festplatte in ITG.BAK umändern
Close(Datei); Schließe die Datei.
END;
Reset
Reset setzt die Lese- / Schreibposition in einer Datei auf den Anfang der
Datei.
Deklaration :
PROCEDURE Reset(f : FILE);
PROCEDURE Reset(t : TEXT);
Beispiel :
VAR
Datei : TEXT;
s : STRING;
BEGIN
Assign(Datei, 'ITG.HLP'); Datei mit dem Namen verknüpfen
Reset(Datei); Anfang der Datei suchen
WHILE NOT EOF(Datei) DO BEGIN wenn das Dateiende noch nicht erreicht
ReadLn(Datei, s); ist, lies eine Zeile aus der Datei in die
WriteLn(s); Variable s und drucke s auf dem
END; Bildschirm aus.
Close(Datei); Schließe die Datei.
END;
#FF
ReWrite
ReWrite löscht die mit dieser Dateivariablen verknüpfte Datei, sofern eine
unter diesem Namen existiert, erzeugt eine neue unter dem gleichen Namen und
setzt die Lese- / Schreibposition auf den Anfang dieser Datei.
Deklaration :
PROCEDURE ReWrite(f : FILE);
PROCEDURE ReWrite(t : TEXT);
Beispiel :
VAR
Datei : TEXT;
s : STRING;
BEGIN
Assign(Datei, 'NEU.DAT'); Datei mit dem Namen verknüpfen
ReWrite(Datei); neue Datei anlegen und Schreibposition
auf den Anfang setzen
s := "Anfang einer neuen Datei";
WriteLn(Datei, s); s an den Anfang der Datei schreiben und
. gegebenenfalls weitere Texte anhängen
Close(Datei); Schließe die Datei.
END;
Seek
Seek(Dateivariable, Position) setzt den Lesezeiger in der Datei Dateivariable
an das Ende des Datensatzes mit dem Index Position.
Deklaration :
PROCEDURE Seek(f : FILE OF Datenstruktur; Position : WORD);
Beispiel :
TYPE
DatenStruktur = RECORD
x : INTEGER;
s : STRING[20];
END;
VAR
Daten : DatenStruktur;
f : FILE OF DatenStruktur;
BEGIN
Assign(f, "TEST.DAT"); der Datei einen Namen zuweisen
Reset(f); und zum Lesen öffnen
Seek(f, 3); Zeiger auf das Ende des 3.Datensatzes
Read(f, Daten); 4.Datensatz lesen!
Close(f); Datei schließen
END;
SetBkColor
Mit SetBkColor kann bei VGA-Karten die Hintergrundfarbe , bei CGA- und
Herkules-Karten das Hintergrundattribut verändert werden.
#FF
Achtung : Hintergrundfarben / Hintergrundattribute mit einem Zahlenwert
zwischen 8 und 15 erzeugen eine blinkende Schrift mit der Farbe / dem Attribut,
das man erhält, wenn man von dem Zahlenwert 8 abzieht.
Deklaration :
PROCEDURE SetBkColor(Farbe : BYTE);
wobei Farbe Werte von 0 bis 15 annehmen darf.
Beispiel :
SetColor(Blau); Schriftfarbe Blau wählen
SetBkColor(Gelb); Hintergrungfarbe Gelb (14) wählen
WriteLn("blau Schrift auf gelbem Hintergrund, blinkend");
SetBkColor(Dunkelgelb); Hintergrundfarbe Dunkelgelb (6) wählen
WriteLn("blau Schrift auf gelbem Hintergrund, nicht blinkend");
SetColor
Mit SetColor kann bei VGA-Karten die Schriftfarbe , bei CGA- und
Herkules-Karten das Schriftattribut verändert werden.
Deklaration :
PROCEDURE SetColor(Farbe : BYTE);
wobei Farbe Werte von 0 bis 15 annehmen darf.
Beispiel :
SetColor(Blau); Schriftfarbe Blau wählen
SetBkColor(Gelb); Hintergrungfarbe Gelb (14) wählen
WriteLn("blau Schrift auf gelbem Hintergrund, blinkend");
SetBkColor(Dunkelgelb); Hintergrundfarbe Dunkelgelb (6) wählen
WriteLn("blau Schrift auf gelbem Hintergrund, nicht blinkend");
Sound
Sound(f) schaltet den im Computer eingebauten Lautsprecher ein und bewirkt eine
Tonerzeugung eines Tones mit der Frequenz f.
Deklaration :
PROCEDURE Sound(Frequenz : WORD);
Beispiel :
Sound(1000); Ton mit der Frequenz f=1000Hz 1s (1000ms)
Delay(1000); lang ausgeben,
NoSound; dann die Tonausgabe abschalten
STR
STR wandelt eine Zahl in eine Zeichenkette um (Umkehrprozedur zu VAL).
Deklaration :
PROCEDURE STR(b : BYTE; VAR s : STRING);
PROCEDURE STR(i : INTEGER; VAR s : STRING);
PROCEDURE STR(w : WORD; VAR s : STRING);
PROCEDURE STR(l : LONGINT; VAR s : STRING);
#FF
PROCEDURE STR(r : REAL; VAR s : STRING);
Beispiel :
VAR
w : WORD;
r : REAL;
s : STRING;
BEGIN
w := 1234;
STR(w, s); s erhält den Wert "1234"
r := 1.234;
STR(r, s); s erhält den Wert "1.2340000000E+0000"
END;
VAL
VAL wandelt eine Zeichenkette in eine Zahlenvariable um (Umkehrprozedur zu STR).
Deklaration :
PROCEDURE VAL(s : STRING; VAR b : BYTE; FehlerPos : WORD);
PROCEDURE VAL(s : STRING; VAR i : INTEGER; FehlerPos : WORD);
PROCEDURE VAL(s : STRING; VAR w : WORD; FehlerPos : WORD);
PROCEDURE VAL(s : STRING; VAR l : LONGINT; FehlerPos : WORD);
PROCEDURE VAL(s : STRING; VAR r : REAL; FehlerPos : WORD);
Beispiel :
VAR
w, FehlerPos : WORD
BEGIN
VAL("1234", w, FehlerPos); w erhält den Wert 1234, FehlerPos ist 0
VAL("12q4", w, FehlerPos); FehlerPos ist 3, weil an der 3. Stelle der
Zeichenkette ein Zeichen steht, das keine
END; Ziffer ist
Window
Window definiert ein Textfenster auf dem Bildschirm. Alle nachfolgenden Write-/
GotoXY-Anweisungen beziehen sich auf dieses Fenster.
Deklaration :
PROCEDURE Window(xMin, yMin, xMax, yMax : WORD);
Beispiel :
Window(10, 3, 60, 8); definiert einen Teilausschnitt des Bildschirms als
Textfenster. Die Koordinaten beziehen sich auf den
vollen Bildschirm.
GotoXY(1, 1); setzt den Cursor in die linke obere Ecke des Fensters
(absolute Koordinaten (10/3) und (60/8))
Window(1, 1, 80, 25);
WRITE
Mit Write erfolgen Ausgaben auf den Bildschirm oder die Diskette / Festplatte.
Dabei sind Variablen beliebigen Typs (im Unterschied zu TURBO-PASCAL auch
#FF
ARRAY- und RECORD-Variablen bei der Bildschirm-Ausgabe) zugelassen. REAL-
Variablen werden soweit wie möglich ohne Expontialdarstellung gedruckt. Der
Cursor bleibt nach der Ausgabe direkt hinter dem letzten ausgegebenen Zeichen
stehen.
Bei Dateien darf mit WRITE nur ein Schreibvorgang in FILE-Typen vorgenommen
werden.
Deklaration :
PROCEDURE Write(v : VariableBeliebigenTyps);
PROCEDURE Write(VAR f : FILE; v : VariableBeliebigenTyps);
Beispiel :
VAR
a : ARRAY[1..3] OF INTEGER;
f : FILE;
BEGIN
s := "abcd";
Write(s); Es wird "abcd" gedruckt.
Write(s:6); Es wird " abcd" gedruckt. Die Ausgabe erfolgt über
mindestens 6 Zeichen. Wenn die Zeichenkette weniger als 6
Zeichen enthält, werden vor dem ersten Zeichen solange
Leerzeichen einfügt, bis die Zeichenkette 6 Zeichen enthält.
In diesem Fall werden also 6-4 = 2 Leerzeichen eingefügt.
Write("a"); druckt "a"
Write("a":3); druckt " a" wie oben beschrieben
Write(1234); druckt "1234"
Write(1234:6); druckt " 1234"
Write(pi); druckt "3.141592654" abweichend von TURBO-PASCAL
Write(pi:13); druckt " 3.141592654" (13 Zeichen)
Write(pi:10:5) druckt " 3.14159" (10 Zeichen insgesamt, davon 5
Nachkommastellen)
a[1] := 1;
a[2] := 2;
a[3] := 3;
Write(a); druckt "(A[1]=1,A[2]=2,A[3]=3)" mit Angabe des Variablen-
Namens, des Feldindexes und des Wertes (in TURBO-
PASCAL nicht möglich)
Write(a:3); druckt "(A[1]= 1,A[2]= 2,A[3]= 3)" und verwendet für die
Darstellung des Variableninhaltes 3 Zeichen
Assign(f, 'DATEN.DAT'); Datei öffnen
ReWrite(f); Schreibmarke auf den Anfang setzen
Write(f, a); das Array a in die Datei schreiben
Close(f); Datei schließen
END;
WRITELN
Die Prozedur WriteLn entspricht weitgehend der Prozedur Write. Es gibt aber
zwei Unterschiede :
1) Nach WriteLn wird der Cursor auf den Anfang der folgenden Zeile gesetzt.
2) Bei Dateien darf mit WriteLn nur ein Schreibvorgang in TEXT-Typen
vorgenommen werden.
Deklaration :
PROCEDURE WriteLn(v : VariableBeliebigenTyps);
PROCEDURE WriteLn(VAR t : TEXT; v : VariableBeliebigenTyps);
#FF
Beispiel :
Write(s); Cursor bleibt hinter dem letzten Zeichen stehen
WriteLn; Cursor an den Anfang der nächsten Zeile
WriteLn(s); Cursor an den Anfang der nächsten Zeile (Kombination aus
Write(s) und WriteLn)
#FF
ITG-Pascal-Prozeduren
AusgabeAufBildschirm AusgabeAufDiskette AusgabeAufDrucker
Auswahl AuswahlFeld Bogen
BreakPoint DatenAufDiskette DatenVonDiskette
DebugEin DebugAus DefiniereFunktionsterm
DreheAuf DruckeBildschirm EingabeFeld
EingabeVonTastatur EingabeVonDiskette EinzelschrittEin
EinzelschrittAus ErsetzeBuchstaben Färben
FügeBuchstabenEin GeheNach GrafikFenster
GrafikSchirm Hinten InGrad
ImBogenmaß Kreis LiesEingaben
LinkerBogen Links LöscheBuchstaben
Menü MitCursor MitIgel
MitProtokoll MitStift NeueZufallsZahlenFolge
ÖffneAusgabeDatei ÖffneEingabeDatei ÖffneFenster
OhneCursor OhneIgel OhneProtokoll
OhneStift PapierFarbe Pause
Punkt RechterBogen Rechts
SchließeAusgabeDatei SchließeEingabeDatei SchließeFenster
SchreibPort StiftFarbe Strecke
TextSchirm Ton Ursprung
Vertausche Vorne WähleDatei
Wischen
AusgabeAufBildschirm
Wenn die Ausgabe, die mit Write / WriteLn normalerweise auf den Bildschirm
erfolgt, mit AusgabeAufDrucker auf den Drucker oder mit AusgabeAufDiskette auf
die Diskette umgelenkt wurde, kann sie mit AusgabeAufBildschirm wieder auf den
Bildschirm zurückgelenkt werden.
Deklaration :
PROCEDURE AusgabeAufBildschirm;
Beispiel :
AusgabeAufDrucker;
WriteLn("Diese Ausgabe erfolgt auf den Drucker!");
AusgabeAufBildschirm;
WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
AusgabeAufDiskette
Mit AusgabeAufDiskette wird die Ausgabe, die mit Write / WriteLn normalerweise
auf den Bildschirm erfolgt, auf die Diskette / Festplatte umgelenkt. Zuvor muß
aber eine Ausgabedatei mit ÖffneAusgabeDatei(DateiName) geöffnet werden!
Deklaration :
PROCEDURE AusgabeAufDiskette;
Beispiel :
ÖffneAusgabeDatei("AUSGABE.TXT");
AusgabeAufDiskette;
WriteLn("Diese Ausgabe erfolgt auf Diskette!");
#FF
AusgabeAufBildschirm;
WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
SchließeAusgabeDatei;
AusgabeAufDrucker
Mit AusgabeAufDrucker wird die Ausgabe, die mit Write / WriteLn normalerweise
auf den Bildschirm erfolgt, auf den Drucker umgelenkt.
Deklaration :
PROCEDURE AusgabeAufDrucker;
Beispiel :
AusgabeAufDrucker;
WriteLn("Diese Ausgabe erfolgt auf den Drucker!");
AusgabeAufBildschirm;
WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
Auswahl
Mit Auswahl kann eine Wahl aus einer Liste von Daten erfolgen, die mit
AuswahlFeld vorher definiert wurden. In der Variablen Index wird dabei
zurückgegeben, als wievieltes Element das mit RETURN angewählte in der Liste
eingetragen wurde. Wenn die Auswahl mit ESC abgebrochen wird, ist Index = 0!
Beim Verlassen der Auswahl wird die Anzahl der Auswahlelemente automatisch auf
Null gesetzt.
Der linke obere Eckpunkt des Auswahlfenster hat die Koordinaten P(x/y).
Deklaration :
PROCEDURE Auswahl(x, y : INTEGER; VAR Index : INTEGER);
Beispiel :
VAR
Liste : ARRAY[1..60] OF STRING[20];
n, Wahl : INTEGER;
BEGIN
FOR n := 1 TO 60 DO BEGIN
Str(n:5, Liste[n]);
AuswahlFeld(Liste[n]); Elemente als STRING in die
END; Auswahlliste eintragen
ÖffneFenster(1, 1, 80, 25, OhneRahmen); alten Bildschirminhalt speichern
Auswahl(10, 3, Wahl); linken oberen Eckpunkt der
Auswahl auf P(10/3) setzen und
das Menü aufrufen Wahl enthält
den Index des gewählten
Listenelementes
SchließeFenster; alten Bildschirm wiederherstellen
IF Wahl > 0 THEN BEGIN
WriteLn(Liste[Wahl]);
END
ELSE BEGIN
WriteLn("Auswahl wurde mit <ESC> abgebrochen");
END;
END.
#FF
AuswahlFeld
AuswahlFeld fügt einer Liste, aus der ein Element ausgewählt werden soll, ein
Element hinzu. Der Text, der in dem Auswahlmenü erscheinen soll, muß der
Prozedur AuswahlFeld als STRING übergeben werden.
Deklaration :
PROCEDURE AuswahlFeld(DatenText : STRING[40]);
Beispiel :
VAR
Liste : ARRAY[1..60] OF STRING[20];
n, Wahl : INTEGER;
BEGIN
FOR n := 1 TO 60 DO BEGIN
Str(n:5, Liste[n]);
AuswahlFeld(Liste[n]); Elemente als STRING in die
END; Auswahlliste eintragen
ÖffneFenster(1, 1, 80, 25, OhneRahmen); alten Bildschirminhalt speichern
Auswahl(10, 3, Wahl); linken oberen Eckpunkt der
Auswahl auf P(10/3) setzen und
das Menü aufrufen Wahl enthält
den Index des gewählten
Listenelementes
SchließeFenster; alten Bildschirm wiederherstellen
IF Wahl > 0 THEN BEGIN
WriteLn(Liste[Wahl]);
END
ELSE BEGIN
WriteLn("Auswahl wurde mit <ESC> abgebrochen");
END;
END.
DatenAufDiskette
Mit der Anweisung DatenAufDiskette kann der Inhalt einer beliebigen Variablen,
die allerdings keine Dateivariable (TEXT oder FILE) sein darf, unter dem
angegebenen Dateinamen auf Diskette gespeichert werden.
Deklaration :
PROCEDURE DatenAufDiskette(DateiName : STRING;
v : VariableBeliebigenTyps);
Beispiel :
TYPE
DatenSatz = RECORD Datenstruktur definieren
Firma : STRING[40];
Ort : STRING[20];
Plz : WORD;
END;
VAR
d : DatenSatz; Variable deklarieren
BEGIN
d.Firma := "Software Vertrieb"; Variable mit Werten belegen
d.Ort := "Kiel";
#FF
d.Plz := 2300; und unter dem Namen
DatenAufDiskette("FIRMEN.DAT", d); "FIRMEN.DAT" abspeichern
END;
DatenVonDiskette
Mit der Anweisung DatenVonDiskette kann der Inhalt einer beliebigen Variablen,
die allerdings keine Dateivariable (TEXT oder FILE) sein darf, unter dem
angegebenen Dateinamen von Diskette gelesen werden.
Deklaration :
PROCEDURE DatenVonDiskette(DateiName : STRING;
VAR v : VariableBeliebigenTyps);
Beispiel :
TYPE
DatenSatz = RECORD Datenstruktur definieren
Firma : STRING[40];
Ort : STRING[20];
Plz : WORD;
END;
VAR
d : DatenSatz; Variable deklarieren
BEGIN
IF EsGibtDatei("FIRMEN.DAT") THEN BEGIN gibt es die Datei
"FIRMEN.DAT"?
DatenVonDiskette("FIRMEN.DAT", d); wenn ja von Diskette
in die Variable d lesen
WriteLn(d); und ausdrucken
END
ELSE BEGIN
WriteLn("FIRMEN.DAT nicht gefunden"); sonst Fehlermeldung
END;
END;
DefiniereFunktionsTerm
Wenn mit DefiniereFunktionsterm ein Funktionsterm festgelegt wurde, kann mit
FunktionWert ein Wert an einer Stelle berechnet werden.
Deklaration :
PROCEDURE DefiniereFunktionsterm(Term : STRING);
Beispiel :
DefiniereFunktionsterm("5*x"); zuerst Funktionsterm festlegen
IF FunktionstermFehler = 0 THEN BEGIN kein Fehler enthalten?
FOR n := 1 TO 5 DO BEGIN
WriteLn(FunktionsWert(n)); und erst dann Funktionswerte
END; berechnen
END;
DruckeBildschirm
Mit DruckeBildschirm wird der Inhalt des Text- oder des Grafikschirms ausgedruckt.
#FF
Deklaration :
PROCEDURE DruckeBildschirm;
Beispiel :
Grafikschirm; in den Grafikmodus schalten
ZeichneIrgendEtwas; Grafik erstellen
DruckeBildschirm; und ausdrucken
EingabeFeld
Mit EingabeFeld wird ein Feld einer Bildschirmmaske zur Eingabe eines
Datensatzes definiert. Wenn alle gewünschten Felder definiert wurden, wird das
Einlesen mit LiesEingaben ausgeführt. Dabei kann mit den Tasten "Auf(CrsUp)",
"Ab(CrsDn)", "Pos1(Home)" und "Ende(End)" zwischen den Eingabefeldern beliebig
oft gewechselt werden. Die Eingabe wird beendet, wenn in dem zuletzt
definierten Feld die RETURN-Taste gedrückt wird oder in einem beliebigen Feld
die ESC-Taste oder eine der Tastenkombinationen Strg-Bild-Auf(Strg-PgUp) oder
Strg-Bild-Ab(Strg-PgDn) gedrückt wird.
Deklaration :
PROCEDURE EingabeFeld(x, y : INTEGER;
Erklärung : STRING;
VAR v : EinfacheVariable);
EinfacheVariable ist vom Typ CHAR, STRING, BYTE, INTEGER, WORD,
LONGINT, REAL, DOUBLE, EXTENDED oder BOOLEAN
Beispiel :
VAR
r : REAL;
i : INTEGER;
s : STRING[20];
BEGIN
r := 1.234; Belegung der Variablen mit Startwerten,
i := 500; die editiert werden sollen
Name := "Irgendwer";
REPEAT
EingabeFeld(5, 3, "Dezimalzahl : ", r);
EingabeFeld(2, 6, "ganze Zahl zwischen 0 und 1000 : ", i);
EingabeFeld(10, 15, "Name : ", s);
Zuerst wird für alle zu bearbeitenden Variablen
ein Eingabefeld definiert. Diese Definition muß
innerhalb der Schleife stehen, weil
LiesEingaben beim Beenden alle Definitionen
löscht!
LiesEingaben; Jetzt wird der Editor für die Eingabefelder
aufgerufen.
UNTIL ((0 >= i) AND (i <= 1000)) OR (LetzteTaste = ESC);
Wurde mit ESC abgebrochen?
EingabeVonTastatur
EingabeVonTastatur aktiviert die Tastatur als Eingabemedium, wenn irgendwann
vorher im Programm die Eingabe mit EingabeVonDiskette auf die Diskette
#FF
umgelenkt wurde. Beim Start eines Programms erfolgt die Eingabe automatisch
über die Tastatur, wenn keine andere Anweisung gegeben wurde.
Deklaration :
PROCEDURE EingabeVonTastatur;
Beispiel :
VAR
s : STRING;
BEGIN
ÖffneEingabeDatei("EINGABEN.DAT"); Eingabedatei zuweisen
EingabeVonDiskette; und aktivieren
Write("Eingabe von der Diskette:");
ReadLn(s); String von der Diskette lesen
EingabeVonTastatur; Tastatur aktivieren
Write("Eingabe von der Tastatur:");
ReadLn(s); String über die Tastatur
SchließeEingabeDatei; lesen und Datei schließen
END;
EingabeVonDiskette
EingabeVonDiskette aktiviert die Diskette anstelle der Tastatur als
Eingabemedium, wenn irgendwann vorher im Programm mit ÖffneEingabeDatei eine
Datei festgelegt wurde, aus der die Zeichen gelesen werden sollen.
Deklaration :
PROCEDURE EingabeVonDiskette;
Beispiel :
VAR
s : STRING;
BEGIN
ÖffneEingabeDatei("EINGABEN.DAT"); Eingabedatei zuweisen
EingabeVonDiskette; und aktivieren
Write("Eingabe von der Diskette:");
ReadLn(s); String von der Diskette lesen
EingabeVonTastatur; Tastatur aktivieren
Write("Eingabe von der Tastatur:");
ReadLn(s); String über die Tastatur
SchließeEingabeDatei; lesen und Datei schließen
END;
ErsetzeBuchstaben
ErsetzeBuchstaben ersetzt einen Buchstaben / ein Zeichen eines Strings durch
einen anderen.
Deklaration :
PROCEDURE ErsetzeBuchstaben(VAR Zeichenkette : STRING;
WievielterBuchstabe : WORD;
DurchWelchenBuchstaben : CHAR);
Beispiel :
s := "abcdef";
#FF
ErsetzeBuchstaben(s, 3, "x"); ersetzt den dritten Buchstaben "c" durch "x".
s ist dann "abxdef".
FügeBuchstabenEin
FügeBuchstabenEin fügt einen Buchstaben / ein Zeichen oder einen String in
einen String ab einer vorgegebenen Position ein.
Deklaration :
PROCEDURE FügeBuchstabenEin(WelchenBuchstaben : CHAR;
VAR InZeichenkette : STRING;
WievielterBuchstabe : WORD);
PROCEDURE FügeBuchstabenEin(WelcheZeichenkette : STRING;
VAR InZeichenkette : STRING;
AbWelchemBuchstaben : WORD);
Beispiel :
1)
s := "abcdef";
FügeBuchstabenEin("x", s, 3); fügt den Buchstaben "x" an die dritte Stelle
zwischen "b" und "c" ein. s ist dann "abxcdef".
2)
s := "abcdef";
t := "xy";
FügeBuchstabenEin(t, s, 5); fügt die Zeichenkette "xy" beginnend an der
fünften Stelle zwischen "d" und "e" ein. s ist
dann "abcdxyef".
InGrad
InGrad bewirkt, daß alle Berechnungen mit trigonometrischen Funktionen in Grad
(Altgrad : α=360° für den Vollkreis) durchgeführt werden.
Deklaration :
PROCEDURE InGrad;
Beispiel :
InGrad; in Grad rechnen
WriteLn(sin(90)); ergibt 1.00000..
ImBogenmaß; im Bogenmaß rechnen
WriteLn(sin(pi/2)); ergibt 1.00000..
ImBogenmaß
ImBogenmaß bewirkt, daß alle Berechnungen mit trigonometrischen Funktionen im
Bogenmaß (α=2*pi für den Vollkreis) durchgeführt werden. Beim Start eines
Programms erfolgt die Berechnung immer in Grad, wenn keine andere Anweisung
gegeben wurde.
Deklaration :
PROCEDURE ImBogenmaß;
Beispiel :
ImBogenmaß; im Bogenmaß rechnen
#FF
WriteLn(sin(pi/2)); ergibt 1.00000..
InGrad; in Grad rechnen
WriteLn(sin(90)); ergibt 1.00000..
LiesEingaben
Mit LiesEingaben wird die Eingabe eines Datensatzes gestartet, der zuvor
elementweise mit EingabeFeld definiert wurde. Dabei kann mit den Tasten
"Auf(CrsUp)", "Ab(CrsDn)", "Pos1(Home)" und "Ende(End)" zwischen den
Eingabefeldern beliebig oft gewechselt werden. Die Eingabe wird beendet, wenn
in dem zuletzt definierten Feld die RETURN-Taste gedrückt wird oder in einem
beliebigen Feld die ESC-Taste gedrückt wird.
Deklaration :
PROCEDURE LiesEingaben;
Beispiel :
VAR
r : REAL;
i : INTEGER;
s : STRING[20];
BEGIN
r := 1.234; Belegung der Variablen mit Startwerten,
i := 500; die editiert werden sollen
Name := "Irgendwer";
REPEAT
EingabeFeld(5, 3, "Dezimalzahl : ", r);
EingabeFeld(2, 6, "ganze Zahl zwischen 0 und 1000 : ", i);
EingabeFeld(10, 15, "Name : ", s);
Zuerst wird für alle zu bearbeitenden Variablen
ein Eingabefeld definiert. Diese Definition muß
innerhalb der Schleife stehen, weil
LiesEingaben beim Beenden alle Definitionen
löscht!
LiesEingaben; Jetzt wird der Editor für die Eingabefelder
aufgerufen.
UNTIL (0 <= i) AND (i <= 1000);
LöscheBuchstaben
LöscheBuchstaben löscht einen oder mehrere aufeinanderfolgende
Buchstaben / Zeichen beginnend ab einer vorgegebenen Stelle.
Deklaration :
PROCEDURE LöschenBuchstaben(VAR Zeichenkette : STRING;
WelchenBuchstaben,
WievieleBuchstaben : WORD);
Beispiel :
s := "abxycdef";
LöscheBuchstaben(s, 3, 2); löscht ab dem dritten Buchstaben zwei
Buchstaben. s ist dann "abcdef".
#FF
Menü
Menü errichtet ein Pulldownmenü an einer vorgegebenen Stelle des Bildschirms
mit vorgegebenen Hotkeys, über die ein Menüpunkt direkt angewählt werden kann.
Dem als Hotkey vorgesehenen Buchstaben wird das Zeichen ^ vorangestellt.
Innerhalb des Menüs kann der Anwahlbalken auch mit den Tasten "Auf(CrsUp)",
"Ab(CrsDn)", "Ende(End)" und "Pos1(Home)" verschoben werden. CR aktiviert den
mit dem Balken unterlegten Menüpunkt und liefert als Ergebnis den als Hotkey
vorgesehenen Buchstaben zurück. ESC bricht die Anwahl ab und liefert ESC
(CHR(27)) als Ergebnis.
Deklaration :
PROCEDURE Menü(x, y : WORD;
Menüpunkte : STRING;
VAR Angewählt : CHAR);
Beispiel :
VAR
c : CHAR;
BEGIN
REPEAT
Menü(10, 5, " ^Laden; ^Bearbeiten; ^Speichern; ^Ende;", c);
Das Menü hat für den linken oberen Eckpunkt die Koordinaten
(10/5). Als Hotkeys sind "L", "B", "S" und "E" durch das
vorangestellte "^" definiert. Die einzelnen Menüpunkte werden
durch ein Semikolon ";" getrennt. Im Menü ist beim Start die
oberste Zeile mit " Laden" vollständig hell unterlegt. In den
folgenden Zeilen sind es die Buchstaben "B", "S" und "E".
Durch Drücken der RETURN-Taste oder des "L"'s erhält c
den Wert "L".
Auf dem Bildschirm erscheint das folgende Menü :
╔════════════╗
║ Laden ║ Diese Zeile ist hell unterlegt.
║ Bearbeiten ║ "B" ist hell unterlegt.
║ Speichern ║ "S" ist hell unterlegt.
║ Ende ║ "E" ist hell unterlegt.
╚══════CR/ESC╝
Jetzt wird die Variable c ausgewertet und es werden die einzelnen Prozeduren je
nach Inhalt von c aufgerufen.
CASE c OF
"L" : Laden;
"B" : Bearbeiten;
"S" : Speichern;
END;
UNTIL c IN ["E", ESC]; "E" oder ESC-Taste
MitCursor
In ITG-PASCAL ist der Cursor normalerweise nur in READ-Anweisungen sichtbar.
Wenn man erreichen will, daß der Cursor auch sonst sichtbar ist, muß man ihn
durch MitCursor einschalten.
#FF
Startvorgabe eines Programms ist ohne Cursor.
Deklaration :
PROCEDURE MitCursor;
Beispiel :
MitCursor; Cursor einschalten
Write("Geben Sie einen Buchstaben ein : "); Cursor blinkt hinter ": "
c := ReadKey; Zeichen über die Tastatur
einlesen
OhneCursor; Cursor ausschalten
Write("Geben Sie einen Buchstaben ein : "); Cursor blinkt nicht hinter ": "
c := ReadKey; Zeichen über die Tastatur
einlesen
MitProtokoll
ITG-PASCAL protokolliert alle Textausgaben mit Write- und Read-Anweisungen in
einem zweiten Editorfenster mit, sofern genügend Speicherplatz zur Verfügung
steht. Wenn dieses Protokoll zwischendurch durch OhneProtokoll abgeschaltet
wurde, kann es durch MitProtokoll wieder eingeschaltet werden.
Startvorgabe eines Programms ist mit Protokoll.
Deklaration :
PROCEDURE MitProtokoll;
Beispiel :
OhneProtokoll;
WriteLn("Dieser Text wird nicht im zweiten Editorfenster mitprotokolliert.");
MitProtokoll;
WriteLn("Dieser Text wird im zweiten Editorfenster mitprotokolliert.");
NeueZufallsZahlenFolge
NeueZufallsZahlenFolge erzeugt den Anfang einer neuer Folge von Zufallszahlen.
Deklaration :
PROCEDURE NeueZufallsZahlenFolge;
Beispiel :
NeueZufallsZahlenFolge; Anfang einer neuen Folge erzeugen
Write(GanzeZufallsZahl(100)); Zufallszahl zwischen 0 und 99 drucken
ÖffneAusgabeDatei
Bevor die Ausgabe, die mit Write / WriteLn normalerweise auf den Bildschirm
erfolgt, mit AusgabeAufDiskette auf die Diskette / Festplatte umgelenkt wird,
muß eine Ausgabedatei mit ÖffneAusgabeDatei(DateiName) geöffnet werden!
Deklaration :
PROCEDURE ÖffneAusgabeDatei(DateiName : STRING);
Beispiel :
ÖffneAusgabeDatei("AUSGABE.TXT");
#FF
AusgabeAufDiskette;
WriteLn("Diese Ausgabe erfolgt auf Diskette!");
AusgabeAufBildschirm;
WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
SchließeAusgabeDatei;
ÖffneEingabeDatei
Bevor die Eingabe, die normalerweise über die Tastatur erfolgt, mit
EingabeVonDiskette auf die Diskette / Fest-platte umgelenkt werden kann, muß
mit ÖffneEingabeDatei zum Lesen deklariert werden.
Deklaration :
PROCEDURE ÖffneEingabeDatei(DateiName : STRING);
Beispiel :
VAR
s : STRING;
BEGIN
ÖffneEingabeDatei("EINGABEN.DAT"); Eingabedatei zuweisen
EingabeVonDiskette; und aktivieren
Write("Eingabe von der Diskette:");
ReadLn(s); String von der Diskette lesen
EingabeVonTastatur; Tastatur aktivieren
Write("Eingabe von der Tastatur:");
ReadLn(s); String über die Tastatur lesen
SchließeEingabeDatei; Datei wieder schließen
END;
ÖffneFenster
ÖffneFenster speichert den augenblicklichen Inhalt des Textbildschirmes ab und
definiert ein neues Textfenster, das mit einem Rahmen versehen werden kann. Der
linke obere Eckpunkt des Fensters ist für alle jetzt folgenden Textausgaben der
Punkt P(1/1).
Jedes Fenster, das geöffnet wurde, muß auch wieder geschlossen werden!
Deklaration :
PROCEDURE ÖffneFenster(xLinks, yOben, xRechts, yUnten,
MitOderOhneRahmen : INTEGER);
Es muß gelten : 1 <= xLinks < xRechts <= 80
1 <= yOben < yUnten <= 25
MitOderOhneRahmen ε { MitRahmen, OhneRahmen }
Beispiel :
GotoXY(10, 10);
Write("Dieser Text verschwindet unter dem Fenster");
Delay(2000);
ÖffneFenster(5, 5, 75, 20, MitRahmen); alten Bildschirminhalt sichern
und Fenster öffnen
ClrScr; Fensterinhalt löschen
GotoXY(5, 5); relative Koordinaten im Fenster
Write("absolute Koordinaten (10/10)");
Delay(2000); 2 Sekunden warten
#FF
SchließeFenster; alten Bildschirminhalt wieder-
herstellen und altes Fenster
wieder öffnen
Delay(2000);
OhneCursor
In ITG-PASCAL ist der Cursor normalerweise nur in READ-Anweisungen sichtbar.
Wenn man erreichen will, daß der Cursor auch sonst sichtbar ist, muß man ihn
durch MitCursor einschalten. Durch OhneCursor wird er wieder abgeschaltet.
Startvorgabe eines Programms ist ohne Cursor.
Deklaration :
PROCEDURE OhneCursor;
Beispiel :
MitCursor; Cursor einschalten
Write("Geben Sie einen Buchstaben ein : "); Cursor steht hinter ": "
c := ReadKey; Zeichen über die Tastatur
einlesen
OhneCursor; Cursor ausschalten
Write("Geben Sie einen Buchstaben ein : "); Cursor blinkt nicht hinter ": "
c := ReadKey; Zeichen über die Tastatur
einlesen
OhneProtokoll
ITG-PASCAL protokolliert alle Textausgaben mit Write- und Read-Anweisungen in
einem zweiten Editorfenster mit, sofern genügend Speicherplatz zur Verfügung
steht. Dieses Protokoll kann durch OhneProtokoll abgeschaltet werden.
Startvorgabe eines Programms ist mit Protokoll.
Deklaration :
PROCEDURE OhneProtokoll;
Beispiel :
OhneProtokoll;
Write("Dieser Text wird nicht im zweiten Editorfenster");
WriteLn("mitprotokolliert.");
MitProtokoll;
Write("Dieser Text wird im zweiten Editorfenster");
WriteLn("mitprotokolliert.");
Pause
Pause unterbricht ein Programm solange, bis die RETURN-Taste gedrückt wird.
Deklaration :
PROCEDURE Pause;
Beispiel :
WriteLn("Weiter mit der RETURN-Taste");
Pause; auf Drücken der RETURN-Taste warten
WriteLn("Die RETURN-Taste wurde betätigt");
#FF
SchließeAusgabeDatei
Wenn die Ausgabe, die mit Write / WriteLn normalerweise auf den Bildschirm
erfolgt, mit AusgabeAufDiskette auf die Diskette / Festplatte umgelenkt wurde,
muß die Ausgabedatei vor dem Programmende mit SchließeAusgabeDatei geschlossen
werden!
Deklaration :
PROCEDURE SchließeAusgabeDatei;
Beispiel :
ÖffneAusgabeDatei("AUSGABE.TXT");
AusgabeAufDiskette;
WriteLn("Diese Ausgabe erfolgt auf Diskette!");
AusgabeAufBildschirm;
WriteLn("Diese Ausgabe erfolgt auf den Bildschirm.");
SchließeAusgabeDatei;
SchließeEingabeDatei
SchließeEingabeDatei schließt die Datei, die mit ÖffneEin-gabeDatei zum Lesen
von Eingaben anstelle der Tastatur geöffnet wurde.
Deklaration :
PROCEDURE SchließeEingabeDatei;
Beispiel :
VAR
s : STRING;
BEGIN
ÖffneEingabeDatei("EINGABEN.DAT"); Eingabedatei zuweisen
EingabeVonDiskette; und aktivieren
Write("Eingabe von der Diskette:");
ReadLn(s); String von der Diskette lesen
EingabeVonTastatur; Tastatur aktivieren
Write("Eingabe von der Tastatur:");
ReadLn(s); String über die Tastatur lesen
SchließeEingabeDatei; Datei wieder schließen
END;
SchließeFenster
SchließeFenster stellt den Inhalt und die Fensterkoordinaten des Textfensters
wieder her, wie es dem Aufruf der Prozedur ÖffneFenster vorhanden war. Es
dürfen mehrere Fenster gleichzeitig geöffnet sein. Geschlossen wird immer das
zuletzt geöffnete Fenster.
Jedes Fenster, das geöffnet wurde, muß auch wieder geschlossen werden!
Deklaration :
PROCEDURE SchließeFenster;
Beispiel :
GotoXY(10, 10);
Write("Dieser Text verschwindet unter dem Fenster");
#FF
Delay(2000);
ÖffneFenster(5, 5, 75, 20, MitRahmen); alten Bildschirminhalt sichern
und Fenster öffnen
ClrScr; Fensterinhalt löschen
GotoXY(5, 5); relative Koordinaten im Fenster
Write("absolute Koordinaten (10/10)");
Delay(2000); 2 Sekunden warten
SchließeFenster; alten Bildschirminhalt wieder-
herstellen und altes Fenster
wieder öffnen
Delay(2000);
SchreibPort
Mit SchreibPort wird ein Wert über einen Port des Computers an die Peripherie
ausgegeben.
Achtung : Vor der Benutzung dieser Anweisung sollte man sich aber genau
informieren, da ein Schreiben in einen falschen Port zu Zerstörungen führen
kann!
Deklaration :
PROCEDURE SchreibPort(PortAdresse, Ausgabewert : WORD);
Beispiel :
SchreibPort(PortAdresse, Ausgabewert); schreibt den Ausgabewert an die
Portadresse
Ton
Ton erzeugt einen Ton mit vorgegebener Frequenz und Dauer.
Deklaration :
PROCEDURE Ton(Frequenz, MilliSekunden : WORD);
Beispiel :
Ton(440, 1000); erzeugt für 1000ms (1s) einen Ton der Frequenz 440Hz
Vertausche
Vertausche vertauscht die Inhalte zweier Variablen beliebigen Typs außer
FILE- und TEXT-Variablen gegeneinander.
Deklaration :
PROCEDURE Vertausche(VAR a, b : VariableBeliebigenTyps);
Beispiel :
a := "a"; Wertzuweisungen
b := "b";
Vertausche(a, b); jetzt hat a den Inhalt "b" und b den Inhalt "a"
#FF
WähleDatei
WähleDatei(x, y, Maske, Dateiname) öffnet ein Auswahlfenster mit dem linken
oberen Eckpunkt P(x/y) als Bildschirm-koordinaten, in dem alle Verzeichnisse
und alle Dateien, die der Maske entsprechen, angezeigt werden. Mit den
Cursortasten wird ein Verzeichnis oder ein Dateiname angewählt. Im Falle eines
Verzeichnisses wird in dieses vorübergehend gewechselt, im Falle eines
Dateinamens wird dieser an das ausführende Programm übergeben. Mit der
ESC-Taste kann die Wahl abgebrochen werden. Der Dateiname ist dann leer. Der
Bildschirm wird nach Verlassen des Menüs automatisch restauriert.
Deklaration :
PROCEDURE WähleDatei(x, y : INTEGER;
Maske : STRING;
VAR Dateiname : STRING);
Beispiel :
VAR
Dateiname : STRING;
BEGIN
WähleDatei(10, 3, "*.PAS", Dateiname); alle PASCAL-Programme anzeigen
IF Dateiname <> "" THEN BEGIN
DatenVonDiskette(Dateiname, Variable); Inhalt der Datei an
END; Variable übergeben
END;
#FF
Debugger
DebugEin DebugAus BreakPoint EinzelschrittEin EinzelschrittAus
DebugEin
Ab diesem Zeitpunkt werden alle durch ein in der Deklaration vorangestelltes
"!" markierten Variablen mit ihrem Wert und der Quelltextzeile angezeigt, bis
die Anweisung DebugAus ausgeführt wird.
Zusätzlich zur Anzeige auf dem Bildschirm werden alle Informationen in ein
zweites Editor-Fenster geschrieben, sofern genügend Speicherplatz zur Verfügung
steht, und können nach Beendigung des Programms unter "Editor /
Programm-/Fehler-Ausgabe ansehen" betrachtet und gegebenenfalls auch mit
"Blockschreiben" auf Diskette gespeichert werden.
2 Beispiele :
1)
PROCEDURE p(!a, b : INTEGER); nur die Variable a ist markiert, b nicht
VAR
c, !d : REAL; nur die Variable d ist markiert, c nicht
BEGIN
c := a^b; keine Ausgabe der Variablen
DebugEin; Quelltextausgabe und Ausgabe der
Variablen wird ab hier ausgeführt
d := c / a;
c := d * c;
DebugAus; Ausgabe wird nicht mehr durchgeführt
b := a;
END;
2)
PROGRAM Fakultät;
VAR
!n, !m : INTEGER;
FUNCTION Fak(!n : GanzeZahl) : INTEGER;
VAR
!f : INTEGER; f wird hier benutzt, weil Funktionsergebnisse
sonst nicht angezeigt werden.
BEGIN
IF n > 1 THEN BEGIN
f := n * Fak(n-1);
END
ELSE BEGIN
f := 1;
END;
Fak := f;
END;
BEGIN
n := 3;
Write('Berechnung von n! n = ');
ReadLn(n);
DebugEin; Nur während der rekursiven Funktionsaufrufe
werden die Inhalte der Variablen angezeigt.
Dabei ist die Rekursionsstufe zu erkennen, wie
#FF
im folgenden Beispiel für 3! gezeigt wird.
m := Fak(n);
DebugAus;
WriteLn(n, '!=', m);
END.
Ausgabe auf dem Bildschirm :
Berechnung von n! n = 3
hier normale Textausgabe mit "WRITE"
IF n > 1 THEN BEGIN
10> F = 0 N = 3 | M = 0 N = 3
^ Globale Variablen stehen immer am Ende der Liste nach dem
letzten "|".
^ Lokale Variablen führen die Liste vor dem letzten "|" an. Die Variablen der
gerade aktiven Prozedur/Funktion stehen ganz links, danach folgen die
Variablen der Prozedur/Funktion, aus der die gerade aktive aufgerufen wurde
usw. bis zu den globalen Variablen. Hier stehen in diesem Fall die Variablen
des ersten Aufrufs der Funktion "Fak".
IF n > 1 THEN BEGIN
10> F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
^ globale Variablen
^ erster Aufruf von "Fak"
^ zweiter Aufruf von "Fak"
f := 1;
14> F = 1 N = 1 | F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
^global
^ erster Aufruf von "Fak"
^ zweiter Aufruf von "Fak"
^ dritter Aufruf von "Fak"
Jetzt ist n = 1. Damit werden die rekursiven Aufrufe beendet und es geht
rückwärts, wie in den nächsten Zeilen zu sehen ist.
Fak := f;
16> F = 1 N = 1 | F = 0 N = 2 | F = 0 N = 3 | M = 0 N = 3
f := n * Fak(n-1);
11> F = 2 N = 2 | F = 0 N = 3 | M = 0 N = 3
Fak := f;
16> F = 2 N = 2 | F = 0 N = 3 | M = 0 N = 3
f := n * Fak(n-1);
11> F = 6 N = 3 | M = 0 N = 3
Fak := f;
16> F = 6 N = 3 | M = 0 N = 3
m := Fak(n);
24> M = 6 N = 3
3!=6
DebugAus
Schaltet die Ausgabe der Inhalte der markierten Variablen und der Quelltextzeile aus.
Eine ausführlichere Beschreibung und ein Beispiel sind unter DebugEin zu finden.
#FF
BreakPoint
An dieser Stelle wird ein laufendes Programm unterbrochen und es erscheint
folgendes Menü am Bildschirmrand:
╔═════BreakPoint════╗
║ Run ║
║ Variablen zeigen ║
║ weitere Variablen ║
║ Variablen ändern ║
║ Menü-Lage ║
║ Programm-Abbruch ║
╚════════════CR/ESC═╝
Die Bedeutung der einzelnen Menüpunkte:
1) Run:
Das Programm wird fortgesetzt, bis es beendet ist oder bis es wieder auf die
Anweisung BreakPoint trifft.
2) Variablen zeigen:
Der Inhalt der durch "!" markierten Variablen und der im nächsten Punkt weitere
Variablen markierten wird angezeigt, wie unter DebugEin beschrieben.
3) weitere Variablen:
Zusätzlich zu den in der Deklaration mit "!" markierten Variablen können
weitere in einem Auswahlfenster mit ENTER markiert werden. Ebenso ist ein
Löschen der Markierung mit ENTER möglich. Markierte Variablen sind durch ein
vorangestelltes "√" gekennzeichnet. Die Reihenfolge der Variablen im
Auswahlfenster ist unter Variablen ändern beschrieben.
4) Variablen ändern:
Wenn man testen möchte, wie das Programm mit anderen Variablenwerten
weiterläuft, kann sich in einem Auswahlfenster Variablen mit ENTER wählen,
deren Inhalt anschließend in einem Editorfenster geändert werden kann. Lokale
Variablen erscheinen oben im Auswahlfenster, globale Variablen zuletzt. Dabei
wird dieselbe Reihenfolge wie unter DebugEin beschrieben eingehalten, es sind
nur links mit oben und rechts mit unten zu vertauschen.
5) Menü-Lage:
Wenn dieses Menü Informationen verdeckt, kann es in eine andere Bildschirmecke
verschoben werden. Die Lage des Menüs wechselt dabei zyklisch zwischen den Positionen
links oben,
rechts oben,
links unten und
rechts unten.
6) Programm-Abbruch:
Das Programm wird sofort beendet. Dabei erfolgt ein Post-Mortem-Dump.
EinzelschrittEin
EinzelschrittEin bewirkt, daß jeweils nur eine Programmzeile abgearbeitet wird.
Anschließend wartet das Programm auf einen Tastendruck, dann wird die nächste
Programmzeile abgearbeitet.
#FF
Beispiel :
DebugEin; Inhalt der markierten Variablen wird angezeigt
EinzelschrittEin; warte jeweils nach Ausführung einer Programm-
zeile auf einen Tastendruck
FOR n := 1 TO 100 DO BEGIN
m := n^2;
END;
EinzelschrittAus; setze die Programmausführung ohne Warten auf
Tastendruck fort
DebugAus; zeige die Variableninhalte nicht mehr an
EinzelschrittAus
EinzelschrittAus bewirkt, daß nach Ausführung einer Programmzeile nicht mehr
auf einen Tastendruck gewartet wird.
Beispiel:
DebugEin; Inhalt der markierten Variablen wird angezeigt
EinzelschrittEin; warte jeweils nach Ausführung einer
Programmzeile auf einen Tastendruck
FOR n := 1 TO 100 DO BEGIN
m := n^2;
END;
EinzelschrittAus; setze die Programmausführung ohne Warten auf
Tastendruck fort
DebugAus; zeige die Variableninhalte nicht mehr an
#FF
parallele Prozesse
Mit parallelen Prozessen kann Einblick genommen werden in die
Programmausführung von Multitaskingsystemen, auf denen mehrere Programme quasi
gleichzeitig von einem Prozessor abgearbeitet werden, und
Mehrprozessorsystemen, bei denen mehrere Prozessoren gleichzeitig an einem
Programm arbeiten. Dabei ist die Prozeßumschaltung und die
Prozeßsynchronisation von Bedeutung.
NächsterProzeß NeuerProzeß ProzeßEnde SendeSignal
StarteProzesse Unterbrechung WarteAufSignal
NächsterProzeß
NächsterProzeß(ProzeßIndex) dient dazu, die weitere Pro-grammausführung einem
bestimmten Prozeß zu übergeben.
Deklaration :
PROCEDURE NächsterProzeß(ProzeßIndex : INTEGER);
Beispiel:
PROCEDURE P1;
BEGIN
WriteLn("1.: P1");
NächsterProzeß(2); an P2 übergeben
WriteLn("5.: P1");
ProzeßEnde(1); P1 ordnungsgemäß beenden
END;
PROCEDURE P2;
BEGIN
WriteLn("2.: P2");
NächsterProzeß(3); an P3 übergeben
WriteLn("4.: P2");
NächsterProzeß(1); an P1 übergeben
ProzeßEnde(2); P2 ordnungsgemäß beenden
END;
PROCEDURE P3;
BEGIN
WriteLn("3.: P3");
NächsterProzeß(2); an P2 übergeben
ProzeßEnde(3); P3 ordnungsgemäß beenden
END;
BEGIN
NeuerProzeß(1, 100, 1, P1); Prozesse definieren, Index festlegen,
NeuerProzeß(2, 100, 1, P2); Stackgröße und Priorität festlegen,
NeuerProzeß(3, 100, 1, P3); Prozeßprozedur festlegen
StarteProzesse; ersten Prozeß starten
END.
Auf dem Bildschirm erscheint:
1.:P1
2.:P2
#FF
3.:P3
4.:P2
5.:P1
NeuerProzeß
NeuerProzeß reiht eine parameterlose Prozedur in die Liste der Prozeduren ein,
zwischen denen wie bei einem Multitaskingsystem hin- und hergeschaltet werden
kann.
Deklaration :
PROCEDURE NeuerProzeß(Index, StackGröße, Priorität : INTEGER;
Prozeß : parameterlose Prozedur);
Beispiel:
PROCEDURE P1;
BEGIN
WriteLn("1.: P1");
NächsterProzeß(2); an P2 übergeben
WriteLn("3.: P1");
ProzeßEnde(1); P1 ordnungsgemäß beenden
END;
PROCEDURE P2;
BEGIN
WriteLn("2.: P2");
NächsterProzeß(1); an P1 übergeben
ProzeßEnde(2); P2 ordnungsgemäß beenden
END;
BEGIN
NeuerProzeß(1, 100, 1, P1); Prozesse definieren, Index festlegen,
NeuerProzeß(2, 100, 1, P2); Stackgröße und Priorität festlegen,
StarteProzesse; Prozeßprozedur festlegen
END. ersten Prozeß starten
ProzeßEnde
ProzeßEnde sorgt dafür, daß ein Prozeß ordnungsgemäß beendet wird. Jeder Prozeß
muß entweder aus einer Endlosschleife bestehen oder durch die Anweisung
ProzeßEnde vor dem Erreichen der END-Anweisung der Prozeßprozedur beendet
werden.
Deklaration :
PROCEDURE ProzeßEnde(ProzeßIndex : INTEGER);
Beispiel:
ProzeßEnde(1); beendet den Prozeß mit dem Index 1
SendeSignal
Durch SendeSignal(SignalVar) kann einem anderen Prozeß mitgeteilt werden, daß
die Bearbeitung bis zu einem bestimmten Punkt vorangeschritten ist.
Deklaration :
PROCEDURE SendeSignal(VAR SignalVar : SIGNAL);
#FF
Beispiel:
VAR
P1Fertig, P2Fertig : SIGNAL;
x, y : REAL;
PROCEDURE P1;
BEGIN
x := 0.1;
WHILE x < 10 DO BEGIN
SendeSignal(P1Fertig); x-Wert fertig, P2 kann rechnen
WarteAufSignal(P2Fertig); warten, bis P2 mit Rechnung fertig
x := x + y; und gültiger y-Wert vorhanden
END;
ProzeßEnde(1); Prozesse beenden
ProzeßEnde(2);
END;
PROCEDURE P2;
BEGIN
y := 0.3;
WHILE TRUE DO BEGIN
WarteAufSignal(P1Fertig); auf gültigen x-Wert warten
y := y + x;
SendeSignal(P2Fertig); P1 kann auf y-Wert zugreifen
END;
END;
BEGIN
NeuerProzeß(1, 100, 1, P1); Prozesse initialisieren
NeuerProzeß(2, 100, 1, P2);
StarteProzesse;
END.
StarteProzesse
StarteProzesse sucht beginnend beim Prozeßindex 1 den Prozeß mit der höchsten
Priorität und startet ihn.
Deklaration :
PROCEDURE StarteProzesse;
Beispiel:
PROCEDURE P1;
BEGIN
WriteLn("1.: P1");
NächsterProzeß(2); an P2 übergeben
WriteLn("3.: P1");
ProzeßEnde(1); P1 ordnungsgemäß beenden
END;
PROCEDURE P2;
BEGIN
WriteLn("2.: P2");
NächsterProzeß(1); an P1 übergeben
ProzeßEnde(2); P2 ordnungsgemäß beenden
END;
#FF
BEGIN
NeuerProzeß(1, 100, 1, P1); Prozesse definieren, Index festlegen,
NeuerProzeß(2, 100, 1, P2); Stackgröße und Priorität festlegen,
StarteProzesse; Prozeßprozedur festlegen
END. ersten Prozeß starten
StarteZeitscheibenVerfahren
StarteZeitscheibenVerfahren startet alle initialisierten Prozesse und sorgt
dafür, daß nach der Ausführung einer vorgegebenen Anzahl von Opcodes der aktive
Prozeß gewechselt wird.
Achtung : Ein aktiver Prozeß sollte die Kontrolle dann nicht mit
"Unterbrechung" an den nächsten Prozeß abgeben.
Deklaration :
PROCEDURE StarteZeitscheibenVerfahren(AnzahlDerOpcodes : INTEGER);
Beispiel:
PROCEDURE P1;
VAR
n : INTEGER;
BEGIN
FOR n := 1 TO 1000 DO BEGIN
Write(n:5);
END;
HALT;
END;
PROCEDURE P2;
VAR
n : INTEGER;
BEGIN
FOR n := 2000 TO 3000 DO BEGIN
Write(n:5);
END;
HALT;
END;
BEGIN
NeuerProzeß(1, 100, 1, P1); Prozesse definieren, Index festlegen,
NeuerProzeß(2, 100, 1, P2); Stackgröße und Priorität
StarteZeitscheibenVerfahren(10); festlegen, Prozeßprozedur festlegen und ersten
END. Prozeß starten. Nach der Ausführung von 10
Opcodes erfolgt eine Umschaltung.
Unterbrechung
Unterbrechung unterbricht die Ausführung eines Prozesses und sucht den aktiven
Prozeß in der Warteliste, der zur Zeit die höchste Priorität hat. Dieser Prozeß
wird fortgesetzt. Seine Priorität wird dabei um eins verringert, damit er bei
der nächsten Unterbrechung nicht unbedingt wieder der Prozeß mit der höchsten
Priorität ist.
Deklaration :
PROCEDURE Unterbrechung;
#FF
Beispiel:
PROCEDURE P1;
VAR
n : INTEGER;
BEGIN
FOR n := 1 TO 1000 DO BEGIN
GotoXY(10, 3);
Write(n:4);
Unterbrechung; unterbrechen und auf den Prozeß mit der
END; derzeit höchsten Priorität umschalten
HALT;
END;
PROCEDURE P2;
VAR
n : INTEGER;
BEGIN
FOR n := 1 TO 1000 DO BEGIN
GotoXY(20, 3);
Write(n:4);
Unterbrechung; unterbrechen und auf den Prozeß mit der
END; derzeit höchsten Priorität umschalten
HALT;
END;
BEGIN
NeuerProzeß(1, 100, 3, P1); da die Priorität von P1 dreimal so
NeuerProzeß(2, 100, 1, P2); hoch ist wie die von P2, wird P1
StarteProzesse; dreimal so oft aufgerufen wie P2.
END. Zählstände am Ende : P1:1000, P2:333
WarteAufSignal
Durch WarteAufSignal(SignalVar) kann solange gewartet werden, bis die
Bearbeitung in einem anderen Prozeß bis zu einem bestimmten Punkt
vorangeschritten ist.
Deklaration :
PROCEDURE WarteAufSignal(VAR SignalVar : SIGNAL);
Beispiel:
VAR
P1Fertig, P2Fertig : SIGNAL;
x, y : REAL;
PROCEDURE P1;
BEGIN
x := 0.1;
WHILE x < 10 DO BEGIN
SendeSignal(P1Fertig); x-Wert fertig, P2 kann rechnen
WarteAufSignal(P2Fertig); warten, bis P2 mit Rechnung fertig
x := x + y; und gültiger y-Wert vorhanden
END;
ProzeßEnde(1); Prozesse beenden
ProzeßEnde(2);
END;
#FF
PROCEDURE P2;
BEGIN
y := 0.3;
WHILE TRUE DO BEGIN
WarteAufSignal(P1Fertig); auf gültigen x-Wert warten
y := y + x;
SendeSignal(P2Fertig); P1 kann auf y-Wert zugreifen
END;
END;
BEGIN
NeuerProzeß(1, 100, 1, P1); Prozesse initialisieren
NeuerProzeß(2, 100, 1, P2);
StarteProzesse;
END.
#FF
Fischertechnik / LEGO
Die hier aufgeführten Konstanten, Prozeduren und Funktionen stehen nur dann zur
Verfügung, wenn ITG-PASCAL aus dem mitgelieferten Rahmenprogramm zur
Ansteuerung von Interfaces heraus gestartet wurde.
Achtung : Wenn ITG-PASCAL nicht aus dem Rahmenprogramm heraus gestartet wurde,
kommt es bei Verwendung der hier aufgeführten Konstanten, Prozeduren und
Funktionen zu einer Fehlermeldung beim Compilieren, obwohl ein Programm unter
Umständen schon fehlerfrei lief!
Aus Ein LinksDrehen RechtsDrehen
Lampe Motor Warte Zustand
Aus
Die Konstante Aus dient zum Ausschalten von Lampen und Motoren. Ihr Wert ist 0.
Ein
Die Konstante Ein dient zum Einschalten von Lampen. Ihr Wert ist 1.
LinksDrehen
Die Konstanten LinksDrehen dient dazu, einen Motor gegen den Uhrzeigersinn
drehen zu lassen. Ihr Wert ist 1.
RechtsDrehen
Die Konstanten RechtsDrehen dient dazu, einen Motor im den Uhrzeigersinn drehen
zu lassen. Ihr Wert ist 2.
Lampe
Mit der Prozedur Lampe(Nr, Ein) wird die Spannung am Ausgang mit dem Index Nr
eingeschaltet.
Deklaration :
PROCEDURE Lampe(Nr, AusOderEin : WORD);
Beispiel :
Lampe(3, Ein); Lampe 3 einschalten und
Warte(1.5); 1,5 Sekunden lang brennen lassen
Lampe(3, Aus); dann wieder ausschalten
Motor
Mit der Prozedur Motor(Nr, Drehrichtung) wird die Spannung am Motor-Ausgang mit
dem Index Nr so eingeschaltet, daß der Motor sich in die angegebene Richtung
dreht.
#FF
Deklaration :
PROCEDURE Motor(Nr, Drehrichtung : WORD);
Beispiel :
Motor(3, LinksDrehen); Motor 3 einschalten und 1,5 Sekunden
Warte(1.5); nach links drehen lassen
Motor(3, Aus); dann wieder ausschalten
Warte
Mit der Prozedur Warte(Sekunden) wird die automatische Abschaltung beim
Fischer-Interface unterbunden, die sonst nach 0,5 Sekunden eintritt.
Deklaration :
PROCEDURE Warte(Sekunden : REAL);
Beispiel :
Lampe(3, Ein); Lampe 3 einschalten und
Warte(1.5); 1,5 Sekunden lang brennen lassen
Lampe(3, Aus); dann wieder ausschalten
Zustand
Die Funktion Zustand(Nr) ergibt 1, wenn am Digitaleingang mit dem Index Nr eine
Spannung anliegt. Sonst ergibt sie 0.
Deklaration :
FUNCTION Zustand(DigitalEingang : WORD) : WORD;
Beispiel :
IF Zustand(2) = 1 THEN BEGIN
WriteLn("Am Digitaleingang 2 liegt Spannung an.");
END
ELSE BEGIN
WriteLn("Am Digitaleingang 2 liegt keine Spannung an.");
END;
#FF
Inhaltsverzeichnis
Lizenzbedingungen 1
Einleitung 2
Installation 5
Einführung 7
Igel-Grafik im Direktmodus 7
Einführung einer Schleife 8
Einführung von parameterlosen Prozeduren 11
Einführung von Prozeduren mit einem Parameter 13
Einführung von Prozeduren mit mehreren Parametern 14
Benutzung des Debuggers 16
Die Bediener-Oberfläche 18
1. FILE 18
1.1 neues Programm 18
1.2 Datei laden 18
1.3 Datei speichern 19
1.4 Datei drucken 19
1.5 BAK-Dateien löschen 19
1.6 Inhaltsverzeichnis 20
1.7 Pfad wechseln 20
1.8 Laufwerk wechseln 20
1.9 Makros laden 20
1.10 Makros speichern 20
1.11 OS-Shell 21
1.12 Ende 21
2. EDITOR 22
2.1 Programm-Text bearbeiten 22
2.1.1 Editor-Befehle 22
2.1.2 Hilfesystem 23
2.1.3 Makro-Recorder 24
2.2 Programm-/ Fehler-Ausgabe ansehen 25
2.3 Programm-Text formatieren 25
2.4 automatische Variablen-Deklaration 25
3. RUN 26
3.1 Programm compileren 26
3.2 Programm starten 26
3.3 Direkt-Modus (Text) 26
3.4 Igel-Grafik (neues Programm) 27
3.5 Igel-Grafik fortsetzen 27
3.6 PRG-File erzeugen 28
3.7 PRG-File starten 28
4. DEBUG 29
4.1 Einzelschrittmodus 29
Interna 30
Koordinatensysteme 30
Debugger 30
Synonyme 31
Datenstrukturen 31
Erweiterungen 32
Hardware-Voraussetzungen 32
Tabellen-Größen 33
Der Befehlsumfang 34
Operatoren 34
Standard-Bezeichner 34
Konstanten 36
Typen 42
Igel-Grafik 45
Standard-Grafik 50
ITG-Pascal-Grafik 53
mathematische Funktionen 65
Standard-Funktionen 70
ITG-Pascal-Funktionen 77
Standard-Prozeduren 80
WRITE 90
ITG-Pascal-Prozeduren 93
Debugger 108
parallele Prozesse 112
Fischertechnik / LEGO 118
#FF
Stichwortverzeichnis
ABS 65
ARCCOS 65
ARCCOT 65
ARCSIN 66
ARCTAN 66
Assign 80
Aufzählungstypen 42
Aus 118
AusgabeAufBildschirm 93
AusgabeAufDiskette 93
AusgabeAufDrucker 94
Auswahl 94
AuswahlFeld 95
Blau 36
Bogen 53
BOGENMAß 66
BOOLEAN 43
BreakPoint 110
Buchstabe 77
BYTE, INTEGER, WORD, LONGINT 43
CHAR 42
CHR 70
Circle 50
Close 80
ClrEol 81
ClrScr 81
COPY 70
COS 66
COT 67
CR 36
DatenAufDiskette 95
DatenVonDiskette 96
DebugAus 109
DebugEin 108
DEC 81
DefiniereFunktionsTerm 96
DefiniereWelt 53
Delay 82
Delete 82
DezimalZufallszahl 77
DISPOSE 34
DreheAuf 45
DruckeBildschirm 54, 96
Dunkelblau 36
Dunkelgelb 36
Dunkelgrau 36
Dunkelgrün 36
Dunkelkobalt 36
Dunkelrot 36
Dunkelviolett 37
Ein 118
EingabeFeld 97
EingabeVonDiskette 98
EingabeVonTastatur 97
EinzelschrittAus 111
EinzelschrittEin 110
EOF 70
ErsetzeBuchstaben 98
ESC 37
EsGibtDatei 77
Euler 37
EXIT 82
EXP 67
FALSE 37
Färben 54
FILE 43
FilePos 71
FileSize 71
FRAC 72
FügeBuchstabenEin 99
FunktionsGraf 54
FunktionstermFehler 55
FunktionsWert 78
GanzeZufallsZahl 78
GeheNach 45
Gelb 37
GetMaxX 50
GetMaxY 50
GetX 50
GetY 51
GotoXY 83
GRAD 67
GrafGotoXY 55
GrafikFenster 55
GrafikKorrekturAus 56
GrafikKorrekturEin 56
GrafikSchirm 56
GrafWrite 57
Grau 37
Grün 38
HALT 83
HighVideo 83
Hinten 45
IgelWinkel 46
IgelZeigen 46
ImBogenmaß 99
INC 84
INCLUDE 34
InGrad 99
Insert 84
INT 72
InversVideo 84
IORESULT 72
KeyPressed 72
Kobalt 38
Kreis 57
Lampe 118
LENGTH 73
LetzteTaste 78
LG 67
LiesEingaben 100
LiesPort 79
Line 51
LineTo 51
LinkerBogen 46
Links 46
LinksDrehen 118
LN 68
LowVideo 85
LST 38
Maßstab 47
Menü 101
MitCursor 101
MitIgel 47
MitProtokoll 102
MitStift 47
MitWeltRaster 58
Motor 118
MoveTo 51
NächsterProzeß 112
NeuerProzeß 113
NeueZufallsZahlenFolge 102
NEW 35
NoSound 85
ODD 73
ÖffneAusgabeDatei 102
ÖffneEingabeDatei 103
ÖffneFenster 103
OhneCursor 104
OhneIgel 47
OhneProtokoll 104
OhneStift 48
OhneWeltRaster 57
ORD 73
PapierFarbe 58
Pause 104
Pi 38
POS 74
PRED 74
ProzeßEnde 113
Punkt 58
Random 74
Randomize 85
READ 85
ReadKey 74
READLN 86
REAL, DOUBLE, EXTENDED 43
RechterBogen 48
Rechts 48
RechtsDrehen 118
ReName 87
Reset 87
ReWrite 88
Rot 38
ROUND 75
SchließeAusgabeDatei 105
SchließeEingabeDatei 105
SchließeFenster 105
SchreibPort 106
Schwarz 38
Seek 88
SendeSignal 113
SetBkColor 88
SetColor 89
SetzeFontWerte 59
SIGN 68
SIGNAL 44
SIN 68
Sound 89
SQR 69
SQRT 69
StarteProzesse 114
StarteZeitscheibenVerfahren 115
StiftFarbe 59
STR 89
Strecke 59
Strg-Bild-Ab2 38
StrgBildAuf2 39
STRING 43
SUCC 75
TAN 69
TEXT 43
TextSchirm 59
Ton 106
TRUE 40
TRUNC 75
Unterbrechung 115
UpCase 76
Ursprung 49
VAL 90
Violett 41
Vorne 49
WähleDatei 107
WähleFont 60
Warte 119
WarteAufSignal 116
Weiß 41
WeltGeheNach 60
WeltPixelDX 60
WeltPixelDY 61
WeltPunkt 61
WeltStrecke 61
WeltStreckeNach 61
WeltXMax 62
WeltXMin 62
WeltYMax 62
WeltYMin 63
WhereX 76
WhereY 76
Window 90
Wischen 63
WoGrafikX 63
WoGrafikY 64
WoIgelX 49
WoIgelY 49
WRITELN 91
yKorrekturFaktor 64
Zeiger-Variablen 44
Zustand 119