41
280 Anhang Anhang A 1 Operatoren A 1.1 Vergleichsoperatoren Operator Bedeutung > grol.\er >= grol.\er gleich < kleiner <= kleiner gleich <> ungleich = gleich A 1.2 Arithmetische Operatoren Operator Wirkung Beispiel Typ + Addition 6+3=9 Integer/Real - Subtraktion 6-3=3 In teger /Real * Multiplikation 6* 3 = 18 Integer/Real / Division 6/3 = 2 Real I div ganzzahlige 6 div4 Integer Division = 1 mod Rest der 6 mod4 Integer ganzzahligcn =2 Division A 1.3 Logische Operatoren * A 1.4 Adre8-0peratoren Operator Wirkung Operator Wirkung and sowohl als auch Riickgabe der not Verncinung @ Adresse des or inklusivcs ODER Bezeichncrs xor cxklusivcr ODER Riickgabe des in !'fiifung auf Mcngen- A Inhalts der zugehorigkcit Speicherzelle * Ab Turbo !'ascaI4.0

Division I - Springer978-3-322-89743-5/1.pdf · Circle (x, y: INTEGER; Radius: WORD) Zeichnen eines Kreises mit Mittelpunkt (x,y) und Radius r. ClearDevice Loschen des gesamten Grafik-Bildschirms

  • Upload
    vunhu

  • View
    214

  • Download
    0

Embed Size (px)

Citation preview

280 Anhang

Anhang

A 1 Operatoren

A 1.1 Vergleichsoperatoren

Operator Bedeutung

> grol.\er >= grol.\er gleich < kleiner

<= kleiner gleich

<> ungleich = gleich

A 1.2 Arithmetische Operatoren

Operator Wirkung Beispiel Typ

+ Addition 6+3=9 Integer/Real - Subtraktion 6-3=3 In teger /Real

* Multiplikation 6* 3 = 18 Integer/Real / Division 6/3 = 2 Real

I div ganzzahlige 6 div4 Integer

Division = 1 mod Rest der 6 mod4 Integer

ganzzahligcn =2 Division

A 1.3 Logische Operatoren * A 1.4 Adre8-0peratoren

Operator Wirkung Operator Wirkung

and sowohl als auch Riickgabe der not Verncinung @ Adresse des or inklusivcs ODER Bezeichncrs xor cxklusivcr ODER Riickgabe des in !'fiifung auf Mcngen- A Inhalts der

zugehorigkcit Speicherzelle

* Ab Turbo !'ascaI4.0

A 1.5 Mathematische Funktionen 281

A 1.5 Mathematische Funktionen

Trigonometrische Funktionen

Funktion Bedeutung Beispiel Ergebnis

arctan Winkel des Tangens arctan on 9 im Bogenma1.\ (Real)

cos Cosinus des Winkels cos (10 -1 im Bogenmaf), (Real)

sin Sinus des Winkels sin (lOm 1 im Bogenmaf), (Real)

Arithmetische Funktionen

exp e hoch exp (3) 20.085537 In Natiirlicher In (3) 1.098612

Logarithmus

odd ungerade Zahl odd (3) wahr pi Zahl pi 3.14159 ..

pred Vorgiinger des Ausdrueks

sqr Quadrat sqr (3.5) 12.25 sqrt Quadratwurzel sqrt (9) 3 suce Nachfolgcr des

Ausdrueks

Umwandlungsfunktioncn

abs Absolutwert abs(-3) 3

ehr Zeiehen der ASCII-Code-Nummer ehr (64) @

frae Naehkommateil frae (2.443) 0.443

int ganzzahliger Teil als Real-Zahl int (2.443) 2.000

round kaufmannisehes Runden round (3.56) 4.00

ord Codenummer eines ASCII-Zeiehens ord CA') 65 . trunc Ganzzahliger Teil true (3.56) 3.00

B it-V ersehiebungs-Funk tionen

SHL Anzahl Bits naeh links versehieben

SHR Anzahl Bits naeh reehts versehieben

Beispiel fUr SHR und SHL

1 0 0[IJ O ll1 11 1 1 16 + 7 = 23

~ 32 SHR 1 = 32/2 1 = 16

I 0 IJ OI011111 11 32 + 7 = 39

32 1 • I 7 SHL 2 = 7 * 22 = 28

I 0 I 1 I 1 I 1 I 1 I 0 I 0 I 32 + 28 = 60

282

A 2 Befehle, nach Gruppen gegliedert

A 2.1 Anweisungen

BEGIN <Anweisungen> END Block von Anweisungen markieren.

CASE •• OF •• ELSE .. END Auswahl aus mehreren M6glichkeiten mit Fehlerausgang.

EXEC <Pfad, Kommando, Argument: String) Starten und Ausfiihren eines Programms innerhalb eines anderen.

EXIT Abbrechen einer Anweisung (z. B. Verlassen einer Schleife).

FOR •• TO (DOWNTO) .. DO Ziihlschleife ausfiihren.

FORWARD Gegenseitiger Aufrufzweier Prozeduren oder Funktionen.

FUNCTION Vereinbarung eines Unterprogramms als Funktion.

GOTO <LABEL> Unbedingter Sprung zu einer Markierung (LABEL).

HAL T( <Fehlercode» Beenden der Ausfiihrung des Programms.

IF <Bedingung> THEN <Anweisung> ELSE Alternative Auswahl aus zwei M6glichkeiten.

IMPLEMENTA TION

Anhang

Programm der Funktionen und Prozeduren im INTERFACE-Teil einer UNIT.

IN Priifung, ob ein Element in einer Menge vorhanden ist.

INTERFACE Festlegen aller Konstanten, Variablen, Datentypen, Funktionen und Prozeduren, die 6ffentlich sind.

INTERRUPT Prozedur als Interrupt-Routine (Unterbrechung).

LABEL Sprungmarkierungen.

A2 Befehle, nach Gruppen gegliedert

PROCEDURE Unterprogramm als Prozedur.

READ oder READLN«Variable» Einlesen von Variablen und Datensatzen.

REPEA T <An wei sung> UNTIL <Bedingung> Nicht abweisende Schleife.

UNIT Programm als Bibliothek.

USES Benutzen von Progranunbibliotheken.

WHILE <Bedingung> DO Abweisende Schleife.

WITH <Recordvariable> DO <Anweisung> Direktzugriff aufVariablen einer Datei.

A 2.2 Datei-Funktionen und Datentypen

Append (V AR f: TEXT) Anhangen neuer Komponenten an eine Textdatei.

Assign(V AR f; Name: STRING) Zuordnung einer Dateivariablen (f) zu einer Datei (Name).

BlockRead (V AR f: FILE; V AR buf; count: WORD [;erg: WORD])

283

Einlesen eines oder mehrerer (count) Datensatze aus einer Datei (f) in den Puffer.

BlockWrite (V AR f: FILE; VAR buf; count: WORD [;erg: WORD]) Schreiben eines oder mehrerer (count) Datensatze aus einem Puffer in eine Datei (f).

ChDir (s: STRING) Wechsel in ein neues Verzeichnis (s).

Chr (x: BYTE): CHAR Umwandlung des Zeichens x in den ASCII-Kode.

Close (V AR f) Schlie13en einer Datei (f).

Concat (sl [, s2, ... , sn]:STRING) Verbinden von zwei oder mehreren Stringtabellen.

284 Anhang

Copy (s: STRING; pos, zaehler: INTEGER) : STRING Kopieren einer Anzahl Zeichen (zaehler) ab der Position (pos) aus einer Zeichenkette (s).

CSeg Riickgabe der Adresse des aktuellen Code-Segmentes (CS).

Dec(x [, n: LONGINT]) Verringern des Ordinalwertes x urn n (bzw. um 1, wenn n fehlt).

Eof(VARt) Priifen auf Ende der Datei (t).

EoLn (VARt) Priifen auf Zeilenende.

Erase (V AR t) Loschen der mit Assign verbundenen Datei (t).

Fail Freigabe der Instanz eines Objettyps und Verlassen des Konstruktors.

FilePos (V AR t) Angabe der momentanen Position innerhalb der Datei (t).

FileSize (V AR t) Angabe der Gro13e einer Datei (t) in Datensatzen.

FilIChar (V AR x; zaehler: WORD; wert) Auffiillen eines Speicherbereiches mit einem bestimmten Wert.

Flush (V AR f: Text) Leeren der temporaren Puffer und Schreiben auf eine externe Datei (t).

FreeMem (V AR p: POINTER; size: WORD) Freigabe eines mit New reservierten Speicherbereiches bestimmter Gro13e (size).

GetDir (Laufwerk: BYTE; V AR s: STRING) Aktuelles Dateiverzeichnis.

GetMem (V AR p: POINTER; size: WORD) Belegen einer Anzahl (size) Bytes ab einer Adresse (P).

Insert (QuelIe: STRING; VAR st: STRING; index: INTEGER) Einfiigen einer Zeichenkette (Quelle) ab einer Position (index) in eine bestehende Zeichenkette (st).

IOResuIt Fehlerstatus der letzten Eingabe-IAusgabe-Operation.

Length (s: STRING) Aktuelle Lange einer Zeichenkette (s)

A2 Befehle, nach Gruppen gegliedert 285

MaxAvail Umfang des groJ3ten freien Blocks im Heap.

MemAvail Gesamter Umfang des freien Speicherplatzes auf dem Heap.

MkDir (Name: STRING) Erzeugen eines neuen Unterverzeichnisses (Name).

Move (V AR QueUe, Ziel; Anzahl: WORD) Kopieren von Bytes von einem Speicherbereich (QueUe) in einen anderen (Ziel).

Ofs (x) Offset-Anteil einer Adresse, an der x gespeichert ist.

ParamCount Anzahl der Aufrufparameter.

ParamStr (Index: WORD) Aufrufparameters mit einer bestimmten Nummer (Index).

Pos (Teilstring: STRING; s: STRING) Suche in einem String (s) nach einem Teilstring (Teilstring). Riickgabe, wenn er gefunden wird, sonst ist der Wert fUr Pos = O.

Read bzw. ReadLn (V AR f, vI [, v2, ... , vn]) Lesen einer oder mehrerer Komponenten aus einer Datei in die angegebene Variable (f).

Rename (V AR f; neu: STRING) Umbenennen einer Datei.

Reset (VAR f [: FILE; rec~roesse: WORD]) Offnen einer Datei (f) und Setzen des Dateizeigers an den Anfang.

Rewrite (VAR f [: FILE; rec~roesse: WORD]) Erzeugen einer neuen Datei (f), die mit Assign zugewiesen wurde. Bereits existie­rende Datei wird ge16scht.

RmDir (s: STRING) Loschen eines Ieeren Unterverzeichnisses.

Seek (Var f; n: LONGINT) Setzen des Positionszeigers auf eine bestimmte Komponente (n) der Datei (f).

SeekEof [(VAr f: Text)] Priifen, ob zwischen momentaner Position und dem Ende der Datei noch Iesbare Daten sind.

SeekEoln [(V Ar f: Text)] Priifen, ob zwischen momentaner Position und dem Ende der Zeile noch lesbare Daten sind.

286

Seg (x) Adresse des Segments, in dem x gespeichert ist.

SetTextBuf (V AR f: Text; V AR buf[;groesse: WORD]) Zugriffe auf f werden in einen Puffer gelesen.

SSeg Adresse des Stack-Segments.

Str (x [:Breite [:Dezimaistellen]], VAR s: String) Konvertierung eines numerischen Wertes in einen String.

Swap (x) Vertauschen des niederwerigen und des hOherwertigen Bytes.

TypeOf(x) Zeiger auf die virtuelle Methodentabelle (VTM) eines Objekttyps.

Up Case (ch: CHAR) Umwandlung von Kieinbuchstaben in Grol3buchstaben.

Val (s: STRING; v; VAR code: INTEGER) Umwabdein eines Strings in numerischen Wert.

Write bzw. WriteLn (VAR f, vI [, v2, ... , vn]) Schreiben von Daten in eine Datei.

A 2.3 Prozeduren fUr den Bildschirm (UNIT CRT)

AssignCrt (V AR f; Name: STRING) Zuordnen des Bildschirms (Crt) einer Textdatei.

ClrEol Loschen alIer Zeichen vom Cursorstand bis zum Zeilenende.

ClrSer Loschen des Bildschirms lind Setzen des Cursors in die Iinke obere Ecke.

Delay (ms: WORD) Verzogerung des Programmablaufs um MilIisekunden.

DelLine Loschen einer Zeile.

GotoXY (X, Y: BYTE) Cursor in Spaite X und Zeile Y setzen.

HighVideo Ausgabefarbe auf hohe IntensiHit setzen.

Anhang

A2 BefehIe, nach Gruppen gegIiedert

InsLine Einfligen einer LeerzeiIe ab Cursorposition.

KeyPrcsscd Priifen, ob ein Zeichen im Tastaturpuffer ist.

LowVidco Ausgabefarbe auf geringe Intensitat setzen.

NormVideo Umschalten in den Textmodus, der beim Programmstart gesetzt war.

NoSound AbschaIten des Lautsprechers.

ReadKey EinIesen eines Zeichens von der Tastatur, ohne es auszuIesen.

RcstorcCrt Riicksetzen des V ideomodus.

RestorcCrtModc Riicksetzen des Videomodus auf den Ietzten Grafikstandard.

Sound (Hertz: WORD) Ausgabe eines Tones mit der Frequenz in Hertz.

TcxtBackgroulld (Farbe: BYTE) Festlegen der Hintergrundfarbe.

TcxtColor (Farbe: BYTE) Festlegen der Farbe flir den Text.

TcxtModc (Mode: WORD) Setzen eines Textmodus.

WhcreX Riickgabe der Spaltenposition des Cursors.

WhcrcY Riickgabe der Zeilenposition des Cursors.

Window (xl, yl, x2, y2: BYTE) FestIegen eines Fensterbereichs zwischen xl, yl und x2, y2.

A 2.4 Prozeduren des Betriebssystems (UNIT DOS)

DiskFrcc (Laufwerk: BYTE) Freier Platz auf einem Laufwerk.

287

288

DiskSize (Laufwerk: BYTE) GesamtkapaziHit des Laufwerkes.

DosExitCode Exit-Code eines als Unterprozell gestarteten Programms.

DosVersion Versionsnummer von DOS.

EnvCount Anzahi der gesetzten Umgebungsvariablen.

EnvStr (Index: INTEGER) Inhalte der durch Index gekennzeichneten Umgebungsvariablen.

Exec (Name, Kommando: STRING) AusfUhren eines Kommandos aus einem benannten Programm.

FExpand (Pfad: PATHSTR) Erweitern des Dateinamens urn den Suchpfad.

FindFirst (Suchpfad: STRING; AUr : BYTE; V AR s: SEARCHREC)

Anhang

Suchen eines Verzeichnisses nach dem ersten Vorkommen eines Dateinamens.

FindNext (V AR s: SEARCHREC) Fortsetzen der mit FindFirst begonnenen Suche.

FSearch (Suchpfad: PATH STRING; Verzeichnisliste: STRING) Suchen in der Verzeichnisliste nach einem Dateinamen.

FSplit (Suchpfad: PA THSTR; V AR verz: DIRSTR; V AR Name: NAMESTR, V AR Endung: EXTSTR) Zerlegen des vollsHindigen Dateinamens in seine Komponenten Suchpfad (PATHSTR), Verzeichnis (DIRSTR), Namen (NAMESTR) und Endung (EXSTR).

GctCBrcak (V AR Break: BOOLEAN) Priifen, ob DOS auf <CTRL> <BREAK> reagiert.

GctDatc (V AR Jahr, Monat, Tag, Wochentag: WORD)' Ermitteln des aktuellen Datums.

GetEnv (UmgebungsVar: STRING) Lesen eines Eintrags aus der Tabelle der Umgebungsvariablen.

GctFAttr (V AR f; V AR Attr: WORD) Lesen der Attribute einer nicht geoffneten Datei (t).

GctFTimc (V AR f; V AR Zeit: LONGINT) Ermitteln des Datums und der Uhrzeit der letzten Anderung der Datei.

GctIntVcc (Intnummer: BYTE; VAR Vektor: Pointer) Ermitteln des Interrupt-Vektors.

A2 Befehle, nach Gruppen gegliedert

GetTime (V AR Stunde, Minute, Sekunde, SeklOO: WORD) Systemuhrzeit.

GetVerify (V AR Verify: BOOLEAN) Angabe, ob DOS geschriebene Diskettensektoren priift.

Intr (Interruptnum: BYTE; V AR Register: REGISTERS) Ausfiihren eines Software-Interrupts.

Keep (Exitcode: WORD) Beenden eines Programms, das speicherresident wird.

MsDos (V AR Register: REGISTERS) Ausfiihren eines DOS-Aufrufs, der interrupt-gesteuert ist.

PackTime (VAR Datum: DATEITIME; VAR Zeit: LONGINT)

289

Konvertierung des Records vom Typ DateTime fiir die Verwendung in SetFTime.

SetCBreak (Break: BOOLEAN) Festlegen, ob DOS bei Ein-/Ausgabeoperationen priift, ob die Tastenkombinaten <CTRL> <BREAK> gedriickt wurde.

SctDate (Jabr, Monat, Tag, Wochentag: WORD) Setzen des Datums des Betriebssystems.

SetFAttr (V AR f; Attribut: BYTE) Setzen der Datei-Attribute.

SctFTime (V AR f; Zeit: LONGINT) Setzen des Datums und der Uhrzeit der letzten Anderung einer Datei (t).

SctGraphBufSizc (Puffergroesse: WORD) Festlegen der Puffergrof3e fiir FHichenfiiIIungen und Vielecke.

SctIntVcc (Interruptvektor: BYTE; Vektor: POINTER) Setzen des Interrupt-Vektors auf die Speicheradresse Vektor.

SctTimc (Stunde, Minute, Sekunde, 100Sek: WORD) Einstellen der Zeit der Systemuhr.

SetVerify (Verify: BOOLEAN) Festlegen, ob DOS nach dem Schreiben die Diskettensektoren priift.

SwapVectol"S Vertauschen der vom System belegten Interrupt-Vektoren mit den entsprechenden Variablen der UNIT SYSTEM.TPU.

UnpackTime (Zeit: LONGINT; VAR DatumZeit: DATETIME) Konvertierung des Datums und der Uhrzeit aus dem gepackten Format in einen Record des Typs DateTime.

290

A 2.5 Prozeduren fUr die GrafIk (UNIT GRAPH)

Arc (x,y: INTEGER; Startwinkel, Endwinkel, Radius: WORD) Zeichnen eines Kreisbogens bzw. eines Kreisausschnitts urn (x,y).

Bar (xl, yl, x2, y2: INTEGER)

Anhang

Zeichnen eines zweidimensionalen Balkens (xl, yl: untere Ecke; x2, y2: obere Ecke).

Bar3 (xl, yl, x2, y2: INTEGER; Tiefe: WORD; Spitze: BOOLEAN) Zeichnen eines dreidimensionalen Balkens.

Circle (x, y: INTEGER; Radius: WORD) Zeichnen eines Kreises mit Mittelpunkt (x,y) und Radius r.

ClearDevice Loschen des gesamten Grafik-Bildschirms.

ClearViewPort Loschen des aktuellen Zeichenfensters.

CloseGraph Beenden der Grafik-Software.

DetectGraph (V AR Treiber, Modus: INTEGER) Ermitteln des aktuellen Grafiktreibers und des Grafikmodus.

DrawPoly (AnzahIPunkte: WORD; VAR Polypunkte) Zeichnen des Urnrisses eines Polygons.

Ellipse (x, y: INTEGER; Startwinkel, Endwinkel: WORD; XRadius, YRadius: WORD) Zeichnen eines elliptischen Kreisausschnitts.

FiIIEllipse (x, y: INTEGER; XRadius, YRadius: WORD) Zeichnen einer ausgefiillten Ellipse.

FiIIPoly (Anzahlpunkte: WORD; VAR PolyPunkte) Zeichnen eines ausgefiillten Polygons.

FloodFiII (x, y: INTEGER; Randfarbe: WORD) Fullen eines mit Randfarbe eingeschlossenen Bereichs ab den Koordinaten x, y.

GctArcCords (V AR Arccords: ARC CORDS TYPE) Informationen uber den letzten Aufruf von Arc.

GctAspcctRatio (V AR XAspect, Y Asp: WORD) Hohen- und Seitenverhaltnis der gewahlten Auflosung.

GctBkColor Aktuelle Hintergrundfarbe.

A2 Befehle, nach Gruppen gegliedert

GctColor Aktuelle Zeichenfarbe des Grafiukbildschinns.

GctDcfaultPaIcttc (V AR Palette: PALETTETYPE) Standard palette des aktuellen Grafiktreibers.

GctDrivcrNamc Name des aktiven Grafiktreibers.

GetFiIIPattcrn (V AR Muster:FILLPA TTERNTYPE) Aktuelles Bitmuster zum Fiillen von FUichen.

GctFiIIScttings (V AR Musterinfo: FILLSETTINGSTYPE) Aktuelles Fiillmuster und benutzte Farbe.

GctGraphModc Informationen iiber den Grafikmodus.

GctImage (xl, yI, x2, y2: INTEGER; VAR Bitmap) Kopieren eines rechteckigen Bildes an die Speicheradresse Bitmap.

GetLincScttings (V AR Linieninfo: LINESETTINGSTYPE) Aktueller Linientyp.

GctMaxCoIor Maximale Frabnummer des aktuellen Grafikmodus.

GctMaxModc Nummer der hOchsten Auflosung fiir den geladenen Treiber.

GctMaxX Maximal mogliche x-Koordinate.

GctMaxY Maximal mogliche y-Koordinate.

GctModcNamc (Modenummer: INTEGER) Namen eines Grafikmodus.

GctModcRangc (Grafiktreiber: INTEGER; minmode, maxmode: INTEGER) Mogliche Grafiktreiber eines Grafikmodus.

GctPalcttc (V AR Palette: PALETTE TYPE) Informationen iiber die aktuelle Farbpalette.

GctPalcttcSize Anzahl der moglichen Farben.

GctPixcI (x, y: INTEGER) Farbe eines Pixels mit den Koordinaten x, y.

291

292

GetTextSettings (V AR Textinformation: TEXTSETTINGSINFO) Informationen tiber die Art der Textausgabe im Grafikmodus.

GetViewSetting (V AR Viewport: VIEWPORTTYPE) Informationen tiber das aktuelle Zeichenfenster.

GetX X-Koordinate des Grafik-Cursors.

GetY Y-Koordinate des Grafik-Cursors.

GraphDefaults Grafikangaben riicksetzen auf Standardwerte.

GraphErrorMasg (Fehlernummer: INTEGER) Fehlermeldung im Grafikpaket.

GraphResult Fehlerstatus der letzten Grafik-Operation.

ImageSize (xl, yl, x2, y2: INTEGER) Speicherbedarf eines zu speichemden Bildes.

InitGraph (VAR Grafiktreiber: INTEGER; V AR Grafikmodus: INTEGER; pfad: STRING)

Anhang

Inititialisieren des Grafiktreibers. Set zen des Grafik-Treibers und des Grafik­Modus.

InstallUserDriver (Name: STRING; AutoDetectPtr: POINTER) Installation anderer Grafiktreiber.

InstallUserFont (FontDateiName: STRING) Installation anderer Vektor-Zeichensatze.

Line (xl, yl, x2, y2: INTEGER) Linie zwischen zwei Punkten.

LineRel (dx, dy: INTEGER) Linie relativ zur momentaner Position des Grafik-Cursors.

LineTo (x, y: INTEGER) Linie von momentaner Cursorposition zu einem angegebenen Punkt (x, y).

MoveRel (dx, dy: INTEGER) Bewegen des Grafik-Cursors relativ zur aktuellen Position.

MoveTo (x, y: INTEGER) Setzen des Grafik-Cursors auf einen bestimmten Punkt (x, y).

A2 Befehle, nach Gruppen gegliedert

OutText (Stelle: STRING) Text an der Stelle des Grafik-Cursors.

OutTextXY (x, y: INTEGER; Stelle: STRING) Textausgabe an beliebigen Stellen des Grafik-Cursors.

PieSlice (x, y: INTEGER; StartwinkeI, EndwinkeI, Radius: WORD) Zeichnen eines ausgefliIIten Kreisausschnitts (Kuchenstiick).

PutImage (x, y: INTEGER; VAR Bitmap, BitBlock: WORD) Ausgabe eines neuen Bildes (Bitmap) ab der Koordinate x, y.

PutPixel (x, y: WORD; Farbe: WORD) Zeichnen eines Punktes in den angegebenen Koordinaten.

Rectangle (xl, yI, x2, y2: INTEGER)

293

Zeichnen eines Rechtecks mit der unteren Ecke (xl, yl) und der oberen Ecke (x2, y2)

RegisterBGIDriver (Treiber: POINTER) Einbinden von BGI-Dateien als Object-Dateien.

RegisterBGIFont (Font: POINTER) Einbinden von CHR-Zeichensiitzen als Object-Dateien.

Sector (x, y: INTEGER; Startwinkel, Endwinkel, XRadius, YRadius: WORD) Zeichnen eines ausgeflillten lIelliptischen Kuchenstiicks" ab den Koordinaten x, y.

SetActivePage (Seite. WORD) Festelegen, aufwelche Grafikseite die folgenden Grafikbefehle wirken.

SetAIlPaIette (VAR Palette) Neu Setzen aller Eintrage einer Farb-Palette.

SetAspectRatio (Xasp, Y Asp: WORD) Korrekturfaktor des Hohen-/Breiten-VerhaItnisses.

SetBkCoIor (Farbnummer: WORD) Hintergrundfarbe des Grafik-Bildschinns.

SetCoIor (Farbe: WORD) Setzen der Vordergrundfarbe des Grafik-Bildschinns.

SetFiIIPattern (Muster: FILLPATTERNTYPE; Farbe: WORD) Freie Definition von Fiillmustern.

SetFiIIStyIe (Muster: WORD; Farbe: WORD) Setzen eines Musters der GRAPH.TPU.

SetGraphMode (Grafikmodus: INTEGER) UmschaIten in Grafikmodus und Loschen des Bildschinns.

294

SetLineStyle (Linienart, Muster, Dicke: WORD) Linienart und Dicke der Linien.

SetPalette (Farbnummer: WORD; Farbe: SHORTINT) Andern der Farbe.

SetRGBPalette (Farbnummer, Rotwert, Griinwert, Blauwert: INTEGER) Andern der Farbnummer fliT IBM-8514- und VAG-Adapter.

SetTextJustify (Horizontal, vertikal: WORD) Ausrichtung von Text.

SetTextStyle (Font, Richtung: WORD; Groesse: WORD)

Anhang

Festlegen des Zeichensatzes (Font), der Richtung und der GroBe des Textes.

SetUserCharSize (MuItX, DivX, MultY, DivY: WORD) VergroBerung des aktuellen Zeichensatzes.

SetViewPort (xl, yl, x2, y2: INTEGER; Clip: BOOLEAN) Setzen eines Grafikfensters zwischen der unteren Ecke (xl, yl) und der oberen Ecke (x2, y2).

SetVisualPage (Seite: WORD) Auswahl einer Grafikseite zur Anzeige.

SetWriteMode (Modus: INTEGER) Festlegen, wie Linien den Grafikbildschirm iiberzeichnen.

TextHeight (Zeichenkette: STRING) Hohe des Textes in Pixel.

TextWidth (Zeichenkette: STRING) Breite des Textes in Pixel.

A 2.6 Overlay-Funktionen

Mit Overlays werden die benotigten Teile in den Arbeitsspeicher geladen, und die nicht mehr gebrachten Teile ausgelagert.

OvrClearBuf Loschen des Overlay-Puffers.

OvrGetBuf Aktuelle GroBe des Overlay-Puffers in Byte.

OvrGetRetry Aktuelle GroBe des Bewahnmgsbereiches in Byte.

A2 Befehle, nach Gruppen gegliedert 295

Ovrlnit (Dateiname: STRING) Beginn der Overlay-Verwaltung und Offnung der Datei (benannt als Datei­name.OVR).

OvrlnitEMS Kopieren der Overlay-Datei in eine EMS-Karte.

OvrSctBuf (Lange: LONGINT) Festlegen der Grof3e des Overlay-Puffers.

OvrSctRctry (Groesse: LONGINT) Festlegen des Bewahrungsbereichs im Overlay-Puffer.

296 Anhang

A 3 Fehlermeldungen

Es werden prinzipiell zwei Arten von Fehlern gemeldet: Die FeWer wahrend der Kompilienmg und die Fehler wahrend des Programmablaufs (Laufzeitfehler). Die Fehler, die der Compiler meldet, sind meistens Syntax-Fehler, z. B. falsche Be­zeichnungen. Wahrend des Programmablaufs treten sogenannte semantische Fehler auf, die eine falsche Bedeutung anzeigen. Solche Laufzeitfehler erhalt man, wenn beispielsweise eine Variable ihren Wertebereich iibersteigt, oder durch null divi­diert wird.

A 3.1 Compiler-Fehlermeldungen

Die Fehler wahrend des Kompilierens werden Ihnen angezeigt (ab der Cursor-Posi­tion riickwarts) und genau erklart. Deshalb werden sie hier nicht nocheinmal aufge­fUhrt.

A 3.2 Laufzeit-Fehlermeldungen

Wird beispielsweise im Programm MITTELWE.PAS als erste Zahle der Buchsta­ben a eingegeben, dann erscheint folgende Laufzeit-Fehlermeldung:

Eingabe der ersten Zahl : a Runtime error lOG at lD9B:00ED. Berechnung des Mittelwertes zweier ZaMen

Bild At Meldung bei Laufzeitfehlem

Sie sehen die Meldung: Runtime error 106. Das ist, in hexadezimaler Schreibweise die Fehlernummer 106 (s. Tabelle AI: "Ungiiltiges numerisches Format").

Die Ausgabe: at 1D98:00ED gibt die Adresse des Befehls an, der fiir den Fehler verantwortlich ist.

Tabelle Al zeigt die vier Fehlerklassen (ab Nummer 200 befinden sich die kriti­schen Fehler, bei denen ein sofortiger Programmabbruch stattfindet).

A 3.2 Fehlermeldungen 297

Tabelle Al Laufzeitfehler

Fehlereode Fehler (hexadezimal)

DOS (1 bis 99)

2 Datei nieht gefunden 3 Pfad nieht gefunden 4 Zuviele Dateien offen 5 Dateizugriff verweigert 6 Handle ungliltig

12 Ungliltiger Dateimodus 15 U ngliltige Laufwerksnummer 16 VeC"J:eiehnis kann nieht geloseht werden 17 Umbenennung auf 2 versehiedenen Laufwerken nieht moglieh 24 Teile einer Datei gehoren nieht zum Typ Datei oder Objekt

Dateibearbeitung (100 bis 149)

100 Lesefehler bei Diskette 101 Sehreibfehler bei Diskette 102 Dateivariable keiner Datei zugeordnet 103 Datei nieht geOffnet 104 Datei zum Lesen nieht geoffnet 105 Datei zum Sehreiben nieht geOffnet 106 Ungliltiges numerisehes Format 147 Kein gliltiger Objekt-Typ 148 Lokale Objekt Typen sind nieht erlaubt 149 Das Wort VIRTUAL fehlt

Kritisehe Fehler (150 bis 199)

150 Diskette sehreibgesehlitzt 151 Peripheriegeriit unbekannt 152 Laufwerk nieht betriebsbereit 153 ungUltige DOS-Funktion 154 Prlifsummen-Fehler 155 Ungliltiger Disketten-Parameterbloek 156 Kopf-Positionierfehler 157 Unbekanntes Sektorformat 158 Sektor nieht gefunden 159 Kein Papier imDrueker 160 Sehreibfehler beim Zugriff auf Peripheriegerlit 161 Lesefehler beim Zugriff auf Peripheriegeriit 162 Hardware-Fehler

Fehler mit sofortigem Abbrueh (200 bis 249)

200 Division dureh Null 201 Felder bei Bereiehsliberprlifung 202 Staek-Uberlauf 203 Kein Platz im Heap 204 Ungliltige Zeigeroperation 205 Flie6komma-Uberlauf 206 Flie6komma-Unterlauf 207 Flie6komma-Fehler 208 Overlay-Manager nieht vorhanden 209 Fehler beim Lesen einer Overlay-Datei

298 Anhang

A 4 Fehlersuche mit dem Debugger

A 4.1 Aufgabe des Debuggers

Neu geschriebene Programme enthalten in fast allen Hillen Fehler, die es zu verbes­sem gilt. Dabei unterscheidet man im allgemeinen verschiedene Fehlerarten:

- formale Fehler (los en eine Compilermeldung aus; s. Anhang A3),

Laufteit/ehler (ftihren zum Programmabbruch; s. Anhang A3) und

- logische Fehler (Fehler, die der Programmierer macht).

Formale Fehler werden in der Regel vom Compiler oder vom Linker entdeckt. Sol­che Fehler werden nomlalerweise genau lokalisiert und eine Meldung tiber die Fehlerart ausgegeben. Deshalb bereitet diese Fehlerart dem Programmierer mei­stens keine Probleme.

Laufzeitfehler sind wesentlich tuckischer, da sie sich erst bei der Ausfiihrung des Programms bemerkbar machen, weil Sie etwas Unerlaubtes tun. Diese Fehler wer­den Ihnen ebenfalls angezeigt (Fehlerort und Fehlerart; s. Anhang A3, Tabelle AI).

Logische Fehler sind die schwierigsten Fehler. Denn Sie haben ein korrektes Pro­gramm geschrieben, und das Programm liiuft auch ohne Schwierigkeiten. Nur - die Ergebnisse sind falsch, oder Ihr Programm flihrt Dinge aus, die es nicht solI. Dann haben Sie als Programmierer einen Denkfehler gemacht - und diesen zu finden ist sehr schwer. Eine - nicht ganz elegante Moglichkeit -, den Fehler einzukreisen, be­steht darin, an wichtigen Stellen zusiitzliche WRITE-Anweisungen (und manchmal auch logische Variablen) zu schreiben, urn die Werte von Variablen verfolgen zu konnen.

Die meisten Programmiersprachen, auch Turbo Pascal, bietet Ihnen zur logischen Fehlersuche die Dienste eines Debuggers an. Er befindet sich als Menupunkt Debug in der integrierten Entwicklungsurngebung (Aktivierung durch <FlO> D oder <ALT> D), wie Bild A2 zeigt.

Mit seiner Hilfe liif3t sich das zu untersuchende Programm Stuck fUr StUck ausflih­ren und seine Reaktionen beobachten. Foigende Moglichkeiten unterstutzen Sie da­bei:

- Evaluate/modifY «CTRL> F4)

Es offnet sich ein Dialogfenster mit drei Eingabefeldern: Evaluate (Berechnen ei­nes Ausdrucks oder einer Variablen), Result (Ausgabe des berechneten Wertes ei-

A 4 Fehlersuche mit dem Debugger 299

Bild A2 Debugger

ner Variablen oder eines Ausdmcks) und New Value (Zuweisung eines neuen Wer­tes fUr eine Variable).

- Watches

Sie konnen sich in sogenanten Watches-Fenstern die Veranderungen der Variablen ansehen und verfolgen, ob sie sich erwartungsgemaJ3 verhalten. Sie konnen einen Watch-Ausdmck in das Fenster eingeben (Add Watch), einen Ausdruck aus dem Watches-Fenster loschen (Delete Watzch), einen Watches-Ausdruck editieren (Edit Watch) oder aIle Ausdriicke in dem Watches-Fenster loschen (Remove All Watches) .

- Toggle breaApoint «CTRL> F8)

Setzen von AbbruchsteIlen (breakpoints), zwischen denen Sie den Programmablauf studieren.

- Breakpoints

Hier konnen Sie aIle Ihre Abbruchpunkte eingeben oder anzeigen lassen.

Der folgende Abschnitt zeigt die Fehlersuche fur eine einfache Variable in einem kleinen Programm.

300 Anhang

A 4.2 Verfolgen der Werte einzelner Variablen

Argerliche Fehler in Programmen konnen in Schleif en auftreten, wenn die Abbruchbedingungen einer Schleife nicht korrekt beschrieben worden sind. Dies fiihrt im schIimmsten Fall zu einer "Endlos-Schleife", d.h. die Abbruchbedingung wird nie erreicht, und das Programm wird endlos fortgesetzt. Genausogut kann es aber auch vorkommen, daB eine fUr das Endergebnis wichtige Schleife iiberhaupt nicht durchlaufen wird. In beiden Hillen ist die Ursache fUr den mangelhaften Programmablaufnicht ohne weiteres erkennbar.

Abbilfe kann nur die Uberpmfung der Abbruchbedingung schaffen. Diese Ab­bruchbedingung ist in den allermeisten Hillen als veranderliche Variable defmiert, deren Wert es wahrend des Programmablaufs zu iiberwachen gilt. Wie der Debugger bier helfen kann, soIl am Beispiel des aus Abschnitt 2.3.2.1 bekannten Programms STROEMEN.PAS gezeigt werden. In diesem Programm tritt die Variable Re (fUr Reynoldszahl) auf, deren Werte wir verfolgen mochten.

Die Abbruchbedingung der abweisenden Schleife lautet:

WHILE Re < 1160 DO

Das bedeutet, daB aIle in der Schleife stehenden Anweisungen durchlaufen werden, solange die Reynoldszahl Re kleiner als 1160 ist. Die im urspriinglichen Programm STROEMEN.PAS verwendeten Formeln garantieren eine ziigige Berechnung. Doch schon ein simpler Eingabefehler, bei dem wir die Division durch k vergessen, scbickt unser Programm in eine beinahe endlose Schleife. 1m Programm STROEMEN.PAS wurde statt der Anweisung Re := (r*V)/k versehentlich

Re := (r*V)

eingegeben.

Hierdurch wachst der Wert fUr Re etwa I Milliarde mal Iangsamer aIs vorgesehen; ein potentieIIer Anwender dieses Programms ware rasch der Verzweiflung nahe.

Zur Ermittiung dieses Fehlers wird im foIgenden der Debugger eingesetzt werden. AIs erstes muB sich der Programmierer klar damber werden, welche Variable (am besten zunachst nur eine einzige) er iiberwachen will und an welcher Stelle im Pro­gramm dies geschehen soIl. 1m vorliegenden Fall wird die Variable Re kontroIliert und zwar jeweils sofort, nachdem ihr Wert verandert worden ist (also nach der Programmzeile Re := (r*V)). Wir gehen in foIgenden Schritten vor:

a) Andern des Programms

Ais erst en Schritt ladt man das Programm STROEMEN.PAS von der Begleit­diskettte oder von der Festplatte in den Arbeitsspeicher. Dazu dient im Hauptmenii

A 4 Fehlersuche mit dem Debugger 301

File der Befehl Open (oder Driicken der Taste F3) und die Auswahl des Programms STROEMEN.PAS. In der Zeile 24 wird die Formel entsprechend geandert. An­schlie13end wird das Programm durch <ALI> F9 erfolgreich kompiliert.

b) Setzen eines Abbnlchpunktes

Der Cursor wird ans Ende der Zeile gesetzt, in der die Berechnung der Reynoldszahl steht, und mit <CTRL> F8 der Abbruchpunkt festgelegt. Sie sehen die entsprechende Zeile hell unterlegt (Bild A3).

Bild A3 Verandertes Programm mit Abbruchpunkt

c) OjJnen eines Watches-Fensters

Mit <CTRL> F7 werden die zu uberwachenden Ausdriicke eingegeben. Es werden der Schleifenzahler v und die Reynoldszahl Re uberwacht. Die Eingabe von v zeigt Bild A4. Die Reynoldszahl Re wird entsprechend eingegeben (oder durch Drucken der <INS>-Taste).

d) Schrittweises Ausfi'ihren des Programms

Durch Drucken der Funktionstaste F8 wird das Programm schrittweise ausgefiihrt. Die Werte fUr v und Re beim ersten Durchlauf des Programms zeigt Bild AS.

Durch weiteres Driicken von F8 werden die folgenden Werte angezeigt.

Wie mit den oben angefiihrten Schritten gezeigt wurde, konnen mit Hilfe des Debuggers die Werte von Variablen wahrend des Programmablaufs verfolgt wer­den, olme Veranderungen im Programm selbst vomehmen zu mussen. Ein mogli-

302 Anhang

Bild A4 Eingabe der zu iiberwachenden Variablen v

cher logischer Fehler, aber auch Laufzeitfehler konnen auf diese Weise lokalisiert und verbessert werden. 1m Faile unseres Beispiels konnte man durch bloJ3es Nach­rechnen sehr schnell herausfinden, da/3 sich die Variable Re nieht wie erwartet ent­wickelt. Eine Uberpriifung der verwendeten Formel wiirde dann sehr schnell den Fehler erkennen lassen.

Bild AS Anzeigen der Werte flir v und Re

A 5 Losungen der Ubungsaufgaben

A 5 Losungen der Ubungsaufgaben

A 5.1 WURF1.PAS

Struktogramm

Eingabe der Anfangsgeschwindigkeit

Eingabe des Abwurfwinkels

Eingabe der Flugzeit

·X=v·t·COSot

y = v . t . sin· ot _l 9 . t 2

2

Ausgabe: Erreichte Weite Momentane FlughOhe

Programm

USES Crt:

VAR

X,Y,v,a,t

CONST g = 9.81:

BEGIN

REAL:

(* Eingabeteil *)

ClrScri WriteLn;WriteLn; WriteLn (IBestimmung der Ortskoordinaten eines

Gegenstandes ' ); WriteLn (' ( schiefer Wurf ) '): WriteLn:WriteLn: Write ('Eingabe der Anfangsgeschwindigkeit in m/s '); ReadLn (v); Write ('Eingabe des Abwurfwinkels a in Grad '); ReadLn (a); Write ('Eingabe der Flugzeit in s '): ReadLn (t);

303

304

(* Verarbeitungsteil *)

a := a/360*2*3.1415926; X := v*t*cos(a); Y := v*t*sin(a) - SQR(t)*g*O.5;

(* Ausgabeteil *)

WriteLn;WriteLn;

Anhang

WriteLn (' die erreichte Weite betragt WriteLn; WriteLn (' momentane Flugh6he

',X:I0:3,' m');

',Y:IO:3,' m');

END.

A 5.2 WURF2.PAS

Struktogramm

Eingabe der Anfangsgeschwindigkeit

Eingabe des Abwurfwinkels

Eingabe der Flugzeit

X=v·t·coso: y = v· t· sino: _l g. 12

2

-=---------:U9hO~ Ja Nein

Ausgabe: Ausgabe: , Erreichte Weite Geworfener Gegenstand hat bereits Momentane Flughohe wieder den Boden erreicht

A 5 Losungen der Ublmgsaufgaben

Programm

USES Crt;

VAR X, Y, v, a, t

CONST

9

BEGIN

9.81;

(* Eingabetei1 *)

ClrScr; WriteLn;WriteLn;

REAL;

WriteLn ('Bestimmung dcr Ortskoordinaten eines Gegenstandes');

WriteLn (' ( schiefer Wurf ) '); WriteLn;WriteLn; Write ('Eingabe der Anfangsgeschwindigkeit in m/s '); ReadLn (v); Write ('Eingabe des Abwurfwinkels a in Grad ReadLn (a); Write ('Eingabe der F1ugzeit in s ReadLn (t); WriteLn;

(* Verarbeitungsteil *)

a .= a/360*2*3.1415926; X .- v*t*cos(a); Y := v*t*sin(a) - SQR(t)*g*O.5;

(* Fallabfrage fur positive Hohenangaben *)

IF Y>=O THEN BEGIN WriteLn;

I ) ;

: ');

305

WriteLn (' die erreichte Weite betragt WriteLn; WriteLn (' momentane Flughohe

',X:10:3,' m');

END ELSE

',Y:10:3,' m')

WriteLn ('Der geworfene Gegenstand hat bereits wieder den Boden erreicht ! ');

END.

306

A 5.3 KUGEL.PAS

Struktogramm

Eingabe: Auswahl 1,2 oder 3

Volumenberechnung einer Kugel

v=io 1t or3

3

Programm

USES Crt;

VAR Auswahl h, r, V

BEGIN

BYTE; REAL;

2

Volumenberechnung eines senkrechten Kreiskegels

v = ~ 0 r2 0 h 3

Ausgabe des Volumens

(* Vorstellung des Mentis *)

ClrScr; WriteLn; WriteLn;

Anhang

Auswahl ?

Volumenberechnung eines senkrechten Kreiszylinders

v = 1t 0 r2 0 h

WriteLn ('Programm zur wahlweisen Berechnung des Volumens von');

WriteLn ('Kugeln, senkrechten Kreiskegeln und senkrechten Kreiszylindern');

WriteLn; WriteLn; WriteLn ('An welchem Korper solI die Berechnung durchgeftihrt

werden ?'); WriteLn; WriteLn (' Kugel WriteLn (' Kreiskegel WriteLn (' Kreiszylinder

(* Eingabeteil *)

l' ) ; 2' ) ; 3'); WriteLn;

A 5 Losungen der Ubungsaufgaben 307

Write ('Bitte gewtinsehte Zahl eingeben: '); ReadLn (Auswahl); WriteLn; WriteLn; r := 0; h:=O;

(* Verarbeitungsteil, Mentiauswahl *) CASE Auswahl OF

1: BEGIN WriteLn ('Volumenbereehnung an einer Kugel'); WriteLn; Write ('Eingabe des Radius in em: 'I; ReadLn (r); V := 4/3*pi*r*r*r; WriteLn; WriteLn ('Das erreehnete Volumen betragt ',V:10:3,'

cm3'); END;

2: BEGIN WriteLn ('Volumenbereehnung am senkreehten

Kreiskegel'); WriteLn; Write ('Eingabe des Radius in em: 'I; ReadLn (r); Write ('Eingabe der Hehe in em: 'I; ReadLn (h); V := pi/3*SQR(r)*h; WriteLn; WriteLn ('Das erreehnete Volumen betragt

, , V: 10: 3,' cm3'); END;

3: BEGIN WriteLn ('Volumenbereehnung am senkreehten

Kreiszylinder'); WriteLn; Write ('Eingabe des Radius in em: 'I; ReadLn (r); Write ('Eingabe der Hehe in em: 'I; ReadLn (h); V := pi*SQR(r)*h; WriteLn; WriteLn ('Das erreehnete Volumen betragt

, , V: 10: 3,' cm3'); END;

END; (* von CASE OF *) END.

308 Anhang

A 5.4 SHELL.PAS

Struktogramm

Bildschirm loschen; Cursor links oben

Eingabe von N (Anzahl der Zahlen)

1=1

Eingabe der Zahlen Alii

Wiederhole bis I = N

N halbieren D = N 12

D ganzzahlig machen

Start bei D K=D

M = 1 Dummy

Wiederhole solange M¢O

M = 0 Merker fur Austausch

1=1

~A(~ Ja Nein

Austausch der Zahlen .1.

M = 1 Merker

Wiederhole bis I = N - D

Halbieren von D D = D 12

D ganzzahlig machen

Wiederhole bis K = 1

1=1

Ausgabe der sortierten Zahlen Alii

Wiederhole bis I = N

A 5 Losungen der Ubungsaufgaben

Programm

USES Crt;

VAR b, d, i, n: INTEGER;

m: BOOLEAN;

BEGIN ClrScr;

a: ARRAY [1 .. 2000] OF INTEGER;

Write('Anzahl der zu sortierenden Zahlen: '); ReadLn(n); WriteLn; FOR i := 1 TO n DO BEGIN

a[i] := random(1000); Write(a[i]:4); END; (* Schleifenende *)

d := n div 2; WHILE d > 0 DO BEGIN

REPEAT m := true; FOR i := 1 TO n-d DO

IF a[i] > a[i+d] THEN BEGIN b := a[Hd];

a [Hd] := a [i] ; a[i] := b;

m := false; END; (* von IF"*)

UNTIL m; d := d div 2;

END; (* WHILE-DO-Schleife *) WriteLn; WriteLn('Die sortierten Zahlen lauten:'); FOR i := 1 TO n DO

Write(a[i]:4);

END.

309

310

A 5.5 DATEIlO.PAS

Programm

PROGRAM Dateil0;

USES Crt;

TYPE Datensatz = RECORD

Nummer Name Strasse Ort Telefon END;

VAR

INTEGER; STRING [25]; STRING [25]; STRING [25]; STRING [20];

Kunden Speicher Auswahl, n, i

FILE OF Datensatz; ARRAY [1.. .100] OF Datensatz; BYTE;

PROCEDURE Begruessung; BEGIN ClrScr; GotoXY (23, 7); WriteLn ('VERWALTUNG EINER KUNDENDATEI'); GotoXY (3, 15); WriteLn ('Beim erstmaligen Programmstart ist im'

" nachfolgenden AuswahlmenU die "1"'); GotoXY (3, 16); WriteLn (' fUr "Eingabe" einzugeben.'); GotoXY ( 3, 18); WriteLn ('Zur Fortsetzung des Programmablaufs bitte'

" beliebige Taste drUcken!'); GotoXY (70, 18); REPEAT UNTIL KeyPressed; END; (* Begruessung *)

PROCEDURE Menue; BEGIN ClrScr;

Anhang

AS Losungen def Ubungsaufgaben

GotoXY (30, 3) ; WriteLn ( , , ) ; GotoXY (30, 4) ; WriteLn ( , , ) ;

GotoXY (30, 5) ; WriteLn ( , BEFEHLSMENU ' ) ; GotoXY (30, 6) ; WriteLn ( , , ) ; GotoXY (30, 7) ; WriteLn ( , , ) ; GotoXY (16, 11) ;

WriteLn ('Bitte wahlen Sie unter folgenden Moglichkeiten :');

GotoXY (20, 14); WriteLn ('Datensatze eingeben GotoXY (20, 15); WriteLn ('Datei speichern GotoXY (20, 16); WriteLn ('Datei von Externspeichern laden GotoXY (20, 17); WriteLn ('Zugriff auf die Datensatze GotoXY (20, 18); WriteLn ('Programmende -GotoXY (20, 20);

l' ) ;

2' ) ;

3' ) ;

4' ) ;

9' ) ;

Write ('Nummer der gewlinschten Tatigkeit : '); ReadLn (Auswahl); END; (* Menue *)

PROCEDURE Eingabe; VAR

Ende : BOOLEAN; BEGIN ClrScr; Ende := FALSE; GotoXY (20, 3); WriteLn ('Eingabe der Datensatze:'); GotoXY ( 2, 6); WriteLn ('Die Datensatzeingabe kann durch'

" Eingabe von "0" unter '); GotoXY ( 2, 7); WriteLn ('''Kundennummer'' unterbrochen werden. '); WriteLn; REPEAT n := n + 1; Write (' Kundennummer: '); ReadLn (Speicher [nJ .Nummer); IF Speicher [nJ .Nummer = 0 THEN BEGIN

n := Ende := END

n - 1; TRUE;

311

312 Anhang

ELSE BEGIN Write ( I Name I ) ; ReadLn (Speicher [n) . Name) ; Write ( I

Write ( I

Write ( I

WriteLn; END;

Strasse Ort Telefonnr.

UNTIL Ende; WriteLn; WriteLn;

I ) ; ReadLn (Speicher [n) . Strasse) ; I ) ; ReadLn (Speicher [n) .Ort) ; I ) ; ReadLn (Speicher [n) . Telefon) ;

WriteLn (' Nach der Eingabe der Datensatze bitte speichern! ') ;

WriteLn; Write (' ZurUck zum MenU durch DrUcken einer beliebigen

Taste. ') ; REPEAT UNTIL KeyPressed; END; (* Eingabe *)

PROCEDURE Speichern; BEGIN ClrScr; ASSIGN (Kunden, 'Kundendatei ' ); REWRITE (Kunden); FOR i := 1 TO n DO Write (Kunden, Speicher [i)); WriteLn; WriteLn; WriteLn (' I :7, n " Eintrage vom Arbeitsspeicher in die

Kundendatei vorgenommen. ' ); WriteLn; Write (' ZurUck zum MenU durch DrUcken einer

beliebigen Taste. '); CLOSE (Kunden); REPEAT UNTIL KeyPressed; END; (* Speichern *)

PROCEDURE Laden; BEGIN ClrScr; ASSIGN (Kunden, 'Kundendatei ' ); RESET (Kunden) ; n:= FILESIZE (Kunden); FOR i := 1 TO n DO Read (Kunden, Speicher [i)); WriteLn; WriteLn; WriteLn (' I :4, n, I Eintrage von der Kundendatei in den

Arbeitsspeicher. ' ); WriteLn; Write (' ZurUck zum MenU durch DrUcken einer beliebigen

Taste. ');

A 5 Losungen der Ubungsaufgaben

CLOSE (Kunden); REPEAT UNTIL KeyPressed; END; (* Laden *)

PROCEDURE Zugriff; VAR

Vergleichsname BEGIN ClrScr;

STRING [25];

313

GotoXY (15, 3); GotoXY ( 2, 6);

WriteLn ('Zugriff auf die Datensatze:'); Write ('Eingabe des Vergleichnamens : '); ReadLn (Vergleichsname);

FOR i := 1 TO n DO IF Speicher [iJ .Name = Vergleichsname THEN BEGIN WriteLn; WriteLn; WriteLn (' Ausgabe Datensatz " Vergleichsname); WriteLn; WriteLn (' WriteLn (' WriteLn (' WriteLn ('

Kundennr. Wohnort Strasse Telefonnr.

END; (*IF*) WriteLn; WriteLn;

Speicher [iJ .Nummer); Speicher [iJ .Ort); Speicher [i) .Strasse); Speicher [iJ .Telefon);

Write (' ZurUck zum MenU durch DrUcken einer beliebigen Taste. ');

REPEAT UNTIL KeyPressed; END; (* Zugriff *)

BEGIN (* Hauptprogramm *) n := 0; Begruessung; REPEAT

Menue; CASE Auswahl OF 1: Eingabe; 2: Speichern; 3: Laden; 4: Zugriff; END; (*CASE*) UNTIL Auswahl = 9;

ClrScr; WriteLn; WriteLn; WriteLn (' Programmende') END.

314

Sachwortverzeichnis

.BGI-Dateien, 229

.EXE-Datei, 38

.PAS, 161

.TPU, 161 Abbruchpunkt, 301 Abbruchstellen, 299 Abstrakte Datentypen (ADT), 98, 148,

150,155,169,174 Abstrakte Datentypen in Modulen, 161 Abstrakte Datentypen in Objekten, 170 Abstrakte Klassen, 191 Abstrakte Objektklassen, 194 Abweisende Schleife (WHILE .. DO), 90 AdreJ3-0peratoren, 280 ADT, 150,160,161,163,171 Aktuelle Parameter, 152 Anderbarkeit, 188 Anfangswert, 81 Anweisungen, 6, 282 Anweisungsteil, 42, 46 Anwendungsprogramme, 240 Anzahl der Elemente der Datei, 132 Arbeitsbildschirm, 18 Arbeitsteilung, 148 Arithmetische Operatoren, 280 ARRAY; 3, 84, 94, 120, 134, 142, 149,

151,158,164,171 ASCII-Code, 223 ASSIGN, 131, 142 Aufrufdiagramm, 148, 155 Ausftihren, 37 Auswahl aus 2 Moglichkeiten, 52 Auswahl aus mehreren Moglichkeiten,

52,61 Auswahl,6 Auswahlstrukturen (Selektion), 52

Bausteine, 148 Befehle, 282 Befehlsmenii, 135 BEGIN,46 Benutzer, 119

Benutzerdefmierte Datenstrukturen, 3 Benutzeroberfliiche, 16, 17 Beschreibung des Problems, 9 Bezeichner, 42 BGIDEMO.PAS, 228, 231 Binder, 38 Black boxes, 24 Block-Befehle, 31 Breakpoints, 299 BUBBLE.PAS, 98, 143

CASE .. OF .. ELSE .. END, 69 CASE .. OF .. END, 61 Client, 167 Client-Modul, 168 Clipping, 229 CLOSE,131 Compiler-Fehlermeldungen, 296 CONST, 24, 43, 160 CONSTRUCTOR, 200, 201, 206 Cursorsteuerung, 30

Datei mit dateiweisem Datenverkehr, 134 Datei, 3, 129 Datei-Funktionen und Datentypen, 283 DATEIl.PAS,137 DATEIlO.PAS,31O DATEI2.PAS, 143 Dateiaufbau, 132 Dateiverwaltung, 119, 132 Dateiweiser, 130 Daten, 6, 24 Datenbank, 3 Datenbank-Design, 10 Datenbeschreibung, 10 Datendefinitionen, 173 Datenfeld (field), 3 Datenfelder, 211 Datensatzweiser Verkehr, 130 Datenschiiissel, 10 Datenstrukturen,2, 119, 149, 174 Datentypen, 119, 152, 155

Sachwortverzeichnis

Debugger, 298, 299 Dialog-Fenster, 1, 18 Direkte Parameteriibergabe, innerhalb der

Prozedur, 110 Direktzugriff-Datei, 129, 142 Dummy-Methoden, 192, 196,210 Durchfluf3volumen nach Hagen-

Poiseuille, 95 Dynamische Daten, 4 Dynamische Datenstrukturen, 3 Dynamisches Verhalten, 148

Editier-Befehle, 30 Eigene Datentypen (TYPE), 43 Eigenschaft, 208 Ein- und Ausgabeparameter, 111 Eindimensionaler ARRA Y, 85 Einfache Datenstrukturen, 3 Einfligen,30 Einlesen eines ARRAYS, 84 ELEKTRON.PAS,54 END,46 Endgeschwindigkeit eines Elektrons, 53 Endwert,81 Entwicklungsumgebung

(Pull-Down-Menus), 1 Entwurf,9 EOF,3 EOR,3 Erweiterbarkeit, 149, 188, 190, 204 Erweiterung, 169 Evaluate/modify, 298 Exportierender Server, 169

FAKUL1.PAS, 117 FAKUL20.PAS, 118 Fakultatsermittlung, 117, 118 Farbkonstanten, 232 Fehlerbeseitigung, 169 Fehlererkennung,71 Fehlermeldungen, 296 Fehlersuche, 298 Feld,84 FILE, 129, 149 File, 4 FILE SIZE, 132 FillPoly, 232

Flexibilitiit, 204 FloodFill, 232 Folge,6 Folgestrukturen (Sequenzen), 49 Formale Fehler, 298 Formale Parameter, 152, 173 FrUhe Bindung, 191, 199,202 FrUhe oder statische Bindung, 198 Fullmuster, 232 FUNCTION, 160, 209 Funktion, 100 FUNKTION.PAS, 116 Funktionalitiit, 149 Funktionen, 24, 114 Funktions-Unterprogramme

(FUNCTION), 43 Funktionsbeschreibung, 9 Funktionsvereinbarungen, 25

GASGLEI.PAS, 251 GAUSSJOR.PAS, 247 Geerbte Methode, 203 Geheimer Realisierungsteil, 161 Geheimnisprinzip, 174 Geometrische Figuren, 190

315

Geringer Wartungsaufwand, 149 Gesamtwiderstand bei Parallelschaltung

zweier Widerstiinde, 49 Geschachtelte Schleif en, 94 Get-Methoden, 194 Gliederung der Daten, 149 Globale Konstanten, 104, 220 Globale Variable, 103 GOTO, 26, 57, 62, 93 GrafO,192 GrafOl,201 Graf02,211 Graft,222 Graf3,227 GratDemo, 213 Grafik,228 Grafik-Cursor, 229 GrafikModus, 216 Grafikmodus, 230 GraflkTreiber, 216 GraphDriver, 228 Grobentwurf, 151

316

Gro13- und Kleinschreibung, 47 Gro13e Softwareprojekte, 169

HAGEN.PAS,96 Haupt- und Unterprogramm, 108 Haupt-Modul, 175 Heap, 4, 6 Hierarchie graphischer Objektklassen,

225 Hierarchie von Objektklassen, 181 Hierarchische Gliederung, 149 Hierarchisches Aufrufdiagramm, 151 Hochkommata, 46

IDE, 16 IF .. THEN .. ELSE,52 IMPLEMENTATION, 161, 162, 163,

174,175,180,204 Implementierung, 9 Importierender Client, 169 Index-sequentielle Datei, 129 Information hiding, 24, 162, 174 Informationsleiste, 18 Init, 195 InitGraph, 215, 228 Initialisierung, 228 Initialisierungs-Teil, 162 Installation, 9, 14 Instanz (Objekt), 200 Instanzen, 193, 195 INTEGER, 209 Integrationstest, 9 Integrierte Entwicklungswugebung, 16,

17 Intelligent linking, 163 INTERFACE, 161, 162, 163, 167, 174,

175,176,179,204 INTERF ACE-Teil, 176 Iterationen, 81 Iteratives Programm, 118

Kapselung von Daten, 149, 169, 170, 188 Kapselung, 174 Kennungen, 43, 62 Klassenhierarchie, 192 Klassenname, 173 Kode, 169, 170, 188 Kodierung, 9

Sachwortverzeichnis

Kommentar, 42 Kompiler-Meldung, 48 Kompilieren, 33 Komponentenentwurf, 9 Konstante, 24, 43,103,104 Konstruktoren, 200, 202 Kontrollierte Verarbeitung, 90 KREISZ21.PAS,105 KREISZ3.PAS,69 KREISZ4.PAS,71 KUGEL.PAS, 80, 306

LABEL, 62, 93 LABEL-Vereinbarungen,

(Sprungmarkierungen), 26 Laden, 38 Laufzeitfehler, 296, 297, 298 Leerzeichen, 48 LineRel, 229, 231 LineStyle, 231 LineTo, 229, 231 Linker, 38 LISSA.PAS, 228, 231, 260 ListTyp, 155 LISTIYP3.PAS,162 LISTTYP3.TPU,162 Logische Fehler, 298 Logische Operatoren, 55, 56, 280 Logische Variable, 57, 71, 75 Logische Verkniipfungen, 55 Lokale Variable, 103, 104 L6schen,30

Maschinenkode, 161, 163 Mathematische Funktionen, 281 MaxListSize, 164, 180 Mehrdimensionale ARRAYs, 122 Mehrere formale Variablen, 113 Meniileiste, 18 Me13bereichserweiterung, 57 Methoden, 174, 191, 193, 197, 198,208,

211,213,227 Methodenbezeichner, 182 Methodenkopf, 199 Mi13brauch der Daten, 170 MiBbrauch der Prozedur, 160 Mil3brauch einer Operation, 170, 174 MITTELWE.PAS,101

Sachwortverzeichnis

Mittelwertbildung ohne Unterprogramm, 101

Mittelwertbildung, 102 MITITELW2.PAS; 102 Modulare Software, 167 Modularisierung, 204 Module, 6, 100, 148 Modultest,9 MoveRel, 229 MoveTo,229 MULTI.PAS,274

Nachfahren-Klasse, 204 Nachkommen, 174, 177,191,197,211,

227 Nachkommenklasse, 198 Neu Einrichten der Datei, 131 Nicht abweisende Schleife

(REPEA T. .UNTIL), 92 Nicht Offentlich, 176 Nutzung,9

OBJECT, 170, 174, 175, 188 Objekte, 149, 193,202 Objekt-UNIT, 176 Objektklassen, 170, 173, 174, 175, 177,

191,193,197,200,218,220 Objektorientierte Programmierung

(OOP), 1,98,148,149,150,170,190 Objektorientierte Spracherweiterungen,

187 Offentliche Schnittstelle, 161, 174, 188 Offentlicher Teil, 173 OOP, 1, 150, 170, 199,204,227 Operatoren, 155,280 Organisationsformen, 129 OSelectl,171 OSelect3, 176 OSelect4, 181 OutText, 229, 230, 238 OutTextXY, 230, 238 Overlay-Funktionen,294

PARALLEL.PAS,50 Parameterdeklaration, 26 Parameterliste, 208 Parameterubergabe, 107, 108 Parameteriibergabe, au13erhalb der

Prozedur, 108 Parametrisiert, 174 Pattern, 231 Pflichtenheft, 8 Pixel, 191 Pointer, 4 Polymorph, 202 Polymorphie, 177, 182 POLYREGR.PAS,270 Privat, 167 Private Implementation, 188

317

PRIVATE, 174, 176, 182, 183,208,209 Privater Implementationsteil, 174 PROCEDURE, 25, 43, 103, 160, 173,

209 PROGRAM, 183 Programm mit Rucksprung

(KREISZl.PAS),65 Programm ohne Rucksprung

(KREISZ2.PAS),66 Programmausdruck, 13 Programmbaustein (UNIT), 27 Programmentwicklung, 8 Programmiersprache, 1 Programmkode, 160 Programmlogik, 10 Programmstruktur, 6, 41 Programmtest, 9 PROZED1.PAS,109 PROZED2.PAS, 111 PROZED3.PAS, 112 Prozeduren des Betriebssystems

(UNIT DOS), 287 Prozeduren fur den Bildschirm

(UNIT CRT), 286 Prozeduren fur die Grafik

(UNIT GRAPH) Prozeduren,24, 100, 107 Prozedurk6pfe, 152e, 173 Prozedurvereinbarungen, 25 Pull-Down-Menu, 18 Put-Methoden, 194

QUADRAT.PAS, 246

Radioaktiver Zerfall, 241 RADIOZER.PAS, 240, 242 RANDOM (Zahl), 82

318

Randomize, 209 READ, 46 READLN,46 REAL, 209 RECORD, 3,120,122,134,149,158,

173, 174 RECORD1.PAS,124 RECORD2.PAS,127 REGRESS.PAS,266 Rekursive Ablaufe, Rekursionen, 116 Rekursives Pro gramm, 117 Reservierte W orte, 42 RESET, 131, 136, 142 RESULT.PAS, 254 REWRITE, 131, 136, 142

Satzzeichen, 47 Schiefer Wurf, 51 SchlieJ3en der Datei, 131 Schliisselworte, 42 Schnittstellen, 11 Schnittstellenfestlegung, 9 Schrittweise Verfeinerung, 11 Schrittweises Ausfiihren, 301 Schrittweite,81 SEEK, 142 Segmente,6 Select sort, 150 Select-Sort-Algorithmus, 97, 99 SelectO, 151 Select2, 158 Select3, 163 Select4, 165 SelectS, 166 SELF, 173 Semikolon, 46 Sequentielle Datei, 129 Server, 167 Server-Modul, 168 SET, 105, 149 SetColor, 232 SetFillStyle, 232 SetFloodPattern, 232 SetLineStyle, 231 SetTextJustify, 230 SetUserCharSize, 230 SetViewPort, 229 Setzen Abbruchpunkt, 301

Sachwortverzeichnis

Shell-Sort-Verfahren, 97 SHELL.PAS, 99, 143,308 Sicherheit, 148 SIMULA,175 Simulation eines Wiirfelspiels, 82 Software Engineering, 8 Software-Lebenszyklus, 8 Sortierprogramm, 150 Sortierverfahren, 97 Spate Bindung, 191, 199,202 Speichem, 36 Speicher organisation, 6 Springen zum Anfang der Datei, 131 SQRT,53 Stack,6 StandardmaJ3ige Datenstrukturen, 3 Startadressen, 199 Statische Datenstrukturen, 3 Statische Methoden, 193, 195, 197, 202,

203 Statische Programmgliederung, 148 Statische Unterprogramme, 191 STRING, 85 STROEMEN.PAS,92 STROM2.PAS, 94 STROMMES.PAS, 59 Stromungswiderstand einer laminaren

Stromung, 90 Struktogramme, 10 Strukturiert, 100, 174 Suchen und Ersetzen, 34 Syntax-Diagramm fUr einen Bezeichner,

42 Syntax-FeWer, 296 Syntaxdiagramm der objektorientierten

Spracherweiterungen, 189 Syntaxdiagramm, allgemeiner Datentyp,

119 Syntaxdiagramm,

CASE .. OF .. ELSE .. END,62 Syntaxdiagramm, Datentypen, 45 Syntaxdiagramm, DO .. WHILE-Schleife,

90 Syntaxdiagramm, FILE, 129 Syntaxdiagramm, FUNCTION, 114 Syntaxdiagramm, IF .. THEN .. ELSE, 52 Syntaxdiagramm, Konstanten, 43 Syntaxdiagramm, LABEL, 62

Sachwortverzeichnis

Syntaxdiagramm, Prozedur, 101 Syntaxdiagramm, RECORD, 123 Syntaxdiagramm, REPEA T..UNTIL-

Schleife, 93 Syntaxdiagramm, TYPE, 120 Syntaxdiagramm, V AR, 45 Syntaxdiagramm, Vereinbarungen, 43 Syntaxdiagramm, Wert einer Konstanten,

44 Syntaxdiagramm, WITH, 126 Syntaxdiagramm, Zahlen, 44 Syntaxdiagramm, Zahlschlei fe, 81 Systematische Programmentwicklung, 49 Systementwurf, 9 Systemtest, 9

Tabelle der virtuellen Methoden, 199 Teil, 167 Test, 9 Text, 46 Textausrichtung, 230 TextHeight, 231 TextWidht, 231 TITRATIO.PAS,244 Toggle breakpoint, 299 Top-Down-Methode, 150 Typ-Umwandlung, 209 TYPl.PAS,121 TYPE, 25,119,160 Typvereinbarungen, 25

Uberschreibung, 150 Ubersichtlichkeit, 148, 149 Ubersichtsschema Datenverkehr, 132 Unabhangige Bausteine, 169 UNIT Crt, 43, 286 UNIT Dos, 287 UNIT Graph, 215, 218,228,229 UNIT KoordCIO, 218 UNIT, 6,150,161,162,163,165,167,

169,171,173,174,175,176,179, 183, 192, 204, 206, 209, 213, 220, 224

Unterprogramme, 43, 101, 148, 167 Unterprogrammtec1mik, 100, 102, 103 USES, 160, 163, 165, 167, 175,27,43

VAR, 25, 43, 160

VAR-Parameter,216 Variable als Eingabe-Parameter, 112 Variable, 43, 110 Variablenliste, 10 Variablenvereinbarungen, 25 Veriinderung, 169 Verbundvariablen, 173 Vereinbarungsteil, 42

319

Vererbung und Polymorphie, 188 Vererbung, 150, 177, 191 Vererbungsmechanismen, 149, 181 Verfolgen der Werte einzelner Variablen,

300 Vergleichsoperatoren, 280 Verkettete Datei, 129 Verwendungsfahige Klassen, 191 VIRTUAL, 199L, 206, 211 Virtuelle Methoden, 188, 190, 191, 199,

200,203,204 VMT,199,200,201 VMT-Feld, 202 Vorfahrensklasse, 203 Vorteile, 103

Wahlweise Berechnung von Wechselstromwiderstanden,75

Wahlweise Berechnungen am senkrechten Kreiszylinder, 62

Watches, 299 Watches-Fenster, 301 Weiterverwenden, 169 WESTRO I.P AS, 77 Wiederholung, 6, 81 Wiederverwendbarkeit, 149, 188,204 Wiederverwendung, 100, 148, 160 WITH, 127, 174 WITH-Anweisung,126 WORD, 209, 212 WRITE, 46 WRITELN,46 WUERFEL.P AS, 83 WURF.PAS, 228, 233 WURFl.PAS, 51, 303 WURF2.PAS, 61, 304 WURF3.PAS,86 WURF4.PAS,88

Ziihler, 81

320

zahlschleilfen (FOR .. TO (DOWN TO) .. DO),81

Zeichenfarbe, 221 Zeichenstil, 231

Sachwortverzeichnis

Zeiger, 4 Zusammengesetzte Datenstrukturen, 3 Zuweisung,47 Zweidimensionaler ARRAY, 88