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.