Einzelnen Beitrag anzeigen

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