Entwickler-Ecke

Sonstiges (Delphi) - Mathe Programm


Palmetshofer - Mo 23.09.02 17:25
Titel: Mathe Programm
Hi erstmal!

Es handelt sich hier um ein Programm mit dem man karthesiche Koordinaten in Polarkoordinaten umwandeln kann. Wie man das alles rechnet weis ich, aber ich brauch noch die Befehle dazu.

Also ich brauch nur ein paar befehle:

1. Ich brauche den befehl für sin, cos und tan und deren umkehrbefehle.
2. Ich muss wissen wie man zwischen DEG, RAD und GRAD umstellen kann.
3. Ob man mit den ² Tasten arbeiten kann oder im compiler etwas anderes eingeben muss wie z.B.: ^2 oda sowas!!


Danke für eure Hilfe im voraus!!


Fabian - Mo 23.09.02 17:40

Hallo erstmal

1. Um die Befehle für sin, cos tan usw. zur Verfügung zu haben musst du erst die Unit math in deine uses Klausel aufnehmen. Leider wurde diese Unit nicht in allen Delphi Versionen mitgeliefert. Sollte diese Unit bei dir nicht vorhanden sein musst du dich nach einer Alternative umsehen.
Wenn diese Unit bei dir vorhanden ist lauten die Befehle sin(x), cos(x), tan(x), arcsin(x), arccos(x), arctan(x) um die Entsprechenden Werte für x zu errechnen. Beachte das x als Bogenmaß (Radiant) angegeben werden muss.

2. Um zwischen Deg, Rad und Grad umzurechnen stellt Delphi ebenfalls einige Funktionen zu verfügung. Wie z.B. DegToRad(x) um von Deg in Rad umzurechnen. Dementsprechend DegToGrad, RadToDeg, GradToRad usw.

3. Um das Quadrat einer Zahl zu erhalten musst du soweit ich weiß entweder die Power Funktion (Auch in der Unit math enthalten) benutzen

x:=Power(a, 2) um die Quadratzahl von a zu errechnen

x:=Power(a, n) um a hoch n zu berechnen.

oder du schreibst selbst eine Funktion die das Quadrat einer Zahl berechnet.


Quelltext
1:
2:
3:
4:
function quadrat(a : Extended): Extended;
begin
  result:=a*a;
end;


MathiasH - Mo 23.09.02 17:49

such mal nach dem Befehl arctan2, der ist dafür die allround-Lösung, aber pass auf: y vor x!!!

MathiasH


Palmetshofer - Mo 23.09.02 17:49

Danke vielmals für die schnelle antwort !! da hab ich noch eine frage !! was ist die grundeinstellung in delphi bei sin() usw ?


MathiasH - Mo 23.09.02 17:53

Fabian hat folgendes geschrieben:

oder du schreibst selbst eine Funktion die das Quadrat einer Zahl berechnet.

schon mal was von qrt gehört, warum immer gleich so kompliziert???
und X^Y versteht der Compiler glaub ich, ² oder ³ nicht

MathiasH


Palmetshofer - Mo 23.09.02 18:08

hmm ok

aber ich wollt noch wissen was stadtart für sin() ist (Deg, rad o. Grad)?
und wie zieht man wurzeln??


LCS - Di 24.09.02 07:25

Hi
standardmässig arbeitet Delphi immer mit RAD. Wenn du die Wurzeln nicht von deinem Zahnarzt ziehen lassen willst (made in Kalau :lol: ) nimm SQRT.
Kleiner Tip: Wenn du in der Onlinehilfe eine Funktion anzeigen lässt, gibts da immer einen Verweis auf die Kategorie. Da stehen dann alle weiteren Funktionen dieser Art 8)
Gruss Lothar


Palmetshofer - Di 24.09.02 15:46

Hmm bei mir kommt wenn ich das hier mache:


Quelltext
1:
Edit1.Text := FloatToStr(RadToDeg(10 * Cos(30)));                    


88, irgendwas heraus aber es sollte 5 herauskommen!!
Was mach ich falsch??


Ex0rzist - Di 24.09.02 16:15

Hallo Palmetshofer,

es ist alles richtig, was Delphi berechnet.
Du musst genau aufpassen, wo du Bogenmaß und wo du Grad brauchst.

Bei dir:

cos(30) Das ist Bogenmaß! Ergebnis: 0.1543
Das ganze nimmst du mal Zehn. Ergebnis: 1.543

Aber erst dann rechnest du von Bogenmaß in Grad um.
--> Also: (1.543*180)/PI --> Ergebnis: 88.38.

Ist also alles richtig.

Und wie willst du auf 5 kommen?
cos(30) ist bei mir (in Gradmaß) 0.866

___________

Ex0rzist


Ex0rzist - Di 24.09.02 16:17

Achso ich sehe gerade. Du kommst nur auf 5, wenn du statt Cosinus den Sinus verwendest. Dann kommt es hin.
Aber auch nur, wenn du peinlichst genau auf Bogenmaß und Gradmaß achtest. :wink:

btw: DEG == Grad :wink:

________

Ex0rzist


Palmetshofer - Di 24.09.02 17:23

Um es gleich vorweg zu nehmen!!

DEG is NICHT Grad!!!

Deg = 360°
GRAD = 400° Wird in der vermessung gebraucht!!

Hmm ich werd mich da noch ein bissal spielen!!´

Hmm könnte mich mit Cos und sin täuschen aber meines erachtens kann sin nicht größer sein als 1 !! ! ists auch nur bei 90° !!!!!!!


Ex0rzist - Di 24.09.02 18:00

Du meinstest mit Grad bestimmt Neugrad. Das geht bis 400.
Dann habe ich dich eben missverstanden. Ich meinte Grad als deutsches Wort für degree (bis 360).

Wie auch immer.

Mit dem Ergebnis 5 nahm ich Bezug auf deine Beispielfunktion.
Mir ist schon klar, dass Sinus und Cosinus nicht größer als eins sein können. Aber du hattest ja noch mit 10 multipliziert. Daher 5.

_____________

Ex0rzist


Palmetshofer - Di 24.09.02 18:46

Hmm Habe mit zehn multipliziert weil wenn der Punkt P die koordinaten

P[10;30°] Hat muss man das so machen!!
Formel:

r * cos x°

oder eben sin!


Ex0rzist - Di 24.09.02 19:00

Woher soll ich denn bitte wissen, was du für Punkte hast?

Gehe bitte etwas sparsamer mit Ausrufezeichen um. Man hat immer den Eindruck, dass man angebrüllt wird.
Oder ist das wirklich so?


_____________

Ex0rzist


Tante - Mi 25.09.02 10:30

So, jetzt mische ich mich hier auch mal ein. :)
Zitat:


Edit1.Text := FloatToStr(RadToDeg(10 * Cos(30)));



Ich denke, der grundsätzliche Fehler ist, dass Du RadToDeg falsch anwendest.

Weil nicht das Ergebnis von cos(x) ist in Radiant, oder Degree angegeben, sondern x ist entweder Radiant oder Degree. Das Ergebnis ist in jedem Fall einfach nur eine Zahl, ohne Einheit. Deswegen macht es auch keinen Sinn, diese Zahl dann später mit RadToDeg umzurechnen
Sondern Du willst doch die 30° in Radiant umrechnen, damit die Cosinus-Funktion (oder von mir aus auch die Sinus-Funktion) dann richtig rechnen.

Es muß also heißen:

Quelltext
1:
Edit1.Text := FloatToStr(10 * Cos(DegToRad(30)));                    


Und wenn Du dann noch statt Cosinus den Sinus nimmst (wie Ex0rzist schon sagte), dann kommst Du auch auf Deine 5.
Also, um Mißverständnisse zu vermeiden:

Quelltext
1:
Edit1.Text := FloatToStr(10 * Sin(DegToRad(30)));                    


Okay? :D


Palmetshofer - Mi 25.09.02 17:54

Danke für deine antwort!

Hab das programm schon fast fertig.
Hab trotzdem noch ne Frage:

Was ist die umkehrfunktion für Cos, Sin und Tan in delphi?

Danke


Ex0rzist - Mi 25.09.02 18:14

Palmetshofer hat folgendes geschrieben:
Was ist die umkehrfunktion für Cos, Sin und Tan in delphi?


ArcCos, ArcSin und ArcTan.

Das Ergebnis liegt im Bogenmaß vor.


___________

Ex0rzist


Palmetshofer - Mi 25.09.02 19:02

So jetzt funktioniert alles!!

Als letzten feinschliff möchte ich automatisch erkennen lassen ob sich in einem textfeld ein '-' als "Vorzeichen" der zahl die derin enthalten is befindet. Einfach: Ist ein Minus im Textfeld oder nicht?
Könnte mir da jemand was posten?

Danke


Ex0rzist - Mi 25.09.02 19:28

Such mal in der Onlinehelp nach Pos.
Das wird dir weiterhelfen.


Palmetshofer - Mi 25.09.02 20:32

In welcher online hilfe? irgenwo gibts die delphi 6 hilfe auf deutsch kann sie aber nit mehr finden! Weist du wo man sie her bekommt und kannst du code posten von dem was ich gefragt hab ?


danke


Ex0rzist - Do 26.09.02 12:15

Für die Onlinehilfe musst du einfach nur F1 drücken.

Da steht (fast) alles drin.


________________

Ex0rzist


Tante - Di 01.10.02 09:41

:) Also hier ein Auszug aus meiner (deutschen) Online-Hilfe:

Zitat:

function Pos(Substr: string; S: string): Integer;

Pos sucht in dem String S nach dem Teil-String Substr. Die Parameter Substr und S sind String-Ausdrücke.

Wird der Teil-String gefunden, gibt Pos den Integer-Index des ersten Zeichens von Substr in S zurück. Die Groß/Kleinschreibung wird von Pos nicht berücksichtigt. Ist Substr nicht vorhanden, wird der Wert Null zurückgegeben.


Besser (für Dich) wäre es, dir den Rest selbst zu überlegen.

Aber wenn Du wirklich die "Lösung" willst:

Quelltext
1:
 positiv:=(pos('-',DeinString)=0);                    


Die Variable positiv ist boolean und ist true, falls kein Minus im String ist.