DREIECK = RECORD
typ: DREIECKTYP;
punkt: PUNKT;
laenge1, laenge2: REAL;
winkel: REAL;
umfang: REAL;
END;
(* 2 REAL-Zahlen sollte man nicht direkt auf Gleichheit prüfen,
da durch Rundungsfehler exakte Gleichheit fast nie erreicht wird.
2 REAL-Zahlen x und y werden als gleich betrachtet wenn ABS(x-y) < eps
gilt, für hinreichend kleines eps *)
PROCEDURE Eintragen(pos: CARDINAL; VAR objects: OBJEKTE);
CONST
eps = 1.0e-8;
VAR
laenge1, laenge2, laenge3, winkel: REAL;
BEGIN
ReadTriangle(objects[pos].punkt, laenge1, laenge2, winkel);
objects[pos].laenge1 := laenge1;
objects[pos].laenge2 := laenge2;
objects[pos].winkel := winkel;
laenge3 := DritteSeiteDreieck (laenge1, laenge2, winkel);
objects[pos].umfang := laenge1 + laenge2 + laenge3;
IF ABS(laenge1 - laenge2) < eps THEN (* laenge1 = laenge2 *)
IF (ABS(laenge1 - laenge3) < eps) & (ABS(laenge2 - laenge3) <eps) THEN
objects[pos].typ := Gleichseitig;
ELSE
objects[pos].typ := Gleichschenkelig;
END;
ELSIF (ABS(laenge1 - laenge3) < eps) OR (ABS(laenge2 - laenge3) <eps) THEN
objects[pos].typ := Gleichschenkelig;
ELSE
objects[pos].typ := Beliebig;
END;
END Eintragen;
PROCEDURE MittlererUmfang (belegt : CARDINAL; objects : OBJEKTE);
VAR
summeGleichseitig,
summeGleichschenkelig,
summeBeliebig : REAL;
anzahlGleichseitig,
anzahlGleichschenkelig,
anzahlBeliebig : INTEGER;
pos: INTEGER;
BEGIN
summeGleichseitig := 0.0;
summeGleichschenkelig := 0.0;
summeBeliebig := 0.0;
anzahlGleichseitig := 0;
anzahlGleichschenkelig := 0;
anzahlBeliebig := 0;
FOR pos := 0 TO INTEGER(belegt)-1 DO
CASE objects[pos].typ OF
| Gleichseitig:
summeGleichseitig := summeGleichseitig + objects[pos].umfang;
INC(anzahlGleichseitig);
| Gleichschenkelig:
summeGleichschenkelig := summeGleichschenkelig + objects[pos].umfang;
INC(anzahlGleichschenkelig);
| Beliebig:
summeBeliebig := summeBeliebig + objects[pos].umfang;
INC(anzahlBeliebig);
END;
END;
IF anzahlGleichseitig > 0 THEN
WriteString("Mittlerer Umfang der gleichseitigen Dreiecke: ");
WriteFloat(summeGleichseitig/FLOAT(anzahlGleichseitig),10,10);
WriteLn;
ELSE
WriteString("Es gibt keine gleichseitigen Dreiecke");
WriteLn;
END;
IF anzahlGleichschenkelig > 0 THEN
WriteString("Mittlerer Umfang der gleichschenkeligen Dreiecke: ");
WriteFloat(summeGleichschenkelig/FLOAT(anzahlGleichschenkelig),10,10);
WriteLn;
ELSE
WriteString("Es gibt keine gleichschenkeligen Dreiecke");
WriteLn;
END;
IF anzahlBeliebig > 0 THEN
WriteString("Mittlerer Umfang der beliebigen Dreiecke: ");
WriteFloat(summeBeliebig/FLOAT(anzahlBeliebig),10,10);
WriteLn;
ELSE
WriteString("Es gibt keine beliebigen Dreiecke");
WriteLn;
END;
END MittlererUmfang;
PROCEDURE LoescheNichtBuchstaben(VAR str : STRING);
VAR
i, pos: CARDINAL;
BEGIN
i := 0;
pos := 0;
WHILE str[i] <> 0C DO
CASE str[i] OF
| 'a'..'z', 'A'..'Z' :
str[pos] := str[i];
INC(pos);
ELSE
END;
INC(i);
END;
str[pos] := 0C;
END LoescheNichtBuchstaben;
PROCEDURE GrossNachKlein(VAR str : STRING);
VAR
i: CARDINAL;
BEGIN
i := 0;
WHILE str[i] <> 0C DO
CASE str[i] OF
| 'A'..'Z' :
str[i] := CHR(ORD(str[i]) - ORD('A') + ORD('a'));
ELSE
END;
INC(i);
END;
END GrossNachKlein;
PROCEDURE Reverse(VAR str : STRING);
VAR
i, n: CARDINAL;
ch: CHAR;
BEGIN
n := StrLen(str);
FOR i := 0 TO (n DIV 2) - 1 DO
ch := str[i];
str[i] := str[n-1-i];
str[n-1-i] := ch;
END;
END Reverse;
MODULE Q;
FROM InOut IMPORT WriteInt, WriteLn;
VAR a, b, c, d, e : INTEGER;
PROCEDURE P(VAR a, b : INTEGER; c : INTEGER; VAR result: INTEGER);
BEGIN
b := a - b + d + c;
IF c < b THEN
result := c
ELSE
result := b
END;
END P;
BEGIN
a := 5; b := 1; c := 9; d:= b;
P(b,a,d,e);
e := e + c;
WriteInt(a,3); WriteLn;
WriteInt(b,3); WriteLn;
WriteInt(c,3); WriteLn;
WriteInt(d,3); WriteLn;
WriteInt(e,3); WriteLn
END Q.