Kurs:FreeBASIC/Lerngruppen/Testlauf
Ich werde die Anfängerkurse beim FreeBasic-Portal durcharbeiten und möchte meinen "Lernfortschritt" hier in der Wikiversity dokumentieren. --Michael Reschke 12:51, 26. Jun. 2008 (CEST)
Tutorials
[Bearbeiten]Alle Tutorials sind hier zu finden.
Themen
[Bearbeiten]- Stringmanipulationen
- Guter Programmierstil
- Anfängerkurs Teil 1 - Erstes Programm - die wichtigsten Befehle
- Anfängerkurs Teil 2 - Variablen, Datentypen und Arrays
- Anfängerkurs Teil 3 - Kontrollstrukturen: Bedingungen, Schleifen usw.
- Anfängerkurs Teil 4 - Unterprogramme
- Erstellen einer DLL mit FreeBASIC
- Die ASCII-Steuerzeichen in FreeBASIC
- Variablen initialisieren
- Umlaute richtig darstellen
- Ausführungsgeschwindigkeit bestimmen
- Rechnen mit Vergleichen
- Const vs. #define
- Warum OOP?
- Iteration und Rekursion
Notizen
[Bearbeiten]Lerngruppe | (...) |
Ansprechpartner | MR |
Offene Fragen
[Bearbeiten]- Wie sieht ein realistisches Einsatzszenario für Continue (Anfängerkurs III, S. 2) aus?
- Kap. 3, S. 3 und 4 (Arbeit mit Arrays) müsste man sich je nach Bedarf noch einmal ansehen.
- Kap. 4, S. 2 (Arbeit mit Rekursion) müsste ich mir noch mal ansehen - ich sehe dafür noch keine praktische Anwendung
Notizen
[Bearbeiten]- Anfängerkurs III müsste mal überarbeitet werden. Möglicherweise kann man den Kurs splitten und im ersten Teil nur die Schleifen (inkl. If-Then bearbeiten) und im zweiten Teil die Arbeit mit Arrays. Ansonsten wird der Lerner IMHO schnell überfordert.
In Arbeit
[Bearbeiten]Lerngruppe
[Bearbeiten]
Thema | Unterprogramme |
Bearbeitet | 01.07.2008 bis 02.11.2024 |
Material | Anfängertutorial IV |
Kommentar | Die Beispiele mit GOSUB erwiesen sich als nicht lauffähig. Das mag an einem Versionskonflikt (neuere FB-Versionen unterstützen kein GOSUB mehr?) liegen |
Was haben wir gemacht?
[Bearbeiten]- Wir haben uns angesehen, wie wir mit Unterprogrammen arbeiten.
- Wir haben uns mit der Einteilung von Haupt- und Unterprogrammen vertraut gemacht.
- Wir haben den Einstieg in die "rekursive Programmierung" geschafft.
Wichtige Begriffe und Definitionen
[Bearbeiten]- Was leistet das Hauptprogramm?
Das Hauptprogramm die Steuerung bzw. die Verwaltung des Programms.
- Was machen die Unterprogramme (UP)?
Sie werden vom Hauptprogramm aufgerufen bzw. rufen sich gegenseitig auf.
- Welche 2 Typen von Unterprogrammen lassen sich unterscheiden?
- UP, die einen Wert zurückliefern, sie werden Funktionen genannt (z.B. Abs(), liefert der Absolutbetrag des übergebenen Wertes)
- UP, die einfach bestimmte Anweisungsfolgen (wiederholt ausführen), das sind die SUBs(von SUBroutine)
Für beide Typen gilt, dass an sie Parameter übergeben werden können und beide auch Werte im Hauptprogramm bzw. in anderen Bereichen ändern können.
- Was gilt für alle UPs?
Sie haben immer einen Namen, über den sie aufgerufen werden können.
- Was bedeuten byVal und byRef?
- byVal - ist die Abkürzung für by Value (also: als Wert), das UP kann mit dem Wert machen, was es will, der ursprüngliche Wert wird nicht geändert...
- byRef - ist die Abkürzung für by Reference (also: als Adresse), das UP hat direkten Zugriff auf die Variable und kann sie also verändern...
Hinweis, Anregung, Tipp
[Bearbeiten]Die Befehlsreferenz zu GOSUB sagt: „Seit FreeBASIC v0.16b, März-Release ist es nicht mehr zulässig, GOSUB auf Prozedurebene zu verwenden.“ Vermutlich deshalb liefert das erste Beispiele einen Fehler. --Michael Reschke 16:52, 1. Jul. 2008 (CEST)
Notizen
[Bearbeiten]GOSUB (nicht lauffähig)
[Bearbeiten]Beispielprogramm für die Verwendung von Unterprogrammen
Dim As Integer a, b, c 'die drei Variablen deklarieren
Input "Summand1=", a
Input "Summand2=", b
GoSub Addieren
Print "Summe=" &c
Sleep
End
Addieren:
c=a+b
Return
Es lieferte bei mir einen Fehler. Ich habe wohl eine neuere Version von FB bei mir im Einsatz.
Auch nicht lauffähig ist das Bsp. der Referenz:
GOSUB message
END
message:
PRINT "Welcome!"
RETURN
'Fehlermeldungen 135 und 50
'Nr. 135: Only valid in -lang qb, found 'GOSUB' in 'GOSUB message'
Ich habe es mal mit SUB umgesetzt:
DECLARE SUB message 'Die SUB message wird deklariert
PRINT "Das Programm startet."
message 'Die SUB message wird aufgerufen.
PRINT "Das Programm endet."
SLEEP
END 'Hier endet offensichtlich das Hauptprogramm
SUB message 'Hier ist das Unterprogramm (SUB) message zu finden, außerhalb des Hauptprogramms
PRINT "Hier das ist die SUB!"
END SUB
SUB
[Bearbeiten]Anderes Layout als beim Portal (!)
Declare Sub Addieren(byVal Summand1 As Integer, _
byVal Summand2 As Integer, _
byRef Summe As Integer)
Dim As Integer a, b, c, d
' - - - - - - - - - - - E I N G A B E - - - - -
Input "Summand1=", a
Input "Summand2=", b
Addieren(a, b, c)
Print "Summe in c=" &c
Addieren(a+19, b+4, d)
Print "Summe in c=" &c
Print "Summe in d=" &d
Sleep
End
Sub Addieren(byVal Summand1 As Integer, byVal Summand2 As Integer, byRef Summe As Integer)
Summe=Summand1+Summand2
End Sub
- Eingabe: 8, 12
- Ausgabe: 20, 20, 43
Bei c kann sich nichts ändern, weil c gar beim Aufruf auftaucht (a, b, d).
Function
[Bearbeiten]Grundvariante
Declare Function Summe(byVal Summand1 As Integer,_
byVal Summand2 As Integer)_
As Integer
Dim As Integer a, b
Input "Summand1=", a
Input "Summand2=", b
Print "Summe in c=" &Summe(a, b) 'Hier wird die Summe berechnet..
Print "Summe in d=" &Summe(a+19, b+4) 'Hier wird die Summe mit anderen Werten berechnet..
Sleep
End
Function Summe(byVal Summand1 As Integer, byVal Summand2 As Integer) As Integer
Return Summand1+Summand2 'Summe berechnen und mit dem Ergebnis zurückkehren
Summe =Summand1+Summand2 'Summe berechnen und in der Function bleiben..
' Function=Summand1+Summand2 'diese Zeile ist mit der darüber gleichbedeutend..
End Function 'Ende der Function, jetzt mit der Wert von Summe(oder Function) zurückkehren
Variante Return
Declare Function Summe(byVal Summand1 As Integer,_
byVal Summand2 As Integer)_
As Integer
Dim As Integer a, b
Input "Summand1=", a
Input "Summand2=", b
Print "Summe in c=" &Summe(a, b) 'Hier wird die Summe berechnet..
Print "Summe in d=" &Summe(a+19, b+4) 'Hier wird die Summe mit anderen Werten berechnet..
Sleep
End
Function Summe(byVal Summand1 As Integer, byVal Summand2 As Integer) As Integer
Return Summand1+Summand2 'Summe berechnen und mit dem Ergebnis zurückkehren
End Function
Variante Summe
Declare Function Summe(byVal Summand1 As Integer,_
byVal Summand2 As Integer)_
As Integer
Dim As Integer a, b
Input "Summand1=", a
Input "Summand2=", b
Print "Summe in c=" &Summe(a, b) 'Hier wird die Summe berechnet..
Print "Summe in d=" &Summe(a+19, b+4) 'Hier wird die Summe mit anderen Werten berechnet..
Sleep
End
Function Summe(byVal Summand1 As Integer, byVal Summand2 As Integer) As Integer
Summe = Summand1+Summand2 'Summe berechnen und mit dem Ergebnis zurückkehren
End Function
Ein Beispiel für byVal und byRef
[Bearbeiten]Declare Sub Summieren _
(byVal Summand1 As Integer, _
byVAL Summand2 AS Integer, _
byRef Summe As Integer)
DIM as Integer a = 1, b = 2, c = 0
PRINT a, b, c
Summieren (a, b, c)
PRINT a, b, c
PRINT
SLEEP
PRINT a, b, c
Summieren (a, c, b)
PRINT a, b, c
SLEEP
End
Sub Summieren (byVal Summand1 As Integer, byVal Summand2 As Integer, byRef Summe As Integer)
Summe=Summand1+Summand2
End Sub
Rekursion
[Bearbeiten]Dim i As Integer
Declare Function Fakultaet(byVal n As Integer) As ULongInt
'Funktions-Deklaration, damit sie überall im Programm erreichbar ist
Function Fakultaet(byVal n As Integer) As ULongInt 'Erstmal nur größter Integer(64Bit)
Dim i As Integer, Ergebnis As ULongInt=1 'Ergebnis mit 1 vorbesetzen, wg. 0!=1
For i=1 To n 'Alle ganzen Zahlen bis n, warum darf die Schleife nicht mit 0 beginnen?
Ergebnis*=i 'Ergebnis=Ergebnis*i
Next i
Function=Ergebnis
End Function
Do
Print "Geht nur bis 20!=2432902008176640000 wg. ULongInt"
Input "Wert fuer n eingeben:", i
If i<0 Then End
Print Str(i); "!="; Fakultaet(i) 's.u., geht nur in der Print-Anweisung
Loop
Kommentar
[Bearbeiten]Bei mir produzierte das Beispiel mit GOSUB einen Fehler.
Thema | Kontrollstrukturen: Bedingungen, Schleifen usw. (Anfängerkurs III) |
Bearbeitet | 29.06.08 bis 30.06.2008 |
Was haben wir gemacht? | Kurs III. Wir haben erfahren, wie man in einem Programm Entscheidungen treffen kann. Konkret haben wir die If-Anweisung und den SELECT CASE-Block kennengelernt. Bei den Schleifen lernten wir die # For-Next-Schleife, die Do-Loop-Schleife und die While-Wend-Schleife kennen. Wir haben erfahren, dass man diese Schleifen jeweils mit Exit For, Exit While bzw. Exit Do verlassen kann. |
Neue Befehle | Screen, Inkey, And, Or |
Unterseite | Zur Unterseite |
Kommentar | Die Seiten 3 und 4 wurden noch nicht durchgearbeitet. Die Arbeit mit Arrays und den Einsatz von Continue müsste man sich ggf. noch mal ansehen. |
Thema | Variablen, Datentypen und Arrays (Anfängerkurs II) |
Bearbeitet | 29.06.08 |
Was haben wir gemacht? | Kurs II. Wir haben Variablen und erste Datentypen (String und Integer) sowie Arrays kennengelernt. Die mathematischen Operatoren +, -, / und * wurden eingeführt. |
Neue Befehle | DIM [Variable] AS [Datentyp], Input |
Unterseite | Zur Unterseite |
Thema | Erstes Programm - die wichtigsten Befehle (Anfängerkurs I) |
Bearbeitet | 28.06.2008 |
Was haben wir gemacht? | Kurs I. Wir haben uns mit der grundlegenden Bedienung der FBIde vertraut gemacht und ein Hallo Welt! geschrieben und ausgeführt |
Neue Befehle | Print, Sleep, End, Locate, Color, CLS |
Unterseite | Zur Unterseite |