Gambas: Rechnen
Zurück zum Gambas-Inhaltsverzeichnis.
Einleitung
BearbeitenWenn man ein bisschen mathematisch interessiert ist, kann man eine Programmiersprache wie Gambas sehr gut nutzen, um die Mathematik noch besser zu verstehen.
Umgekehrt kann man durch die Programmierung kleiner mathematischer Programme sehr viel über eine Programmiersprache lernen. Der Vorteil mathematischer Programme ist, dass sie meistens gut überschaubar sind und die Fehlerbeseitigung in kurzer Zeit vollzogen ist.
Außerdem kann man anfangs auch völlig auf eine Grafik verzichten und nur mit dem Direktfenster arbeiten, auch wenn die Grafik ja gerade den Reiz von KDE Programmen ausmacht.
Rechenausdrücke
BearbeitenUm längere Rechenausdrücke in Gambas korrekt zu berechnen, sollte man einige Vereinbarungen für mathematische Zeichen kennen, die in fast allen Basicdialekten gültig sind. Für die Multiplikation, die Division und die Potenzierung werden dabei andere Zeichen gebraucht, als die im Deutschen üblichen.
- Die Addition (Zusammenzählen) erfolgt mit +
- z.B. Print 8 + 8
- Die Subtraktion (Abziehen) erfolgt mit -
- z.B. Print 9 - 5
- Die Multiplikation (Malnehmen) erfolgt mit dem Sternchen *
- z.B. Print 5 * 5
- Die Division (Teilen) erfolgt mit dem Schrägstrich /
- z.B. Print 10 / 5
- ergibt 2
- Vorsicht bei Teilung mit oder ohne Rest
- Die Potenzierung (Hochzahlen) berechnet man mit dem ^ Zeichen.
- z.B. Print 8 ^ 2
- ergibt 64
- Die Klammern legen den Vorrang beim Rechnen fest 5 * (5 + 5)
- Falsch ist 5(5+5), Richtig ist 5 * (5 + 5)
Für die Berechnung gelten folgende Regeln der Vorrangigkeit:
- Zuerst werden die Klammern berechnet. Die innersten Klammern zuerst.
- Bei den Operationen gilt die Rangfolge: Erst Potenzieren, dann multiplizieren oder dividieren, dann addieren oder subtrahieren.
- Gleichrangige Ausdrücke werden von links nach rechts abgearbeitet.
Es gibt in Gambas nur ein Rechenzeichen für die Quadratwurzel SQR. Die höheren Wurzeln muss man anders berechnen: Hier gilt x-te Wurzel aus a ist gleich a^(1/x) (a hoch 1 durch x) Beispielsweise wird die 3-te Wurzel aus 27 so berechnet: 27^(1/3) = 3
Statt
schreibt man in Gambas: 36/2/3/6 oder 36/(2*3*6) = 1
Beachten Sie, dass das Minuszeichen einmal als Vorzeichen und einmal als Subtraktionszeichen gebraucht wird. Folgende Rechnungen sind gültig:
5 + -2 = 3 -5 * 3 = -15 5*-3 = -15 5/4 = 1,25 oder 1.25 je nach Ländereinstellung 20/2*5 = 50 20/2/5 = 2 20/(2*5)= 2 5*(2+3) = 25 2*(2+3)/(4+6) = 1 ((2+3)*2)^2 = 100
Addy der Summierer
BearbeitenWenn man eine Kolonne von Zahlen zusammenzählen will, verliert man schnell den Überblick, welche Zahl man schon eingegeben hat und welche nicht. Man kann dazu natürlich eine große Tabellenkalkulation anwerfen. Diese ist aber etwas kompliziert zu bedienen.
Einfacher soll diese Aufgabe Addy, ein kleines Summierprogramm erledigen. Auch eine nachträgliche Korrektur der Eingabe soll möglich sein.
Die Eingabe der Zahlen soll schnell erfolgen, am besten durch ein Return ohne Mausaktion.
Bei dem Programm können auch negative Zahlen summiert werden. Sie werden dann korrekt abgezogen. Auch das Zusammenzählen von Kommazahlen ist möglich.
Außerdem kann man Zahlenkolonnen via Zwischenspeicher übertragen.
Sehr hilfreich bei der Erstellung dieses Programms ist der Splitbefehl. CHR(10) als Trennzeichen ist in diesem Fall der Zeilenwechsel.
Was brauchen Sie? Holen Sie sich eine neue Form und nennen Sie diese wie Sie wollen. Holen Sie sich eine TextArea, eine TextBox und einen Commandbutton aus der Werkzeugkiste. Löschen Sie den Text aus den Textboxen bei den Eigenschaften (= Properties) Text.
So schaut das Ganze aus:
Der Programmcode dazu. Er steht hinter dem Befehlsbutton Summe:
PUBLIC SUB Button1_Click() DIM text AS String DIM summe AS Float DIM Elt AS String[] DIM Sb AS String text = TextArea1.Text Elt = Split(text, Chr(10)) FOR EACH Sb IN Elt summe = summe + Val(sb) NEXT TextBox1.Text = summe END
Das Programm ist doch ganz praktisch, oder was meinen Sie? Bei Kommazahlen erfolgt die Ergebnisausgabe noch inkorrekt mit dem englischen Punkt als Komma. Versuchen Sie diesen Fehler zu beheben.
In dem Programm bekommt man eine Fehlermeldung Type mismatch: Wanted Number, got Null instead wenn Sie z.B. versuchen Buchstaben statt Zahlen einzugeben.
Der Computer kann hier nur etwas mit Zahlen anfangen, nicht mit Buchstaben. Sie können den Fehler vermeiden, wenn Sie die Eingabe auf Ziffern, Kommas und Minuszeichen begrenzen. Auch ein Abfangen des Fehlers mit Catch ist sicher möglich.
Wollen Sie die Eingaben in Addy speichern. Dann schauen Sie sich doch folgende Erweiterung an: Gambas: Dateien#Datei laden und speichern mit Addyplus
Das Programm Addy regt an, um über einen kleinen Mittelwert- und Standardabweichungsrechner nachzudenken.
Potenzen
BearbeitenFolgendes Beispielprogramm zeigt den Umgang mit Potenzen. Es zeigt auch die dabei möglichen Fehler auf. Es arbeitet im Terminalmodus.
STATIC PUBLIC SUB Main() PRINT 4^3 PRINT 3^4 PRINT 4^1/2 PRINT 4^(1/2) PRINT 8^0.333 PRINT 8^(1/3) PRINT 8^1/3 PRINT 2^(-2) PRINT 1/2^2 END
Die Ausgabe schaut so aus:
64 81 2 2 1,998614185981 2 2,666666666667 0,25 0,25
Frage dazu: Wozu wird hier der Befehl Static verwendet? Geht es auch ohne ihn?
Der Befehl Static wird im Terminalmodus automatisch von der GUI vergeben. Löscht man ihn weg, funktioniert das Programm nicht mehr und es erscheint eine Fehlermeldung: ERROR: #24: No startup method
Modulo oder Modulus (Rest beim Teilen)
BearbeitenDer MOD Befehl entspricht – einfach erklärt – dem Rest beim Teilen. Geht die Division auf, bleibt kein Rest (also 0).
Ein paar Beispiele sind (besonders für Programmieranfänger) sinnvoll für das Verständnis:
- 10 MOD 5 ergibt 0 (Oft gemachter Fehler: Es kommt nicht 2 heraus. MOD ist nicht das selbe wie /)
- 2 MOD 3 ergibt 2
- 6 MOD 4 ergibt auch 2
- 8 MOD 3 ergibt 2
Ein weiteres Beispiel zeigt folgendes Programm im Terminalbetrieb:
STATIC PUBLIC SUB Main() DIM a AS Integer DIM b AS Integer b = 2 FOR a = 10 TO 2 STEP - 1 PRINT a MOD b NEXT END
Setzen Sie verschiedene Werte für b ein und schauen Sie sich die Ausgabe an. Falls Sie b = 0 setzen, dann erfolgt eine Fehlermeldung: Divsion by zero.
Lernprogramm Modus
BearbeitenWaybackmaschine aufrufen und dann unter www.madeasy.de/7/prgmodus.htm suchen.
Quersumme berechnen
BearbeitenIm folgenden Programm wird der Modus Befehl zur Berechnung der Quersumme einer mehrstelligen Zahl benutzt: Holen Sie sich eine neue Form und nennen Sie diese wie Sie wollen. Holen Sie zwei Textboxen aus der Werkzeugkiste.
Löschen Sie den Text aus den Textboxen bei den Eigenschaften (= Properties) Text.
Holen Sie sich einen Commandbutton dazu und benennen Sie diesen um.
Siehe http://www.madeasy.de/7/prgquer.htm
Hinter dem Befehlsfeld Quersumme steht folgender Code: Beachten Sie das hier das Divisionszeichen / nicht verwendet wird, sondern das Teilenzeichen ohne Rest \.
PUBLIC SUB Button1_Click() DIM zahl AS Integer DIM Quersumme AS Integer zahl = Val(TextBox1.Text) DO WHILE zahl <> 0 Quersumme = Quersumme + zahl MOD 10 zahl = zahl \ 10 LOOP TextBox2.Text = Str$(Quersumme) END
Gerade oder Ungerade
BearbeitenDen Modulus Befehl kann man nutzen, um zu überprüfen ob eine ganze Zahl gerade (teilbar durch 2) oder ungerade (nicht teilbar durch 2) ist.
Programm: Sie brauchen 2 Befehlsbuttons und 2 Textboxen auf der Form, um das Programm in Gang zu bekommen.
Benutzen Sie folgenden Code um die Eigenschaften der Steuerelemente automatisch einzurichten:
PUBLIC SUB Form_Open() Button1.Text = "Zufallszahl erzeugen" Button1.Move(16, 8, 176, 32) Button2.Text = "Gerade-Ungerade Testen" Button2.Move(16, 48, 176, 32) Textbox1.Text = "" Textbox1.Move(192, 8, 88, 32) Textbox2.Text = "" Textbox2.Move(192, 48, 88, 32) END
Sie können die Eigenschaften natürlich auch mit der Hand über das Eigenschaftsfenster festlegen. Der eigentliche Code beginnt hier:
PUBLIC SUB Button1_Click() Randomize() textbox1.Text = Str(Int(Rnd(1,101))) END PUBLIC SUB Button2_Click() DIM n AS Integer n = Val(textbox1.text) IF textbox1.Text = "" THEN textbox1.Text = Str(Int(Rnd(1,101))) IF n MOD 2 THEN textbox2.Text = "Ungerade" ELSE textbox2.Text = "Gerade" ENDIF END
Mit dem ersten Befehl wird eine ganze Zufallszahl zwischen 1 und 100 erzeugt. Mit dem zweiten Befehl wird die Teilbarkeit durch 2 überprüft.
Falls n eine ungerade Zahl ist, dann ist n MOD 2 gleich 1, denn es bleibt ein Rest von 1 übrig. Der Wahrheitswert ist true. Wenn kein Rest übrig bleibt ist der Wahrheitswert false.
Ausführlicher kann man auch schreiben:
IF n MOD 2 = true Then
Versuchen Sie es zu verstehen und probieren sie das Programm aus.
Übersicht der mathematischen Zeichen in Gambas
BearbeitenZahlendarstellung
BearbeitenEinfache Rechnungen mit ganzen Zahlen
BearbeitenZahlen werden in Gambas zunächst ganz normal wie gewohnt gehandhabt. So ergibt der Ausdruck PRINT 8 + 8 in der Ausgabe 16.
PUBLIC SUB Form_Open() PRINT 8 + 8 END
Will man mit Zahlen im Programm länger arbeiten, muss man sie als Variable definieren. Die einfachste Form dafür ist die Variable Integer. Die Deklaration einer Zahlenvariable erfolgt dann z.B. mit Dim zahl AS Integer.
Im folgenden einfachen Beispielprogramm für die Addition aller Ziffern von 1 bis 10 werden 2 Zahlenvariablen i und k definiert. Sie durchlaufen beide eine Schleife von 1 bis 10 und werden addiert. Kopieren Sie das Programm in Gambas und lassen Sie es laufen. Ersetzen Sie das Pluszeichen durch andere mathematische Zeichen und prüfen Sie was passiert.
PUBLIC SUB Form_Open() DIM i AS Integer DIM k AS Integer FOR i = 1 TO 10 FOR k = 1 TO 10 PRINT i + k & " "; NEXT PRINT NEXT END
Durch die erste Zeile mit dem Befehl Form_Open() startet das Programm sofort beim Aufrufen der Form. Mit den Befehlen DIM werden die Variablen i und k als ganze Zahlen (= Integer) festgelegt. Dann folgen 2 FOR - TO Schleifen, die verschachtelt sind. In der ersten Schleife wird die Variable i von 1 bis 10 hochgezählt. Bevor aber i zu einem höheren Wert springt, muss die innere Schleife für k immer wieder von 1 bis 10 abgearbeitet werden. In der Ausgabe mit dem Printbefehl werden dann i und k mathematisch verknüpft und im Direktfenster mit PRINT ausgegeben. Der Teil & " " fügt immer ein Leerzeichen zwischen die errechneten Zahlen i + k ein. Der Strichpunkt am Ende der Zeile verhindert einen Zeilenwechsel. So wird die Ausgabe in eine Zeile geschrieben.
Erst in der äußeren Schleife für i steht ein einsamer Printbefehl. Dieser bewirkt einen Zeilenvorschub jedesmal wenn ein neuer Wert für i angesagt ist. Der Zeilenwechsel erfolgt also immer nach 10 Zahlen in der Querausgabe. Beachten Sie bitte, dass die Schleifen mit dem Nextbefehl geschlossen werden. Beim Nextbefehl wird in Gambas auf die Angabe Next i oder Next k verzichtet. Der Computer weiß das selbst.
Wenn Sie die 2 Schleifen nicht verstehen, dann ersetzen sie einfach das Pluszeichen durch ein Komma oder einen Strichpunkt. Daraufhin starten Sie das Programm. Jetzt können Sie erkennen wie die Werte von i und k hochgezählt werden. Wenn Sie es immer noch verstehen, empfehle ich Ihnen den Einzelschrittmodus im Programmablauf.
Versuchen Sie das Programm zu vereinfachen und halten einen der Werte z.B. i konstant. Fügen Sie dazu z.B. eine Zeile i = 5 nach den DIM Befehlen ein und streichen Sie die äußere Schleife für den i Wert inklusive des Next Befehles.
Ihr Programm sollte dann so ausschauen:
PUBLIC SUB Form_Open() DIM i AS Integer DIM k AS Integer i = 5 FOR k = 1 TO 10 PRINT i + k & " "; NEXT PRINT END
Die Variable i ist hier eigentlich überflüssig und kann auch noch herausgeworfen werden. Resultat:
PUBLIC SUB Form_Open() DIM k AS Integer FOR k = 1 TO 10 PRINT 5 + k & " "; NEXT END
Auch die Multiplikation ist einfach und wie gewohnt. Sie müssen dazu nur im obigen Additionsprogramm das Pluszeichen mit dem englischen Multiplikationszeichen, dem Sternchen "*" ersetzen.
Die Multiplikation zeigt z.B. ein einfaches Einmaleinsprogramm: Siehe auch http://www.madeasy.de/7/prgschleife2.htm
PUBLIC SUB Form_Open() DIM i AS Integer DIM k AS Integer FOR i = 1 TO 10 FOR k = 1 TO 10 PRINT i * k & " "; NEXT PRINT NEXT END
Exponential Darstellung mit E
BearbeitenWenn Sie folgendes Programm laufen lassen, dann erscheint in der Ausgabe nicht wie erwartet 10 100 1000 etc sondern ab der Zahl eine Million werden die großen Zahlen mit 1.E+8 und 1.E+10 abgekürzt. Der Buchstabe E heißt in diesem Zusammenhang 10 hoch. Die danach folgende Zahl mit einem Plus oder Minuszeichen davor ist die Zahl mit der die Zehn hochgenommen wird, also die Potenz.
1.E+8 heißt also genauer 1,0 *10^8 oder 1,0 * 10 hoch 8 oder 1,0 *108
PUBLIC SUB Form_Open() DIM i AS Integer DIM k AS Integer i = 10 FOR k = 1 TO 10 PRINT k ^ i & " "; NEXT END
Noch einmal zur Wiederholung: Das große "E" bedeutet "Mal 10 hoch". Die Ganzzahl, die folgt gibt die Potenz von Zehn an mit der die Zahl zu multiplizieren ist. Eine andere Möglichkeit die Ganzzahl, die dem "E" folgt, zu betrachten ist, dass sie die Richtung und die Anzahl der Stellen angibt, in der der Dezimalpunkt zu verschieben ist. Positive Ganzzahlen bedeuten eine Rechtsverschiebung; negative Ganzzahlen bedeuten eine Linksverschiebung.
Rechenfehler
BearbeitenÜbrigens ergibt das folgende Programm einen Rechenfehler.
PUBLIC SUB Form_Open() PRINT 1000000 * 1000000 END
Rechnen Sie alle Ihre Gambas Programme mehrfach nach, da öfter unerwartete Ergebnisse durch Variablenumwandlung und durch die im Englischen und Deutschen verschiedene Verwendung des Punktes und des Kommas in Dezimalbrüchen auftreten.
Beispiel: Deutsch 1/2 = 0,5 Englisch 1/2 = 0.5
Dieses Problem tritt aber in den meisten anderen Programmiersprachen auch auf und ist nicht Gambas spezifisch.
Die deutschen Mathematiker sollten sich bald möglichst an die englische Notation anpassen und auch gleich die Zeichen für die Multiplikation, Division und Potenzierung an die Computernotierung ändern.
Eine Länderliste mit ihren Dezimaltrennzeichen findet sich hier: http://www.f-i-t.net/dezimalTrennz/
Hochzählen, Runterzählen, Abschneiden, Runden etc INC, DEC, INT, FRAC
BearbeitenINC Hochzählen, 1 dazuzählen
BearbeitenDer Befehl INC zählt zu jeder numerischen Variable eins dazu. INC steht für Increment, d.h. heraufzählen.
Beispiel im Terminalmodus (d.h ohne Grafik)
STATIC PUBLIC SUB Main() DIM X AS Integer X = 7 INC X PRINT X END
Die Ausgabe erfolgt im Direktfenster und lautet: 8
Zweites Beispiel mit einem Array
STATIC PUBLIC SUB Main() DIM A[3, 3] AS Float DIM X AS Integer DIM Y AS Integer X = 2 Y = 1 A[X, Y] = Pi INC A[X, Y] PRINT A[X, Y] END
Ausgabe: 4.14159265359
Man kann natürlich statt des INC Befehls auch einfach eins dazuzählen
INC X
Ist dasselbe wie
X = X + 1
Folgendes ist falsch und funktioniert nicht:
X = INC X
DEC Herunterzählen
BearbeitenDas Gegenteil von INC macht der Befehl DEC. Er zieht von der Zahl die 1 ab. DEC heißt auf englisch Decrement, d.h. herunterzählen.
Beispiel im Terminalmodus (d.h. ohne Grafik)
STATIC PUBLIC SUB Main() DIM X AS Integer X = 7 DEC X PRINT X END
Die Ausgabe erfolgt im Direktfenster und lautet: 6
STATIC PUBLIC SUB Main() DIM A[3, 3] AS Float DIM X AS Integer DIM Y AS Integer X = 2 Y = 1 A[X, Y] = Pi DEC A[X, Y] PRINT A[X, Y] END
Ausgabe: 2,14159265359
Vorzeichen und Absolutwert Sgn, Abs
BearbeitenSgn (Signum) Vorzeichen einer Zahl
BearbeitenDer Befehl Sgn liefert einen Wert, der für das Vorzeichen einer Zahl steht. Das Argument Zahl kann ein beliebiger zulässiger numerischer Ausdruck sein. Dessen Vorzeichen bestimmt den von der Sgn-Funktion ausgegebenen Wert:
- Ist die Zahl > 0 liefert Sgn(Zahl) den Wert 1.
- Ist die Zahl = 0 liefert Sgn(Zahl) den Wert 0.
- Ist die Zahl < 0 liefert Sgn(Zahl) den Wert -1.
Einfache Beispiele:
PRINT Sgn(Pi)
Ergebnis: 1
PRINT Sgn(-Pi)
Ergebnis: -1
PRINT Sgn(0)
Ergebnis: 0
Beispiel:
PUBLIC SUB Form_Open() DIM x AS Integer DIM y AS Float FOR x = 1 TO 100 y = Rnd(-5, 5) 'Es werden 100 Zufallszahlen zwischen -5 und +5 erzeugt. SELECT CASE Sgn(y) '...auswerten. CASE 0 ' Wenn Zahl Null. PRINT y & " " & Sgn(y) & " Signum = Null." CASE 1 ' Wenn Zahl positiv. PRINT y & " " & Sgn(y) & " Signum = positive Zahl." CASE -1 ' Wenn Zahl negativ. PRINT y & " " & Sgn(y) & " Signum = negative Zahl." END SELECT NEXT END
Oder etwas anders:
PUBLIC SUB Form_Open() DIM x AS Integer DIM y AS Float DIM pos AS Integer DIM neg AS Integer DIM nul AS Integer pos = 0 neg = 0 nul = 0 FOR x = 1 TO 100 y = Rnd(-5, 5) 'Es werden 100 Zufallszahlen zwischen -5 und +5 erzeugt. SELECT CASE Sgn(y) '...auswerten. CASE 0 ' Wenn Zahl null. INC nul CASE 1 ' Wenn Zahl positiv. INC pos CASE -1 ' Wenn Zahl negativ. INC neg END SELECT NEXT PRINT nul,pos,neg END
Es geht natürlich auch ohne den INC Befehl:
STATIC PUBLIC SUB Main() DIM x AS Integer DIM y AS Float DIM pos AS Integer DIM neg AS Integer DIM nul AS Integer pos = 0 neg = 0 nul = 0 FOR x = 1 TO 100 y = Rnd(-5, 5) 'Es werden 100 Zufallszahlen zwischen -5 und +5 erzeugt. SELECT CASE Sgn(y) '...auswerten. CASE 0 ' Wenn Zahl null. nul = nul + 1 CASE 1 ' Wenn Zahl positiv. pos = pos + 1 CASE -1 ' Wenn Zahl negativ. neg = neg + 1 END SELECT NEXT PRINT nul,pos,neg END
Wie zu erwarten gibt es fast keine Treffer auf der Null, Erhöhen Sie die Zahl x und schauen Sie nach, ob irgendwann auch einmal die Null getroffen wird.
Absolutwert einer Zahl ABS
BearbeitenDer Befehl ABS liefert den Absoluten Betrag einer Zahl, d.h das Vorzeichen wird weggestrichen, wenn es negativ ist. In der Mathematik verwendet man dafür 2 senkrechte Striche |-2| = 2.
Kleine Beispiele dazu:
Print abs(-2)
Ergebnis: 2
Print abs(2)
Ergebnis: 2
Print abs(0)
Ergebnis: 0
Siehe auch: http://www.madeasy.de/7/prgabs.htm
Ein etwas längeres Beispiel im Terminalmodus:
STATIC PUBLIC SUB Main() DIM i AS Integer FOR i = -10 TO 10 PRINT i & " => Abs(i) => " & Abs(i) NEXT END
Der Val Befehl - Aus einem Text etwas Sinnvolles machen
BearbeitenVal() wandelt einen String (= Folge von Asciizeichen) in einen Datentyp um, der dem Inhalt des Strings entspricht. Wenn der String ausschaut wie eine Fließkommazahl, dann macht Val() eine Fließkommazahl daraus. Val() benutzt die lokale Sprache ihrer Maschine (hier also deutsch), die in "locales" festgelegt wurde.
Sie können Ihre Einstellung mit folgendem Konsolenbefehl überprüfen: "locales" oder "echo $LANG".
Auf einer deutschen Maschine erhält man: de_DE@euro
Vorsicht: Mit Kommazahlen und der Ländereinstellung! Der Val Befehl ist fehlerträchtig!
Steht in einer Textbox1 6,6 mit deutscher Ländereinstellung, dann liefert Val(textbox1.text) eine Floatvariable mit dem Wert 6,6.
Steht in der Textbox 6.6 dann liefert Val(textbox1.text) ein Datum 06.06.04
Wollen Sie die Zahl wieder in einen deutschen Text verwandeln, dann nutzen Sie Str(zahl) zur Umwandlung.
Probieren Sie die Ländereinstellungen Ihres PCs mit folgendem Programm einfach einmal aus. Die Ausgabe erfolgt im Direktfenster:
PUBLIC SUB Form_Open() PRINT Val("6.6.99") PRINT Val("09/06/72 01:00") PRINT Val("3.1415") PRINT Val("3,1415") PRINT Val("-25") PRINT Val("True") PRINT Val("False") PRINT IsNull(Val("Gambas")) END
Bei deutscher Ländereinstellung ergibt sich:
06.06.99 31415 3,1415 -25 True False True
Weiteres Beispielprogramm
Siehe auch: https://web.archive.org und Suchen nach www.madeasy.de/7/prgval.htm
Wenn Sie einen Textstring eingeben, dann wandelt das Programm den String mit Val um und die Art der umgewandelten Variable wird überprüft.
Das Ergebnis wird ausgegeben.
PUBLIC SUB _new() TextLabel1.Text = "Tippen Sie etwas ein, das wie ein Datum, eine Zahl, eine Kommazahl oder eine Boolesche Variable ausschaut" END PUBLIC SUB Button1_Click() x AS Variant x = Val(TextBox1.Text) IF IsDate(x) THEN Label1.Text="Das ist eine Datumsangabe!" IF IsBoolean(x) THEN Label1.Text="Das ist eine Boolesche Variable!" IF IsInteger(x) THEN Label1.Text="Das ist eine Zahl!" IF IsFloat(x) THEN Label1.Text="Das ist eine Kommazahl!" IF IsString(x) THEN Label1.Text="Das ist ein String!" END
Vorsicht: Bei der Eingabe von True, wird zwar eine Boolesche Variable erkannt, der Wert wird aber in einer zweiten Textbox nicht ausgegeben. Bei der Eingabe von False, wird zwar eine Boolesche Variable erkannt, der Wert wird aber in einer zweiten Textbox nicht ausgegeben.
Theorie
BearbeitenAusdruck = Val(String)
Konvertiert einen String in einen booleschen Wert, eine Zahl oder ein Datum, abhängig vom Inhalt des Strings. Bei der Umwandlung von Zahlen und Datumsangaben werden die gegenwärtigen local-Einstellungen berücksichtigt.
Die Umwandlung geschieht folgendermaßen:
- Wenn der String als Datum und Zeit (mit Datums- und Zeit-Trennzeichen) interpretiert werden kann, dann wird Datum und Zeit zurückgegeben.
- Andernfalls, wenn der String als Fließkommazahl interpretiert werden kann, dann wird eine Fließkommazahl zurückgegeben.
- Andernfalls, wenn der String als Ganzzahl interpretiert werden kann, dann wird eine Ganzzahl zurückgegeben.
- Andernfalls, wenn der String TRUE oder FALSE ist, dann wird der entsprechende boolesche Wert zurückgegeben.
- Ansonsten wird NULL zurückgegeben.
Eulersche Zahl berechnen
BearbeitenSiehe auch http://www.madeasy.de/7/prge.htm und http://www.madeasy.de/2/e.htm
Mit der folgenden Formel kann man die Eulersche Zahl berechnen.
e = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... + 1/n!
Die Formel wird in ein einfaches Programm eingebaut. Die unendlich Folge wird im Beispiel nach 15 Schleifendurchgängen abgebrochen. Man kann die Zahl aber auch noch genauer berechnen.
Das Programm ist als Terminal Programm ohne Grafik codiert.
STATIC PUBLIC SUB Main() E AS Float QF AS Float F AS Integer K AS Integer E = 1 F = 1 FOR K = 1 TO 15 F = F * K QF = CFloat(1)/F E = E + QF PRINT E NEXT END
Fibonaccifolge berechnen
BearbeitenSiehe auch: http://www.madeasy.de/7/prgfibo.htm
Mit dem folgenden Programm kann man die Fibonaccifolge berechnen.
Es ist als Terminal Programm ohne Grafik codiert.
STATIC PUBLIC SUB Main() a AS Integer b AS Integer x AS Integer a = 1 b = 1 FOR x = 1 TO 23 PRINT 2*x-1, a PRINT 2*x, b a = a + b b = a + b NEXT END
Ausgabe:
1 1 2 1 3 2 4 3 5 5 6 8 7 13 8 21 9 34 10 55 11 89 12 144 13 233 14 377 15 610 16 987 17 1597 18 2584 19 4181 20 6765 21 10946
Versuchen Sie an Hand des obigen Codes, das Ganze als Funktion zu programmieren:
Eingabe der Funktion soll sein fibo(n). Herauskommen soll die Fibonaccizahl, die zu dem entsprechenden N-Wert gehört. Allerdings muss man sicher sehr bald eine Größenbegrenzung einführen, da die Zahlen sehr schnell sehr groß werden.
Lucasfolge berechnen
BearbeitenDie Lucasfolge hat die gleiche Bildungsregel wie die Fibonacci-Folge. Sie unterscheidet sich allerdings in den beiden Anfangsgliedern. Statt 0 und 1 lauten die beiden Anfangsglieder 2 und 1.
Mit dem folgenden Programm kann man die Lucasfolge berechnen.
Es ist als Terminal Programm ohne Grafik codiert.
STATIC PUBLIC SUB Main() a AS Integer b AS Integer x AS Integer a = 2 b = 1 FOR x = 1 TO 23 PRINT 2*x-1, a PRINT 2*x, b a = a + b b = a + b NEXT END
Ausgabe
1 2 2 1 3 3 4 4 5 7 6 11 7 18 8 29 9 47 10 76 11 123 12 199 13 322 14 521 15 843 16 1364 17 2207 18 3571 19 5778 20 9349 21 15127 22 24476 23 39603
Das Summenzeichen programmieren
BearbeitenDie Mathematik bereitet dem Anfänger schon deswegen erhebliche Schwierigkeiten, weil sie dazu neigt, neue komplizierte Zeichen zu benutzen. Ein Beispiel ist das Summenzeichen. Wenn man es verstehen will, sollte man es einfach programmieren. Programmiertechnisch ist es eine For Next Schleife mit Aufsummierung des Ergebnisses aus jedem Schleifendurchlauf.
Wie kann man das Zeichen programmieren?
Dazu benutzen wir 2 Beispiele:
Beispiel 1
BearbeitenDas Programm dazu schaut so aus: Sie brauchen eine Textbox und einen Commandbutton, um es in Gang zu bringen.
Code:
PUBLIC SUB Form_Open() Button1.Text = "Berechne die Summe" Textbox1.Text = "" END PUBLIC SUB Button1_Click() i AS Integer 'i ist die Laufvariable von -2 bis 3 s AS Variant 's ist die Summe s = 0 FOR i = -2 TO 3 s = s + i 'PRINT i, s NEXT textbox1.Text = Str(s) END
Verändern Sie das Programm so, dass Sie den Anfangswert und den Endwert der Laufvariablen i in eine Textbox eingeben können. Fügen Sie dazu in das Programm 2 neue Variablen ein
a as integer ' a = Anfangswert e as integer ' e = Endwert
Ändern Sie die Schleife in
For i = a to e
Vorher müssen Sie noch a und e Werte zuweisen:
a = 0 e = 6
Oder:
a = val(Textbox2.Text) e = val(Textbox3.Text)
Beispiel 1a
BearbeitenDas Programm dazu schaut so aus: Sie brauchen eine Textbox und einen Commandbutton, um es in Gang zu bringen.
Code:
PUBLIC SUB Form_Open() Button1.Text = "Berechne die Summe" Textbox1.Text = "" END PUBLIC SUB Button1_Click() i AS Integer 'i ist die Laufvariable von 1 bis 10 s AS Variant s = 0 FOR i = 1 TO 10 s = s + i*i 'PRINT i, s NEXT textbox1.Text = Str(s) END
Verändern Sie das Programm so, dass Sie den Anfangswert und den Endwert der Laufvariablen i in eine Textbox eingeben können. Fügen Sie dazu in das Programm 2 neue Variablen ein
a as integer ' a = Anfangswert e as integer ' e = Endwert
Ändern Sie die Schleife in
For i = a to e
Vorher müssen Sie noch a und e Werte zuweisen:
a = 1 e = 10
Oder:
a = val(Textbox2.Text) e = val(Textbox3.Text)
Beispiel 2
BearbeitenBerechnet werden soll
Das Programm dazu schaut so aus:
Die Zwischenwerte wurden dabei im Direktfenster mit Print ausgegeben. Sie brauchen eine Textbox und einen Commandbutton, um es in Gang zu bringen.
PUBLIC SUB Form_Open() Button1.Text = "Berechne Summe" Textbox1.Text = "" END PUBLIC SUB Button1_Click() i AS Integer 'i ist die Laufvariable von 0 bis 6 s AS Variant s = 0 FOR i = 0 TO 6 s = s + i / (i + 1) PRINT i, (i / (i + 1)), s '0 + 1/2 + 2/3 + 3/4 + 4/5 + 5/6 + 6/7 = 210/420 + 280/420 + 315/420 + 336/420 + 350/420 + 360/420 NEXT textbox1.Text = Str(s) END
Man erkennt den Unterschied der Computerberechnung und der eigenen Berechnung auf dem Papier. 0 + 1/2 + 2/3 + 3/4 + 4/5 + 5/6 + 6/7 = 210/420 + 280/420 + 315/420 + 336/420 + 350/420 + 360/420 Auf dem Papier sucht man den kleinsten gemeinsamen Nenner. Dann erweitert man die Brüche entsprechend. Die Zähler kann man dann addieren. Ergebnis 1851/420 = 617/140 = 4.407142857142857
Der entscheidende Vorteil des Computerprogrammes ist die leichte Erweiterbarkeit. Man kann den Anfangswert 0 für i als Variable allgemein lassen. Man kann den Endwert für i = 6 allgemein lassen. Dann eignet sich das Programm nicht nur für eine spezielle Summe, sondern gleich für beliebige Summen derselben Art.
PUBLIC SUB Form_Open() Button1.Text = "Berechne Summe" Textbox1.Text = "" END PUBLIC SUB Button1_Click() i AS Integer 'i ist die Laufvariable von 0 bis 6 a as integer 'a ist der Anfangswert für i z as integer 'z ist der Endwert für i s AS Variant s = 0 a = 0 z = 6 FOR i = a TO z s = s + i / (i + 1) 'PRINT i, (i / (i + 1)), s NEXT textbox1.Text = Str(s) END
Zahlen zählen
BearbeitenDieses Programm zählt aus einer langen Schlange von Dezimalzahlen die Häufigkeit von 1,2,3,4,5,6,7,8,9,0. Es ist in typischer Anfängermanier programmiert. Das ist keine Schande, denn es erfüllt seinen Zweck. Mit einem Array könnte man das Programm wahrscheinlich deutlich verkürzen.
Die Ergebnisausgabe erfolgt wie üblich im Direktfenster.
Um das Programm in Gang zu bringen brauchen Sie eine Textarea und 2 Commandbuttons auf ihrer Form.
PUBLIC SUB Form_Open() Button1.Text = "Zahlen zählen" Button2.Text = "Beispiel" Textarea1.Text = "" ME.Text = "Zahlen zählen" END PUBLIC SUB Button1_Click() s AS String n AS Integer Tempo AS String char AS String z0 AS Integer z1 AS Integer z2 AS Integer z3 AS Integer z4 AS Integer z5 AS Integer z6 AS Integer z7 AS Integer z8 AS Integer z9 AS Integer s = textarea1.Text z0 = 0 z1 = 0 z2 = 0 z3 = 0 z4 = 0 z5 = 0 z6 = 0 z7 = 0 z8 = 0 z9 = 0 Tempo = RTrim$(s) Tempo = LTrim$(Tempo) FOR n = 1 TO Len(Tempo) char = Mid$(Tempo, n, 1) SELECT CASE char CASE "0" z0 = z0 + 1 CASE "1" z1 = z1 + 1 CASE "2" z2 = z2 + 1 CASE "3" z3 = z3 + 1 CASE "4" z4 = z4 + 1 CASE "5" z5 = z5 + 1 CASE "6" z6 = z6 + 1 CASE "7" z7 = z7 + 1 CASE "8" z8 = z8 + 1 CASE "9" z9 = z9 + 1 END SELECT NEXT PRINT z0, z1, z2, z3, z4 PRINT z5, z6, z7, z8, z9 END PUBLIC SUB Button2_Click() textarea1.Text = "1234567893523652314232723742734247247899990001223445" END
Funktionsdarstellung
BearbeitenLeider funktioniert der VB Befehl Scale in Gambas noch nicht. Trotzdem gibt es schon ein paar brauchbare Funktionsdarstellungen: http://www.madeasy.de/7/prgkoord.htm http://www.madeasy.de/7/prgfunkt.htm
Trigonometrische Funktionen in Gambas
BearbeitenAcsh / ACosh, Acs / ACos, Asn / ASin, Asnh / ASinh, Atn / ATan, Atnh / ATanh, Cos, Cosh, Deg, Rad, Pi, Sin, Sinh
Beispiel Programm für den sin und cos ohne Grafik
BearbeitenSTATIC PUBLIC SUB Main() DIM a AS Float FOR a = - 10 TO 10 STEP 0.1 PRINT a," Sin ",Sin(a)," Cos ",Cos(a) NEXT END
In der Ausgabe stecken noch einige Fehler. Der Wert a = 0 wird beispielsweise nicht korrekt ausgegeben. Auch die Werte a = 0,1 und a = 10 machen Schwierigkeiten.
Grafische Ausgabe der Sinusfunktion
BearbeitenSiehe http://www.madeasy.de/7/prgsinohne.htm
Dieses Grafikprogramm zeigt die Programmierung der Sinusfunktion: Sie brauchen einen Befehlsknopf und ein Zeichenfeld. Stellen Sie die Höhe des Zeichenfeldes bei den Eigenschaften auf 100 ein (Height).
Hinter dem Befehl Sinuskurve steht folgender Code:
PUBLIC SUB Button1_Click() DIM dymax AS Integer ' maximaler gezeichneter y - Wert = Height drawymax DIM dymin AS Integer ' minimaler gezeichneter y - Wert = 0 drawymin DIM ymax AS Integer DIM ymin AS Integer 'gewünschtes Koordinatensystem mit ymax und ymin DIM y AS Float 'wechselnder Orginalwert von y DIM dy AS Float 'gezeichneter Wert von y DIM dyi AS Integer 'Ganzzahlwert von dy DIM x AS Float DIM dxi AS Integer 'Ganzzahlwert von dx ' Beispiel dymax = 100 und dymin = 0 dymax = 100 dymin = 0 ymax = 1 ymin = -1 FOR x = 0 TO 12 STEP 0.1 y = Sin(x) 'Formel 'Verhältnis Teilstrecke / Gesamtstrecke in beiden Maßstäben sind gleich '(dy - dymin) / (dymax - dymin) = (y - ymin) / (ymax - ymin) '==> dy - dymin = (y - ymin) / (ymax - ymin) * (dymax - dymin) '==> dy = (y - ymin) / (ymax - ymin) * (dymax - dymin) + dymin dy = CFloat(y - ymin) / (ymax - ymin) * (dymax - dymin) + dymin 'PRINT x,y,dy dyi = Fix(dy) dxi = Fix(x *30) Draw.Begin(DrawingArea1) Draw.Point(dxi,dyi) Draw.End NEXT END
Spielen Sie mit den einzelnen Größen etwas herum und beobachten Sie wie sich die Grafik ändert. Verändern Sie das Programm so, dass der Sinus korrekt mit 0 anfängt und erst ins positive wächst. Was ist hier noch falsch? (dy Werte werden noch von oben nach unten aufgetragen und nicht umgekehrt.) Versuchen Sie die Umrechnungen für dyi alle in eine Formel zu bekommen.
Logik
BearbeitenPrimzahlen berechnen
BearbeitenDas folgende Programm zeigt die Suche nach Primzahlen mit Hilfe des Siebs von Eratosthenes. Die Ergebnisausgabe erfolgt im Direktfenster.
Um es in Gang zu bringen brauchen Sie 2 Commandbuttons und 1 Textbox auf Ihrer Form.
PUBLIC SUB Form_Open() ME.Text = "Primzahlberechnung" END PUBLIC SUB Button1_Click() m AS Integer f AS Integer n AS Integer A$ AS String if textbox1.Text = "" Then textbox1.text = "1" m = Val(textbox1.Text) 'holt sich aus dem Textfeld1 die erste Zahl zum Testen IF m / 2 = Int(m / 2) THEN m = m - 1 'Falls diese Zahl ohne Rest durch 2 teilbar ist, also eine gerade Zahl ist 'geht das Programm noch eine Zahl rückwärts um eine ungerade Zahl zu bekommen IF textbox1.Text = "" THEN m = 6 'Falls keine Startzahl eingegeben wurde wird die Startzahl m = 6 vergeben. FOR m = m TO m + 1000 STEP 2 'Hauptschleife 'Die nächsten 1000 ungeraden Zahlen in einer Schleife durchlaufen lassen 'm ist die Variable für die ungeraden Zahlen f = 1 'f ist die Variable für die Faktorentestung, 'm teilbar durch f oder nicht n = m 'n = ist die Testzahl, bei der noch nicht klar ist ob sie eine Primzahl ist DO WHILE f < Sqr(n) 'solange der Teiler f kleiner als die Wurzel 'aus der Testzahl n ist, muss getestet werden f = f + 2 'Teiler von f = 1 beginnend um jeweils 2 vermehren, 3,5,7,9 etc erster Test also mit f = 3 DO WHILE n / f = Int(n / f) 'Teiler f testen solange bis n / f ohne Rest teilbar 'PRINT "m = "; m; " n = "; n; " f = "; f n = Int(n / f) 'Die Testzahl n verkleinern auf die Zahl n/f LOOP LOOP A$ = " 1" & Chr(13) & " 2" & Chr(13) & " 3" IF m < 7 THEN PRINT A$ 'Chr(13) = Zeilenwechsel 'Am Anfang zwischen 1 und 5 gibt es Probleme mit der Ausgabe 'deswegen werden die ersten drei Zeilen ersetzt durch A$ IF n = m THEN PRINT n 'Wenn die Testzahl n nicht teilbar war durch f 'ist es eine Primzahl und kann ausgedruckt werden NEXT CATCH message.Info("Bitte eine Zahl eingeben") END
Logarithmus
BearbeitenMit dem Logarithmus kann man sehr große Zahlen übersichtlich und klein machen. Aus 1 000 000 wird beispielsweise 10^6 (Sprich 10 hoch 6 = 10 * 10 * 10 * 10 *10 *10). Dabei ist die Hochzahl 6 der Logarithmus von 1 000 000 zur hier gewählten Basiszahl 10. Der Begriff Hochzahl und Exponent sind identisch.
Die Logarithmusfunktion y = logb (x) liefert für jede beliebige positive Zahl x einen Wert. So ist der Logarithmus der Zahl 1 234 567 zur Basis 10 gleich log10 (1234567) = 6.09151466408626 Insbesondere für Werte, die sehr klein oder sehr groß sind oder die einen sehr großen Wertebereich einnehmen können, haben sich Logarithmen sehr bewährt. Da die Logarithmusfunktion mit größer werden x Werten stetig wächst, bleiben logische Zusammenhänge, die für den x Wert gelten meist auch für den Logarithmus von x erhalten.
Anwendung von Logarithmen:
Bearbeiten- pH = Säurewert von chemischen Lösungen
- dB = Dezibel = Messung der Lautstärke
- bit = Informationseinheit = Messung der Informationsmenge
- Logarithmuspapier in der Statistik
Siehe auch:
Beispielprogramm Log Befehl
BearbeitenUm den Befehl Log zu verstehen, kann man ihn einfach für verschiedene Werte berechnen: L = log(x) L ist der natürliche Logarithmus von x zur Basis e,der Eulerschen Zahl
e = 2,718281828459
Man schreibt sich ein Miniprogramm mit einer Form und einem Befehlsbutton:
Der Code dazu lautet:
PUBLIC SUB Form_Open() Button1.Text = "log" END PUBLIC SUB Button1_Click() x AS Integer FOR x = 1 TO 10 PRINT x, Log(x) NEXT END
Die Ausgabe erfolgt im Direktfenster. Sie lautet:
1 0 2 0,69314718056 3 1,098612288668 4 1,38629436112 5 1,609437912434 6 1,791759469228 7 1,945910149055 8 2,07944154168 9 2,197224577336 10 2,302585092994
Wenn Sie Ihre Schleife für x mit einer negativen Zahl anfangen lassen, erhalten Sie eine Fehlermeldung:
Mathematic Error
Denn Logarithmus einer negativen Zahl gibt es nicht.
Genauere Version
BearbeitenWenn man die Schleife in genaueren Schritten laufen lassen will, benutzt man folgende Codevariante:
PUBLIC SUB Form_Open() Button1.Text = "log" END PUBLIC SUB Button1_Click() x AS Float FOR x = 0.1 TO 10 STEP 0.1 PRINT x, Log(x) NEXT END
Ausgabe im Direktfenster:
0,1 -2,302585092994 0,2 -1,609437912434 0,3 -1,203972804326 0,4 -0,916290731874 0,5 -0,69314718056 0,6 -0,510825623766 0,7 -0,356674943939 0,8 -0,223143551314 0,9 -0,105360515658 1 -1,110223024625E-16 1,1 0,095310179804 1,2 0,182321556794 1,3 0,262364264467 1,4 0,336472236621
etc...
Beispielprogramm Logbefehl mit beliebiger Eingabe
BearbeitenWenn man den Log Befehl mit einer beliebigen positiven Zahl testen will, kann man folgendes Programm nutzen.
Sie brauchen 2 Textboxen und 1 Befehlsknopf (Commandbutton) auf Ihrer Form. Machen Sie die Textbox2 groß genug, damit alle Nachkommastellen Platz haben.
Code:
PUBLIC SUB Form_Open() ME.Text = "Was macht der Log Befehl" Textbox1.Text = "" Textbox2.Text = "" Button1.Text = "Log" END PUBLIC SUB Button1_Click() x AS Float L AS Float IF Textbox1.Text = "" THEN textbox1.text = "1" IF Val(textbox1.Text) <= 0 THEN message.info = "Unzulässige Eingabe" RETURN ENDIF 'Umformen der Texteingabe 1 in eine genaue Zahl x = Val(textbox1.Text) L = Log(x) 'Ausgabe des Ergebnises als String im Textfeld 2 textbox2.Text = Str(L) END
Im Code dieses Programms steckt noch ein Fehler. Die Messagebox (Meldung) wurde falsch programmiert:
Statt:
IF Val(textbox1.Text) <= 0 THEN message.info = "Unzulässige Eingabe"
Sollten Sie schreiben:
IF Val(textbox1.Text) <= 0 THEN Message.info("Unzulässige Eingabe Zahl kleiner Null", "OK")
Wie kann man noch Fehleingaben von Buchstaben verhindern?
Beispielprogramm Dualer Logarithmus
BearbeitenDer Duale Logarithmus nutzt als Basis die Zahl 2. Um ihn mit dem Befehl log zu erhalten, muss man den natürlichen in den dualen umrechnen. dazu nutzt man folgende Formel:
L = log2x = logex / loge2
Code:
PUBLIC SUB Form_Open() ME.Text = "Dualer Logarithmus" Textbox1.Text = "" Textbox2.Text = "" Button1.Text = "Log2" END PUBLIC SUB Button1_Click() x AS Float L AS Float x = Val(textbox1.Text) L = Log(x)/Log(2) 'Ausgabe des Ergebnises als String im Textfeld 2 textbox2.Text = Str(L) END
Beispielprogramm Dekadischer Logarithmus
BearbeitenDer dekadische Logarithmus nutzt als Basis die Zahl 10. Um ihn mit dem Befehl log zu erhalten, muss man den natürlichen in den dekadischen umrechnen. dazu nutzt man folgende Formel:
L = log10x = logex / loge10
Code:
PUBLIC SUB Form_Open() ME.Text = "Dualer Logarithmus" Textbox1.Text = "" Textbox2.Text = "" Button1.Text = "Log2" END PUBLIC SUB Button1_Click() x AS Float L AS Float x = Val(textbox1.Text) L = Log(x)/Log(10) 'Ausgabe des Ergebnises als String im Textfeld 2 textbox2.Text = Str(L) END
Beispielprogramm Logarithmusrechner
BearbeitenZum Berechnen von Logarithmen kann man folgendes kleine Programm nutzen. Um es in Gang zu bringen braucht man:
- 5 Commandbuttons
- 4 Textboxen
- 3 Textlabelfelder
Der Code:
PUBLIC SUB Form_Open() 'automatisches Benennen der Steuerelemente beim Programmstart Textbox1.Text = "" Textbox2.Text = "" Textbox3.Text = "" textbox4.Text = "" Button1.Text = "Basis 2" Button2.Text = "Basis e" Button3.Text = "Basis 10" Button4.Text = "Berechnen" Button5.Text = "Ende" Textlabel1.Text = "Der Logarithmus der Zahl" Textlabel2.Text = "zur Basis " Textlabel3.Text = "beträgt: " Textlabel1.Alignment = 66 Textlabel2.Alignment = 66 Textlabel3.Alignment = 66 Textlabel1.BackColor = &Hffffff& Textlabel2.BackColor = &HFFFFFF& Textlabel3.BackColor = &HFFFFFF& Textlabel1.Border = 1 Textlabel2.Border = 1 Textlabel3.Border = 1 Form1.Move(174,455,393,242) Form1.Border = Window.Fixed Button1.Move(80,64,64,32) Button2.Move(160,64,64,32) Button3.Move(240,64,64,32) Button4.Move(272,112,112,32) Button5.Move(272,192,112,32) TextBox1.Move(240,16,144,40) TextBox2.Move(120,112,144,32) TextBox3.Move(120,152,144,32) TextBox4.Move(24,192,240,32) TextLabel1.Move(8,16,216,40) TextLabel2.Move(24,112,96,32) TextLabel3.Move(24,152,96,32) END PUBLIC SUB Button4_Click() x AS Float y AS Float L AS Float textbox4.Text = "" 'Fehleingaben abfangen IF Textbox1.Text = "" OR textbox2.Text = "" THEN textbox4.text = "Eingabe fehlt!" IF Textbox1.Text = "" OR textbox2.Text = "" THEN RETURN IF Val(textbox1.Text) <= 0 THEN textbox4.Text = "Unzulässige Eingabe" IF Val(textbox1.Text) <= 0 THEN RETURN IF Val(textbox2.Text) <= 1 THEN textbox4.Text = "Unzulässige Eingabe" IF Val(textbox2.Text) <= 1 THEN RETURN 'Umformen der Texteingabe 1 und 2 in eine genaue Zahl x = Val(textbox1.Text) y = Val(textbox2.Text) 'allgemeine Logarithmusformel L = Log(x) / Log(y) 'Ausgabe des Ergebnises im Textfeld 3 textbox3.Text = Str(L) END PUBLIC SUB Button1_Click() textbox2.Text = 2 END PUBLIC SUB Button3_Click() textbox2.Text = 10 END PUBLIC SUB Button2_Click() textbox2.Text = "2,718282" END PUBLIC SUB Button5_Click() ME.Close END
Zinsrechnung
BearbeitenDie im Folgenden aufgeführten Formeln für die Zinsrechnung verwenden Symbole wie folgt:
- Anfangskapital: K0 (Kapital nach 0 Jahren)
- Endkapital: Kn (Kapital nach n Jahren)
- Laufzeit (ganze Jahre): n Eingabe in Jahren
- Laufzeit (Tage) : t Eingabe in Tagen
- Zinssatz als Dezimalangabe: (pro Zinsperiode)
Beispielprogramm Einfache Zinsen ohne Zinseszinsen (lineare Verzinsung)
BearbeitenUm einfache Zinsen auszurechnen verwenden wir die folgende Formel:
Für das Beispielprogramm braucht sie :
- 4 Valueboxen
- 1 Befehlsknopf (Commandbutton)
oder verwenden sie den folgenden .form Code
# Gambas Form File 2.0 { Form Form MoveScaled(0,0,53,31) Text = ("") { Label1 Label MoveScaled(45,8,6,3) Text = ("Jahre") } { Label2 Label MoveScaled(45,13,4,3) Text = ("%") } { Label3 Label MoveScaled(1,3,14,3) Text = ("Anfangskapital") } { Label4 Label MoveScaled(4,8,11,3) Text = ("Laufzeit") } { Label5 Label MoveScaled(4,13,11,3) Text = ("Zinssatz") } { Label6 Label MoveScaled(1,25,14,4) Text = ("Endkapital") } { Button1 Button MoveScaled(7,18,38,5) Text = ("Berechnen") } { ValueBox1 ValueBox MoveScaled(16,3,28,3) } { Label7 Label MoveScaled(45,3,6,3) Text = ("Euro") } { ValueBox2 ValueBox MoveScaled(16,8,28,3) } { ValueBox3 ValueBox MoveScaled(16,13,28,3) } { ValueBox4 ValueBox MoveScaled(16,25,28,4) } { Label8 Label MoveScaled(45,25,6,3) Text = ("Euro") } }
Der .class Code
' Gambas class file 'K (Anfangskapital) = ValueBox1.Value 'n (Laufzeit in Jahren) = ValueBox2.Value 'i (Zinssatz) = ValueBox3.Value / 100 'Kn (Endkapital) = ValueBox4.Value PUBLIC SUB Button1_Click() 'Endkapital berechnen mit der Formel: ' Kn = K*(i*n+1) ValueBox4.Value = (ValueBox1.Value * (ValueBox3.Value / 100 * ValueBox2.Value + 1)) END
Beispielprogramm Zinseszinsrechnung (exponentielle Verzinsung)
BearbeitenUm Zinsen mit Zinseszins auszurechnen verwenden, wir die folgende Formel:
Für das Beispielprogramm brauchen Sie:
- 5 Valueboxen
- 1 Checkbox
- 1 Befehlsknopf (Commandbutton)
oder verwenden Sie den folgenden .form-Code
# Gambas Form File 2.0 { Form Form MoveScaled(0,0,53,39) Text = ("") { Label1 Label MoveScaled(45,8,6,3) Text = ("Jahre") } { Label2 Label MoveScaled(45,13,4,3) Text = ("%") } { Label3 Label MoveScaled(1,3,14,3) Text = ("Anfangskapital") } { Label4 Label MoveScaled(4,8,11,3) Text = ("Laufzeit") } { Label5 Label MoveScaled(4,13,11,3) Text = ("Zinssatz") } { Label6 Label MoveScaled(1,28,14,4) Text = ("Endkapital") } { Button1 Button MoveScaled(7,22,38,5) Text = ("Berechnen") } { ValueBox1 ValueBox MoveScaled(16,3,28,3) } { Label7 Label MoveScaled(45,3,6,3) Text = ("Euro") } { ValueBox2 ValueBox MoveScaled(16,8,28,3) } { ValueBox3 ValueBox MoveScaled(16,13,28,3) } { ValueBox4 ValueBox MoveScaled(16,28,28,4) } { Label8 Label MoveScaled(45,28,6,3) Text = ("Euro") } { Label9 Label MoveScaled(1,34,14,3) Text = ("Zinsen") } { ValueBox5 ValueBox MoveScaled(16,34,28,3) } { Label10 Label MoveScaled(45,34,6,3) Text = ("Euro") } { CheckBox1 CheckBox MoveScaled(16,18,27,2) Text = ("Mit Zinseszins") } }
Der .class-Code
' Gambas class file 'K (Anfangskapital) = ValueBox1.Value 'n (Laufzeit in Jahren) = ValueBox2.Value 'i (Zinssatz) = ValueBox3.Value / 100 'Kn (Endkapital) = ValueBox4.Value 'Z (Zinsen/Zinswert) = ValueBox5.Value PUBLIC SUB Button1_Click() IF CheckBox1.Value = FALSE THEN 'Normale Zinsen berechnen 'Endkapital berechnen, mit der Formel: ' Kn = K*(i*n+1) ValueBox4.Value = Round(ValueBox1.Value * (ValueBox3.Value / 100 * ValueBox2.Value + 1), -2) 'Zinsen/Zinswert berechnen, mit der Formel: ' Z = K*(i*n+1)-K = Kn-K ValueBox5.Value = Round(ValueBox4.Value - ValueBox1.Value, -2) ELSE 'Zinseszins berechnen 'Endkapital berechnen, mit der Formel: ' Kn = K*(i+1)^n ValueBox4.Value = Round(ValueBox1.Value * (ValueBox3.Value / 100 + 1) ^ ValueBox2.Value, -2) 'Zinsen/Zinswert berechnen, mit der Formel: ' Z = K*(i+1)^n-K = Kn-K ValueBox5.Value = Round(ValueBox4.Value - ValueBox1.Value, -2) ENDIF END