AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Trigonometrischer Rechner...

Offene Frage von "At0mGuRk3"
Ein Thema von At0mGuRk3 · begonnen am 23. Nov 2004 · letzter Beitrag vom 28. Nov 2004
Antwort Antwort
At0mGuRk3

Registriert seit: 23. Nov 2004
9 Beiträge
 
#1

Trigonometrischer Rechner...

  Alt 23. Nov 2004, 22:38
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???


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.
Hier ist ein Screenshot vom Programm


MfG
die Gurke

Ps:
Ich hoffe ihr könnt mir helfen!

Ich kann hier auch das Proggy posten wenn ihr wollt!
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#2

Re: Trigonometrischer Rechner...

  Alt 23. Nov 2004, 22:41
Wo kommt der Fehler? Bei welchen Eingaben? Wie lautet die genaue Fehlermeldung?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
At0mGuRk3

Registriert seit: 23. Nov 2004
9 Beiträge
 
#3

Re: Trigonometrischer Rechner...

  Alt 23. Nov 2004, 22:58
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..
  Mit Zitat antworten Zitat
Benutzerbild von Nikolas
Nikolas

Registriert seit: 28. Jul 2003
1.528 Beiträge
 
Delphi 2005 Personal
 
#4

Re: Trigonometrischer Rechner...

  Alt 23. Nov 2004, 23:07
Ich meine in welcher Zeile? Hast du in den Edits auch mal eine 0 stehen, durch die du teilen könntest?
Erwarte das Beste und bereite dich auf das Schlimmste vor.
  Mit Zitat antworten Zitat
At0mGuRk3

Registriert seit: 23. Nov 2004
9 Beiträge
 
#5

Re: Trigonometrischer Rechner...

  Alt 24. Nov 2004, 09:49
Nein hab ich nicht...
Da steht nix drin.
Egal für welche Werte ich auf Berechnen klicke,
er gibt immer die gleich Meldung aus.

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
  Mit Zitat antworten Zitat
At0mGuRk3

Registriert seit: 23. Nov 2004
9 Beiträge
 
#6

Re: Trigonometrischer Rechner...

  Alt 24. Nov 2004, 16:18
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
  Mit Zitat antworten Zitat
At0mGuRk3

Registriert seit: 23. Nov 2004
9 Beiträge
 
#7

Re: Trigonometrischer Rechner...

  Alt 25. Nov 2004, 22:50
Leute??
Ich brauhce eure Hilfe!!
So schreibt mir doch!
  Mit Zitat antworten Zitat
supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Trigonometrischer Rechner...

  Alt 25. Nov 2004, 23:13
hi und herzlich willkommen bei der

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
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
At0mGuRk3

Registriert seit: 23. Nov 2004
9 Beiträge
 
#9

Re: Trigonometrischer Rechner...

  Alt 26. Nov 2004, 06:28
Danke...
Ich werds heute mal ausprobiern...
Vielleicht find ich den gottverdammten Bug ja...
  Mit Zitat antworten Zitat
At0mGuRk3

Registriert seit: 23. Nov 2004
9 Beiträge
 
#10

Fehler gefunden!

  Alt 28. Nov 2004, 22:27





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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz