Autor |
Beitrag |
pump
Hält's aus hier
Beiträge: 10
xp pro
bordland delphi 7
|
Verfasst: 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:
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, 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 public 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); seiteb:=StrToInt(EditSeiteb.text); seitec:=StrToInt(EditSeitec.text); winkela:=round(arccos((Seitea*Seitea-Seiteb*Seiteb-Seitec*Seitec)/(-2*Seiteb*Seitec))); winkelb:=round(arccos((Seiteb*Seiteb-Seitec*Seitec-Seitea*Seitea)/(-2*Seitec*Seitea))); winkelc:=round(arccos((Seitec*Seitec-Seitea*Seitea-Seiteb*Seiteb)/(-2*Seitea*Seiteb))); 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; flaeche:=round(0.5*seitea*seiteb*sin(3.1415/180*(round(arccos((Seitec*Seitec-Seitea*Seitea-Seiteb*Seiteb)/(-2*Seitea*Seiteb)))))); EditFlaeche.text:=IntToStr(Flaeche); EditUmfang.text:=IntToStr(Umfang); EditWinkela.Text:=IntToStr(Winkela); EditWinkelb.Text:=IntToStr(Winkelb); EditWinkelc.Text:=IntToStr(Winkelc); EditHoehea.Text:=IntToStr(hoeheb); EditHoeheb.Text:=IntToStr(hoehea); EditHoehec.Text:=IntToStr(hoehec); end;
procedure TForm1.BeendenClick(Sender: TObject); begin close; 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 Christian S.: Code- durch Delphi-Tags ersetzt.
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 454
Win 98, XP Prof
D3 Prof, D2005 Prof
|
Verfasst: 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:
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
|
Verfasst: 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 
Hält's aus hier
Beiträge: 10
xp pro
bordland delphi 7
|
Verfasst: 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:
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); seiteb:=StrToInt(EditSeiteb.text); seitec:=StrToInt(EditSeitec.text); winkela:=arccos((Seitea*Seitea-Seiteb*Seiteb-Seitec*Seitec)/(-2*Seiteb*Seitec)); winkelb:=arccos((Seiteb*Seiteb-Seitec*Seitec-Seitea*Seitea)/(-2*Seitec*Seitea)); winkelc:=arccos((Seitec*Seitec-Seitea*Seitea-Seiteb*Seiteb)/(-2*Seitea*Seiteb)); hoehea:=seiteb*sin(winkelc); hoeheb:=seitec*sin(winkela); hoehec:=seitea*sin(winkelb); umfang:=seitea+seiteb+seitec; flaeche:=hoehea*seitea/2; umkreis:=seitea/(2*sin(winkela)); inkreis:=seitec * sin(winkela / 2) * sin(winkelb / 2) / sin((winkela + winkelb) / 2); EditFlaeche.text:=FloatToStr(Flaeche); EditUmfang.text:=FloatToStr(Umfang); EditWinkela.Text:=FloatToStr(Winkela); EditWinkelb.Text:=FloatToStr(Winkelb); EditWinkelc.Text:=FloatToStr(Winkelc); EditHoehea.Text:=FloatToStr(hoeheb); EditHoeheb.Text:=FloatToStr(hoehea); EditHoehec.Text:=FloatToStr(hoehec); EditUmkreis.Text:=FloatToStr(umkreis); EditInkreis.Text:=FloatToStr(inkreis); 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 tommie-lie: Code- durch Delphi-Tags ersetzt.
Zuletzt bearbeitet von pump am Sa 25.09.04 19:30, insgesamt 2-mal bearbeitet
|
|
.Chef
      
Beiträge: 1112
|
Verfasst: 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 
Hält's aus hier
Beiträge: 10
xp pro
bordland delphi 7
|
Verfasst: 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
      
Beiträge: 1112
|
Verfasst: 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. 
_________________ 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 
Hält's aus hier
Beiträge: 10
xp pro
bordland delphi 7
|
Verfasst: 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
      
Beiträge: 1112
|
Verfasst: 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 
Hält's aus hier
Beiträge: 10
xp pro
bordland delphi 7
|
Verfasst: 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
      
Beiträge: 4373
Ubuntu 7.10 "Gutsy Gibbon"
|
Verfasst: Sa 25.09.04 22:11
pump hat folgendes geschrieben: | wozu is denn dann der arccos befehl da? |
Um den Arkuskosinus auszurechnen?
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 
Hält's aus hier
Beiträge: 10
xp pro
bordland delphi 7
|
Verfasst: 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...
|
|