![]() |
Pascal Sinus/Cosinus
Liebe Community,
Ich lerne seit einigen Wochen Pascal. Momentan codiere ich einen Algorithmus zur Errechnung der fehlenden Seiten eines allgemeinen Dreiecks. Ich arbeite mit Lazarus v1.0.1.4 und verwende Grafische LCL-Oberflächen. Nun habe ich folgendes Problem: Ich möchte den Cosinus eines Winkels berechnen, ohne den Winkel im Bogenmaß angeben zu müssen. Sprich, der Benutzer dieser Anwendung soll einen Winkel in Grad angeben können und von diesem soll der Cosinus berechnet werden. Ich weiß leider nicht, wie man den Cosinus eines Winkels mit Pascal berechnet. Alle vermeintlichen Lösungen, die ich im Internet fand, halfen nicht :cry:. Es wäre nett, wenn mir jemand erklären könnte, wie man den Sinus, bzw. Cosinus eines Winkels mit Pascal berechnen kann. Gruß MrGreEn |
Den Cosinus eines Winkels errechnet man immer gleich.
Warum sollte man diesen in Pascal auch anders errechnen? Was hast du denn bereits versucht? |
Du willst ernsthaft behaupten, dass du nicht in der Lage bist, 2 Begriffe bei google zu benutzen und den ersten Treffer anzuklicken?
Dann überleg dir mal ganz schnell, wie man den sinus und cosinus in mathematischen Formeln schreibt und wie rad in Grad umgerechnet wird. Wenn du auch nicht rausfinden kannst, frage ich mich, warum du das Atmen nicht vergisst... |
Zitat:
Wenn ich nun den inn Deg eingelesenen Winkel in Rad umrechne und diesen entstandenen Wert dann wieder in Deg umwandle, kommt jedoch Stuss raus. Ich versuche lediglich den Kosinussatz anzuwenden, jedoch bquadrat:=a*a+c*c -2*a*b* Cos (Winkel); Umrechnung DegToRad: winkelRad:=((2*pi)/360)*(WinkelDeg); Umrechnung RadToDeg: wert_deg:=(360/(2*pi))*wert_rad; gehen wir von 60 Grad aus. 60°inRad=2*pi/360*WinkelDeg=1,04719... Kann ich den COsinus von 1,04719 Pi berechnen und diesen dann wieder in Deg umwandeln? Pascal kann nur den Cosinus bzw Sinus, Tangens eines Winkels in Rad errechnen!!!! Außerdem handelt es sich um ein Allgemeines Dreieck, da kann ich die Herleitung des Sinus,Cosinus (GK/Hyp=Sin) Außerdem erhalte ich, wenn ich den COsinus eines Rad Winkels errechne immer 0,999... , egal welcher Rad Winkel es ist... |
Zitat:
Ich rede keinen STuss, Pascal kann nur den Cosinus eines Winkels in Rad errechnen.:( |
Du kannst es gerne ausprobieren...
Quelltext von Probe Cosinus eines Winkels in Degree: program project1; {$mode objfpc}{$H+} {$APPTYPE CONSOLE} uses sysutils, windows, Console,math; VAR gamma,cosa:double; BEGIN ReadLn (gamma); Cosa:=Cos (gamma); WriteLn (cosa:2:1); ReadLn (); End. Es kommt bei Cos 60° -1 raus, obwohl es 0,5 sein sollte. Bei 45° kommt 0,5 raus, obwohl es 0,707 sein sollte... |
Du willst ernsthaft behaupten, dass Du einen einfachen mathematischen Fehler in einer Programmiersprache entdeckt hast, die zuvor bereits millionenfach von anderen eingesetzt wurde?
Die Frage ist doch, was ist wahrscheinlicher? Dass Pascal eine Grundrechenfunktion nicht beherrscht oder dass Deine kognitiven Fähigkeiten stark begrenzt sind? |
Die Programmiersprache ist aus dem Jahr 1972. Möglicherweise rechnete man in der Zeit noch nicht mit dem WInkel in deg, sondern mit dem Bogenmaß.
|
@NetWebs: Falls du es ausprobieren möchtest, hier der Downloadlink für Lazarus:[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]
Mein Quellcode: program project1; {$mode objfpc}{$H+} {$APPTYPE CONSOLE} uses sysutils, windows, Console,math; VAR gamma,cosa:double; BEGIN ReadLn (gamma); Cosa:=Cos (gamma); WriteLn (cosa:2:1); ReadLn (); End. Dauert vll. 2 Minuten. Und hier nocheinmal das Pascal-Wiki. Es beschreibt, dass der Cos nur bei Bogenmaßen eingesetz werden kann:"cos cosine of a RADIAN measure ". |
Zitat:
Ist dir klar was für einen Schwachsinn du redest? Ist Cosinus eine Rechenfunktion die in die CPU eingebrannt ist? |
Das was ich eigentlich sage ist, dass der Cosinus in Pascal nicht auf Degree Zahlen (Ganz normale Winkel) angewendet werden kann.
Der Cosinus kann daher nicht angewendet werden, da die Funktion nicht auf die normalen Winkel erweitert wurde. Wie dem auch sei. Fakt ist, dass bei mehreren Testversuchen die falschen Werte berechnet wurden. Siehe Quelltext. WIe kann das sein, wenn doch der Cosinus auf normale Gradzahlen angewendet werden kann? Cos von 60 ist normalerweise 0,5. Jedoch gibt mein Algorithmus -1,0 aus?!?! |
Dann rechne die Winkel doch einfach um.
|
Manche Menschen sind echt zu dumm zum Scheißen. DU MUSST DEN WINKEL VON GRAD IN BOGENMß UMRECHNEN!!! Sorry, aber das muss sein. Es wurde etliche Male erwähnt, dass du umrechnen musst.
Code:
function Deg2Rad(x : real) : real; Code:
b = sqrt(sqr(a) + sqr(c) - 2*a*c*cos(Deg2Rad(Winkel))); |
Ich hab's endlich geschafft. Ich habe schon die ganze Zeit umgerechnet. Der Fehler war eine falsch gesetzte Klammer, die einen Error zur Folge hatte.
@cortez: Sobald ich function einsetze, wird "illegal expression" ausgegeben. Habe es nun wie folgt gelöst: Code:
Winkel1:=WinkelDeg * (Pi / 180); Code:
b:=((a * a) + (c * c)) -2*a*c*cos(Winkel1); Ich danke euch für eure Geduld. ;) Gruß MrGreEn |
lass mich raten,du hast in deiner Main Funktion versucht, eine neue Funktion zu deklarieren. Dann ist der Fehler auch kein Wunder. Die Dekleration muss vor der Implementation erfolgen.
Code:
function Deg2Rad(x : real) : real; |
Free Pascal, auf dem Lazarus aufsetzt, kennt in der 'math' unit Funktionen, um Winkel umzurechnen [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]
Dort gibts auch die forward Deklaration [Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...] |
Moin nochmal,
es ist ein neues Problem aufgetreten, welches ich bis jetzt nicht lösen konnte. Wähle ich einen meiner 3 RadioButtons an, bevor ich meine Werte in die TEdit's eingebe, so poppt ein Error auf. Nun möchte ich einen der 3 RadioButtons auswählen können, bevor ich die Werte eingebe. Ich habe es schon mit Code:
If RadioButton2.checked=true And (Edit1.text:='') Then ShowMessage ('....'); |
Warum machst du die Zuweisung Edit1.text:=''? Du willst einfach wissen, ob der Inhalt einem leeren String entspricht, was du mit Edit1.text='' erreichst.
Außerdem warum hast du eine redundante Abfrage drinnen? Dein RadioButton2.checked liefert bereits einen boolschen Wert zurück, je nachdem ob er gecheckt ist oder nicht. Mit dem RadioButton2.checked=true fragst du nochmal, ob der wert true entspricht. Das Ganze hat genau 0 Einfluss auf das Ergebnis, verschwendet aber Ressourcen und macht den Code unübersichtlich. |
Ich habe es auch schon so probiert:
If Edit1.text:= '' Then Showmessage ('Bitte zuerst Werte angeben.'); Dort erscheint folgende Fehlermeldung in der Nachrichtenbox:"unit3.pas(72,11) Error: Boolean expression expected, but got "untyped" ". (72,11) ist Edit1(hier).text |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr. |
Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.