Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Sinus, Cosinus, Tangens
delphimaus - Mo 09.02.09 13:14
Titel: Sinus, Cosinus, Tangens
Hallo ihr lieben Programmierfreunde. Also ich habe vor 2 Monaten angefangen mit mich mit Delphi (spez. Delphi 2005) zu beschäftigen. Bin grade dabei mir einen Taschenrechner zusammenzubasteln. Die Grundfunkitonen wie Addition, Subtraktion, Multiplikation und Division kann er schon. Nun hänge ich allerdings bei Sinus, Cosinus und Tangens fest. Also der Pc soll wenn ich bsw. auf den Button 'Sinus' klicke, und davor eine Zahl im Edit Fenster eingegeben habe, den Sinus davon ausgeben.
Könnt ihr mir vielleicht einen Befehl dafür geben? Habe wirklich schon viel ausprobiert, aber es hat keinen Sinn :)
Liebe Grüße, die Mausi
ene - Mo 09.02.09 13:18
Hi,
Cos() und Sin() heißen die Funktionen. Reicht das?
delphimaus - Mo 09.02.09 13:39
Danke, aber eigentlich reicht das nicht, ich weiss nicht in welchem Zusammenhang ich das eingeben muss. Bin halt noch Anfängerin:)
Xentar - Mo 09.02.09 13:52
Wie hast du denn bisher z.B. das Addieren gemacht? So ähnlich geht das dann auch mit Sinus. Zeig mal den Quellcode, den du bisher hast.
delphimaus - Mo 09.02.09 13:57
Also für die Addition hab ich folgendes hingeschrieben:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| procedure TForm1.Button2Click(Sender: TObject); var zahl1, zahl2, summe : real; begin zahl1 := StrTofloat(edit1.text); zahl2 := StrTofloat(edit2.text); summe := zahl1-zahl2; label1.caption := floattostrF(summe,ffFixed,8,3); end; |
Moderiert von
Kha: Delphi-Tags hinzugefügt
Xentar - Mo 09.02.09 14:15
Zitat: |
summe := zahl1-zahl2; |
Das ist aber nicht die Summe ;)
Die neuen Funktionen gehen so ähnlich:
spawn89 - Mo 09.02.09 14:15
:welcome: tach,
um z.B. den Kosinus zu berechnen kannst du die Funktion "Cos()" benutzen.
Wenn du darauf F1 drückst bekommst du weitere Info´s zur Benutzung.
z.B.:
- die Unit math muss eingebunden sein
- Gibt einen Float Wert zürück
- Parameter
- etc
Was jedoch etwas verwirrend ist, sind die Funktionen wie RadToDeg(). Delphi hat intern irgendwelche anderen Werte.
(da musst du einfach mal rumtesten, mach ich da auch immer :| )
Ansonsten empfehle ich ein paar Tutorials auf
dsdt.info [
http://www.delphi-treff.de/tutorials/grundlagen/] für den Anfang.
Edit: *schnell verbuddel, sowas passiert wenn man kein Delphi zur Hand hat*
Jakob_Ullmann - Mo 09.02.09 15:43
Nein! Ich schreib es heute zum zweiten Mal: Sin() und Cos() sind beide in der System definiert!
Und zum Thema RadToDeg: Delphi arbeitet mit dem Bogenmaß (Rad wie Radians). Wir wollen aber eventuell ein Ergebnis im Gradmaß (Deg wie Degrees). Delphi erwartet als Argument einen Wert im Bogenmaß, wenn der User aber Gradmaß eingibt, muss es also heißen:
Delphi-Quelltext
1:
| sinus := sin(DegToRad(zahl1)); |
Übrigens: Tan() ist in der Math definiert. Zur Not kann man den aber auch mit sin / cos berechnen.
edit:
http://de.wikipedia.org/wiki/Bogenma%C3%9F
edit2: Man braucht DegToRad() eigentlich nichtmal. Man könnte auch schreiben:
Delphi-Quelltext
1:
| sinus := sin(zahl1 / 180 * Pi) |
delphimaus - Mo 16.02.09 13:51
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| procedure TForm1.Button16Click(Sender: TObject); var a,sinus:integer; begin a:=strtoint(edit1.Text); sinus :=sin(sin(a / 180 * Pi)); label1.Caption:=inttostr(sinus); |
hab das jetzt soweit, aber es funktioniert nicht. könnt ihr mir sagen wo der fehler liegt?
Moderiert von
Kha: Delphi-Tags hinzugefügt
Horschdware - Mo 16.02.09 14:02
Zitat: |
Delphi-Quelltext 1:
| sinus :=sin(sin(a / 180 * Pi)); | |
schau doch mal genau, was du hier machst.
Du bestimmst den Sinus von Sinus...
Doppelt gemoppelt ;-)
Nico72 - Mo 16.02.09 14:13
delphimaus hat folgendes geschrieben : |
procedure TForm1.Button16Click(Sender: TObject);
var a,sinus:integer;
begin
a:=strtoint(edit1.Text);
sinus :=sin(sin(a / 180 * Pi));
label1.Caption:=inttostr(sinus);
|
Ein Sinus liegt zwischen -1 und 1. Deswegen hat Sin() auch einen Rückgabewert vom Typ Extended. Du weist das Ergebnis aber einer Integer-Variable zu. Das sollte Delphi nicht mal kompilieren, sondern eine Fehlermeldung bringen (Inkompatible Typen...)
Den doppelten Aufruf von Sin() hat ja Horschdware schon erwähnt.
Jakob_Ullmann - Mo 16.02.09 15:00
Doch, das compiliert Delphi. Nehmen wir mal an, a sei 0, dann wäre sin(a) auch 0, und damit wäre es nicht inkompatibel.
jaenicke - Mo 16.02.09 15:08
Jakob_Ullmann hat folgendes geschrieben : |
Doch, das compiliert Delphi. Nehmen wir mal an, a sei 0, |
Das kann Delphi aber schlecht annehmen beim Kompilieren. :lol:
Und deshalb kompiliert das nicht erfolgreich. Sin gibt nun einmal keinen Integerwert zurück.
Jakob_Ullmann - Mo 16.02.09 15:12
Hmm, ich dachte, der hätte das schonmal so compiliert. :o :gruebel:
Dude566 - Mo 16.02.09 18:30
:D
Sorry :wink: , aber die Summe gibt es bei der Addition und nicht der Subtraktion.
Achja und die Funktionen gehen glaube ich so:
delphimaus - Mo 23.02.09 12:40
dumme frage: was ist daran immernoch falsch?
ich blick einfach nicht durch!
function sin(a:extended):extended;
begin
end;
procedure TForm1.Button16Click(Sender: TObject);
var a,sinus:integer;
begin
a:=strtoint(edit1.Text);
sinus :=sin(a / 180 * Pi);
label1.Caption:=inttostr(sinus);
end;
jaenicke - Mo 23.02.09 12:58
Wofür erstellst du denn eine eigene leere Funktion sin? :shock:
Hast du die Unit Math nicht oben in die uses Liste eingetragen, so dass die richtige Funktion Sin nicht gefunden wurde? ;-)
delphimaus - Mo 23.02.09 13:24
danke, es funktioniert, auch bei cosinus und tangens. wie toll.
delphimaus - Mo 23.02.09 13:33
achso, eine frage hab ich noch, wie mach ich das jetzt umgekehrt, also wenn ich zum beispiel 0,5 eingebe un dann den button sin^-1 klicke dasses dann 30 grad ausgibt.
jfheins - Mo 23.02.09 14:29
Als Beispiel:
RadToDeg(ArcSin(0.5)) = 30 ;)
Timosch - Mo 23.02.09 14:43
delphimaus hat folgendes geschrieben : |
achso, eine frage hab ich noch, wie mach ich das jetzt umgekehrt, also wenn ich zum beispiel 0,5 eingebe un dann den button sin^-1 klicke dasses dann 30 grad ausgibt. |
Du willst die Kehrwertfunktionen zu Sinus und Kosinus? Sekans und Kosekans. Nennen sich in Delphi sec und csc. Beides ist in der Unit math definiert.
Ups, grad das von jfheins gelesen. Sie sucht tatsächlich Arcsin und Arccos.
delphimaus - Mo 23.02.09 21:07
danke, klappt!
Jakob_Ullmann - Mo 23.02.09 21:13
Zur Info: sin^-1 <> arcsin. Was du gesucht hast, war tatsächlich arcsin, sin^-1 ist Taschenrechner-'Slang' (und die Interpretation sin^-1 = csc ist auch richtig). :wink:
jfheins - Di 24.02.09 00:06
Wenn wir schon mit Infos um uns werfen:
f^-1 ist eine gängige Bezeichnung für die Umkehrfunktion von einer Funktion f (siehe auch
Wikipedia [
http://de.wikipedia.org/wiki/Umkehrfunktion])
In diesem Sinne wäre (streng genommen) arcsin(x) == sin^-1(x) != sin(x)^-1 == 1/sin(x)
Aber es wusste ja zum Glück jeder, was gemeint war da bei 0,5 ein Ergebnis von 30° herauskommen sollte :P
PCschnecke007 - Do 26.02.09 14:33
hallo.
ich hab das gepräch zwischen euch verfolgt, und hab es gleich mal ausprobiert. bei mir klappt das leider nicht so gut wie bei delphi-maus.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| procedure TForm1.Button24Click(Sender: TObject); var a,erg:real; begin a:=strtofloat(edit1.Text); erg:=arcsin(a); label1.caption:=floattostr(erg); end; |
wo ist der fehler?
Moderiert von
Kha: Delphi-Tags hinzugefügt
Xentar - Do 26.02.09 14:42
Welcher Fehler erscheint denn?
Boldar - Do 26.02.09 14:43
der Fehler liegt z.B. in den fehlenden code-Tags:
Quelltext
1: 2:
| <div class="syntaxContainer"> <div class="syntaxTitle genmed"> <b>Quelltext</b> </div> <div class="syntax"> <table cellspacing="0" cellpadding="0"> <tr> <td valign="top" style="text-align: right; padding-right: 3px; border: #DBE4EB solid; border-width: 0px 1px 0px 0px;"> <pre>1: </pre> </td> <td valign="top" style="width: 100%; padding-left: 3px;"> <pre class="sourcecode"> Quellcode </pre> </td> </tr> </table> </div></div> |
oder
Delphi-Quelltext
1: 2:
| <div class="syntaxContainer"> <div class="syntaxTitle genmed"> <b>Delphi-Quelltext</b> </div> <div class="syntax"> <table cellspacing="0" cellpadding="0"> <tr> <td valign="top" style="text-align: right; padding-right: 3px; border: #DBE4EB solid; border-width: 0px 1px 0px 0px;"> <pre>1: </pre> </td> <td valign="top" style="width: 100%; padding-left: 3px;"> <pre class="sourcecode"> delphi-code </pre> </td> </tr> </table> </div></div> |
Der Teil des Quelltextes scheint erstmal korrekt, aber du müsstest schon sagen, was nicht funktioniert und evtl. mehr code zeigen...
PCschnecke007 - Do 26.02.09 14:45
also starten tuts erstmal, aber wenn ich dann z.b 0,5 eingebe und aud den button klicke, kommt dann die meldung "ungültige gleitkommaoperation".
Boldar - Do 26.02.09 14:53
Boldar hat folgendes geschrieben : |
der Fehler liegt z.B. in den fehlenden code-Tags:
Quelltext 1: 2:
| <div class="syntaxContainer"> <div class="syntaxTitle genmed"> <b>Quelltext</b> </div> <div class="syntax"> <table cellspacing="0" cellpadding="0"> <tr> <td valign="top" style="text-align: right; padding-right: 3px; border: #DBE4EB solid; border-width: 0px 1px 0px 0px;"> <pre>1: </pre> </td> <td valign="top" style="width: 100%; padding-left: 3px;"> <pre class="sourcecode"> Quellcode </pre> </td> </tr> </table> </div></div> |
oder
Delphi-Quelltext 1: 2:
| <div class="syntaxContainer"> <div class="syntaxTitle genmed"> <b>Delphi-Quelltext</b> </div> <div class="syntax"> <table cellspacing="0" cellpadding="0"> <tr> <td valign="top" style="text-align: right; padding-right: 3px; border: #DBE4EB solid; border-width: 0px 1px 0px 0px;"> <pre>1: </pre> </td> <td valign="top" style="width: 100%; padding-left: 3px;"> <pre class="sourcecode"> delphi-code </pre> </td> </tr> </table> </div></div> |
|
--> Das hast du aber schon gelesen?
Das kann z.B. Daran liegen, dass du , und . vertauscht hats, das unterscheidet sich je nach systemeinstellung.
oder du hast die 0,5 in das falsche edit eingegeben, oder du klickst den falschen button...
Da müsste man schon mehr sehen...
PCschnecke007 - Do 26.02.09 14:57
und wo soll ich das hin schreiben, das mit dem und
jaenicke - Do 26.02.09 14:57
Das ist aber eigentlich korrekt, in welcher Zeile tritt der Fehler denn auf? Also wenn du einen Haltepunkt auf die erste Zeile setzt und zeilenweise durchgehst (F8, wenn der Debugger an der Zeile ankommt).
Boldar hat folgendes geschrieben : |
Das kann z.B. Daran liegen, dass du , und . vertauscht hats, das unterscheidet sich je nach systemeinstellung. |
Dann wäre die Meldung normalerweise, dass der Wert 'xy' kein gültiger Gleitkommawert sei. Das ist es ja, was mich etwas wundert.
Der Fehler hört sich eher danach an, als wäre die Eingabe 1,5 oder so gewesen, was ja natürlich falsch wäre. Bist du sicher, dass in dem richtigen Edit ein gültiger Wert wie 0,5 stand?
PCschnecke007 - Do 26.02.09 15:02
es stand ja das, dass das eine ungültige gleikommaoperation ist...
und wo muss diesen code bzw /code hin?
ich bin mir sicher dass ich immer 0,5 geschrieben habe und auch ins richtige edit fenster.
jaenicke - Do 26.02.09 15:07
PCschnecke007 hat folgendes geschrieben : |
es stand ja das, dass das eine ungültige gleikommaoperation ist... |
Aber in welcher Zeile tritt die auf? Schreib einfach mal zwischen die Zeilen jeweils ein ShowMessage, und dann sag mal nach welchem der Fehler auftritt. (Wenn du mit dem Debugger anscheinend noch nicht klar kommst, was aber wichtig zu lernen wäre...)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.Button24Click(Sender: TObject); var a, erg: Real; begin ShowMessage('0'); a := StrToFloat(Edit1.Text); ShowMessage('1'); erg := ArcSin(a); ShowMessage('2'); Label1.Caption := FloatToStr(erg); ShowMessage('3'); end; |
PCschnecke007 hat folgendes geschrieben : |
und wo muss diesen code bzw /code hin? |
Was er meinte ist hier im Forum, dass du Delphi-Tags benutzen solltest, damit der Delphi-Code auch wie Delphi-Code aussieht.
Dafür schreibst du deinen Quelltext so:
Quelltext
1:
| <span class="inlineSyntax"><span class="codecomment">{PROTECTTAGc0cb673cca3de9968b329997df973147}</span></span> |
PCschnecke007 - Do 26.02.09 15:14
wenn ich 0.5 schreibe, dann kommt ne fehlermeldung, wenn ich auf den button sin^-1 klicke.
wenn ich aber 0,5 schreibe, dann kommt ein falschen ergebnis raus (0,52..)
PCschnecke007 - Do 26.02.09 15:31
Delphi-Quelltext
1:
| erg:=DegToRad(arccos(a)); |
meinst du so?
da kommt trotzdem das ergebmis in bogenmaß raus.
Moderiert von
Narses: Delphi-Tags hinzugefügt
jaenicke - Do 26.02.09 15:38
Was habe ich geschrieben und was du? ;-)
Du hast geschrieben DegToRad, wofür wird das wohl stehen... Richtig: Degrees To Radiant...
Du willst es aber doch umgekehrt.
PCschnecke007 - Do 26.02.09 15:43
arg..
hat sich erledigt!
Anfänger500 - Do 18.06.09 09:19
könnte ich deine gesamte unit mal sehen?
jaenicke - Do 18.06.09 09:27
Hallo und :welcome: im Forum!
Was interessiert dich denn? Wenn du konkrete Probleme hast, könntest du auch eine eigene Frage aufmachen. ;-)
Lungenfilter - Do 18.06.09 09:27
Ja da bin ich auch ganz heiß drauf!
jaenicke - Do 18.06.09 09:29
Was wird das jetzt? Doppelaccount? :roll:
Zufällig wird ja nicht ausgerechnet so schnell direkt hintereinander ein anderer neuer Nutzer diesen Beitrag finden...
Krischa - Do 18.06.09 09:36
Oder die beiden sitzen in der Schule und die Klasse muss einen Taschenrechner programmieren.
Lungenfilter - Mo 29.06.09 14:44
Krischer du hast es erfasst. Aber nun ist es eh zu spät!!!
Naja hams aber trotzdem noch rechtzeitig feritg bekommen.
Auch ohne eure Hilfe ihr Freaks!
Delete - Mo 29.06.09 14:57
Also bitte!
Zitat: |
Auch ohne eure Hilfe ihr Freaks! |
Nicht jeder , der programmieren kann , ist gleich ein Freak!Ich weiß nicht, ob das böse gemeint war , aber es ist nicht besonders freundlich Leute , die einen helfen wollten , zu beleidigen!
MBG ;)
Lungenfilter - Mo 29.06.09 23:20
Hey Mr. Klugmann!!!
Grüß mir den Keksdosenmann!!!
Zieh deinen Hut an!!!
Greif nicht den Nahen Osten an!!!
Dunkel - Di 30.06.09 00:12
Lungenfilter hat folgendes geschrieben : |
Hey Mr. Klugmann!!!
Grüß mir den Keksdosenmann!!!
Zieh deinen Hut an!!!
Greif nicht den Nahen Osten an!!! |
Hehe... :lol:
Ein Pimpf hat versucht einen coolen Spruch zu reißen. Wie süß... :roll:
Aber hey, Pimpf, Glückwunsch zum selbstständigen Lösen der gestellten Aufgabe! :zustimm:
Delete - Di 30.06.09 14:05
Noch besser , das reimt sich sogar!
Dafür bekommste noch nen Extra-Punkt!
MfG
BenBE - Di 30.06.09 14:24
Ich setz Dir sogar ein Denkmal auf die Trollwiese bei Heise und binde dich dort dann an, damit Dir dein Denkmal nicht abhanden kommt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!