Zum Inhalt springen

Kurs:FreeBASIC/Lerngruppen/Testlauf

Aus Wikiversity

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 21.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?
  1. UP, die einen Wert zurückliefern, sie werden Funktionen genannt (z.B. Abs(), liefert der Absolutbetrag des übergebenen Wertes)
  2. 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

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

Appendix

[Bearbeiten]

Siehe auch

[Bearbeiten]

Anmerkungen

[Bearbeiten]