Kapitel 1

Kapitel 2

Kapitel 3

Kapitel 4

Kapitel 5

Spiele

Kapitel 6

Kapitel 7

Kapitel 8

Kapitel 9

Anhang

Lösungen

 

Programmieren mit Oberon -POW!

| impressum | | | home |  

 

Anhang

 


ASCII-Zeichensatz

Nr Zn Nr Zn Nr Zn Nr Zn Nr Zn Nr Zn Nr Zn Nr Zn
    60 < 90 Z 120 x 150 û 180 ¦ 210 Ê 240 ­
    61 = 91 [ 121 y 151 ù 181 Á 211 Ë 241 ±
32   62 > 92 \ 122 z 152 ÿ 182 Â 212 È 242 =
33 ! 63 ? 93 ] 123 { 153 Ö 183 À 213 i 243 ¾
34 " 64 @ 94 ^ 124 | 154 Ü 184 © 214 Í 244
35 # 65 A 95 _ 125 } 155 ø 185 ¦ 215 Î 245 §
36 $ 66 B 96 ` 126 ~ 156 £ 186 ¦ 216 Ï 246 ÷
37 % 67 C 97 a 127 ¦ 157 Ø 187 + 217 + 247 ¸
38 & 68 D 98 b 128 Ç 158 × 188 + 218 + 248 °
39 ' 69 E 99 c 129 ü 159 ƒ 189 ¢ 219 ¦ 249 ¨
40 ( 70 F 100 d 130 é 160 á 190 ¥ 220 _ 250 ·
41 ) 71 G 101 e 131 â 161 í 191 + 221 ¦ 251 ¹
42 * 72 H 102 f 132 ä 162 ó 192 + 222 Ì 252 ³
43 + 73 I 103 g 133 à 163 ú 193 - 223 ¯ 253 ²
44 , 74 J 104 h 134 å 164 ñ 194 - 224 Ó 254 ¦
45 - 75 K 105 i 135 ç 165 Ñ 195 + 225 ß 255  
46 . 76 L 106 j 136 ê 166 ª 196 - 226 Ô     
47 / 77 M 107 k 137 ë 167 º 197 + 227 Ò    
48 0 78 N 108 l 138 è 168 ¿ 198 + 228 õ    
49 1 79 O 109 m 139 ï 169 ® 199 Ã 229 Õ    
50 2 80 P 110 n 140 î 170 ¬ 200 + 230 µ    
51 3 81 Q 111 o 141 ì 171 ½ 201 + 231 þ    
52 4 82 R 112 p 142 Ä 172 ¼ 202 - 232 Þ    
53 5 83 S 113 q 143 Å 173 ¡ 203 - 233 Ú    
54 6 84 T 114 r 144 É 174 « 204 ¦ 234 Û    
55 7 85 U 115 s 145 æ 175 » 205 - 235 Ù    
56 8 86 V 116 t 146 Æ 176 ¦ 206 + 236 ý    
57 9 87 W 117 u 147 ô 177 ¦ 207 ¤ 237 Ý    
58 : 88 X 118 v 148 ö 178 ¦ 207 ð 238 ¯    
59 ; 89 Y 119 w 149 ò 179 ¦ 209 Ð 239 ´    

Die ersten 32 Zeichen sind als Steuerzeichen reserviert.
Das Zeichen mit der Ordnungszahl 32 ist das Leerzeichen.
Die hier aufgeführten DOS-Zeichen erhält man, indem man die Alt-Taste gedrückt hält und die Ordnungszahl über den Nummernblock der Tastatur eingibt.

Modul Display


Funktionen Beschreibung, Beispiel
S := Display.WhereX()
S: INTEGER
Z := Display.WhereY()
Z: INTEGER
Liefert die aktuelle Position bzgl.
der x-Achse (Spalte) zurück.
Liefert die aktuelle Position bzgl.
der y-Achse (Zeile) zurück.
B := Display.KeyPressed()
B: BOOLEAN
Der Wahrheitswert B (TRUE / FALSE) gibt an,
ob eine Taste auf der Tastatur gedrückt wurde
oder nicht.
REPEAT UNTIL Display.Keypressed();
C := Display.ReadKey()
C: CHAR
Diese Funktion liefert als Ergebnis das
entsprechende ASCII-Zeichen der zuletzt
benutzten Taste.
Ist es kein ASCII-Zeichen (Funktionstasten),
so wird der Wert auf Null gesetzt.
Ein nochmaliger Aufruf der Funktion legt den
zugehörigen Tastaturcode in C ab.
B := Display.IsCursorOn()
B: BOOLEAN
B wird auf TRUE gesetzt,
wenn der Cursor eingeschaltet ist.
B:=Display.IsColorSupported()
B: BOOLEAN
Sollte das System keine Farbausgaben
unterstützen, wird B auf FALSE gesetzt,
d.h. alle Farbwerte sind automatisch 0.
Display.SetWindowTitle(titel)
titel: ARRAY ... OF CHAR
Setzt im Display-Fenster den Titel
auf den angegebenen Text.
Display.SetWindowTitle(‚Mein Fenster');
Display.GotoXY(s,z)
s,z: INTEGER
Setzt den Cursor an die Position mit Spalte s
und Zeile z.
Display.GotoXY(10,3);
Display.WriteChar(c)
c: CHAR
Display.WriteStr(text)
text: ARRAY ... OF CHAR
Display.WriteSpaces(anz)
anz: INTEGER
Display.WriteInt(i,l)
i: LONGINT
l: INTEGER
Display.WriteReal(r,l)
r: REAL
l: INTEGER
Display.WriteLn()
Ausgabeanweisungen für die
angegebenen Datentypen
ab der aktuellen Cursorposition.
Für die Zahltypen bestimmt
der Parameter l die Länge der Ausgabe.
Display.WriteSpaces(anz)
gibt anz Leerzeichen aus.
Setzt den Cursor in die neue Zeile.
Display.WriteCharXY(s,z,c)
c: CHAR
Display.WriteStrXY(s,z,text)
text: ARRAY ... OF CHAR
Display.WriteSpacesXY(s,z,anz)
anz: INTEGER
Display.WriteIntXY(s,z,i,l)
i: LONGINT
l: INTEGER
Display.WriteRealXY(s,z,r,l)
r: REAL
l: INTEGER
s, z: INTEGER
Analog zu den oben genannten Anweisungen
erfolgt die Ausgabe an der Position mit
Spalte s und Zeile z.
Display.CursorOn()
Display.CursorOff()
Schaltet den Cursor ein bzw. aus.
Display.TerminalBell() Ein kurzer Ton wird ausgegeben.
(Wenn es funktioniert!)
Einstellung des abgespielten Sounds unter
SYSTEMSTEUERUNG/SOUNDS UND MULTIMEDIA/HINWEIS
Display.EditStr(text,l,code)
text: ARRAY ... OF CHAR
l: INTEGER
code: CHAR
Die angegebene Zeichenkette text
wird ausgegeben
und kann im Anschluss verändert werden.
Der Wert l bestimmt die Anzahl der Zeichen,
die max. hinzugefügt werden können.
Display.ReadChar(c)
c: CHAR
Display.ReadStr(text)
text: ARRAY ... OF CHAR
Display.ReadInt(i)
i: INTEGER
Display.ReadLongInt(li)
li: LONGINT
Display.ReadReal(r)
r: REAL
Display.ReadLongReal(lr)
lr: LONGREAL
Eingabeanweisungen für die
angegebenen Datentypen
ab der aktuellen Cursorposition.
Display.FlushKeyBuffer() Tastaturpuffer wird gelöscht.
Dies stellt sicher, dass der nächste Aufruf
von Display.ReadKey() keine vorher
benutzten Tasten auswertet.
Display.ClrScr() Löscht den Bildschirm in der aktuellen
Hintergrundfarbe (Standard: weiß).
Display.SetForeColor(rot,grün,blau)
Display.SetBackColor(rot,grün,blau)
rot,grün,blau: INTEGER
Setzt die Vorder- bzw. Hintergrundfarbe
durch Mischen der Farbanteile.
Der Wert für rot, grün, blau liegt jeweils
zwischen 0 und 255.
Display.GetForeColor(rot,grün,blau)
Display.GetBackColor(rot,grün,blau)
rot,grün,blau: INTEGER
Ermittelt die aktuelle Vorder- bzw.
Hintergrundfarbe.


Download
Sie können an dieser Stelle diese Tabelle mit dem Quelltext von testdisp.mod als Word-Document herunterladen.



MODULE farben;
IMPORT Display;
PROCEDURE ProgMain*;
VAR taste: CHAR; rot, gruen, blau : INTEGER;
BEGIN
rot := 0; gruen := 0; blau := 0;
Display.CursorOff();
Display.WriteStrXY(10,1,"Farbenmischen");
Display.WriteStrXY(10,2,"===================");
Display.WriteStrXY(5,4,"Verändern der Farbanteile mit r, R, g, G, b und B");
Display.WriteStrXY(5,5,"Programmende mit ESC!");
REPEAT
Display.SetBackColor(255,255,255); Display.SetForeColor(0,0,0);
Display.WriteStrXY(14,8,"rot gruen blau");
Display.SetBackColor(rot,0,0); Display.WriteStrXY( 14, 9," ");
Display.SetBackColor(0,gruen,0); Display.WriteStrXY(20, 9," ");
Display.SetBackColor(0,0,blau); Display.WriteStrXY(26,9," ");
Display.SetBackColor(255,255,255); Display.SetForeColor(0,0,0);
Display.WriteIntXY(14,10,rot,3);
Display.WriteIntXY(20,10,gruen,3);
Display.WriteIntXY(26,10,blau,3);
Display.WriteStrXY(14,12,".. und gemischt");
Display.SetBackColor(rot,gruen,blau);
Display.WriteStrXY(14,13," ");
taste:=Display.ReadKey();
CASE taste OF
'r','R': rot:=rot+5;
|'g','G': gruen:=gruen+5;
|'b','B': blau:=blau+5
ELSE
END;
UNTIL taste = CHR(27);
END ProgMain;
END farben.



Beispiellösungen zu Kapitel 2

Ein- und Ausgabe

MODULE aufgabe1;
IMPORT In, Out;
VAR a,b,c : INTEGER;
d : REAL;
e : CHAR;
PROCEDURE ProgMain*;
BEGIN
In.Prompt("ganze Zahl"); In.Int(a);
Out.String("Variable a = "); Out.Int(a,5); Out.Ln;
In.Prompt("d"); In.Real(d);
Out.String("Variable d = "); Out.Real(d,9); Out.Ln;
In.Prompt("e"); In.Char(e);
Out.String("Variable e = "); Out.Char(e);
END ProgMain;
END aufgabe1.

Beispiellösungen zu Kapitel 5


4. Kryptogramm AU + AU = WEH


MODULE Krypto;
IMPORT In,Out;
PROCEDURE ProgMain*;
VAR A,U,W,E,H: INTEGER;
BEGIN
W:=1;
FOR A:=5 TO 9 DO
FOR U:=0 TO 9 DO
FOR E:=0 TO 9 DO
FOR H:=0 TO 9 DO
IF ((A#U) & (A#W) & (A#E) & (A#H) & (U#W) & (U#E) & (U#H)
& (W#E) & (W#H) & (E#H)) THEN
IF 20*A+2*U = 100*W+10*E+H THEN Out.String("Lösung: ");
Out.Int(A,3);Out.Int(U,3);Out.Int(W,3);
Out.Int(E,3);Out.Int(H,3);Out.Ln;
END;
END;
END;
END;
END;
END;
END ProgMain;
END Krypto.


Modul Strings



Prozedur

Beschreibung, Beispiel

P := Strings.Pos(zk1,zk,stelle)
zk1, zk: StringT
P, stelle: LONGINT

Stellt fest, ab welcher Position
die Zeichenkette zk1 in zk vorkommt.
Gesucht wird ab stelle (>=1).
P := Strings.Pos("f","Erfurt",1);
P bekommt den Wert 3.
Falls die Suche nicht erfolgreich ist,
hat P den Wert 0.

L := Strings.Length(zk)
zk: StringT
L: LONGINT

Ermittelt die Länge einer Zeichenkette zk.
L := Strings.Length("Erfurt");
L erhält den Wert 6.

Z := Strings.Val(zk)
zk: StringT
Z: LONGINT

Die Zeichenkette zk wird in eine Zahl Z umgewandelt.
Z := Strings.Val("0815");
Z hat danach den Wert 815.
Führende Nullen werden entsprechend bearbeitet.

E := Strings.ValResult(zk)
zk: StringT
E: LONGINT

Diese Funktion prüft, ob die Umwandlung
der Zeichenkette zk in eine Zahl erfolgreich ist.
Dabei wird im Ergebnis E eine Zahl festgelegt,
die mit den Konstanten
Strings. ISSHORTINT
Strings. ISINTEGER
Strings. ISLONGINT
Strings. ISOUTOFRANGE
Strings. STRINGEMPTY
Strings. STRINGILLEGAL
verglichen werden kann.
E := Strings.ValResult("0815");
E erhält den Wert ISINTEGER (2).

Strings.Copy(quelle, ziel, pos, anz)
quelle, ziel: StringT
pos, anz: LONGINT

Kopiert aus der Zeichenkette quelle
ab der Position pos die folgenden anz Zeichen
in die Zeichenkette ziel.
Strings.Copy("Erfurt",zk,1,2);
zk speichert "Er".

Strings.Delete(quelle, pos, anz)
quelle: StringT
pos, anz: LONGINT

Löscht in der Zeichenkette quelle
ab der Position pos eine Anzahl anz
von Zeichen.
zk:="Erfurt";
Strings.Delete(zk,1,2);
zk speichert danach "furt".

Strings.Append(zk, zk1)
zk, zk1: StringT

Fügt an die Zeichenkette zk
die Zeichenkette zk1 an.
zk wird also um zk1 erweitert.
zk:="Er";
zk1:="furt";
Strings.Append(zk, zk1);
zk ist jetzt "Erfurt".

Strings.Insert(zk1,zk,pos)
zk, zk1: StringT
pos: LONGINT

Fügt in die Zeichenkette zk
die Zeichenkette zk1 an der Position pos ein.
zk:="Ert";
zk1:="fur";
Strings.Insert(zk1, zk, 2);
zk ist jetzt "Erfurt".

Strings.InsertChar(z,zk,pos)
z: CHAR
zk: StringT
pos: LONGINT

Analog Strings.Insert,
bloß für ein einzelnes Zeichen z.

Strings.Str(zahl, zk)
zahl: LONGINT
zk: StringT

zahl wird in eine Zeichenkette zk umgewandelt.
Ist die Zeichenkette zk nicht lang genug,
besteht sie nur aus den Zeichen $.

Strings.UpCase(zk)
zk: StringT

Wandelt alle Kleinbuchstaben der Zeichenkette zk
in Großbuchstaben um.
Alle anderen Zeichen bleiben unverändert.

MODULE Text;
IMPORT In, Out, Strings;
VAR ort, vorort, gesamtort: ARRAY 50 OF CHAR;
plz: ARRAY 10 OF CHAR;
code :INTEGER;
stelle,leitzahl,laenge : LONGINT;
PROCEDURE ProgMain*;
BEGIN
In.Prompt("Ort");In.String(ort);
In.Prompt("PLZ");In.String(plz);
laenge:= Strings.Length(ort); Out.Int(laenge,10); Out.Ln;
stelle:= Strings.Pos('-',ort,1); Out.Int(stelle,10); Out.Ln;
Strings.Copy(ort,vorort,stelle+1,laenge+1-stelle); Out.String(vorort);Out.Ln;
Strings.Delete(ort,stelle,laenge+1-stelle); Out.String(ort); Out.Ln;
leitzahl:=Strings.Val(plz); code:=Strings.ValResult(plz); Out.Int(code,5);
Out.Ln;
IF ((code > Strings.ISLONGINT) OR (Strings.Length(plz) # 5))
THEN Out.String("Fehler in der Postleitzahl") END;
Strings.Append(gesamtort,plz); Out.String(gesamtort); Out.Ln;
Strings.Append(gesamtort,ort); Out.String(gesamtort); Out.Ln;
Strings.Append(gesamtort,vorort); Out.String(gesamtort); Out.Ln;
Strings.Insert(' ',gesamtort,6); Out.String(gesamtort); Out.Ln;
Strings.InsertChar('-',gesamtort,7+stelle); Out.String(gesamtort); Out.Ln;
END ProgMain;
END Text.

Download
Sie können an dieser Stelle diese Tabelle mit dem Quelltext von Text.mod als Word-Document herunterladen.

Grafikanweisungen Modul XYplane


Anweisungen

Beschreibung

Konstanten:
draw
erase


Zeichnen in der Vordergrundfarbe.
Zeichnen in der Hintergrundfarbe (Löschen).

Variablen:
W: INTEGER
H: INTEGER
X: INTEGER
Y: INTEGER


Breite des aktuellen Zeichenfensters
Höhe des aktuellen Zeichenfensters
Horizontale Komponente der linken unteren Ecke
Vertikale Komponente der linken unteren Ecke

Prozeduren
XYplane.Open()

XYplane.Close()
XYplane.Dot(x, y, mode)
x, y, mode: INTEGER
XYplane.Clear()


Diese Prozedur öffnet das Zeichenfenster und
muss vor anderen Anweisungen aufgerufen werden.
Diese Prozedur schließt das Zeichenfenster.
Setzt einen Punkt an den Koordinaten (x,y).
Für mode müssen draw oder erase gesetzt werden.
Diese Prozedur löscht das Zeichenfenster in der
Hintergrundfarbe.

Funktionen
XYplane.IsDot(x, y:INTEGER):BOOLEAN
XYplane. Key():CHAR


Diese Funktionen ermitteln,
ob ein Punkt an den Koordinaten gesetzt ist.
Ermittelt den Tastaturcode der
aktuell gedrückten Taste (nur ASCII-Werte).
Wurde keine Taste benutzt,
wird OX zurückgegeben.

Grafikanweisungen Modul ColorPlane


Anweisungen  

Beschreibung  

Konstanten:
DRAW
(in Verbindung mit mode)
ERASE
(in Verbindung mit mode)


Zeichnen in der Vordergrundfarbe.

Zeichnen in der Hintergrundfarbe (Löschen).

Prozeduren:
ColorPlane. Open()
Colorplane. Close ()
ColorPlane. Clear()
ColorPlane.Bar(x1, y1, x2, y2, mode)
x1, y1, x2, y2:INTEGER;
mode:INTEGER

ColorPlane.Box(x1, y1, x2, y2, mode)
x1, y1, x2, y2:INTEGER;
mode:INTEGER
ColorPlane. CursorOff()
ColorPlane. CursorOn()
on:=ColorPlane. IsCursorOn()
on: BOOLEAN
ColorPlane. Dot(x, y, mode)
x, y:INTEGER;
mode:INTEGER
ColorPlane. GetBackColor(r, g, b)
ColorPlane. GetForeColor(r, g, b)
ColorPlane. SetBackColor(r, g, b)
ColorPlane. SetForeColor(r, g, b)
r, g, b:INTEGER
ColorPlane. GetDot(x, y, r, g, b)
x, y:INTEGER;
r, g, b:INTEGER
ColorPlane. Line(x1, y1, x2, y2, mode)
x1, y1, x2, y2, mode:INTEGER


Öffnet das Zeichenfenster.
Schließt das Zeichenfenster.
Löscht das Zeichenfenster.
Zeichnet ein gefülltes Rechteck
(x1,y1) Koord. der linken unteren Ecke
(x2,y2) Koord. der rechten oberen Ecke
mode gibt den Zeichenmodus an.
Zeichnet ein Rechteck analog Bar.


Schaltet den Cursor aus.
Schaltet den Cursor ein.
Diese Funktion liefert den Wert TRUE,
wenn der Cursor sichtbar ist.
Setzt im angegebenen Modus einen Punkt
an die Koordinaten (x,y).

Ermitteln der Hintergrundfarbe.
Ermitteln der Vordergrundfarbe.
Setzen der Hintergrundfarbe.
Setzen der Vordergrundfarbe.
0 <= r, g, b <= 255
Ermittelt die Farbwerte r, g, b
des Punktes mit den Koordinaten (x, y).

Zeichnet eine Strecke zwischen den
Punkten (x1,y1) und (x2,y2)
im entspr. Modus.

weitere Anweisungen:
ColorPlane. EditStr(zk, maxL, Code)
zk:ARRAY OF CHAR;
maxL:INTEGER;
Code:CHAR
ColorPlane. GotoXY(x, y:INTEGER)
ColorPlane. GetMouse(buttons, x, y)
buttons: SET;
x, y: INTEGER



p:= ColorPlane. KeyPressed()
p: BOOLEAN
l:=ColorPlane. ReadKey()
l: CHAR


ColorPlane. ReadStr(zk, maxL, Code)
zk: ARRAY OF CHAR;
maxL: INTEGER;
Code: CHAR

h:=ColorPlane. TextHeight()
h: INTEGER
l:=ColorPlane. TextWidth(zk)
zk:ARRAY OF CHAR
l: INTEGER
x:= ColorPlane. WhereX()
x: INTEGER
y:= ColorPlane. WhereY()
y: INTEGER
ColorPlane. WriteLn()

ColorPlane. WriteStr(zk)
zk: ARRAY OF CHAR



Gibt die Zeichenkette zk aus, die
im Anschluss editiert werden kann.


Setzt den Cursor an die Position (x, y).
Ermittelt die Position (x,y) des Mauszeigers
und gibt in buttons einen Wert zurück, der
anzeigt,welche Maustaste gedrückt wurde.
0 = linke Maustaste
1 = mittlere Maustaste
2 = rechte Maustaste
Diese Funktion liefert den Wert TRUE,
wenn eine Taste gedrückt wurde.
Liefert ein auf der Tastatur eingegebenes
Zeichen zurück.
Ist der Code 0, so liefert ein nochmaliger
Aufruf den Tastaurcode.
Liest die Zeichenkette zk mit der
max. Länge maxL ein.
In code wird bei erfolgreicher Auführung der
Wert der Konstante ENTER ansonsten
ESC abgelegt.
Liefert die Schriftgröße.

Liefert die Länge der Zeichenkette zk
in der aktuellen Schriftart.

Liefert die x-Koordinate der aktuellen
Cursorposition.
Liefert die y-Koordinate der aktuellen
Cursorposition.
Setzt den Cursor an den Anfang der nächsten
Textzeile.
Gibt ab der aktuellen Cursorposition
die Zeichenkette zk aus.

Beispiel:
MODULE Grafiktest;
IMPORT ColorPlane;
VAR i: INTEGER;
PROCEDURE Warte*(weile:INTEGER);
VAR i,j,h: INTEGER;
BEGIN
FOR i:=1 TO 32000 DO
FOR j:=1 TO weile DO
h:= i DIV j;
END;
END;
END Warte;
PROCEDURE ProgMain*;
BEGIN
ColorPlane.Open();
ColorPlane.SetForeColor(250,0,0);
ColorPlane.CursorOff();
FOR i:=0 TO 10 DO
ColorPlane.Box(100+5*i,100+5*i,500-5*i,500-5*i,1); END;
ColorPlane.Bar(250,250,350,350,1);
Warte(2000);
ColorPlane.SetForeColor(0,250,0);
FOR i:=0 TO 800 DO ColorPlane.Line(i,0, i,650,1); Warte(10); END;
Warte(2000);
ColorPlane.SetForeColor(0,0,250);
FOR i:=0 TO 800 DO ColorPlane.Line(400,0, i,650,1); Warte(10); END;
FOR i:=0 TO 800 DO ColorPlane.Line(400,650, i,0,1); Warte(10); END;
REPEAT UNTIL ColorPlane.KeyPressed();
END ProgMain;
END Grafiktest.


Download
Sie können an dieser Stelle diese Tabellen mit dem Quelltext von Grafiktest.mod als Word-Document herunterladen.

Als Ergänzung mochte ich an dieser Stelle die Benutzung der Maus in einem Module erläutern. Wie in der Tabelle schon aufgeführt, dient dazu der Befehl ColorPlane.GetMouse. Das folgende Modul kann als Vorlage dienen:

MODULE maus;
IMPORT C:=ColorPlane, S:=Strings;
VAR mausx, mausy,i: INTEGER;
maustaste: SET;
zk1, zk2,zk3: ARRAY 25 OF CHAR;
PROCEDURE ProgMain*;
BEGIN
C.Open();
C.SetBackColor(250,0,0);
C. Clear();
REPEAT
C.GetMouse(maustaste, mausx, mausy);
C. GotoXY(200,200); C. WriteStr('Mausposition: ');
S.Str(mausx, zk1); C. WriteStr(zk1); C. WriteStr(' , ');
S.Str(mausy, zk2); C. WriteStr(zk2); C. WriteStr(' , ');
IF (0 IN maustaste) THEN zk3:='linke Maustaste ' ELSE
IF (1 IN maustaste) THEN zk3:='mittlere Maustaste ' ELSE
IF (2 IN maustaste) THEN zk3:='rechte Maustaste ' ELSE zk3:='keine Maustaste '; END;
END;
END;
C. WriteStr(zk3);
UNTIL C.KeyPressed();
END ProgMain;
END maus.

Maus-Screenshot

Modul File


Anweisungen Beschreibung, Beispiel
Konstanten:

MAXPATH

MAXFILENAME


Max. Länge eines Dateinamens
(incl. Pfadangaben)
Max. Länge eines Dateinamens
Typen:

Handle

RetCodeT


Variablen vom Typ Handle stellen die
ordnungsgemäßeBenutzung einer Datei sicher.
Variablen von diesem Typ können
Fehlermeldungen aufnehmen
Prozeduren

Open(name,existenz,zugriff,modus,
fHandle,fehler);
name: ARRAY OF CHAR;
existenz: BOOLEAN;
zugriff, modus: INTEGER;
fHandle: Handle;
fehler: RetCodeT;





Close(fHandle);
fHandle: Handle;

GetErrorMessage(fehler,message);
fehler: RetCodeT;
message: ARRAY OF CHAR;

Pos(fhandle,pos,fehler);
fhandle: Handle;
pos: LONGINT;
fehler: RetCodeT;

Seek(fhandle,pos,fehler);
handle: Handle;
pos: LONGINT;
fehler: RetCodeT;

SeekRel(fhandle,pos,fehler);
fhandle: Handle;
pos: LONGINT;
fehler: RetCodeT;

Size(fhandle,laenge,fehler);
fhandle: Handle;
laenge: LONGINT;
fehler: RetCodeT

ReadChar(fhandle,zeichen,fehler);
fhandle: Handle;
zeichen: CHAR;
fehler :RetCodeT

WriteChar(fhandle,zeichen,fehler);
fhandle: Handle;
zeichen: CHAR;
fehler: RetCodeT

Truncate(fhandle,fehler);
fhandle: Handle;
fehler: RetCodeT;

ReadLn(fhandle,zk,fehler);
fhandle: Handle;
zk: ARRAY OF CHAR;
fehler: RetCodeT;

WriteLn(fhandle,zk,fehler);
fhandle: Handle;
zk: ARRAY OF CHAR;
fehler: RetCodeT;

ReadBlock(fhandle,data,n,gelesen,fehler);
fhandle: Handle;
data: ARRAY OF SYSTEM.BYTE;
n: LONGINT;
gelesen: LONGINT;
fehler: RetCodeT;

WriteBlock(fhandle,data,n,fehler);
fhandle: Handle;
data: ARRAY OF SYSTEM.BYTE;
n: LONGINT;
fehler: RetCodeT;

GetModifyDate(fhandle,datum,fehler);
fhandle: Handle;
datum: ARRAY OF CHAR;
fehler: RetCodeT;

GetCreationDate(fhandle,datum,fehler);
handle: Handle;
datum: ARRAY OF CHAR;
fehler: RetCodeT;

GetAccessDate(fhandle,datum,fehler);
fhandle: Handle;
datum: ARRAY OF CHAR;
fehler: RetCodeT;

SetModifyDate(fhandle,datum,fehler);
fhandle: Handle;
datum: ARRAY OF CHAR;
fehler: RetCodeT;

GetAttributes(name,attr,fehler);
name: ARRAY OF CHAR;
attr: SET;
fehler: RetCodeT;

SetAttributes(name,attr,fehler);
name: ARRAY OF CHAR;
attr: SET;
fehler: RetCodeT;

Rename(alt,neu,fehler);
alt, neu: ARRAY OF CHAR;
fehler: RetCodeT;

Delete(name,fehler);
name: ARRAY OF CHAR;
fehler: RetCodeT;


Die Prozedur Open bereitet
eine Datei für die Benutzung
vor. Dazu muss der Dateiname ev. incl. Pfad
angeben werden.
existenz muss auf TRUE gesetzt werden,
wenn die Datei neu erstellt werden soll.
zugriff und modus siehe unten.
Bsp.:
File.Open('test.dat',TRUE,File.DENYNONE,
File.READWRITE,fHandle,fehler);
Schließt die Benutzung der aktuellen Datei ab.
Bsp.: File.Close(fHandle);

Liefert in message die zu fehler
gehörige Fehlermeldung.
Gibt die aktuelle Stelle der Bearbeitung
der Datei in pos an.


Setzt den Datei-Zeiger auf die
in pos angegebene Stelle.
Ist diese Stelle nicht möglich, wird der Zeiger
an das Dateiende gesetzt.

Verschiebt den Datei-Zeiger relativ zur
aktuellen Position um pos Stellen.



In laenge wird die Größe der
aktuellen Datei abgelegt.


In der aktuellen Datei wird das
nächste Zeichen gelesen.


In der aktuellen Datei wird das
nächste Zeichen geschrieben.


Die spezifizierte Datei wird bis zur aktuellen
Position des Zeigers gestutzt.
Mit size kann man also Dateien verkürzen.

Eine Zeile wird aus der Datei ausgelesen
bezogen auf die aktuelle Position
des Datei-Zeigers.

Eine Zeile wird in die Datei geschrieben
bezogen auf die aktuelle Position
des Datei-Zeigers.

Aus der spez. Datei soll ein Block
der Länge n Byte gelesen werden.
Das Ergebnis wird in data abgelegt.
(Der Datentyp spielt keine Rolle.)
Die Zahl der wirklich gelesenen Byte
ist in gelesen verzeichnet.
analog ReadBlock




datum nimmt die letzte Modifikation in der
Form "TT.MM.JJJJ HH:MM:SS" auf
(Länge: 20 Zeichen,
2 Leerzeichen zwischen Datum Uhrzeit).
datum gibt die Erstellungszeit an
(anlog GetModifyDate)


datum gibt die letzten Zugriff an
(anlog GetModifyDate)


Durch datum wird das Modifizierungsdatum
geändert.(anlog GetModifyDate)


Für die in name angegebenen Datei werden
die Attribute (s.u.) ermittelt.


Für die in name angegebenen Datei
werden die Attribute (s.u.) gesetzt.


Diese Prozedur benennt eine
Datei alt in neu um.

Löscht die in name angegebene Datei.
Funktionen

AtEnd(fhandle): BOOLEAN;
fhandle: Handle;

Exist(name): BOOLEAN;
name: ARRAY OF CHAR;


Diese Funktion liefert TRUE im Ergebnis,
wenn der Dateizeiger auf das Dateiende weist.

Liefert TRUE, falls die in name
angebene Datei existiert.
Datei-Attribute

ATTRREADONLY
ATTRHIDDEN
ATTRSYSTEM
ATTRVOLUME
ATTRDIR
ATTRARCHIVE

ATTRNORMAL
ATTRTEMP

ATTRCOMPRESSED
ATTROFFLINE


Datei darf nur gelesen werden.
Es handelt sich um eine versteckte Datei.
Diese Datei ist eine Systemdatei.
Dient zur Festlegung eines Laufwerks.
Verweis auf ein Verzeichnis
Die Datei wurde seit der letzten
Sicherung verändert.
Datei ohne weitere Attribute
Datei wird zur temporären
Speicherung verwendet.
Datei ist komprimiert.
Datei darf aktuell nicht verwendet werden.
Konstanten für den modus-Parameter
der open-Prozedur


READONLY
WRITEONLY
READWRITE



Die Datei soll nur gelesen werden.
Die Datei soll nur geschrieben werden.
Die Datei soll für Schreib- und
Leseoperationen benutzt werden.
Konstanten für den zugriff-Parameter
der open-Prozedur


DENYALL
DENYNONE

DENYREAD

DENYWRITE



Es ist kein simultaner Zugriff möglich.
Die Datei darf gleichzeitig von mehreren
Benutzern beschrieben und gelesen werden.
Die Datei darf gleichzeitig von mehreren
Benutzern gelesen werden.
Die Datei darf gleichzeitig von mehreren
Benutzern beschrieben werden.
Error Codes

ACCESSDENIED

EOFREACHED
FILENOTFOUND
INVALIDHANDLE

NOERROR
SHARINGVIOLATION


SHORTBUFFER

WRITEPROTECTED


Der Zugriff wurde durch das Betriebssystem verweigert.
Dateiende wurde erreicht.
Datei wurde nicht gefunden.
Der Dateizeiger weist nicht auf eine
geöffnete Datei.
Die ausgeführte Operation war erfolgreich.
Die Datei wurde bereits geöffnet und darf
mit den gesetzten Dateiattributen kein
weiteres Mal benutzt werden.
Der Datenbuffer ist nicht groß genug für das Ergebnis.
Ein Schreibschutz verhinderte das erfolgreiche
Schreiben der Datei.


MODULE datenbsp;
IMPORT C:=ColorPlane, F:=File;
TYPE tzk = ARRAY 30 OF CHAR;
VAR name, vorname, geschlecht, alter, pfadname: tzk;
i, deny, mode: INTEGER; create: BOOLEAN;
fehler: INTEGER; dathandle: F.Handle; x: CHAR;
code: CHAR;
PROCEDURE ProgMain*;
BEGIN
C.Open(); C.SetBackColor(187,187,187); C. Clear();
C. GotoXY(100,360); C. WriteStr('Beispiel für die Benutzung von File');
C. GotoXY(20,300); pfadname:='test.dat';
IF F.Exist(pfadname) THEN create:=FALSE ELSE create:=TRUE; END;
F.Open(pfadname, create, F.DENYNONE, F.READWRITE, dathandle, fehler);
C. GotoXY(20,250); C. WriteStr('Geben Sie bitte folgende Daten ein ');
C. GotoXY(20,200); C. WriteStr('Name: '); C.ReadStr(name,25,code);
F.WriteLn(dathandle, name,fehler); C. GotoXY(20,150);
C. WriteStr('Vorname: '); C.ReadStr(vorname,25,code);
F.WriteLn(dathandle, vorname,fehler); C. GotoXY(20,100);
C. WriteStr('Geschlecht(m/w): '); C.ReadStr(geschlecht,25,code);
F.WriteLn(dathandle, geschlecht,fehler); C. GotoXY(20,50);
C. WriteStr('Alter: '); C.ReadStr(alter,25,code);
F.WriteLn(dathandle, alter, fehler); F.Close(dathandle);
C.SetForeColor(0,0,250); C. GotoXY(10,50);
C. WriteStr('Weiter durch beliebige Taste. ');
REPEAT UNTIL C.KeyPressed(); C.Close();
C.Open(); C.SetBackColor(87,87,87);C. Clear();
C. GotoXY(100,360); C. WriteStr('Beispiel für die Benutzung von File ');
F.Open(pfadname, FALSE, F.DENYNONE, F.READONLY, dathandle, fehler);
C. GotoXY(20,250); C. WriteStr('Sie haben folgende Daten in test.dat gespeichert ');
F.ReadLn(dathandle, name, fehler); F.ReadLn(dathandle, vorname, fehler); F.ReadLn(dathandle, geschlecht, fehler);
F.ReadLn(dathandle, alter, fehler); F.Close(dathandle);
C. GotoXY(20,200); IF geschlecht='m' THEN C. WriteStr('Herr') ELSE
C. WriteStr('Frau '); END;
C. GotoXY(20,150); C. WriteStr(vorname);
C. WriteStr(' '); C. WriteStr(name);
C. GotoXY(20,100); C. WriteStr('Alter: '); C. WriteStr(alter);
C.SetForeColor(0,0,250); C. GotoXY(10,50); C. WriteStr('Weiter durch beliebige Taste. ');
REPEAT UNTIL C.KeyPressed(); C. Clear();
C.Close();
END ProgMain;
END datenbsp.

Download
Sie können an dieser Stelle diese Tabelle mit dem Quelltext von datenbsp.mod als Word-Document herunterladen.


Erläuterung zu Mengen (Datentyp SET) hier.


Die Module Utils und Volume


Prozedur Beschreibung
Utils.GetDate(tag, monat, jahr, wtag)
tag, monat, jahr, wtag: INTEGER
Liefert das aktuelle Datum
(Systemzeit).
wtag kann die Werte 1 für Montag
bis 7 für Sonntag annehmen.
Utils. GetTime(sec, min, st)
sec, min, st: INTEGER
Liefert die aktuelle Zeit
(Systemzeit).
Utils. GetDateStr(zk)
zk: ARRAY OF CHAR
Liefert das aktuelle Datum
(Systemzeit)
in der Form "dd.mm.yyyy"
als String.
Utils. GetTimeStr(zk)
zk: ARRAY OF CHAR
Liefert die aktuelle Zeit
(Systemzeit)
in der Form "HH.MM.SS" als String.
Volume. CurrentDirectory(dir,fehler)
dir: ARRAY OF CHAR;
fehler: RetCodeT
Das aktuelle Verzeichnis wird ermittelt.
Volume. ChangeDirectory(dir,fehler)
dir: ARRAY OF CHAR;
fehler: RetCodeT
Wechselt in das Verzeichnis,
das in dir abgelegt ist.
Volume. CreateDirectory(dir,fehler)
dir :ARRAY OF CHAR;
fehler: RetCodeT
Erstellt das in dir angegebene Verzeichnis.
dir darf nur den Verzeichnisnamen enthalten
und keinen ganzen Pfad.
Volume. FreeSpace(lw,kap,einheit,fehler)
lw: ARRAY OF CHAR;
kap: LONGINT;
einheit: LONGINT;
fehler: RetCodeT
Die Prozedur gibt die verfügbare freie
Kapazität kap des Laufwerks lw an.
Die einheit ist entweder 1 für die
Angabe in Byte oder 1024 für kByte.
Volume.TotalSpace(lw,kap,einheit,fehler)
lw: ARRAY OF CHAR;
kap: LONGINT;
einheit: LONGINT;
fehler: RetCodeT
Diese Prozedur gibt die Gesamtkapazität
analog FreeSpace an.

Download
Sie können an dieser Stelle diese Tabelle als Word-Document herunterladen.


Projekte


Neu entstanden ist im Januar 2005 ein kleines Projekt zum Thema Lernspiele: MEMORY.

Dieses Modul erlaubt das Spielen einer Memory-Variante mit 18 Kartenpaaren. Neben den Beispielen wie physikalische Größen und Einheiten und einigen Englisch-Vokabeln, läßt sich auch ein eigenes Memory kreieren.
Anwendungen sind genügend im Unterricht zu finden: Römische Zahlen, Vokabeln, Chemische Formeln und Bezeichnungen, ... .

Download
Sie können hier die Setup-Datei herunterladen,
die das Programm installiert.
Die Module sind in der Readme-Datei enthalten.

 
   

   © 2003 by  Jörg Langenau