*******************************************************
*  Skript, Teil 1 zum QBasic-Kurs I                   *
*  Von Robert Jessenberger                            *
*******************************************************


Ausgabe auf den Bildschirm
--------------------------

PRINT "Hallo Freunde!"

Beachte: Text muß zwischen " " stehen
         Steht nur  PRINT         da,
         wird eine Leerzeile ausgegeben

         Für Tipfaule:  schreibe statt PRINT  ein ?

Mit PRINT kann auch gerechnet werden:

PRINT 6 / 2 + 7 - 5

Beachte: Willst du das Ergebnis werden, 
         dürfen keine " verwendet werden.

Textausgabe und Ergebnisausgabe können beliebig kombiniert
werden:

PRINT "Ergebnis von 1 + 1 ist:", 1 + 1

oder auch:

? "Das Ergebnis von 9/3 ist", 9 / 3 , "!"


Bildschirm löschen
------------------

Um einen schönen, leeren, schwarzen Bildschirm 
zu erhalten, gibt es den Befehl:  CLS
Bsp.:

CLS
PRINT "Hier ist aber viel Platz!"

Anmerkung: Beachte die Reihenfolge:
           Der Computer führt zuerst CLS aus, da dieser
           Befehl am Anfang steht, danach erst wird
           der Text geschrieben. 
           Vertausche die Zeilen und du siehst ... nichts.


Kommentare
----------

Kommentare sind alles, was hinter dem REM - Befehl steht.
Ihren Nutzen haben sie, wenn die eigenen Programme mehrere Seiten 
groß werden - Kommentare helfen dann, sich später noch
zurechtzufinden.
Außerdem kann man sich im eigenen Programm 
damit verewigen.

Bsp.:
REM**************************************
REM**** Windows 96 von Hein Blöd ********
REM**************************************

Diese Zeilen werden vom Computer einfach übersprungen.
Sie  haben keine Wirkung.

Variablen
---------

Eine Variable ist nichts weiter als ein Name
für einen bestimmten Speicherplatz im Computer.
In diesem Speicherplatz können wir Zahlen oder Text
ablegen und wieder holen.
Speicher ist allgemein das Gedächtnis des Computers.

Es gibt zwei unterschiedliche Typen von Variablen,
welche zum Textmerken (mit $ am Namensende),
und welche zum Zahlenmerken (mit % am Namensende).

Bsp.:
Name$="Hein Blöd"
oder
Alter%=129

In  Name$    liegt der Text            Hein Blöd
In Alter%   merken wir uns die Zahl    129

Bsp. 2:

zahl1% = 5
zahl2% = 10
PRINT zahl1%,"+",zahl2%,"=",zahl1%+zahl2%

Anmerkung: Den Namen für die Variablen kannst du dir
           selbst ausdenken. Er sollte passend sein für das,
           was du mit der Variable machen willst.
           Ändere im obigen Beispiel mal die
           Variablennamen.

Eingabe von Tastatur
--------------------

Jetzt wäre es sinnvoll, wenn in unserem Rechenprogramm 
vom Benutzer Zahlen eingegeben werden könnten. 

Befehl: INPUT

Mit INPUT können wir vom Programmbenutzer Werte entgegennehmen
und sie uns in einer Variablen merken.

REM ******Mathematikprogramm vom schlauen Hein Blöd*********
CLS
INPUT "Gib die erste Zahl ein:",zahl1%
INPUT "Gib die zweite Zahl ein:",zahl2%
PRINT zahl1%,"+",zahl2%,"=",zahl1%+zahl2%

Schleifen und Verzweigungen
---------------------------

Unser Mathematikprogramm hat nun schon einen
Sinn bekommen. Störend ist nur,daß wenn wir
neu rechnen wollen, das Programm neu gestartet
werden muß. Was wäre, wenn wir eine Möglichkeit
hätten, wieder nach oben in die erste Zeile zu springen?

Lösung:

while Bedingung 
...
wend

Die while-Schleife bietet uns diese Möglichkeit.
Alles was zwischen WHILE und WEND steht, wird
immer wieder abgearbeitet, solange "Bedingung" wahr ist. 
Bsp.:

REM ******Mathematikprogramm Nr.2 vom schlauen Hein Blöd*********
CLS
abbruch%=1
while abbruch%=1
 INPUT "Gib die erste Zahl ein:",zahl1%
 INPUT "Gib die zweite Zahl ein:",zahl2%
 PRINT zahl1%,"+",zahl2%,"=",zahl1%+zahl2%
 INPUT "Nochmal, tippe 1          Beenden, tippe 0",abbruch%
WEND
PRINT "Tschüss!"

Wie funktioniert das Programm:

Zuerst wird der Bildschirm gelöscht.
Dann erhält die Variable abbruch% den Wert 1.  
Die while - Schleife verlangt nämlich, daß bei 
ihrem Beginn etwas da ist, dass sie vergleichen kann.
Nur wenn der Vergleich positiv ausfällt, wird
alles, was zwischen while ... wend steht, ausgeführt.
Ich lasse in dem Fall den Wert von abbruch% mit
der Zahl 1 vergleichen.

Nun kann der Benutzer seine Zahlen eingeben und
erhält das Ergebnis.

Dann aber, das ist neu, wird er gefragt, ob
er nochmal möchte!
Wenn er nochmal rechnen will, wird der Benutzer
eine 1 tippen. abbruch% wird also entweder
1 oder 0 enthalten.

Nun kommt das WEND! 
Hier springt der Computer 
wieder hoch in die Zeile mit dem WHILE abbruch%=1 (Vergleich abbruch% mit 1)
Wollte der Benutzer aufhören, hat er eine 0 getippt,
und 0=1 ist nicht wahr. Deshalb springt er sofort 
zur Zeile nach dem WEND und verabschiedet sich mit "Tschüss".
Wollte der Benutzer nicht aufhören, hat er eine 1 getippt
1=1 ist wahr, also wird die Schleife nochmal abgearbeitet.

Alles klar?

Kleine Aufgabe: Verändere das Programm so, daß der Bildschirm
                bei jeder Addition gelöscht wird.

                Verändere das Programm so, daß es sich bei
                Eingabe von "q" beendet.


Nun machen wir das Programm perfekt.
Es soll nun möglich sein,sich zwischen Addition und Subtraktion
zu unterscheiden. 

Möglich macht uns das der IF ... THEN ...  - Befehl
Hinter dem IF steht wieder die Bedingung, und wenn
diese erfüllt wird, und nur dann , wird der Befehl hinter
dem THEN ausgeführt.

REM ******Mathematikprogramm Nr.3 vom schlauen Hein Blöd*********
CLS
abbruch%=1
while abbruch%=1
 INPUT "Gib die erste Zahl ein:",zahl1%
 INPUT "Gib die zweite Zahl ein:",zahl2%
 INPUT "Tippe + für Addition und - für Subtraktion",auswahl$
 if auswahl&="+" THEN PRINT zahl1%,"+",zahl2%,"=",zahl1%+zahl2%
 if auswahl&="-" THEN PRINT zahl1%,"-",zahl2%,"=",zahl1%-zahl2%
 INPUT "Nochmal, tippe 1       Beenden, tippe 0",abbruch%
WEND
PRINT "Tschüss!"


Übrigens: 
WHILE ... WEND und IF...THEN...
sind die wichtigsten Anweisungen. 
Sie werden in fast jedem Programm gebraucht, und
wer sie beherrscht, hat das Programmieren verstanden.

MUSIK
-----

Mit Sound machen Spiele doppelt so viel Spass.
QBasic stellt den Play-Befehl zur Verfügung, 
welcher einfach zu verwenden ist.

PLAY "MS o3 L4 C BAGFED P2 L2 C"

o3 legt die Oktave fest (0-6)
L4 legt die Tonlänge fest (1-64), wobei L1 eine ganze Note
   ist, L2 eine halbe Note, usw.
P2 legt die Pausen fest (1-64)
ML spielt die Töne in Legato
MN spielt die Töne normal
MS spielt die Töne in Staccato
CDEFGAB legt die Tonhöhe fest
        Achtung!  B=Ton H!

Am besten ist hier, man experimentiert einfach ein bißchen,
und schon gelingen (falls man das Talent hat) die
ersten Eigenkompositionen.



REM Klavier
CLS
PRINT " Klavierstunde"
taste$ = ""
WHILE taste$ <> "q"
taste$ = INKEY$
IF taste$ = "1" THEN PLAY "o1 l8 C"
IF taste$ = "2" THEN PLAY "o1 l8 D"
IF taste$ = "3" THEN PLAY "o1 l8 E"
IF taste$ = "4" THEN PLAY "o1 l8 F"
IF taste$ = "5" THEN PLAY "o1 l8 G"
IF taste$ = "6" THEN PLAY "o1 l8 A"
IF taste$ = "7" THEN PLAY "o1 l8 B"

IF taste$ = "8" THEN PLAY " l8 o2 C"
IF taste$ = "9" THEN PLAY "l8 o2 D"
IF taste$ = "0" THEN PLAY "l8 o2 E"

WEND

Anmerkung zum Programm:
INKEY$ ist ein Befehl, welcher die gerade gedrückte Taste
als Text zurückliefert. Diesen Text speichern wir in taste$.
Du kannst jetzt mit deinem Computer richtig
Klavier spielen!
Erweitere doch das Programm um alle Oktaven u.s.w.!