FreeBasic: Mathematik
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]- Funktionsaufrufe/Klammern
- Potenzierung
- Vorzeichenoperator + und -
- Multiplikation und Division
- Integerdivision
- Mod
- Addition und Subtraktion
- Vergleichsoperatoren
- NOT
- AND
- OR
- XOR
- EQV
- 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.