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 existierende 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 GrafikModus.
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 Dateiname.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 Bezeichnungen. 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 dividiert wird.
A 3.1 Compiler-Fehlermeldungen
Die Fehler wahrend des Kompilierens werden Ihnen angezeigt (ab der Cursor-Position riickwarts) und genau erklart. Deshalb werden sie hier nicht nocheinmal aufgefUhrt.
A 3.2 Laufzeit-Fehlermeldungen
Wird beispielsweise im Programm MITTELWE.PAS als erste Zahle der Buchstaben 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 kritischen 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 verbessem 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. Solche Fehler werden nomlalerweise genau lokalisiert und eine Meldung tiber die Fehlerart ausgegeben. Deshalb bereitet diese Fehlerart dem Programmierer meistens keine Probleme.
Laufzeitfehler sind wesentlich tuckischer, da sie sich erst bei der Ausfiihrung des Programms bemerkbar machen, weil Sie etwas Unerlaubtes tun. Diese Fehler werden Ihnen ebenfalls angezeigt (Fehlerort und Fehlerart; s. Anhang A3, Tabelle AI).
Logische Fehler sind die schwierigsten Fehler. Denn Sie haben ein korrektes Programm 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, besteht 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 ausflihren und seine Reaktionen beobachten. Foigende Moglichkeiten unterstutzen Sie dabei:
- Evaluate/modifY «CTRL> F4)
Es offnet sich ein Dialogfenster mit drei Eingabefeldern: Evaluate (Berechnen eines 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 Wertes 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 Abbruchbedingung 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 Programm 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 Begleitdiskettte 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. Anschlie13end 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 werden, 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 Nachrechnen sehr schnell herausfinden, da/3 sich die Variable Re nieht wie erwartet entwickelt. 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