Seite 1 von 1

ein taschenrechner

Verfasst: Samstag 7. Juni 2008, 12:41
von roschi
hallo!

ich habe mal wieder ein problem, bei dem ich eure hilfe braeuchte:

ich habe einen taschenrechner programmiert, der unteranderem 'sin', 'tan' und 'cos' aus dem 'math'-modul nutzt. nun habe ich das problem, dass diese funktionen die werte im bogenmaß liefern. ich moechte aber, dass man den taschenrechner auch auf altgrad und neugrad umstellen kann. nun weiß ich aber nicht, welche rueckgaben ich wie umwandeln muss. ich habe da schonmal ein paar versuche gemacht...

Code: Alles auswählen

def dcos(x):
  return cos(radians(x))

def dsin(x):
  return sin(radians(x))

def dtan(x):
  return tan(radians(x))
ist das so richtig? wenn ja, wie mache ich das ganze dann mit 'acos', 'asin', 'atan', ...

es waere sehr schoen, wenn ihr mir dabei weiterhelfen koenntet!

mfg
roschi

Verfasst: Samstag 7. Juni 2008, 13:06
von Leonidas
Du musst dir einfach nur Konvertierfunktionen zwischen Altgrad und Neugrad schreiben, das ist alles. Eben so wie ``radians()`` und ``degrees``.

Etwa Neugrad:
Bild

Verfasst: Samstag 7. Juni 2008, 13:18
von roschi
hallo!

erstmal danke fuer die schnelle antwort.

ja, so etwas habe ich ja im o. g. code bereits angewandt.
nur wenn ich das gleiche mit der 'atan'-funktion mache, dann erscheint nicht das, was mir mein taschenrechner dazu sagt.

mein taschenrechner sagt im altgrad-modus:
atan(5): 78,69006752598
mein programm:
atan(radians(5)): 0,0870459452885

wie soll ich das verstehen?

mfg
roschi

Verfasst: Samstag 7. Juni 2008, 13:33
von Leonidas
Du rechtnest ja auch mit Äpfeln und Birnen:

Code: Alles auswählen

>>> import math
>>> print math.degrees(math.atan(5))
78.690067525979785

Verfasst: Samstag 7. Juni 2008, 14:11
von roschi
hallo!

sehr gut! danke! das wollte ich wissen.
aber jetzt habe ich noch ein problem:
wie kriege ich das jetzt noch in neugrad?

mfg
roschi

Verfasst: Samstag 7. Juni 2008, 14:26
von Leonidas
roschi hat geschrieben:wie kriege ich das jetzt noch in neugrad?
Wie du Bogenmaß in Neugrad konvertierst überlasse ich dir mal als Übung. Da nimmst du einfach die Umrechnungsformel und fertig.

Verfasst: Samstag 7. Juni 2008, 14:40
von roschi
hallo,

aehm... gibt es diese formel auch irgendwo als nicht-grafik?
ich kann die naemlich leider nicht sehen... (gewisse augenprobleme :( )

mfg
roschi

Verfasst: Samstag 7. Juni 2008, 14:44
von veers
Leonidas hat geschrieben:Du musst dir einfach nur Konvertierfunktionen zwischen Altgrad und Neugrad schreiben, das ist alles. Eben so wie ``radians()`` und ``degrees``.

Etwa Neugrad:
Bild
1 gon = (PI/200) rad
1 gon = 0.0157079633 rad

;)

Verfasst: Samstag 7. Juni 2008, 14:48
von numerix
Wenn du nicht selbst herausbekommst, wie du Bogenmaß - Altgrad - Neugrad ineinander umwandelst, dann würde ich mal behaupten, brauchst du auch keinen Taschenrechner, der das kann.

Statte deinen Taschenrechner doch mal mit Funktionen aus, die "normale" (nicht programmierbare, nicht graphikfähige, nicht CAS-) Taschenrechner nicht haben, z.B. die Signum-Funktion, den ggT von zwei Zahlen, die Teilermenge einer Zahl, die Teilersumme einer Zahl, die Quersumme einer Zahl, ob eine Zahl eine Primzahl ist bzw. die Primfaktorzerlegung einer Zahl u.ä.

Bei der Implementierung dieser Funktionen lernst du ganz sicher mehr Python-Grundlagen als durch die Umwandlung verschiedener Einheiten für die Winkelmessung.

Verfasst: Samstag 7. Juni 2008, 18:19
von roschi
Bei der Implementierung dieser Funktionen lernst du ganz sicher mehr Python-Grundlagen als durch die Umwandlung verschiedener Einheiten für die Winkelmessung.
ja, das mag schon sein, aber ich wollte eben einfach mal einen rechner schreiben, der so etwas kann. ggt zum beispiel kann mein taschenrechner ja auch schon, und viele andere der von dir genannten funktionen werden auch noch folgen. danke fuer die vielen vorschlaege!

vielen dank auch fuer die "formeluebersetzung" :), mit deren hilfe ich es nun geschafft habe, atan, acos und asin in neugrad umzuwandeln. cos, sin, tan wollen aber immer noch nicht so recht... koenntet ihr mir nicht sagen, was ich da anders machen muss?

mfg
roschi

Verfasst: Samstag 7. Juni 2008, 18:24
von Leonidas
roschi hat geschrieben:cos, sin, tan wollen aber immer noch nicht so recht... koenntet ihr mir nicht sagen, was ich da anders machen muss?
Wie meinen? Rechnet Sinus falsch?

Verfasst: Samstag 7. Juni 2008, 18:37
von roschi
nein.

den arkussinus von bspw. -1 in neugrad errechne ich mit:

Code: Alles auswählen

asin(-1)*200/math.pi
das stimmt mit dem ueberein, was mein taschenrechner sagt.
nun weiß ich aber nicht, wie ich bspw. den kosinus von 5 in neugrad ausrechnen soll. mein taschenrechner sagt dazu 0,99691733373313. wenn ich jetzt aber

Code: Alles auswählen

cos(5)*200/math.pi
ausfuehre, dann erhalte ich 18,0584955939.

ich weiß nicht, was ich da falsch mache.

mfg
roschi

Verfasst: Samstag 7. Juni 2008, 19:18
von EyDu
Ist doch eigentlich logisch: Wenn du cos(5) schreibst, dann wird die 5 natürlich als rad interpretiert. Du musst sie also VORHER in rad umwandeln. Der Faktor "200/math.pi" macht beim Kosinus gar keinen Sinn.

cos(gon2rad(5))

Verfasst: Samstag 7. Juni 2008, 19:20
von Leonidas
Du gibst da 5 in Gradmaß an (alle Winkelfunktionen nemen Gradmaß). Du musst deine Neugrad also zuerst ins Bogenmaß konvertieren.

Verfasst: Samstag 7. Juni 2008, 19:23
von birkenfeld
roschi hat geschrieben: ich weiß nicht, was ich da falsch mache.
Es hilft sich klarzumachen, dass sin, cos, tan und asin, acos, atan jeweils vertauschte Definitions-/Wertebereiche haben.
Sprich: Der asin liefert einen Winkel zurück -> Konvertierung des Rückgabewerts. Der sin operiert mit einem Winkel -> Konvertierung des Arguments.

Verfasst: Samstag 7. Juni 2008, 19:56
von roschi
EyDu hat geschrieben:Ist doch eigentlich logisch
ja, ist es eigentlich wirklich! :D

vielen dank!

meine funktionen funktionieren jetzt einwandfrei.

aber ich habe noch ein anderes problem:
gibt es eine moeglichkeit, eine eingabe vom benutzer, z. b.:
10/20
so umzuwandeln, dass er aus allen integern fließkommazahlen macht? etwa so:
10,0/20,0
damit koennte ich naemlich erreichen, dass der benutzer bei eingabe des o. g. befehls nicht 0 zu sehen bekommt, sondern 0.5, was ja auch das richtige ergebnis fuer die aufgabe waehre.

mfg
roschi

Verfasst: Samstag 7. Juni 2008, 20:04
von birkenfeld

Code: Alles auswählen

from __future__ import division

Verfasst: Samstag 7. Juni 2008, 21:21
von roschi
wunderbar! ich wusste gar nicht, dass es sowas gibt.

ich bedanke mich nun nochmal ganz herzlich fuer die viele hilfe!

mfg
roschi