![]() |
Trigonometrischer Rechner...
Hallo Leute,
ich habe ein großes Problem. Auch ich muss in Informatik ein Proggy schreiben, womit man Berechnungen am allgemeinen Dreieck durchführt und welches insgesamt 6 Editfelder besitzt, wobei in 3 die Seitenlängen geschrieben und in den anderen 3 die Winkelgrößen geschrieben werden. Alle 6 sind Variablen (a,b,c,wa,wb,wc) zugewiesen, die vom Typ REAL sind. Die Grundfunktionen SSS,SSW,WSW,WWS hab ich alle in einer UNIT gespeichert. Das Programm greift auf diese zu. Mein Problem sind die Abfragen, um die Einzelnen Prozeduren aufzurufen. Funktionieren tut bisher nur SSS, also ob in allen 3 Editfeldern was drin steht. Und wenn nicht, dann soll er meckern. Da ich aber echt verzweifelt bin, weil das Proggy nicht funzt OBWOHL es funzt!?!?! Denn der spuckt nach dem klicken auf Berechnen ne Fehlermeldung "Blablabla Gleitkommazahlen Bla..." aus. Und direkt im Anschluß das richtige Ergebnis. Was hab ich falsch gemacht??? :wall: :wall: :wall: So. Hier kommt mein CODE: Zuerst die UNIT mit den Prozeduren
Delphi-Quellcode:
unit cpu;
interface uses math; PROCEDURE cosw(x,y,z:REAL;VAR w:REAL); PROCEDURE hundertachtzig(winkel1,winkel2:REAL; VAR winkel3:REAL); PROCEDURE WSW(x,w:REAL;VAR y:REAL); PROCEDURE SSW(x,w:REAL;VAR y:REAL); PROCEDURE SWS(y,z,w:REAL;VAR x:REAL); implementation PROCEDURE cosw(x,y,z:REAL;VAR w:REAL); BEGIN w:=RADTODEG(ARCCOS(((y*y)+(z*z)-(x*x))/(2*y*z))); END; PROCEDURE hundertachtzig(winkel1,winkel2:REAL; VAR winkel3:REAL); BEGIN winkel3:=180-(winkel1+winkel2); END; PROCEDURE WSW(x,w:REAL;VAR y:REAL); BEGIN y:=x*(RADTODEG(COS(w))); END; PROCEDURE SSW(x,w:REAL;VAR y:REAL); BEGIN y:=(RADTODEG(tan(w)))*x; END; PROCEDURE SWS(y,z,w:REAL;VAR x:REAL); BEGIN x:=SQRT(((y*y)+(z*z)-((2*y*z)*(RADTODEG(cos(w)))))); END; end. Und jetzt das eigentliche Programm zum Rechnen:
Delphi-Quellcode:
unit berechnung.sss;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls, ExtCtrls, Math,cpu; type TSSS = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Image1: TImage; closebutton: TButton; Seitea: TEdit; Seiteb: TEdit; Seitec: TEdit; Winkelalpha: TEdit; Winkelbeta: TEdit; Winkelgamma: TEdit; MainMenu1: TMainMenu; Gehezu1: TMenuItem; Hilfe1: TMenuItem; Info1: TMenuItem; Programmbeenden1: TMenuItem; Button1: TButton; loeschen: TButton; procedure closebuttonClick(Sender: TObject); procedure Info1Click(Sender: TObject); procedure Hauptmen1Click(Sender: TObject); procedure Programmbeenden1Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Gehezu1Click(Sender: TObject); procedure loeschenClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var SSS: TSSS; implementation uses info, rechner; {$R *.dfm} procedure TSSS.closebuttonClick(Sender: TObject); begin close; end; procedure TSSS.Info1Click(Sender: TObject); begin Information.Show; SSS.Hide; end; procedure TSSS.Hauptmen1Click(Sender: TObject); begin index.show; SSS.Hide; end; procedure TSSS.Programmbeenden1Click(Sender: TObject); begin close; end; procedure TSSS.Button1Click(Sender: TObject); VAR alpha,beta,gamma,a,b,c:REAL; begin //Abfrage, ob keine Seite gegeben ist IF (Seitea.Text='') AND (Seiteb.Text='') AND (Seitec.Text='') THEN showmessage('Bitte geben Sie mindestens 1 Seite ein!'); //Abfrage, ob 3 Seiten gegeben sind IF (Seitea.Text<>'') AND (Seiteb.Text<>'') AND (Seitec.Text<>'') THEN BEGIN //Einlesen der 3 Seiten a:=STRTOFLOAT(Seitea.Text); b:=STRTOFLOAT(Seiteb.Text); c:=STRTOFLOAT(Seitec.Text); //Berechnung der 3 Winkel cosw(a,b,c,alpha); cosw(b,c,a,beta); cosw(c,a,b,gamma); //Ausgabe der 3 Winkel Winkelalpha.Text:=FLOATTOSTR(alpha); Winkelbeta.Text:=FLOATTOSTR(beta); Winkelgamma.Text:=FLOATTOSTR(gamma); END; //Abfrage, ob Seite a, Seite b und der dazwischen liegende Winkel Gamma gegeben sind IF (Seitea.Text<>'') AND (Seiteb.Text<>'') AND (Winkelgamma.Text<>'') THEN BEGIN a:=STRTOINT(Seitea.Text); b:=STRTOINT(Seiteb.Text); gamma:=STRTOFLOAT(Winkelgamma.Text); //Aufruf der Prozedur SWS sws(a,b,gamma,c); //Berechnung der Winkel Alpha und Beta cosw(a,b,c,alpha); cosw(b,c,a,beta); //Ausgabe der berechneten Seite und der restlichen 2 Winkel Seitec.Text:=FLOATTOSTR(c); Winkelalpha.Text:=FLOATTOSTR(alpha); Winkelbeta.Text:=FLOATTOSTR(beta); END; //Abfrage, ob Seite a, Seite c und der dazwischen liegende Winkel Beta gegeben sind IF (Seitea.Text<>'') AND (Seitec.Text<>'') AND (Winkelbeta.Text<>'') THEN BEGIN a:=STRTOFLOAT(Seitea.Text); c:=STRTOFLOAT(Seitec.Text); beta:=STRTOFLOAT(Winkelbeta.Text); //Aufruf der Prozedur SWS sws(a,c,beta,b); //Berechnung der Winkel Alpha und Gamma cosw(a,b,c,alpha); cosw(c,a,b,gamma); //Ausgabe der berechneten Seite und der restlichen 2 Winkel Seiteb.Text:=FLOATTOSTR(b); Winkelalpha.Text:=FLOATTOSTR(alpha); Winkelbeta.Text:=FLOATTOSTR(gamma); END; //Abfrage, ob 2 Winkel = 0° und einer = 180° sind --> Dreieck nicht möglich IF (Winkelalpha.Text='0') AND (Winkelbeta.Text='0') AND (Winkelgamma.Text='180') OR (Winkelalpha.Text='180') AND (Winkelbeta.Text='0') AND (Winkelgamma.Text='0') OR (Winkelalpha.Text='0') AND (Winkelbeta.Text='180') AND (Winkelgamma.Text='0') THEN showmessage('2 Seiten zusammen dürfen nicht kleiner als die dritte sein! Bitte versichern Sie sich, dass Sie alles korrekt eingegeben haben!'); end; procedure TSSS.Gehezu1Click(Sender: TObject); begin index.show; SSS.Hide; end; procedure TSSS.loeschenClick(Sender: TObject); begin Seitea.Text:=''; Seiteb.Text:=''; Seitec.Text:=''; Winkelalpha.Text:=''; Winkelbeta.Text:=''; Winkelgamma.Text:=''; end; end. ![]() MfG die Gurke Ps: Ich hoffe ihr könnt mir helfen! Ich kann hier auch das Proggy posten wenn ihr wollt! |
Re: Trigonometrischer Rechner...
Wo kommt der Fehler? Bei welchen Eingaben? Wie lautet die genaue Fehlermeldung?
|
Re: Trigonometrischer Rechner...
Direkt nach dem Klicken auf "Berechnen" sagt der ungültige Gleitkommaoperation.
Ich hab schon alle möglichen Ursachen gecheckt (INTEGER mit REAL vertauscht, usw...) ich finds nicht.. :gruebel: |
Re: Trigonometrischer Rechner...
Ich meine in welcher Zeile? Hast du in den Edits auch mal eine 0 stehen, durch die du teilen könntest?
|
Re: Trigonometrischer Rechner...
Nein hab ich nicht...
Da steht nix drin. Egal für welche Werte ich auf Berechnen klicke, er gibt immer die gleich Meldung aus. :coder2: Beispiel: Seitea.Text -> 5 Seiteb.Text -> 4 Seitec.Text -> 3 Eigentlich ist Alpha laut Kosinussatz 90 ° groß. Also muss er das auch ausgeben. Klicke ich jetzt auf Berechnen, dann kommt die Fehlermeldung bezüglich der Gleitkommaoperation. Klickt man dann auf OK, stehen die Ergebnisse trotzdem korrekt da. Woran könnte das liegen? Sind vielleicht meine Abfragen falsch programmiert? Ich bräuchte dafür auch noch Hilfe. Der Feler ist übrigens erst nach dem Proggen der Abfragen aufgetreten... Mist, es ist zum :wall: :wall: :wall: |
Re: Trigonometrischer Rechner...
Ich hatte mir auch überlegt,
ob das nicht mit den Abfragen zusammenhängen könnte. Dass er vielleicht wegen irgendeiner Abfrage einen leeren String in eine REAL - Variable schreiben will, dass er deshalb meckert. Das macht das Proggy aber nicht... Ich find das zum :kotz: |
Re: Trigonometrischer Rechner...
Leute??
Ich brauhce eure Hilfe!! So schreibt mir doch! |
Re: Trigonometrischer Rechner...
hi und herzlich willkommen bei der :dp:
ich würde an deiner stelle mal von anfang bis ende mit hilfe der einzeleilen ausführung durch den code gehen und dann siehste wo der fehler genau kommt also einzelschritt debugging das neben der grünen "play" taste das tut aber auch nur wenn du das programm angehalten hast -> also einen breakpoint irgendwo am anfang setzen und ab da dann einzelschritt mäßig vorgehen |
Re: Trigonometrischer Rechner...
Danke...
Ich werds heute mal ausprobiern... Vielleicht find ich den gottverdammten Bug ja... :coder: |
Fehler gefunden!
:corky: :corky: :corky: :corky: :corky: :corky: :corky: :corky: :corky:
:roteyes: Hallo Leute! Ich hab den Fehler gefunden! Es lag daran, dass die Winkel in Form des DEG-Systems an die cosinusfunktion und Co übergeben wurden. Man musste die vorher ins Rad-Maß konvertieren. also DEGTORAD(w) Jop ich schreib morgen hier mal nen link zur alpha rein cya :dancer2: :dancer: :bounce2: :bounce1: :bouncing4: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz