[newbie] Einfache Kylix/Delphi-Anwedung - läuft aber nicht so richtig ;)
Funktion: Soll Steigungs-Winkel einer Geraden berechnen. (Hoffe mal, die Formel stimmt so ;) ) Problem: Das Ergebnis(letzte Zeile der Mail). Welchen Variabelen-Typ muss ich denn nehmen, um ein normales, numerisches Ergebnis zu bekommen? (z.b. 20.Grad) Wenn ich für x,y.. und winkel 'integer' nehme, sagt mir der Compiler, dass die Typen nicht kombatibel zu 'Extended' seien, 'double' liefert das gleiche Ergebnis wie 'Extended'... ------------------ Code: program swinkel; {$APPTYPE CONSOLE} uses SysUtils, Math; var x1, x2, y1, y2:Extended; winkel:Extended; begin writeln('Berechnung von Steigungswinkel(mit zwei Punkten)'); write('x1 eingeben:'); readln(x1); write('x2 eingeben:'); readln(x2); write('y1 eingeben:'); readln(y1); write('y2 eingeben:'); readln(y2); winkel := ArcTan((y2-y1)/(x2-x1)); writeln('Ergebnis: ',winkel,' Grad (aber nicht Celsius*g*)'); end. ------------------ Konsole (Bsp.): Berechnung von Steigungswinkel(mit zwei Punkten) x1 eingeben:7 x2 eingeben:14 y1 eingeben:2 y2 eingeben:6 Ergebnis: 5.19146114246523E-0001 Grad (aber nicht Celsius*g*) ------------------
Hallo, On Mon, 29 Dec 2003 at 17:53 (+0100), patrick dahl wrote:
Funktion: Soll Steigungs-Winkel einer Geraden berechnen. (Hoffe mal, die Formel stimmt so ;) )
Problem: Das Ergebnis(letzte Zeile der Mail). Welchen Variabelen-Typ muss ich denn nehmen, um ein normales, numerisches Ergebnis zu bekommen? (z.b. 20.Grad) Wenn ich für x,y.. und winkel 'integer' nehme, sagt mir der Compiler, dass die Typen nicht kombatibel zu 'Extended' seien, 'double' liefert das gleiche Ergebnis wie 'Extended'...
Konsole (Bsp.):
Berechnung von Steigungswinkel(mit zwei Punkten) x1 eingeben:7 x2 eingeben:14 y1 eingeben:2 y2 eingeben:6 Ergebnis: 5.19146114246523E-0001 Grad (aber nicht Celsius*g*)
Du gehst noch zur Schule, richtig? Du musst Gradmaß in Bogenmaß umrechnen. Computer (und Taschenrechner, wenn man sie anders einstellt) rechnen immer mit Bogenmaß. Das kommt einfach daher, dass die Winkelfunktionen so angenähert werden. Bogenmaß heißt einfach Länge des Bogens des Einheitskreises (Radius = 1), den ein Winkel einschließt. Also: g b g: Winkel im Gradmaß --- = -------- 360 2 * pi b: Winkel im Bogenmaß Und dann halt umstellen. Integer ist eine Ganzzahl, Double (heißt das nicht Real in Pascal?) eine Gleitkommazahl. Winkelfunktionen liefern naturgemäß eine Gleitkommazahl. Was Extended ist, weiß ich nicht, da ich kein Pascal kenne. In C/C++/Java gibt's das nicht. :-) Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Es ist ein großer Vorteil im Leben, die Fehler, aus denen man lernen kann, möglichst früh zu begehen. -- Sir Winston Churchil
Hallo, Am Montag, 29. Dezember 2003 19:06 schrieb Bernhard Walle:
Hallo,
On Mon, 29 Dec 2003 at 17:53 (+0100), patrick dahl wrote:
Funktion: Soll Steigungs-Winkel einer Geraden berechnen. (Hoffe mal, die Formel stimmt so ;) )
Problem: Das Ergebnis(letzte Zeile der Mail). Welchen Variabelen-Typ muss ich denn nehmen, um ein normales, numerisches Ergebnis zu bekommen? (z.b. 20.Grad) Wenn ich für x,y.. und winkel 'integer' nehme, sagt mir der Compiler, dass die Typen nicht kombatibel zu 'Extended' seien, 'double' liefert das gleiche Ergebnis wie 'Extended'...
Konsole (Bsp.):
Berechnung von Steigungswinkel(mit zwei Punkten) x1 eingeben:7 x2 eingeben:14 y1 eingeben:2 y2 eingeben:6 Ergebnis: 5.19146114246523E-0001 Grad (aber nicht Celsius*g*)
Du gehst noch zur Schule, richtig?
Du musst Gradmaß in Bogenmaß umrechnen. Computer (und Taschenrechner, wenn man sie anders einstellt) rechnen immer mit Bogenmaß. Das kommt einfach daher, dass die Winkelfunktionen so angenähert werden.
Auf Taschenrechner gibt es dann meistens zwei Graede. Und Grad ist der mit 400-Teilstuecken, weswegen es viele verwechseln und dieses als Modus nehmen. Fuer 360-Grad muss man Degree nehmen.
Bogenmaß heißt einfach Länge des Bogens des Einheitskreises (Radius = 1), den ein Winkel einschließt. Also:
g b g: Winkel im Gradmaß --- = -------- 360 2 * pi b: Winkel im Bogenmaß
Und dann halt umstellen. Integer ist eine Ganzzahl, Double (heißt das nicht Real in Pascal?) eine Gleitkommazahl. Winkelfunktionen liefern naturgemäß eine Gleitkommazahl. Was Extended ist, weiß ich nicht, da ich kein Pascal kenne. In C/C++/Java gibt's das nicht. :-)
Extended hat eine hohere Genauigkeit als Real und entspricht nach der Kylix-Doku long double. Er ist aber nach dieser nur beschraenkt plattformuebergreifend. Ich weiss nicht, ob das bei long double genauso ist. Double gibt es in Pascal auch und entspricht nach der Doku auch double, wird aber anders gespeichert, weswegen ich der Gegenueberstellung nicht ganz glaube. Jedenfalls sind alles Fliesskommatypen und als Genauigkeit reichen in dem Fall wohl alle. Ferdinand
On Mon, 29 Dec 2003 at 19:53 (+0100), Ferdinand Ihringer wrote:
Am Montag, 29. Dezember 2003 19:06 schrieb Bernhard Walle:
On Mon, 29 Dec 2003 at 17:53 (+0100), patrick dahl wrote:
Funktion: Soll Steigungs-Winkel einer Geraden berechnen. (Hoffe mal, die Formel stimmt so ;) )
Problem: Das Ergebnis(letzte Zeile der Mail). Welchen Variabelen-Typ muss ich denn nehmen, um ein normales, numerisches Ergebnis zu bekommen? (z.b. 20.Grad) Wenn ich für x,y.. und winkel 'integer' nehme, sagt mir der Compiler, dass die Typen nicht kombatibel zu 'Extended' seien, 'double' liefert das gleiche Ergebnis wie 'Extended'...
Konsole (Bsp.):
Berechnung von Steigungswinkel(mit zwei Punkten) x1 eingeben:7 x2 eingeben:14 y1 eingeben:2 y2 eingeben:6 Ergebnis: 5.19146114246523E-0001 Grad (aber nicht Celsius*g*)
Du gehst noch zur Schule, richtig?
Du musst Gradmaß in Bogenmaß umrechnen. Computer (und Taschenrechner, wenn man sie anders einstellt) rechnen immer mit Bogenmaß. Das kommt einfach daher, dass die Winkelfunktionen so angenähert werden.
Auf Taschenrechner gibt es dann meistens zwei Graede. Und Grad ist der mit 400-Teilstuecken, weswegen es viele verwechseln und dieses als Modus nehmen. Fuer 360-Grad muss man Degree nehmen.
Und für was braucht man diese 400er-Grade?
Bogenmaß heißt einfach Länge des Bogens des Einheitskreises (Radius = 1), den ein Winkel einschließt. Also:
g b g: Winkel im Gradmaß --- = -------- 360 2 * pi b: Winkel im Bogenmaß
Und dann halt umstellen. Integer ist eine Ganzzahl, Double (heißt das nicht Real in Pascal?) eine Gleitkommazahl. Winkelfunktionen liefern naturgemäß eine Gleitkommazahl. Was Extended ist, weiß ich nicht, da ich kein Pascal kenne. In C/C++/Java gibt's das nicht. :-)
Extended hat eine hohere Genauigkeit als Real und entspricht nach der Kylix-Doku long double. Er ist aber nach dieser nur beschraenkt plattformuebergreifend. Ich weiss nicht, ob das bei long double genauso ist. Double gibt es in Pascal auch und entspricht nach der Doku auch double, wird aber anders gespeichert, weswegen ich der Gegenueberstellung nicht ganz glaube. Jedenfalls sind alles Fliesskommatypen und als Genauigkeit reichen in dem Fall wohl alle.
Also nochmal: ------------------------------------------------------- C Genauigk. Pascal ------------------------------------------------------- long double 80 bit Extended double 64 bit Double float 32 bit Real ------------------------------------------------------- Oder hab ich da jetzt was verkehrt verstanden. BTW: Kylix gibt's doch eh nur für Linux/x86 und Windows. Wieso dann "beschränkt plattformuebergreifend". Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ I couldn't give [Bill Gates] advice in business and he couldn't give me advice in technology. -- Linus Benedict Torvalds
Hallo, Am Montag, 29. Dezember 2003 20:07 schrieb Bernhard Walle:
On Mon, 29 Dec 2003 at 19:53 (+0100), Ferdinand Ihringer wrote:
Am Montag, 29. Dezember 2003 19:06 schrieb Bernhard Walle:
On Mon, 29 Dec 2003 at 17:53 (+0100), patrick dahl wrote:
Funktion: Soll Steigungs-Winkel einer Geraden berechnen. (Hoffe mal, die Formel stimmt so ;) )
Problem: Das Ergebnis(letzte Zeile der Mail). Welchen Variabelen-Typ muss ich denn nehmen, um ein normales, numerisches Ergebnis zu bekommen? (z.b. 20.Grad) Wenn ich für x,y.. und winkel 'integer' nehme, sagt mir der Compiler, dass die Typen nicht kombatibel zu 'Extended' seien, 'double' liefert das gleiche Ergebnis wie 'Extended'...
Konsole (Bsp.):
Berechnung von Steigungswinkel(mit zwei Punkten) x1 eingeben:7 x2 eingeben:14 y1 eingeben:2 y2 eingeben:6 Ergebnis: 5.19146114246523E-0001 Grad (aber nicht Celsius*g*)
Du gehst noch zur Schule, richtig?
Du musst Gradmaß in Bogenmaß umrechnen. Computer (und Taschenrechner, wenn man sie anders einstellt) rechnen immer mit Bogenmaß. Das kommt einfach daher, dass die Winkelfunktionen so angenähert werden.
Auf Taschenrechner gibt es dann meistens zwei Graede. Und Grad ist der mit 400-Teilstuecken, weswegen es viele verwechseln und dieses als Modus nehmen. Fuer 360-Grad muss man Degree nehmen.
Und für was braucht man diese 400er-Grade?
400 Grade 'braucht' man, um einfacher rechnen zu können. 2 × 2 × 2 × 2 × 5 × 5 = 400 ^= 110010000 ^= 190 2 × 2 × 2 × 3 × 3 × 5 = 360 ^= 101101000 ^= 168 Das passt eben besser in ein Dezimalsystem und auch binär oder hexadezimal sieht es ein bisschen schöner aus. Babylonier hätten 360 bevorzugt. Computer vielleicht eine reine Zweierpotenz, da bietet sich aber keine wirklich an, weswegen die auch gleich bei Radian bleiben können...
Bogenmaß heißt einfach Länge des Bogens des Einheitskreises (Radius = 1), den ein Winkel einschließt. Also:
g b g: Winkel im Gradmaß --- = -------- 360 2 * pi b: Winkel im Bogenmaß
Und dann halt umstellen. Integer ist eine Ganzzahl, Double (heißt das nicht Real in Pascal?) eine Gleitkommazahl. Winkelfunktionen liefern naturgemäß eine Gleitkommazahl. Was Extended ist, weiß ich nicht, da ich kein Pascal kenne. In C/C++/Java gibt's das nicht. :-)
Extended hat eine hohere Genauigkeit als Real und entspricht nach der Kylix-Doku long double. Er ist aber nach dieser nur beschraenkt plattformuebergreifend. Ich weiss nicht, ob das bei long double genauso ist. Double gibt es in Pascal auch und entspricht nach der Doku auch double, wird aber anders gespeichert, weswegen ich der Gegenueberstellung nicht ganz glaube. Jedenfalls sind alles Fliesskommatypen und als Genauigkeit reichen in dem Fall wohl alle.
Also nochmal:
------------------------------------------------------- C Genauigk. Pascal ------------------------------------------------------- long double 80 bit Extended double 64 bit Double float 32 bit Real -------------------------------------------------------
Oder hab ich da jetzt was verkehrt verstanden.
Nein, nach der Delphi-Doku entspricht Real auch double, aber mit 32 bit. Das verstehe ich nicht ganz, steht aber so da drin. *liest nochmal nach* Achso, einen Satz übrlas ich vorhin. Da steht, dass der generische Typ Real in der aktuellen Implentation mit dem Typ Double identisch ist. Dann ist wohl die andere Tabelle falsch. Real hatte früher mal nur 48 Bit, was jetzt in Delphi Real48 heißt. Also wahrscheinlich sowas: ------------------------------------------------------- C Genauigk. Pascal ------------------------------------------------------- long double 80 bit Extended double 64 bit Double in Delphi momentan wie double Real ? 48 bit Real48 float 32 bit Single -------------------------------------------------------
BTW: Kylix gibt's doch eh nur für Linux/x86 und Windows. Wieso dann "beschränkt plattformuebergreifend".
Das bezieht sich auf den Austausch von Daten zwischen zwei verschiedenen Plattformen. Da ist die Sprache relativ egal. Das vergaß ich dazu zuschreiben. Ferdinand
Bernhard Walle wrote:
BTW: Kylix gibt's doch eh nur für Linux/x86 und Windows. Wieso dann "beschränkt plattformuebergreifend". Kylix != Pascal
Die Jungs von FreePascal portieren zur Zeit auf alles was nach Prozessor aussieht oder Prozessor im Namen hat ;-) cu Gerald
Am Montag, 29. Dezember 2003 20:07 schrieb Bernhard Walle:
On Mon, 29 Dec 2003 at 19:53 (+0100), Ferdinand Ihringer wrote:
Am Montag, 29. Dezember 2003 19:06 schrieb Bernhard Walle:
On Mon, 29 Dec 2003 at 17:53 (+0100), patrick dahl wrote: Du musst Gradmaß in Bogenmaß umrechnen. Computer (und Taschenrechner, wenn man sie anders einstellt) rechnen immer mit Bogenmaß. Das kommt einfach daher, dass die Winkelfunktionen so angenähert werden.
Auf Taschenrechner gibt es dann meistens zwei Graede. Und Grad ist der mit 400-Teilstuecken, weswegen es viele verwechseln und dieses als Modus nehmen. Fuer 360-Grad muss man Degree nehmen.
Und für was braucht man diese 400er-Grade?
Nochwas, nachdem ich eben noch jemanden fragte: In der Geodäsie und wahrscheinlich auch bei der Navigation von U-Booten sind 400° für einen Kreis üblich. Ferdinand
Moin, Am Mo, den 29.12.2003 schrieb Bernhard Walle um 20:07:
Und für was braucht man diese 400er-Grade?
Die Zahl 360 ist geistiges Eigentum von SCO. :-) Ne, im Ernst: Die Einteilung nennt sich "Neugrad" und ist m.E. einfach ein Versuch, von den "krummen" Zahlen wegzukommen. Rechter Winkel=100, schöne Sache im metrischen System. Google mal "Neugrad", da stapeln sich die Erklärungen. Zum Beispiel http://www.rescon.de/Wissen/mathewinkteil2.html Gruß, Ratti -- -o) fontlinge | Font management for Linux | Schriftenverwaltung in Linux /\\ http://freshmeat.net/projects/fontlinge/ _\_V http://www.gesindel.de https://sourceforge.net/projects/fontlinge/
On Mon, 29 Dec 2003 at 22:17 (+0100), Jörg Roßdeutscher wrote:
Am Mo, den 29.12.2003 schrieb Bernhard Walle um 20:07:
Und für was braucht man diese 400er-Grade?
Die Zahl 360 ist geistiges Eigentum von SCO. :-)
Ne, im Ernst: Die Einteilung nennt sich "Neugrad" und ist m.E. einfach ein Versuch, von den "krummen" Zahlen wegzukommen. Rechter Winkel=100, schöne Sache im metrischen System.
Ich glaube ich habe davon schonmal gehört. Allerdings hat die Ganze Sache meiner Meinung nach einen großen Haken: Der doch recht häufige 30°-Winkel wird zu einem 33.33°-Winkel, ein unendlicher Dezimalbruch. Und Mathematiker rechnen eh nur in Bruchteilen oder Vielfachen von Pi. :-) Gruß, Bernhard -- _________ http://www.bwalle.de _________________________________________________ Man soll Denken lehren, nicht Gedachtes. -- C. Gurlitt
patrick dahl wrote:
Problem: Das Ergebnis(letzte Zeile der Mail). Welchen Variabelen-Typ muss ich denn nehmen, um ein normales, numerisches Ergebnis zu bekommen? (z.b. 20.Grad) Wenn ich für x,y.. und winkel 'integer' nehme, sagt mir der Compiler, dass die Typen nicht kombatibel zu 'Extended' seien, 'double' liefert das gleiche Ergebnis wie 'Extended'...
------------------
Code:
program swinkel;
{$APPTYPE CONSOLE}
uses SysUtils, Math;
var x1, x2, y1, y2:Extended; winkel:Extended;
begin writeln('Berechnung von Steigungswinkel(mit zwei Punkten)'); write('x1 eingeben:'); readln(x1); write('x2 eingeben:'); readln(x2); write('y1 eingeben:'); readln(y1); write('y2 eingeben:'); readln(y2); winkel := ArcTan((y2-y1)/(x2-x1)); writeln('Ergebnis: ',winkel,' Grad (aber nicht Celsius*g*)'); end.
Ersetzmal die Writln-Zeile durch eine von diesen: writeln(format('Ergebnis: %.4f Grad (aber nicht Celsius*g*)',[winkel])); writeln(format('Ergebnis: %g Grad (aber nicht Celsius*g*)',[winkel])); (es sind nur 2 Zeilen wg. Mailumbruch) hth cu Gerald
participants (5)
-
Bernhard Walle
-
Ferdinand Ihringer
-
Gerald Goebel
-
Joerg Rossdeutscher
-
patrick dahl