%%HP: T(3)A(R)F(.); DIR VDR \<< @ Verwandte Dreiecke @ Berechnungsprogramm für alle wichtigen Werte. @ Beschreibung siehe PDF-Dokument VDR.pdf @ Stand vom 02.02.2012 @ (C) Otto Praxl @ www.praxelius.de @ @ Kommentar: @ Sind Eingabewerte im Stack? @ Bei weniger als 4 Stackwerten erfolgt Fehlermeldung. IF DEPTH 4. < THEN CLLCD 2000 .05 BEEP 3000. .1 BEEP "Verwandte Dreiecke ------------------ Seitenl\228ngen a, b, c und Teilungsverh\228ltnis m fehlen im Stack!" 2. DISP 7. FREEZE ELSE @ Speicherung der Eingabewerte in den Variablen 'm' STO 'c' STO 'b' STO 'a' STO @ Löschfunktion für die erzeugten Variablen \<< { F s a b c m LOE Fx Fi \Ga \Gb \Gg ta tb tc \Ga3 \Gb3 \Gg3 a1 a2 a3 b1 b2 b3 c1 c2 c3 fE FT aT bT cT} PURGE \>> 'LOE' STO {VDR Ergeb LOE} ORDER @ Überprüfung der Werte auf Plausibilität IF @ Sind die Seitenlängen a, b und c relle oder ganze Zahlen? 'a' VTYPE 0. == 'a' VTYPE 28. == OR 'b' VTYPE 0. == 'b' VTYPE 28. == OR AND 'c' VTYPE 0. == 'c' VTYPE 28. == OR AND 'm' VTYPE 0. == 'm' VTYPE 28. == OR AND @ Ist das Teilungsverhältnis zwischen 0 und 1? m 0. > AND m 1. < AND @ Ist die Dreiecksungleichung erfüllt? a b + c > AND b c + a > AND c a + b > AND NOT @ Wenn keine Plausibilität, dann erfolgen @ Angaben zur fehlenden Plausibilität THEN 3000 .05 BEEP 2000 0.05 BEEP 3000 .05 BEEP CLLCD "Eingabewerte pr\252fen a = " a \->STR + " b = " + b \->STR + " c = " + c \->STR + IF a b + c \<= b c + a \<= OR c a + b \<= OR THEN " Kein Dreieck möglich!" + END " m = " + m \->STR + IF m 0. \<= m 1. \>= OR THEN " m stimmt nicht!" + END 1. DISP 7. FREEZE ELSE @ Bei vorhandener Plausibilität werden die Werte berechnet: @ Halber Umfang s und Fläche F des gegebenen Dreiecks a b + c + 2. / 's' STO s s a - * s b - * s c - * \v/ 'F' STO @ Eckwinkel des Dreiecks in Altgrad (DEG) DEG b SQ c SQ + a SQ - 2 / b / c / ACOS '\Ga' STO c SQ a SQ + b SQ - 2 / c / a / ACOS '\Gb' STO a SQ b SQ + c SQ - 2 / a / b / ACOS '\Gg' STO @ Flächeninhalt eines äußeren Dreiecks Fx 1 m - m * F * 1 1 m - m * - / 'Fx' STO @ Flächeninhalt inneres Dreieck Fi F 3 Fx * - 'Fi' STO @ Längen der Teilungslinien 1 m - c SQ * m 1 m - * a SQ * - m b SQ * + \v/ 'ta' STO 1 m - a SQ * m 1 m - * b SQ * - m c SQ * + \v/ 'tb' STO 1 m - b SQ * m 1 m - * c SQ * - m a SQ * + \v/ 'tc' STO @ Winkel der Teilungslinien DEG 1 m - SQ a SQ * ta SQ + b SQ - 2 / 1 m - / a / ta / ACOS '\Ga3' STO 1 m - SQ b SQ * tb SQ + c SQ - 2 / 1 m - / b / tb / ACOS '\Gb3' STO 1 m - SQ c SQ * tc SQ + a SQ - 2 / 1 m - / c / tc / ACOS '\Gg3' STO @ Teilstrecken der Teilungslinien m 1 m 1 m - * - / DUP DUP ta * 'a1' STO tb * 'b1' STO tc * 'c1' STO 1 2 m * - 1 m 1 m - * - / DUP DUP ta * 'a2' STO tb * 'b2' STO tc * 'c2' STO m m * 1 m 1 m - * - / DUP DUP ta * 'a3' STO tb * 'b3' STO tc * 'c3' STO @ Dreieck zwischen den Teilungspunkten @ Flächeninhalt der Eckdreiecke m 1 m - * F * 'fE' STO @ Flächeninhalt des Mitteldreiecks 1 3 m * 1 m - * - F * 'FT' STO @ Seitenlängen 1 m - SQ b SQ * m SQ c SQ * + m 1 m - * b SQ c SQ + a SQ - * - \v/ 'aT' STO 1 m - SQ c SQ * m SQ a SQ * + m 1 m - * c SQ a SQ + b SQ - * - \v/ 'bT' STO 1 m - SQ a SQ * m SQ b SQ * + m 1 m - * a SQ b SQ + c SQ - * - \v/ 'cT' STO @ Programme und Variablen umordnen { VDR Ergeb LOE a b c m s F Fx Fi \Ga \Gb \Gg ta tb tc \Ga3 \Gb3 \Gg3 a1 a2 a3 b1 b2 b3 c1 c2 c3 fE FT aT bT cT} ORDER @ Ergebnisse anzeigen Ergeb END END \>> Ergeb \<< @ Anzeigen der Ergebnisvariablen RCLF 'Flagsave' STO { -20. -20. -21. -31. -95. } CF { -2. -3. -22. -90. -103. -105. } SF DEG RECT DEC \<< { a b c m s F Fx Fi \Ga \Gb \Gg \Ga3 \Gb3 \Gg3 ta tb tc a1 a2 a3 b1 b2 b3 c1 c2 c3 fE FT aT bT cT } DUP @ Feststellen der Anzahl VTYPE SORT HEAD IF -1. == THEN CLLCD 1000. .1 BEEP "Variablen der Ergebnisse fehlen!" MSGBOX " Werte fehlen!" ELSE " 31 Ergebnisvariablen" END \>> EVAL CLLCD SWAP DUP \<< EVAL \>> DOLIST SWAP \<< \->TAG \>> DOLIST 1. CHOOSE DROP Flagsave STOF 'Flagsave' PURGE \>> Info @ Anzeigeprogramm für Info \<< CLLCD "Info zum Programm VDR: siehe \"VDR.pdf\" auf www.praxelius.de Stand vom 02.02.2012 (C) Otto Praxl Start mit Eingabe von a, b, c, m und [VDR]" 1 DISP 7 FREEZE \>> END