Zum Inhalt springen

FreeBasic: Mathematik

Aus Wikibooks

Dieses Kapitel zeigt nur die Anwendung in Freebasic. Das Grundlagenwissen für die jeweilige Funktion sollte vorhanden sein. Wenn nicht, sollten die Links am Anfang des Kapitels weiterhelfen.

Grundrechenarten[Bearbeiten]

Multiplikation *
Division       /
Addition       +
Subtraktion    -

Bei der Division gibt es noch einen Spezialfall:

Sind alle beteiligten Zahlen (Dividend, Divisor und Resultat) Ganzzahlen, kann man auch \ verwenden.

Der Vorteil von \ ist, dass er wesentlich schneller ist als /.

Kurzschreibweisen[Bearbeiten]

In FreeBasic gibt es einige Kurzschreibweisen, z.B. kann man anstelle von

x=x+1

auch

x+=1

schreiben. Was jetzt bei kurzen Variablennamen belanglos aussieht, hilft bei langen Variablennamen.

Natürlich gibt es das auch mit anderen Rechenoperationen:

 dim a as single
 dim b as single
 dim c as single
 
 input a
 input b
 
 c = a
 c += b 'c=c+b
 ? c
 
 c = a
 c -= b 'c=c-b
 ? c
 
 c = a
 c *= b 'c=c*b
 ? c
 
 c = a
 c /= b 'c=c/b
 ? c
 
 sleep

Operatorvorrang[Bearbeiten]

  1. Funktionsaufrufe/Klammern
  2. Potenzierung
  3. Vorzeichenoperator + und -
  4. Multiplikation und Division
  5. Integerdivision
  6. Mod
  7. Addition und Subtraktion
  8. Vergleichsoperatoren
  9. NOT
  10. AND
  11. OR
  12. XOR
  13. EQV
  14. IMP

(Operationen wie += etc. Nachtragen, Liste ist eigentlich für QBasic!)


Runden[Bearbeiten]

Am Einfachsten ist es, auf Ganzzahlen zu runden:

 dim a as single
 input a
 print cint(a)
 sleep

Jedoch ist das nicht immer zweckmäßig; es ergibt sich die Frage, wie man auf z. B. 3 Kommastellen rundet.

Wie könnte man das nun machen?

Wenn man a mit 1000 multipliziert, auf Ganzzahl rundet und dann durch 1000 teilt, dann bekommt man genau 3 Kommastellen.

Also:

 dim a as single
 input a
 print cint(a*1000)/1000
 sleep

Für spezielle Fälle muss man auf 0.05 (Schweizer Franken), 0.25 (Schulnoten allgemein) oder 0.5 (Zeugnisnoten) runden. Sehen wir uns das Beispiel 0.25 an: Also:

 dim a as single
 input a
 print cint(a*4)/4
 sleep

Allgemeine Formel[Bearbeiten]

 declare function Runden(Zahl as single, Genau as single) as single
 ...
 function Runden(Zahl as single, Genau as single) as single
  return cint(Zahl/Genau)*Genau
 End function

oder

#define RUNDEN(Zahl, Genau) (Cint(Zahl/Genau)*Genau)

Beispiel:

 declare function Runden(Zahl as single, Genau as single) as single
 Dim a as single
 
 input a
 print Runden(a,0.25)
 sleep
 
 function Runden(Zahl as single, Genau as single) as single
  return cint(Zahl/Genau)*Genau
 End function

oder

 #define RUNDEN(Zahl, Genau) (Cint(Zahl/Genau)*Genau)
 dim a as single
 
 input a
 print runden(a,0.25)
 sleep

Ich persönlich bevorzuge die zweite Methode, weil dann Freebasic den Quellcode besser optimieren kann.

Modulo oder Modulus (Rest beim Teilen)[Bearbeiten]

Einfach gesagt: MOD gibt den Rest einer Division aus.

Beispiel:

5/2=2 Rest 1

kann man auch so ausdrücken:

5 mod 2 = 1

Andere Beispiele: 3 mod 2 = 1

5 mod 6 = 5

125 mod 10 = 5

Zum weiter ausprobieren:

input a
input b
print a mod b
sleep

Weitere Theorie:

Anwendungen[Bearbeiten]

Geradzahligkeitsprüfer[Bearbeiten]

input a
if a mod 2 = 1 then
    print "Ungerade"
else
    print "Gerade"
end if
sleep

Quersumme[Bearbeiten]

Für manche komplizierte Berechnungen, zum Beispiel für physikalischen Berechnungen, ist die Quersumme notwendig. Diese ermittelt man so:

input zahl
do while zahl <> 0 
    Quersumme += zahl mod 10
    zahl= zahl \ 10 
loop 
print Quersumme
sleep

Zahlensysteme[Bearbeiten]

Mit dieser Funktion kann man Zahlen in andere Zahlensysteme konvertieren. Es funktioniert ab dem 2er- und bis zum 10er-System.

input "im 10er System? ",zahl
input "Welches System? ",sys
 
do while zahl <> 0
    a$=str$(zahl mod sys)+a$
    zahl= zahl \ sys
loop
print a$
sleep

Funktioniert ab dem 2er- und bis zum 36er-System.

Input "im 10er-System? ",zahl
input "Welches System? ",sys
 
do while zahl <> 0
   temp=zahl mod sys
    if temp<10 then
        a$=str$(temp)+a$
    else
        a$=chr(temp+55)+a$
    end if
    zahl= zahl \ sys
loop
 
print a$
sleep

Die Umrechnungen nach Binaer (2er-System), Oktal (8er-System) und Hexadezimal (16er-System) sind nicht sinnvoll; dafür gibt es die Befehle BIN(), OCT() und HEX().

Winkelfunktionen[Bearbeiten]

Die Theorie:

Die Befehle heißen in FreeBasic

  • SIN()
  • COS()
  • TAN()
  • ASIN()
  • ACOS()
  • ATN()

Die Winkel werden im Bogenmaß angegeben.

Die Umrechnung von Bogenmaß nach Grad geht im Prinzip wie folgt:

const PI as double = 3.1415926535897932
dim Grad      as single
dim Bogenmass as single
 
input "Bogenmass? ", Bogenmass
Grad=Bogenmass / PI * 180
 
print Grad
print
 
input "Grad? ", Grad
Bogenmass=Grad * PI / 180
 
print Bogenmass
 
sleep

In der Praxis verwendet man optimierte Methoden wie diese:

 const PI = atn(1)*4
 const Deg2Rad = atn(1)/45 '=PI/180
 const Rad2Deg = 45/atn(1) '=1/Deg2Rad (Kehrwert)

Beispiel 1[Bearbeiten]

const PI = ATN(1)*4
const Deg2Rad = ATN(1)/45 '=PI/180
 
screen 12
input "Laenge ",Laenge
input "Winkel ",Winkel
line(100,100)-(100+cos(Winkel*Deg2Rad)*Laenge,100-sin(Winkel*Deg2Rad)*Laenge)
sleep

Dieses Programm zeichnet eine Linie beliebiger Länge in einem beliebigen Winkel.

Beispiel 2[Bearbeiten]

const PI = atn(1)*4
const Deg2Rad = atn(1)/45 '=PI/180
 
screen 12
sleep 500
 
h=50 'Höhe in Pixel
b=50 'Breite in Pixel
 
for Beta=0 to 360
   line(100,100)-(100+cos(Beta*Deg2Rad)*b,100-sin(Beta*Deg2Rad)*h)
   sleep 20
next beta
 
sleep

Wenn Höhe und Breite ungleich sind, entsteht übrigens ein Oval.

Logarithmus[Bearbeiten]

Die Theorie:

Der Befehl in FreeBasic heißt

  • LOG()

Obwohl er LOG heißt, meint er eigentlich den natürlichen Logarithmus.

Die Umrechnung zum Zehner-Logarithmus geht wie folgt:

 dim a as single
 input a
 print log(a)/log(10)
 sleep

Beispiel[Bearbeiten]

 DEFSNG A-Z
 input "Startkapital ", Startkapital
 Input "Endbetrag    ", Endbetrag
 Input "Zins         ", Zins
 Jahre=log(Endbetrag/Startkapital)/log(1+Zins/100)
 Print Jahre
 sleep

Exponenten[Bearbeiten]

Exponenten sind nicht schwer zu benutzten in FreeBasic.

dim a as double
a = 3
a = a^3
print a
a = a^0.5
print a
a = a^-3
print a
sleep

Sie können benutzt werden wie im Matheunterricht. Man muss nur auf den Variablentyp achten, wenn hohe Zahlen heraus kommen können.