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.

GrundrechenartenBearbeiten

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 /.

KurzschreibweisenBearbeiten

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

OperatorvorrangBearbeiten

  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!)


RundenBearbeiten

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 FormelBearbeiten

 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:

AnwendungenBearbeiten

GeradzahligkeitsprüferBearbeiten

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

QuersummeBearbeiten

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

ZahlensystemeBearbeiten

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().

WinkelfunktionenBearbeiten

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 1Bearbeiten

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 2Bearbeiten

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.

LogarithmusBearbeiten

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

BeispielBearbeiten

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

ExponentenBearbeiten

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.