Autor Beitrag
pump
Hält's aus hier
Beiträge: 10

xp pro
bordland delphi 7
BeitragVerfasst: Sa 25.09.04 01:54 
Also der rechner soll am ende winkel, umfang, fläeche, hoehen der seiten und den radius des inkreises sowie umkreises berechnen, wenn nur die seiten a b und c gegeben sind.

hier der programmtext bis jetzt:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
unit Unit1;

interface

uses
  Math, // UNit in der der ArcCos Bezeichner Steht
  Windows,
  Messages,
  SysUtils,
  Classes,
  Graphics,
  Controls,
  Forms,
  Dialogs,
  StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    LabelSeitea: TLabel;
    LabelSeiteb: TLabel;
    LabelSeitec: TLabel;
    LabelWinkela: TLabel;
    LabelWinkelb: TLabel;
    LabelWinkelc: TLabel;
    LabelFlaeche: TLabel;
    LabelUmfang: TLabel;
    EditSeitea: TEdit;
    EditSeiteb: TEdit;
    EditSeitec: TEdit;
    EditWinkela: TEdit;
    EditWinkelb: TEdit;
    EditFlaeche: TEdit;
    EditUmfang: TEdit;
    berechnen: TButton;
    Beenden: TButton;
    EditWinkelc: TEdit;
    clear: TPanel;
    EditHoehec: TEdit;
    EditHoeheb: TEdit;
    EditHoehea: TEdit;
    EditInkreis: TEdit;
    EditUmkreis: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    procedure berechnenClick(Sender: TObject);
    procedure BeendenClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.berechnenClick(Sender: TObject);
var seitea,seiteb,seitec,winkela,winkelb,winkelc,flaeche,umfang,hoehea,hoeheb,hoehec: Integer;
begin
  seitea:=StrToInt(EditSeitea.text); // Gibt an, dass die Seitea im Edit-Fenster EditSeitea eingegeben ist.
  seiteb:=StrToInt(EditSeiteb.text); // Gibt an, dass die Seiteb im Edit-Fenster EditSeiteb eingegeben ist.
  seitec:=StrToInt(EditSeitec.text); // Gibt an, dass die Seitec im Edit-Fenster EditSeitec eingegeben ist.
  winkela:=round(arccos((Seitea*Seitea-Seiteb*Seiteb-Seitec*Seitec)/(-2*Seiteb*Seitec))); // Rechnet den Winkel alpha aus.
  winkelb:=round(arccos((Seiteb*Seiteb-Seitec*Seitec-Seitea*Seitea)/(-2*Seitec*Seitea))); // Rechnet den Winkel beta aus.
  winkelc:=round(arccos((Seitec*Seitec-Seitea*Seitea-Seiteb*Seiteb)/(-2*Seitea*Seiteb))); // Rechnet den Winkel gamma aus.
  hoehea:=round(seiteb*sin(arccos((Seitec*Seitec-Seitea*Seitea-Seiteb*Seiteb)/(-2*Seitea*Seiteb))));
  hoeheb:=round(seitec*sin(arccos((Seitea*Seitea-Seiteb*Seiteb-Seitec*Seitec)/(-2*Seiteb*Seitec))));
  hoehec:=round(seitea*sin(arccos((Seiteb*Seiteb-Seitec*Seitec-Seitea*Seitea)/(-2*Seitec*Seitea))));
  umfang:=seitea+seiteb+seitec; // Rechnet den Umfang aus.
  flaeche:=round(0.5*seitea*seiteb*sin(3.1415/180*(round(arccos((Seitec*Seitec-Seitea*Seitea-Seiteb*Seiteb)/(-2*Seitea*Seiteb)))))); // Rechnet die Fläeche aus.
  EditFlaeche.text:=IntToStr(Flaeche); // Besagt, dass die Fläche im Edit-Fenster EditFlaeche eingefügt wird.
  EditUmfang.text:=IntToStr(Umfang); // Besagt, dass der Umfang im Edit-Fenster EditUmfang eingefügt wird.
  EditWinkela.Text:=IntToStr(Winkela); // Besagt, dass der Winkel alpha im Edit-Fenster EditWinkela eingefügt wird.
  EditWinkelb.Text:=IntToStr(Winkelb); // Besagt, dass der Winkel beta im Edit-Fenster EditWinkelb eingefügt wird.
  EditWinkelc.Text:=IntToStr(Winkelc); // Besagt, dass der Winkel gamma im Edit-Fenster EditWinkelc eingefügt wird.
  EditHoehea.Text:=IntToStr(hoeheb);
  EditHoeheb.Text:=IntToStr(hoehea);
  EditHoehec.Text:=IntToStr(hoehec);
end;

procedure TForm1.BeendenClick(Sender: TObject);
begin
    close; // Schließt das Programm.
end;

end.


das problem ist folgendes:

1. ich will die ergebnisse mit nachkommastellen
2. bei den winkeln kommen völlig falsche ergebnisse raus
3. es soll noch ein "clear" button rein, der alle edit felder wieder zurücksetzt

arbeite erst seit 4 schulstd. mit delphi also nicht lachen ^^

ps: die inkreis umkreis formleln muessen noch rein und lauten:
umkreis: a / (2 * sin(alpha))
inkreis: c * sin(alpha / 2) * sin(beta / 2) / sin((alpha + beta) / 2)

schoen wär noch wenn einer mir das machen koennte, dass man einfach 3 verschiedene eingaben machen muss

Moderiert von user profile iconChristian S.: Code- durch Delphi-Tags ersetzt.
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Sa 25.09.04 09:45 
Zu 1.: Du musst Real-Typen (Stichwort Floatingpoint) zum Rechnen nehmen.
Zu 2.: Trigonometrische Umkehrfunktionen liefern Ergebnisse zwischen -pi/2 und +pi/2. Da du aber im Dreieck nur mit postiven Winkeln rechnest, musst du das anpassen.
Zu 3.: Hier versteh ich nicht, wo das Problem liegt.

Noch als Tipp: Du kannst in Delphi "pi" direkt so hinschreiben, der Compiler kennt das. ;-)

Gruß,
Jörg

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
ttauch
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Sa 25.09.04 11:17 
löschen kannst du ein editfeld indem du nix reinschreiben lässt
edit1.text:=''

oder es so löschst:
edit1.clear
Tobias1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 454

Win 98, XP Prof
D3 Prof, D2005 Prof
BeitragVerfasst: Sa 25.09.04 12:18 
Zitat:

ps: die inkreis umkreis formleln muessen noch rein und lauten:
umkreis: a / (2 * sin(alpha))
inkreis: c * sin(alpha / 2) * sin(beta / 2) / sin((alpha + beta) / 2)

schoen wär noch wenn einer mir das machen koennte, dass man einfach 3 verschiedene eingaben machen muss


Wo ist das Problem, rechne hier einfach mit winkela,winkelb weiter.
Also:

ausblenden Delphi-Quelltext
1:
2:
3:
var umkreis,inkreis:real;
umkreis:=seitea/(2*sin(winkela));
inkreis:=seitec * sin(winkela / 2) * sin(winkelb / 2) / sin((winkela + winkel) / 2);

_________________
Auch das schlechteste Buch hat seine gute Seite: die letzte. (John Osborne)
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 25.09.04 14:22 
Die Winkelfunktionen erwarten die Werte in RAD und nicht in DEG. Entsprechende Umrechnungsfunktionen sind in der Unit Math drinne.
pump Threadstarter
Hält's aus hier
Beiträge: 10

xp pro
bordland delphi 7
BeitragVerfasst: Sa 25.09.04 17:39 
hey ich hab erst 4 std inner schule delphi gehabt bombardiert mich nicht mit so vielen fachausdrücken ^^

1. was sind real typen und wie mach ich die?
2. wie muss ich die anpassen
3. is mir nu klar

also nochma zu 2 wenn ich die seiten z.b. alle 2 einheiten lang hab dann kommt da als ergebnis bei den winkeln 1 raus obwohl da 60 rauskommen muesste

was zum teufel ist rad bzw deg???

so das mit dem real hab ich nu glaub ich kapiert. hier der neue quelltext:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
procedure TForm1.berechnenClick(Sender: TObject);
var seitea,seiteb,seitec,winkela,winkelb,winkelc,flaeche,umfang,hoehea,hoeheb,hoehec,inkreis,umkreis: real;
begin
  seitea:=StrToInt(EditSeitea.text); // Gibt an, dass die Seitea im Edit-Fenster EditSeitea eingegeben ist.
  seiteb:=StrToInt(EditSeiteb.text); // Gibt an, dass die Seiteb im Edit-Fenster EditSeiteb eingegeben ist.
  seitec:=StrToInt(EditSeitec.text); // Gibt an, dass die Seitec im Edit-Fenster EditSeitec eingegeben ist.
  winkela:=arccos((Seitea*Seitea-Seiteb*Seiteb-Seitec*Seitec)/(-2*Seiteb*Seitec)); // Rechnet den Winkel alpha aus.
  winkelb:=arccos((Seiteb*Seiteb-Seitec*Seitec-Seitea*Seitea)/(-2*Seitec*Seitea)); // Rechnet den Winkel beta aus.
  winkelc:=arccos((Seitec*Seitec-Seitea*Seitea-Seiteb*Seiteb)/(-2*Seitea*Seiteb)); // Rechnet den Winkel gamma aus.
  hoehea:=seiteb*sin(winkelc); // Rechnet die Hoehe a aus.
  hoeheb:=seitec*sin(winkela); // Rechnet die Hoehe b aus.
  hoehec:=seitea*sin(winkelb); // Rechnet die Hoehe c aus.
  umfang:=seitea+seiteb+seitec; // Rechnet den Umfang aus.
  flaeche:=hoehea*seitea/2// Rechnet die Fläeche aus.
  umkreis:=seitea/(2*sin(winkela)); // Rechnet den Umkreis um das Dreieck aus.
  inkreis:=seitec * sin(winkela / 2) * sin(winkelb / 2) / sin((winkela + winkelb) / 2); // Rechnet den Inkreis in dem Dreieck aus.
  EditFlaeche.text:=FloatToStr(Flaeche); // Fügt die Fläche in das Edit-Feld EditFlaeche ein.
  EditUmfang.text:=FloatToStr(Umfang); // Fügt den Imfang in das Edit-Feld EditUmfang ein.
  EditWinkela.Text:=FloatToStr(Winkela); // Fügt den Wert des Winkel alpha in das Edit-Feld EditWinkela ein.
  EditWinkelb.Text:=FloatToStr(Winkelb); // Fügt den Wert des Winkel beta in das Edit-Feld EditWinkelb ein.
  EditWinkelc.Text:=FloatToStr(Winkelc); // Fügt den Wert des Winkel gamma in das Edit-Feld EditWinkelc ein.
  EditHoehea.Text:=FloatToStr(hoeheb); // Fügt den Wert der Hoehe a in das Edit-Feld EditHoehea ein.
  EditHoeheb.Text:=FloatToStr(hoehea); // Fügt den Wert der Hoehe b in das Edit-Feld EditHoeheb ein.
  EditHoehec.Text:=FloatToStr(hoehec); // Fügt den Wert der Hoehe c in das Edit-Feld EditHoehec ein.
  EditUmkreis.Text:=FloatToStr(umkreis); // Fügt den Radius des Umkreises in das Edit-Feld EditUmkreis ein.
  EditInkreis.Text:=FloatToStr(inkreis); // Fügt den Radius des Inkreises in das Edit-Feld EditInkreis ein.
end;


so nu macht der mucken mit dem inttostr befehlen fehlermeldung:

Es gibt keine überladene Version von Inttostr, die man mit diesen argumenten aufrufen kann.


Moderiert von user profile icontommie-lie: Code- durch Delphi-Tags ersetzt.


Zuletzt bearbeitet von pump am Sa 25.09.04 19:30, insgesamt 2-mal bearbeitet
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Sa 25.09.04 18:01 
Logischerweise geht InttoStr nun nicht mehr. Benutze FloattoStr oder FloattoStrF.

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
pump Threadstarter
Hält's aus hier
Beiträge: 10

xp pro
bordland delphi 7
BeitragVerfasst: Sa 25.09.04 18:15 
jep bin ich auch grad drauf gekommen^^ so nu is aber komisch, dass die winkel immer noch falsch ausgerechent werden aber umkreis bzw inkreis sind richtig obwohl die winkel dafür ja benoetigt werden... daraus schließe ich, dass irgendwas mit den arccos befehlen falsch ist... da ich ohen das arccos den normalen cos wert raus bekomme (d.h. bei alle seiten = 2 ist cos=0,5, arccos muesste 60 sein ist aber dann 1,0471975511966)
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Sa 25.09.04 20:24 
Luckie hat folgendes geschrieben:
Die Winkelfunktionen erwarten die Werte in RAD und nicht in DEG. Entsprechende Umrechnungsfunktionen sind in der Unit Math drinne.

Lies das nochmal genau durch. :roll:

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
pump Threadstarter
Hält's aus hier
Beiträge: 10

xp pro
bordland delphi 7
BeitragVerfasst: Sa 25.09.04 20:29 
ja was isn deg bzw. rad??? kannst mir nich einfach sagen was ich umschreiben muss???

_________________
Pessimisten sind die glücklichsten Menschen. Weil sie mit ihren Erwartungen nie enttäuscht werden.
Rechtschreibfehler?!? Sind doch absicht und nur da um eure Rechtschreibkenntnisse zu prüfen...
.Chef
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1112



BeitragVerfasst: Sa 25.09.04 21:38 
deg = Grad, rad = Radiant

Der Radiantkreis hat 2*pi (rad, Einheit wird aber üblicherweise nicht genannt), der normale Kreis bekanntermaßen 360 Grad. Also ergibt sich:

1 (rad) = 180/pi Grad

1 Grad = pi/180 (rad)

_________________
Die Antworten auf die 5 häufigsten Fragen:
1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
pump Threadstarter
Hält's aus hier
Beiträge: 10

xp pro
bordland delphi 7
BeitragVerfasst: Sa 25.09.04 21:53 
nu bin ich total verwirrt,

wozu is denn dann der arccos befehl da? was muesste ich denn hier dran jetzt verändern?

winkela:=arccos((Seitea*Seitea-Seiteb*Seiteb-Seitec*Seitec)/(-2*Seiteb*Seitec));

_________________
Pessimisten sind die glücklichsten Menschen. Weil sie mit ihren Erwartungen nie enttäuscht werden.
Rechtschreibfehler?!? Sind doch absicht und nur da um eure Rechtschreibkenntnisse zu prüfen...
tommie-lie
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 4373

Ubuntu 7.10 "Gutsy Gibbon"

BeitragVerfasst: Sa 25.09.04 22:11 
pump hat folgendes geschrieben:
wozu is denn dann der arccos befehl da?
Um den Arkuskosinus auszurechnen?

ausblenden Delphi-Quelltext
1:
winkela:=radtodeg(arccos((Seitea*Seitea-Seiteb*Seiteb-Seitec*Seitec)/(-2*Seiteb*Seitec)));					

_________________
Your computer is designed to become slower and more unreliable over time, so you have to upgrade. But if you'd like some false hope, I can tell you how to defragment your disk. - Dilbert
pump Threadstarter
Hält's aus hier
Beiträge: 10

xp pro
bordland delphi 7
BeitragVerfasst: Sa 25.09.04 22:17 
juhuu danke den radtodeg befehl kannte ich nicht.. den hab ich gebracuh nu funzt alles einwandfrei...

achja und wen das interressiert hier das fertige programm:

home.arcor.de/egalmoth/projekt1.exe

_________________
Pessimisten sind die glücklichsten Menschen. Weil sie mit ihren Erwartungen nie enttäuscht werden.
Rechtschreibfehler?!? Sind doch absicht und nur da um eure Rechtschreibkenntnisse zu prüfen...