home *** CD-ROM | disk | FTP | other *** search
- (* -------------------------------------------- *)
- (* N-ECK-30.PAS *)
- (* Umfang und Flächeninhalt beliebiger n-Ecke *)
- (* mit Turbo Pascal 3.0 *)
- (* (C) TOOLBOX & Karl Schlessmann *)
- (* -------------------------------------------- *)
- CONST max = 4000;
- { willkürliche Begrenzung }
- { auf max 4000 REAL-Punkte}
- frei = 20;
- { angezeigte Werte in 20 }
- { freien Stellen }
- { rechtsbündig }
- nach = 11;
- { angezeigte Nachkomma- }
- { stellen }
- TYPE typ_wert = REAL;
- typ_punkte = ARRAY [1 .. max] OF
- RECORD x, y : typ_wert END;
- typ_string = STRING [255];
-
- {$I n-eck-30.inc }
- { $I n-eck-30.gra } { Grafik, auf der DATABOX }
-
- { Antwort-Funktion }
-
- FUNCTION ja_nein(fragesatz: typ_string): BOOLEAN;
- VAR taste : CHAR;
- BEGIN
- WHILE KeyPressed DO Read(KBD, taste);
- WriteLn;
- Write(#13, fragesatz, ' (j/n) ? '#7); ClrEOL;
- REPEAT
- Read(KBD, taste);
- taste := UpCase(taste);
- UNTIL taste IN [^C, #13, #27, 'J', 'N'];
- WriteLn(taste);
- IF (taste = ^C) OR (taste = #27) AND
- NOT KeyPressed THEN BEGIN
- Write('Esc');
- Halt(0);
- END;
- ja_nein := taste IN [#13, 'J'];
- END;
-
- { Koordinaten-Eingabe }
-
- PROCEDURE def_n_eck(VAR n: INTEGER;
- VAR punkt: typ_punkte);
- CONST fehler : INTEGER = 0;
- VAR k : INTEGER;
- satz : STRING [255];
- BEGIN
- ClrScr;
- WriteLn('Umfang und Flächeninhalt eines ',
- 'ebenen n-Ecks');
- WriteLn('═══════════════════════════════',
- '═════════════');
- WriteLn;
- Str(n, satz);
- REPEAT
- Write(#13'Anzahl der Eckpunkte (3 .. ',
- max, ') = ', satz, ' ? '#7); CLREOL;
- ReadLn(satz);
- GotoXY(WhereX, Pred(WhereY));
- IF satz <> '' THEN Val(satz, n, fehler);
- UNTIL (n >= 3) AND (n <= max) AND (fehler = 0);
- WriteLn; WriteLn;
- CASE ja_nein ('Punkte zufällig') OF
- TRUE : FOR k := 1 TO n DO
- WITH punkt [k] DO BEGIN
- x := 10*Random - 5;
- { nur für Tests, da Kantenüber- }
- { schneidungen ! }
- y := 10*Random - 5;
- { nur für Tests, da Kantenüber- }
- { schneidungen ! }
- END;
- FALSE: FOR k := 1 TO n DO
- WITH punkt [k] DO BEGIN
- Str(x : frei : nach, satz);
- REPEAT
- Write(#13'x [', k : 3, '] = ',
- satz, ' ? '); ClrEOL;
- ReadLn(satz);
- GotoXY(WhereX, Pred(WhereY));
- IF satz <> '' THEN
- Val(satz, x, fehler);
- UNTIL fehler = 0;
- WriteLn;
- Str(y : frei : nach, satz);
- REPEAT
- Write(#13'y [', k : 3, '] = ',
- satz, ' ? '); ClrEOL;
- ReadLn(satz);
- GotoXY(WhereX, Pred(WhereY));
- IF satz <> '' THEN
- Val(satz, y, fehler);
- UNTIL fehler = 0;
- WriteLn;
- END;
- END;
- WriteLn;
- END;
-
- { Hauptprogramm }
-
- CONST n : INTEGER = 3;
- taste : CHAR = 'j';
- VAR punkte : typ_punkte;
-
- BEGIN
- REPEAT
- TextColor(YELLOW); TextBackGround(BLUE);
- def_n_eck(n, punkte);
- WriteLn('Umfang des ', n, '-Ecks = ',
- n_eck_umfang(n, punkte) : frei : nach);
- WriteLn('Flächeninhalt des ', n, '-Ecks = ',
- n_eck_inhalt(n, punkte) : frei : nach);
- REPEAT UNTIL KeyPressed;
- WHILE KeyPressed DO Read(KBD, taste);
- { zeichne_n_eck (n, punkte); }
- { Prozedur auf der Databox }
- TextMode;
- UNTIL NOT ja_nein('Nochmal');
- END.
- (* -------------------------------------------- *)
- (* Ende von N-ECK-30.PAS *)