Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 09.04.2006, 16:33 Titel: Rechnen mit Sinus/Cosinus - Falsche Ergebnisse! |
|
|
Wie kann ich richtig mit Sinus oder Cosinus rechnen?
Denn so, kommt nur Müll raus, siehe Beispiel:
Code: | input "Zahl 1";z1
input "Zahl2" ;z2
zg=z1*sin (z2)
print "Ergebnis=";zg
sleep 9999 |
Für Zahl1 hab ich 5 eingesetzt und für Zahl2 56,normalerweise müsste da 4,15 rauskommen.
Was iust falsch? Wie muss ich es richtig machen? |
|
Nach oben |
|
 |
Mao
Anmeldungsdatum: 25.09.2005 Beiträge: 4409 Wohnort: /dev/hda1
|
Verfasst am: 09.04.2006, 16:36 Titel: |
|
|
Das Thema gab's zwar schon (ich glaub im QB-Forum), aber:
ich glaub', dass du mit Integern rechnest. Integer speichern nur Ganzzahlen. Die Lösung des Problems ist, dass du z1 und z2 als Single bzw. Double für bessere Genauigkeit dimensionierst.
Dein Code wäre dann etwa so:
Code: |
DIM AS DOUBLE z1, z2
input "Zahl 1";z1
input "Zahl2" ;z2
zg=z1*sin (z2)
print "Ergebnis=";zg
sleep
|
Das "sleep 9999" hab' ich weggemacht - ein einfaches SLEEP für einen Tastendruck tut's auch.
Viel Spaß,
Mao _________________ Eine handvoll Glück reicht nie für zwei.
--
 |
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 09.04.2006, 16:43 Titel: |
|
|
Es funzt leider nicht, es kommt immer noch murks raus!
Die Werte hab ich in meinen Taschenrechner eingegeben,da passen sie.
Mein Vater hat das in seinen "Sharp PC 1500", ca. 25 Jahre alt, mit Basic programmiert, da passen die Werte.
Diese Sache ist wichtig für ne andere Funktion, sonst kommen da falsche Werte raus. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 09.04.2006, 16:47 Titel: |
|
|
Die Winkeleinheit ist anders:
Code: | DIM z1 AS DOUBLE
DIM z2 AS DOUBLE
DIM zg AS DOUBLE
CONST PI = 3.141593
INPUT "Zahl 1"; z1
INPUT "Zahl2"; z2
zg = z1 * SIN(z2 * 2 * PI / 360)
PRINT "Ergebnis="; zg
SLEEP |
|
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 09.04.2006, 16:55 Titel: |
|
|
Vielen Dank, ist das für Cosinus das gleiche?
Is Bestandteil einer Funktion zur Berechnung von Einzelprismen, für meinen Vater. |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 09.04.2006, 16:57 Titel: |
|
|
Das gilt auch bei Cosinus und bei Tangens.
Tipp: Benutze ein genaueres Pi, meines ist wohl zu Grob .
Und: Die Funktion lässt sich vereinfachen:
zg = z1 * SIN(z2 * PI / 180) |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 09.04.2006, 17:12 Titel: |
|
|
pi/180 kann man auch als atn(1)/45 schreiben, das is dann wohl ganz brauchbar. schöne definitionen wären dann
Code: | CONST PI = ATN(1)*4
CONST Deg2Rad = ATN(1)/45 '=PI/180
CONST Rad2Deg = 45/ATN(1) '=1/Deg2Rad (Kehrwert) |
dann kann man damit recht gut arbeiten:
Code: | dim as single gradzahl, bogenmaß, faktor
gradzahl=45
bogenmaß=gradzahl*Deg2Rad
faktor=5
print faktor*sin(bogenmaß) |
also mit Deg2Rad von grad nach bogenmaß (degree to radian) und mit Rad2Deg gehts dann wieder zurück, die Trigonometischen Funktionen bei FB/QB wollen alle Bogenmaß also muss man gradzahlen eben umrechnen. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 09.04.2006, 17:17 Titel: |
|
|
Ok, danke, es klappt!
Wie kann ich das Ergebnis auf 2 Stellen runden, beim Anzeigen?
Ich hab
Code: | Print Using "####.##"; | verwendet, doch es klappt leider nicht! |
|
Nach oben |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 09.04.2006, 17:23 Titel: |
|
|
Drei Mögligkeiten:
Code: | DIM z1 AS DOUBLE
DIM z2 AS DOUBLE
DIM zg AS DOUBLE
CONST PI = ATN(1)*4
CONST Deg2Rad = ATN(1)/45 '=PI/180
CONST Rad2Deg = 45/ATN(1) '=1/Deg2Rad (Kehrwert)
INPUT "Zahl 1"; z1
INPUT "Zahl2"; z2
zg = z1 * SIN(z2* Deg2Rad)
PRINT "Ergebnis="; cint(zg*100)/100
PRINT Using "Ergebnis=####.##"; zg
PRINT Using "Ergebnis=####.##"; cint(zg*100)/100
SLEEP |
Edit:/
Rundungsfehler
Ich mach schnell eine Dritte Variante |
|
Nach oben |
|
 |
Christoph
Anmeldungsdatum: 07.04.2006 Beiträge: 108 Wohnort: NRW, Rietberg
|
Verfasst am: 09.04.2006, 17:42 Titel: |
|
|
So, danke für die Hilfe, hier ist die komplette Funktion:
Code: | 10 Print "Einzelprismen"
20 'input "Prisma ";po
30 'input "Basis ";bo
40 DIM p1 AS DOUBLE
DIM p2 AS DOUBLE
DIM bo AS DOUBLE
DiM po AS DOUBLE
CONST PI = 3.141592654
input "Prisma ";po 'po=resultierendes Prisma
input "Basis" ;bo 'bo=BasisWinkel resultierendes Prisma
p1 = po * COS(bo * PI / 180)
p2= po * SIN(bo * PI /180)
If p1 >0 then let b1=0
If p1 <0 then let b1=180
If p2 >0 then let b2=90
If p2 <0 then let b2=270
'Print Using "####.##"; 'Anzahl der gerundeten Stellen
Print Using "Prisma=####.##";abs(p1);"Basis";b1 'Anzeigen
Print Using "Prisma=####.##";abs(p2);"Basis";b2 'Anzeigen
sleep 'Nach Tastendruck beenden
'Written by: Christoph Schwentker |
|
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 09.04.2006, 19:27 Titel: |
|
|
Zum Formatieren der Ausgabe kannst du auch Format[$] behutzen:
http://forum.qbasic.at/viewtopic.php?t=1830&highlight=format
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO..
Zuletzt bearbeitet von ytwinky am 04.05.2006, 21:32, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Eberhard61
Anmeldungsdatum: 04.05.2006 Beiträge: 1 Wohnort: 63654 Büdingen
|
Verfasst am: 04.05.2006, 20:20 Titel: |
|
|
Hallo,
ich bin ganz neu hier, aber kenne mich mit dem Programieren etwas aus.
Bisher Programierte ich in Power-Basic.
Das Problem ist das der Computer bei Sinus, Cosinus, Tangens usw. nicht in Grad sondern in Bogenmaß rechnet.
Ich habe mal ein Ephemerien-Programm erhalten, da ist die Lösung Deines Problemes enthalten:
Pi=ATN(1)*4
z8=180/Pi
x/z8 rechnet in Bogenmaß um und x*z8 in Gradmaß (x für eine Zahl)
Beispiel:
Sinus 175: Sinus (175/z8)
Gruß
Eberhard61 |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 04.05.2006, 22:51 Titel: |
|
|
also ich finds mit 2 konstanten einfacher, Deg2Rad ist das selbe wie 1/z8, sprich x/z8 wäre x*Deg2Rad und Rad2Deg wäre gleich z8, x*z8 also x*Rad2Deg, find ich schöner zu lesen und macht irgendwie mehr sinn als z8 was so eigentlich garnichts sagt außer, dass es ne variable is... _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
|