Program Statik1; {********************************************} {* (C) TB-TechSoft *} {$I Grafik3.inc} {* T.Beekhuis,Adlerstr.6a,2400 Luebeck *} {$I Turtle3.inc} {********************************************} {-------------------------------------------------------------------} TYPE Index=Array [1..10] of Real; VAR Winkel : Index; Groesse : Index; Fx,Fy : Index; Fr,FrX,FrY : Real; X,Y : Real; ResWinkel : Real; M,W,I,n,Z : Integer; Teiler : Real; Menue : String[1]; CONST PI=3.14159; Faktor=0.017453292; LABEL Ruecksprung,Neustart; {-------------------------------------------------------------------} Procedure VORSTELLUNG; Begin ClrScr; Writeln(' **************************************************'); Writeln(' * *'); Writeln(' * STATIK-PROGRAMM 1 (ZKS) (v.3) *'); Writeln(' * *'); Writeln(' * (C) TB-Technical-Software *'); Writeln(' * *'); Writeln(' **************************************************'); Delay(1000); {VERZOEGERUNG} GotoXY(1,10); Writeln(' Mit diesem Programm wird die RESULTIERENDE KRAFT '); Writeln; Writeln(' <Fr> mehrerer Einzelkraefte im zentralen Kraefte-'); Writeln; Writeln(' system [X-Y] nach Groesse und Richtung berechnet.'); Delay(4000); GotoXY(1,18); Writeln(' Geben Sie die Werte ein und quittieren Sie die Ein-'); Writeln; Writeln(' gabe mit <ENTER>. '); Delay(3000); End; {-------------------------------------------------------------------} Procedure EINGABE; Begin ClrScr; GotoXY(12,23); LowVideo; Write(' Druecken Sie nach Eingabe <ENTER> '); NormVideo; n:=2; {TESTVORGABE} GotoXY(1,1); Write('Mit welcher Anzahl von Kraeften wollen Sie arbeiten : '); Readln(n); Writeln; Writeln; I:=1; For Z:=1 to n do Begin Writeln('Kraft ',I,' : '); Write('Nennen Sie Bitte die Groesse : '); Read(Groesse[Z]); Writeln(' N'); Write('Unter welchem Winkel wirkt sie : '); Read(Winkel[Z]); Writeln(' Grad'); Writeln; I:=I+1; End; Delay(800); ClrScr; End; {-------------------------------------------------------------------} Procedure RECHNEN; {RECHENTEIL} Begin M:=2; Teiler:=1; {X/Y-Komponenten} For Z:=1 to n do Begin Fy[Z]:=sin(Winkel[Z]*Faktor)*Groesse[Z]; Fx[Z]:=cos(Winkel[Z]*Faktor)*Groesse[Z]; End; FrY:=0; {Y-Summe} For Z:=1 to n do Begin FrY:=FrY+Fy[Z]; End; FrX:=0; {X-Summe} For Z:=1 to n do Begin FrX:=FrX+Fx[Z]; End; ResWinkel:=(ArcTan(FrY/FrX))/Faktor; {Winkel v. Fr} Fr:=sqrt(sqr(FrX)+sqr(FrY)); {Resultierende Fr} IF (FrX >= 0) and (FrY >= 0) then {QUADRANT I} Begin ResWinkel:=ResWinkel; End; IF (FrX <= 0) and (FrY >= 0) then {QUADRANT II} Begin ResWinkel:=180+ResWinkel; End; IF (FrX <= 0) and (FrY <= 0) then {QUADRANT III} Begin ResWinkel:=180+ResWinkel; End; IF (FrX >= 0) and (FrY <= 0) then {QUADRANT IV} Begin ResWinkel:=360+ResWinkel; End; IF Trunc(Fr)=0 then {BEGRENZUNG} Begin ResWinkel:=0; End; End; {-------------------------------------------------------------------} Procedure AUSGABE; {AUSGABETEIL} Begin GotoXY(1,5); Writeln(' =================================================='); Writeln; Writeln(' Die Kraft Fr betraegt ',Fr:6:2,' N;'); Writeln; Writeln(' sie wirkt unter dem Winkel von ',ResWinkel:4:2,' GRAD'); Writeln; Writeln(' =================================================='); GotoXY(12,22); LowVideo; Writeln(' Bitte druecken Sie <ENTER> um die Grafik '); GotoXY(12,23); Writeln(' zu aktivieren. '); NormVideo; Readln; ClrScr; End; {----------------------Grafikerweiterung----------------------------} procedure pfeil; {VECTORENSPITZE} begin turnleft(15); back(25); turnleft(75); forwd(13); turnright(105); forwd(25); turnleft(15); end; procedure Vector(Radius,Winkel,Art : Integer); {VECTORENAUFBAU} VAR I:Integer; Begin SetHeading(East); TurnLeft(Winkel); If Art=0 then Begin PenDown; Forwd(Radius); End; If Art=1 then Begin For I:=1 to 5 do Begin PenDown;Forwd(Round(Radius/10)); PenUp; Forwd(Round(Radius/10)); End; End; PenDown; Pfeil; End; {------------------Ende der Grafikerweiterung-----------------------} Procedure GRAFIK; {GRAFIKTEIL} Begin InitGrafik; {GRAFIK-AKTIVIERUNG} SetPosition(0,0); Origin(2,2); SetHeading(North); Forwd(396); {RAHMEN} TurnRight(90); Forwd(636); TurnRight(90); Forwd(396); TurnRight(90); Forwd(636); Origin(488,2); SetHeading(North); Forwd(50); {SCHRIFTFELD} TurnRight(90); Forwd(150); Origin(360,200); {NULLPUNKT SETZEN} SetPosition(-180,0); {X-ACHSE} SetHeading(WEST); Pfeil; SetHeading(EAST); Forwd(360); Pfeil; SetPosition(0,-180); {Y-ACHSE} SetHeading(SOUTH); Pfeil; Back(360); SetHeading(NORTH); Pfeil; SetPosition(0,0); {NULL-PUNKT} SetHeading(EAST); Vector(Round(Fr/Teiler),Round(ResWinkel),1); {Resultierende Fr} PenUp; Forwd(12); TAG; Write('Fr'); TAGoff; PenDown; I:=1; For Z:=1 to n do {Aktionskraefte} Begin Origin(360,200); Vector(Round(Groesse[Z]/Teiler),Round(Winkel[Z]),0); PenUp; Forwd(12); TAG; Write('F',I); TAGoff; Back(Round(Groesse[Z]/Teiler)); PenDown; I:=I+1; End; End; {-------------------------------------------------------------------} Procedure BESCHRIFTUNG; {BESCHRIFTUNGSTEIL} Begin SetPosition(170,-8); {BESCHRIFTUNG X-ACHSE} GrafOut(CHR(88)); SetPosition(10,180); {BESCHR. Y-ACHSE} GrafOut(CHR(89)); GotoXY(64,24); {BESCHR.SCHRIFTFELD} Write('(C) TB-TechSoft'); I:=1; W:=2; {AUFLISTEN DER KRAEFTE} For Z:=1 to n do Begin GotoXY(4,W); Write('F',I,' : ',Groesse[Z]:4:2,' N'); W:=W+1; I:=I+1; End; I:=1; {AUFLISTEN DER WINKEL} For Z:=1 to n do Begin GotoXY(4,W); Write(CHR(97),I,' : ',Winkel[Z]:3:2,' Grad'); W:=W+1; I:=I+1; End; GotoXY(60,2); {AUSGABE Fr/ar} Write('Fr : ',Fr:6:2,' N'); GotoXY(60,4); Write('ar : ',ResWinkel:4:2,' Grad'); If Teiler <> 1 then {Masstab} Begin GotoXY(60,6); LowVideo; Write(' Masstab ',Teiler:1:1,' : 1 '); NormVideo; End; GotoXY(4,21); {MENUE} Write ('Dokumentation : <D>'); GotoXY(4,22); Write ('Masstab : <M>'); GotoXY(4,23); Write ('Neue Rechnung : <N>'); GotoXY(4,24); Write ('Abbruch : <A>'); GotoXY(1,25); Read(Kbd,Menue); SetPosition(0,0); {RUECKSETZEN DER TURTLE} SetHeading(NORTH); End; {-------------------------------------------------------------------} Begin {HAUPTPROGRAMM} VORSTELLUNG; NEUSTART: EINGABE; RECHNEN; AUSGABE; RUECKSPRUNG: GRAFIK; BESCHRIFTUNG; If Menue in ['N','n'] then Begin Menue:=''; Goto Neustart; End; If Menue in ['A','a'] then Begin ClrScr; Write('Ende des Arbeitsprogrammes'); LowVideo; GotoXY(15,10);Writeln(' '); GotoXY(15,11);Writeln(' "S T A T I K I : Zentrales Kraeftesystem" '); GotoXY(15,12);Writeln(' '); NormVideo; Delay(2000); ClrScr; Halt; End; If Menue in ['M','m'] then Begin ClrScr; Writeln('Bitte nennen Sie den gewuenschten Faktor '); Write('mit dem vergroessert / verkleinert werden soll : '); Read(Teiler); ClrScr; Write('Eingestellter Masstab : ',Teiler:1:1,' : 1 ( Autostart )'); Delay(1200); Goto Ruecksprung; End; If Menue in ['D','d'] then Begin I:=1; Writeln(LST,Chr(14),'DOKUMENTATION :'); Write(LST,Chr(20),Chr(10)); For Z:=1 to n do Begin Writeln(LST,'Aktionskraft F',I,' : ', Groesse[Z]:6:2,' N'); Writeln(LST,'Winkel zur X-Achse : ',Winkel[Z]:4:2,' Grad'); Write(LST,Chr(10)); I:=I+1; End; Writeln(LST,'Resultierende Kraft : ',Fr:6:2,' N'); Writeln(LST,' unter Alpha/res. = ',ResWinkel:4:2,' Grad'); Goto Ruecksprung; End; End. |