Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Rechnen mit Sinus/Cosinus - Falsche Ergebnisse!

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 09.04.2006, 16:33    Titel: Rechnen mit Sinus/Cosinus - Falsche Ergebnisse! Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Mao



Anmeldungsdatum: 25.09.2005
Beiträge: 4409
Wohnort: /dev/hda1

BeitragVerfasst am: 09.04.2006, 16:36    Titel: Antworten mit Zitat

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. lächeln
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. lächeln

Viel Spaß,
Mao
_________________
Eine handvoll Glück reicht nie für zwei.
--
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 09.04.2006, 16:43    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 09.04.2006, 16:47    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 09.04.2006, 16:55    Titel: Antworten mit Zitat

Vielen Dank, ist das für Cosinus das gleiche? grinsen

Is Bestandteil einer Funktion zur Berechnung von Einzelprismen, für meinen Vater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 09.04.2006, 16:57    Titel: Antworten mit Zitat

Das gilt auch bei Cosinus und bei Tangens.

Tipp: Benutze ein genaueres Pi, meines ist wohl zu Grob zwinkern.
Und: Die Funktion lässt sich vereinfachen:
zg = z1 * SIN(z2 * PI / 180)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 09.04.2006, 17:12    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 09.04.2006, 17:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 09.04.2006, 17:23    Titel: Antworten mit Zitat

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 ugly!
Ich mach schnell eine Dritte Variante
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Christoph



Anmeldungsdatum: 07.04.2006
Beiträge: 108
Wohnort: NRW, Rietberg

BeitragVerfasst am: 09.04.2006, 17:42    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ytwinky



Anmeldungsdatum: 28.05.2005
Beiträge: 2624
Wohnort: Machteburch

BeitragVerfasst am: 09.04.2006, 19:27    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Eberhard61



Anmeldungsdatum: 04.05.2006
Beiträge: 1
Wohnort: 63654 Büdingen

BeitragVerfasst am: 04.05.2006, 20:20    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MisterD



Anmeldungsdatum: 10.09.2004
Beiträge: 3071
Wohnort: bei Darmstadt

BeitragVerfasst am: 04.05.2006, 22:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz