home *** CD-ROM | disk | FTP | other *** search
- PROCEDURE KordViewPort;
- { Definiert ein Graphikfenster für das Koordinatensystem }
- BEGIN
- SetViewPort (UaxMin,GetMaxY-VaXmax,UaxMax,GetMaxY-VaxMin,ClipOn);
- END;
-
- { ----------------------------------------------------------------------- }
-
- PROCEDURE Umrechnung (x,y : Real; VAR xp,yp : Integer);
- BEGIN
- Scale (x,y,xp,yp);
- xp := xp - Uaxmin;
- yp := yp - GetMaxY + VaXMax;
- END;
-
- PROCEDURE Koordinatensystem (x1,x2,y1,y2 : Real; xBez, yBez : strg80);
- VAR x,y,dx,dy : REAL;
- xp,yp : Integer;
-
- BEGIN
- x := x1 ; y := y1;
- GraphikWindow (125,getmaxx,45,getmaxy-35);
- Uscale (x1,x2,y1,y2,false,false,5); { hier VAR Parameter }
-
- SetTextStyle (DefaultFont,HorizDir,1);
-
- x1 := x; y1 := y;
-
- Xaxis (x1,x2,xBez,0,1,dx); { Skalierung der }
- xgrid (0); { x-Achse }
- Yaxis (y1,y2,yBez,0,1,dy); { und der }
- Ygrid (0); { y-Achse }
-
- { Punkte zeichnen }
-
- WHILE y1 > y DO y1 := y1 - dy;
- WHILE x1 > x DO x1 := x1 - dx;
-
- y := y1;
- y2 := y2 + dy; x2 := x2 + dx;
- KordViewPort;
- REPEAT
- x := x1;
- REPEAT
- Umrechnung (x,y,xp,yp);
- Line (xp-1,yp,xp+1,yp);
- Line (xp,yp-1,xp,yp+1);
- x := x + dx;
- UNTIL x > x2;
- y := y + dy;
- UNTIL y > y2;
- END;
-
- PROCEDURE WaehleKoordsys (VAR x1,x2,y1,y2 : Real; VAR xBez,yBez : Strg80);
- CONST Tab = 19;
-
- PROCEDURE RealEingabe (x,y : Word; VAR Wert : Real);
- VAR s : Strg80;
- Fehler : Integer;
-
- BEGIN
- REPEAT
- GotoXY (x,y); ReadLn (s);
- IF s <> '' THEN
- BEGIN
- GotoXY (x,y); Write (' ');
- GotoXY (x,y); Write (s);
- Val (s,Wert,Fehler);
- END ELSE Fehler := 0;
- IF Fehler <> 0 THEN Write (#07,' <-- Fehler');
- UNTIL Fehler = 0;
- END;
-
- PROCEDURE StrgEingabe (x,y : Word; VAR ss : Strg80);
- VAR s : Strg80;
- BEGIN
- GotoXY (x,y); ReadLn (s);
- IF s <> '' THEN ss := s;
- END;
-
- PROCEDURE Abbruch;
- BEGIN
- WriteLn;
- Window (42,WhereY+4,79,23);
- ClrScr;
- WriteLn;
- Writeln ('Beabsichtigter Fehler ! Wird mit');
- WriteLn ('Programmabbruch bestraft');
- HALT;
- END;
-
- BEGIN
- Window (42,5,79,23);
- GotoXY (1,18); Write ('Zur Bestätigung Enter - Taste pressen');
- GotoXY (1,1 );
- WriteLn ('X - Anfangswert : ',x1);
- WriteLn ('X - Endwert ... : ',x2);
- WriteLn ('Y - Anfangswert : ',y1);
- WriteLn ('Y - EndWert ... : ',y2);
- WriteLn;
- WriteLn ('X - Bezeichner : ',xBez);
- WriteLn ('Y - Bezeichner : ',yBez);
- RealEingabe (Tab,1,x1);
- RealEingabe (Tab,2,x2);
- IF x1 = x2 THEN Abbruch;
- RealEingabe (Tab,3,y1);
- RealEingabe (Tab,4,y2);
- IF y1 = y2 THEN Abbruch;
- StrgEingabe (Tab,6,xBez);
- StrgEingabe (Tab,7,yBez);
- END;
-
- PROCEDURE Fehler (Fehlernummer : Integer);
-
- CONST Fehlerarten : ARRAY [1 .. 5] OF String [20] =
-
- ('kein Leerzeichen' ,
- 'kein Y-Wert' ,
- 'x-Wert fehlerhaft' ,
- 'y-Wert fehlerhaft' ,
- 'Datei gibt''s nicht');
-
- VAR c : Char;
- k : Integer;
-
- BEGIN
- Write (#07);
- { Fehlermeldung ausgeben }
-
- SetViewPort (0,GetMaxY-10,GetMaxX,GetMaxY,ClipOn);
- OutTextXY (0,0, '- Fehler in ' + Datei_Name [DateiNr] + ' : ' +
- Fehlerarten [ Fehlernummer ] +
- ' <W> eiter, <A> bbruch : ');
-
- REPEAT { Tastendruck genuegt }
- c := Upcase (ReadKey);
- UNTIL c in ['W','A'];
-
- If c = 'A' THEN
- BEGIN
- CloseGraphik ;
- Close (Datei);
- HALT (1);
- END;
-
- { Fehlermeldung löschen }
- ClearViewPort;
- KordViewPort;
- END;
-
- { ---------------------------- Fehler ------------------------------------- }
-
- PROCEDURE Verwandle ( s : Zeile; VAR x,y : Real; VAR Punkt : Boolean);
-
- { Verwandelt den uebergebenen String s in die beiden Zahlenwerte x und y }
- { und prueft, ob es sich dabei um einen Punkt handelt, der markiert wer- }
- { soll. }
-
- VAR p,fx,fy : integer ;
- xs,ys : Zeile ;
-
- BEGIN
- WHILE s[1] = ' ' DO s := Copy (s,2,255); { Leerzeichen ueberlesen }
-
- IF (s [1] = 'p') OR (s[1] = 'P') THEN { es handelt sich um einen }
- BEGIN { Punkt. }
- s := Copy (s,2,255);
- WHILE s[1] = ' ' DO s := Copy (s,2,255); { s.o. }
- Punkt := TRUE ;
- END ELSE Punkt := FALSE;
-
- p := pos (' ',s); { Trennzeichen suchen }
- IF p = 0 THEN Fehler (1) { kein Trennzeichen => Fehler }
- ELSE
- BEGIN
- xs := Copy (s,1,pred(p)) ; { x - String vom y - String }
- ys := Copy (s,succ(p),255) ; { trennen }
-
- IF ys <> '' THEN
- WHILE ys [1] = ' ' DO
- ys := Copy (ys,2,255); { Leerzeichen ueberlesen }
-
- IF ys = '' then Fehler(2) { kein y - Wert => Fehler }
- ELSE
- BEGIN
- Val (xs,x,fx); { Verwandlung der Strings }
- Val (ys,y,fy); { in Zahlen }
- IF fx <> 0 THEN Fehler (3); { x - Wert konnte nicht kon- }
- { vertiert werden }
- IF Fy <> 0 THEN Fehler (4);
- END;
- END;
- END;
-
- { -------------------------- Verwandle ----------------------------------- }
-
- PROCEDURE DateiEingabe (VAR Anzahl : Word);
-
- VAR Datei : Text ;
- i,x,y : Byte ;
- Fertig : Boolean ;
-
- BEGIN
- Window (3,5,39,23); GotoXY (1,1);
-
- IF Anzahl > 0 THEN
- BEGIN
- { Im Wiederholungsfalle nur Anzeige der eingegebenen Dateien }
- FOR i := 1 TO Anzahl DO WriteLn (i,' : ',Datei_Name [i]);
- EXIT;
- END
- ELSE
- BEGIN
- { Ersteingabe }
- Anzahl := 0;
- Fertig := FALSE;
-
- REPEAT
- Anzahl := Anzahl + 1;
- Fertig := Anzahl = MaxDateiAnzahl; { Abbruch für REPEAT }
- Write (Anzahl,' : '); ReadLn (Datei_Name[Anzahl]);
-
- IF Datei_Name [Anzahl] <> ''
- THEN
- BEGIN
- { Überprüfen, ob Eingabe zulässig }
- Assign ( Datei, Datei_Name [Anzahl]);
-
- {$I-} { Fehlerueberwachung aus }
- Reset (Datei);
- {$I+} { und wieder ein }
-
- IF IOResult <> 0 then { Resultat der Fehlerueberwachung }
- BEGIN
- { Datei existiert nicht, Eingabe unzulässig }
- y := WhereY;
- WriteLn (#07,' Datei existiert nicht,');
- WriteLn ( ' wiederhole Eingabe !');
- Delay (2000);
- GotoXY (1,y-1);
- WriteLn (' ');
- WriteLn (' ');
- WriteLn (' ');
- GotoXY (1,y-1);
- Anzahl := Anzahl - 1;
- END
- ELSE
- BEGIN
- { Datei existiert, Eingabe zulässig }
- Close (Datei);
- { Klein- in Großbuchstaben verwandeln }
- { sieht nachher schöner aus }
- FOR i := 1 TO Length (Datei_Name [Anzahl]) DO
- Datei_Name [Anzahl][i] := UpCase (Datei_Name [Anzahl][i]) ;
- END;
- END
- ELSE
- BEGIN
- Anzahl := Anzahl - 1;
- Fertig := TRUE;
- END;
- UNTIL Fertig;
- END;
-
- IF Anzahl <> MaxDateiAnzahl THEN
- BEGIN
- GotoXY (1,Anzahl+1);
- Write (' ');
- END;
- END;
-
- { ------------------------------------------------------------------------ }
-
- PROCEDURE Markiere (x,y : Integer);
- CONST R = 3 {1} ; { Geschmacksache R = 1 bei vielen Punkten }
- BEGIN { R = 3 bei wenig Punkten }
- { PutPixel (x,y,White) } { oder auch PutPixel bei vielen Punkten }
- Circle (x,y,r);
- END;
-
- { ----------------------------------------------------------------------- }
-
- PROCEDURE Einschaltmeldung;
- { Zeichnet u.a. einen Block auf dem Bildschirm }
- VAR i : Byte;
- BEGIN
- ClrScr;
- Write ('╒'); FOR i := 2 TO 79 DO Write ('═'); Write ('╕');
- GotoXY (28,1); Write (' Wertetabellen darstellen ');
- FOR i := 2 TO 23 DO
- BEGIN
- GotoXY (1 ,i); Write ('│');
- GotoXY (40,i); Write ('│');
- GotoXY (80,i); Write ('│');
- END;
- Write ('╘'); FOR i := 2 TO 79 DO Write ('═'); Write ('╛');
- GotoXY (40,24); Write ('╧');
- GotoXY (16,3); Write ('Dateinamen :');
- GotoXY (51,3); Write ('Koordinatensystem :');
- END;
-
- PROCEDURE Zeichne_Graph (DateiNr : Byte);
- BEGIN
- { Meldung, welche Datei bearbeitet wird }
- SetViewPort (0,0,UaxMin-20,GetMaxY,ClipOn);
- SetTextStyle (0,0,1); SetTextJustify (LeftText,TopText);
- OuttextXY (0,10*DateiNr + 20, Datei_Name [DateiNr]);
- KordViewPort;
-
- Assign (Datei,Datei_Name [DateiNr] );
- Reset (Datei);
-
- If not EOF (Datei) THEN
- REPEAT
- ReadLn (datei,s); { Einlesen des Strings }
- IF s <> '' THEN
- BEGIN
- Verwandle (s,x,y,Punkt); { Verwandlung in die reellen }
- { Zahlen x und y und }
- { Konvertierung in das }
- { Bildschirmkoordinatensystem }
- { für den ersten Punkt !! }
- Umrechnung (x,y,Xalt,Yalt);
- IF Punkt THEN Markiere (Xalt,Yalt);
- END;
- UNTIL (NOT Punkt) OR Eof (Datei) ;
- { Ende der Punkte }
-
- WHILE not EOF (Datei) DO
- BEGIN
- ReadLn (datei,s); { s.o. }
- If (s <> '') AND NOT Punkt THEN { Alter Kurvenzug }
- BEGIN
- Verwandle (s,x,y,Punkt);
- Umrechnung (x,y,XNeu,Yneu);
- { Endlich kann die Linie gezogen werden ! }
- { Aus kompatibilitätsgründen wurde der Befehl}
- { Line verwendet und nicht LineTo }
-
- Line (Xalt,Yalt,Xneu,Yneu);
- { Merken der Endpunkte = neue Anfangspunkte }
-
- Xalt := Xneu;
- Yalt := Yneu;
- END
- ELSE { Neuer Kurvenzug }
- If NOT Eof (Datei) THEN { Rest s.o. }
- BEGIN
- ReadLn (Datei,s);
- If s <> '' THEN
- BEGIN
- Verwandle (s,x,y,Punkt);
- { Ein neuer Kurvenzug wird wie behandelt wie }
- { ein erster Punkt }
- Umrechnung (x,y,Xalt,Yalt);
- END;
- END;
- END; { WHILE }
- END;