Urs Höch / Schule Suhr

PROGRAMMIEREN MIT QBASIC



Themenwochenkurs für Schülerinnen und Schüler des 7.-8. Schuljahrs



Inhalt                    

1. Manual
2. Aufgaben
3. Arbeitsblätter
     3.1 Befehle
     3.2 Farbcode
     3.3 Zahlen runden
     3.4 Würfelzahlen
     3.5 Play-Befehl - Musik erzeugen
     3.6 Draw - Grafiken erzeugen



1. Manual
================================================================================

Basic (Beginners all-purpose symbolic instruction code) ist eine 
Programmiersprache, welche in vielen Dialekten angeboten wird. Weil die meisten 
Schlüsselbegriffe dem gebräuchlichen Englisch sehr nahe kommen, ist Basic 
einfach zu lernen. Wir verwenden "QBasic 4.5", das kostenlos vom Internet 
herunter geladen werden darf und als deutsche Version vorliegt.

Die Internet-Adresse "http://www.antonis.de" ist eine wahre Fundgrube für QBasic 
(zum Offline-Surfen für 5€ auch als CD-Rom erhältlich). QBasic-Fans treffen sich 
auf der Seite "http://www.qbasic.de"

QBasic wird mit der Datei "QB.EXE" gestartet. Es erscheint ein zweiteiliges 
Arbeitsfenster mit Menuleiste, Programmierfeld (für die Eingabe oder Bearbeitung 
von Programmen) und Direktfeld (zum unmittelbaren Ausprobieren einzelner 
Befehle).

Ein Programm ist eine Liste von Befehlen, welche der Computer der Reihe nach 
erledigt. Wichtig ist, dass die Wörter richtig geschrieben und dass 
"Kleinigkeiten" wie Punkte, Kommas, Anführungszeichen usw. genau beachtet 
werden. Auf Gross- und Kleinschreibung kommt es hingegen nicht an, QBasic setzt 
alle Anweisungen automatisch in Grossbuchstaben um. Normalerweise brauchen wir 
für jeden Befehl eine Zeile (kommen mehrere Befehle auf eine Zeile, so müssen 
sie mit Doppelpunkt getrennt werden). 

Basic-Programme erhalten Namen (bis zu 8 Buchstaben) mit dem Suffix .BAS (z.Bsp. 
RECHTECK.BAS). Nach dem Laden können sie mit der Tastenkombination 
[Umschalttaste]+[F5] gestartet werden. Ein laufendes Programm lässt sich 
(notfalls) mit [Ctrl]+[Pause/Break] beenden!  

QBasic bietet eine enorme Anzahl verschiedener Befehle an, die wir zu Programmen 
zusammenstellen können. Nachfolgend eine Auswahl (wer mehr wissen will, kann 
auch im Menu "Hilfe" nachschauen): 

Allgemeines
:	Trennt Befehle, die auf der gleichen Zeile stehen.
CLEAR	Setzt alle Variablen auf 0 beziehungsweise "".
CLS	Leert den Bildschirm (clear screen).
REM	Bemerkungen (remarks), werden vom Computer nicht beachtet.
END	Beendet das Programm.

Variablen
Variablen bezeichnen Speicherplätze entweder für Zahlen oder für Buch-staben. 
Sie werden in der Regel mit Buchstaben oder Wörtern bezeichnet.
x	Zahlenvariablen (für Dezimalbrüche mit max. 7 Stellen):
	y, z1, Zins, Resultat2, umfang,...
x$	Stringvariablen (für Zeichenketten, Wörter) müssen auf $ 
	enden:
	y$, z1$, Name$, ausgabe$,...
LET	Zuweisung
	LET x = 4.5	Der Variablen x wird der Wert 4,5 zugewiesen.
	LET y = y+1	Der Inhalt des Speichers y wird um 1 erhöht.
	LET a$ = "ja"	Das Wort "ja" wird gespeichert.
Für Zuweisungen (aber auch für Bildschirm-Ausgaben) muss Text zwischen 
Anführungs- und Schlusszeichen gesetzt werden.
Hinweis: Der LET-Befehl ist fakultativ, das heisst "x=5" bedeutet dasselbe wie 
         "LET x=5".

Mathematische Operationen und Funktionen
+ - * /	Grundoperationen (plus, minus, mal, durch)
^	Potenz (hoch)
SQR(x)	Quadratwurzel von x
INT(x)	Integerfunktion: liefert die nächst kleinere ganze Zahl von x
Dezimalbrüche müssen mit Punkt statt Komma eingegeben werden!

Vergleiche
=	gleich	<>	ungleich
lt;	kleiner	lt;=	kleiner oder gleich (höchstens)
gt;	grösser	gt;=	grösser oder gleich (mindestens)

Zeiten und Zufall
SLEEP x	Unterbricht das Programm für x Sekunden (das Warten kann 
	durch Betätigung irgend einer Taste vorzeitig abgebrochen 
	werden).
TIMER	Zeigt die seit Mitternacht verflossenen Sekunden an (die Sys-
	temuhr macht Schritte von etwa 0,056 s).
Computer können keine echten Zufallszahlen liefern, sie produzieren nur eine 
recht unregelmässige Zahlenfolge (Pseudo-Zufallszahlen). Mit dem Befehl 
RANDOMIZE TIMER wird mindestens mit Hilfe der Systemuhr der Einstieg in diese 
fixe Produktion zufällig gewählt.
RND	Gibt eine Zufallszahl zwischen 0 und 0,9999999
	LET x = INT(RND*6)+1		Erzeugt Würfelzahlen!

Ein- und Ausgaben
INPUT	Tastatur-Eingabe (wobei das Programm unterbrochen wird)
	INPUT x		Der Computer erwartet eine Zahleneingabe.
	INPUT x$		Der Computer erwartet eine Texteingabe.
	INPUT-Anweisungen können auch mit Text versehen werden:
	INPUT "Gib eine Zahl ein:",x	(Statt Komma kann auch ein 
	Semikolon gesetzt werden: ergibt ein Fragezeichen.)
INKEY	Liest ein Zeichen von der Tastatur (ohne Programmunterbruch).
PRINT	Bildschirm-Ausgabe
	PRINT x		Der Wert von x erscheint auf dem Bildschirm.
	PRINT "Wow"	Das Wort "Wow" erscheint auf dem Bildschirm.
	PRINT x$		Die in x$ gespeicherte Zeichenkette erscheint.
	PRINT		Nichts erscheint: erzeugt eine Leerzeile.
	Zwischen aufeinander folgende PRINT-Befehle (oder nach PRINT-
	Befehlen) können Kommas oder Semikolons gesetzt werden:
	PRINT x, : PRINT y		vereinfacht: PRINT x,y
	PRINT x; : PRINT y		vereinfacht: PRINT x;y

Text-Bildschirm
Der normale Bildschirm für Textausgabe (Screen 0) ist in 25 Zeilen zu je 80
Spalten unterteilt.
PRINT TAB(x)	Die Ausgabe erfolgt ab der x. Spalte der aktuellen Zeile.
	PRINT TAB(25) "Das gibt ",x
LOCATE x,y	Der Cursor springt in die x. Zeile und dort an die y. Spalte
	LOCATE 5,15	
Bildschirm und Schrift lassen sich auch anders färben (als Code dienen die 
Zahlen von 0 bis 15):
COLOR x,y	x gibt die Farbe des Texts an (Vordergrund), y gibt die Farbe 
	des Bildschirms an (Hintergrund).
	COLOR 4,1		Erzeugt rote Schrift auf blauem Grund.

Sprünge
Für Sprünge im Programmablauf müssen Marken gesetzt werden, entweder eine Zahl 
oder ein Wort mit Doppelpunkt auf einer Programmzeile.
GOTO	Sprungbefehl (der Ablauf wird nach der angegebenen Marke 
	fortgesetzt):
	GOTO 100		Das Programm springt zur Marke "100" und fährt 
				dort weiter.
	GOTO Ziel		Sprung zur Marke "Ziel:"

Bedingungen
Oft wird die Ausführung eines Programmteils von Bedingungen abhängig gemacht:
IF THEN	Bedingter Befehl: nur wenn ... zutrifft, soll der nach-
	folgende Befehl ausgeführt werden.
	IF x lt; 1 THEN y = y+1
	IF antwort$ = "n" THEN PRINT "Tschüss"
	IF a gt; 100 THEN GOTO Ziel
Bedingte Befehle können mehrere Zeilen lang sein. Sie werden dann mit ENDIF
abgeschlossen:
	IF ... THEN
		...
		...
	ENDIF
Zu IF...THEN gehört noch ELSE (andernfalls). Damit lassen sich Programm-
verzweigungen realisieren:
	IF ... THEN
		...
		ELSE
		...
	ENDIF

Schleifen
Eine Schleife ist die Wiederholung eines Programmteils. Mit den folgenden 
Befehlen lassen sich Schleifen programmieren:
WHILE WEND	so lange als ... zutrifft wird der Programmteil bis zum 
	Schleifenende WEND wiederholt
	WHILE a$ = "j"
		...
	WEND
Will man die Anzahl der Schleifen zum Voraus festsetzen, verwendet man:
FOR NEXT	Mit jedem Durchgang wird der Zähler n um 1 erhöht bis zum 
	Zielwert. Dann geht das Programm bei der Zeile nach NEXT 
	weiter.
	FOR n = 1 TO 45
		...
	NEXT n
In FOR-NEXT-Schleifen können auch andere Schritte verlangt werden:
	FOR n=0 TO 100 STEP 2		zählt 0,2,4,6,...,100
	FOR n=100 TO 0 STEP -1	zählt 100,99,98,97,...,0
EXIT FOR	Erlaubt, die Schleife vorzeitig zu verlassen.
Beachte: Zu jedem WHILE gehört ein WEND, zu jedem FOR ein NEXT!

Töne
SOUND x,y	Erzeugt einen Ton, wobei x die Tonhöhe (Frequenz in Hz) an-
	gibt und y die Dauer (Anzahl Zeiteinheiten von 56 ms) des 
	Tons bestimmt.
Weil SOUND über Zahlenwerte gesteuert wird, lassen sich durch Veränderungen 
(Berechnungen) verschiedenste Effekte erzielen. Für Musik bietet sich hingegen 
PLAY an, weil die Töne wie bei einem Klavier gegeben sind:
PLAY a$	durch die Zeichenkette a$ wird die Tonfolge bestimmt:
	Oktave (O1, O2,...)
	Länge (L1 ganze Note, L2 halbe Note, L4 Viertelnote, ...)
	Höhe (Töne der Oktave: C, D, E, F, G, A, B) mit Halbton-
	schritten + und - (C+ für cis, D- für des ...)
	PLAY "O1 L4 CDEF L2 GG"
Der PLAY-Befehl kann weiter mit Pausen (P1 ganze Pause, P2 halbe Pause, P4 
Viertelpause, ...), Spielart (legato, staccato) und Tempo ausgeschmückt werden! 

		
Grafik
Um zeichnen zu können, muss zuerst ein Grafik-Bildschirm erstellt werden (es 
gibt verschiedene), der Text-Bildschirm (Screen 0) ist nicht grafikfähig.
SCREEN x	Wechselt zum gewünschten Bildschirm.
	SCREEN 0		Text
	SCREEN 9		Grafik 
Im Grafikmodus ist die Fläche in Pixel (Punkte) unterteilt: Screen 9 ist 640 
Pixel lang und 350 Pixel breit. Jede Stelle kann (ähnlich wie im 
Koordinatensystem) durch zwei natürliche Zahlen angegeben werden, allerdings ist 
der Nullpunkt oben links! 
	0, 0		linke obere Ecke des Grafik-Bildschirms
	320, 175		Bildschirmmitte
	640, 350		rechte untere Ecke des Grafik-Bildschirms
Für Textausgaben stehen in Screen 9 weiterhin 15 Zeilen zu je 80 Spalten zur 
Verfügung. Er bietet zudem 16 Farben an, die sich über die Zahlenwerte von 0 bis 
15 einstellen lassen.
PSET	Zeichnet Punkte, wobei natürlich noch Stelle und Farbe 
	angegeben werden müssen:
	PSET (320,175),4 ergibt einen roten Punkt in der Mitte des 
	Bildschirms.
LINE	Zeichnet Linien oder Rechtecke:
	LINE (0,0)-(640,350),2 ergibt eine grüne Diagonale über den 
	Bildschirm (von oben links nach unten rechts).
	LINE (50,100)-(100,200),2,B ergibt ein grünes Rechteck mit 
	(50,100) als obere linke Ecke und (100,200) als untere 
	rechte (B steht für Box).
	LINE (50,100)-(100,200),2,BF ergibt das gleiche Rechteck ganz 
	grün gefüllt (BF steht für "Box Filled").
CIRCLE	Zeichnet Kreise und Ellipsen:
	CIRCLE (320,175),50,4 ergibt einen roten Kreis mit einem Ra-
	dius von 50 Pixeln in der Mitte des Bildschirms.
	CIRCLE (590,300),50,4,,,0.8 ergibt in der rechten unteren 
	Ecke des Bildschirms eine rote Ellipse mit einem grossen Ra-
	dius (horizontal) von 50 Pixeln und einem kleinen (vertikal) 
	von 50·0,8 = 40 Pixeln.
	Mit dem PAINT-Befehl lässt sich ein vorher gezeichneter Kreis 
	ganz färben:
	CIRCLE (200,100),50,2		Ergibt einen grün gefüllten Kreis 
	PAINT (200,100),2		mit r = 50 und M(200/100).
DRAW	Zeichnet Polygonzug, der über eine Zeichenkette gesteuert 
	wird:
	Mx,y		Bewegt den Zeichenstift zu (x/y)
	B			Hebt den Stift (Präfix)
	Cx			Zeichenfarbe
	Richtungen:	Mit den Buchstaben L,R,U,D,E,F,G,H und einer 
				Zahl wird angegeben, wie viele Pixel der 
				Zeichenstift in welche Richtung gehen soll
					H  U  E
					L  o  R
					G  D  F
	Px,y		Füll- und Randfarbe
	DRAW "C4 BM200,50 R50 U30 M200,50" zeichnet ein Dreieck mit 
	den Ecken (200/50), (250/50) und (250/20).

Empfehlenswerte Literatur
Thomas Antoni: Das QBasic-Kochbuch
Wilfried Furrer: QBasic
Claus-Dieter Volko: The real Adok's way to QBasic
Die Scripts befinden sich auf der QBasic CD-Rom von www.antonis.de.

                                                         .... zurück zum Inhalt



2. Aufgaben
================================================================================

1.	Mit dem folgenden Programm kannst du die Potenz zweier Zahlen berechnen:
		INPUT a
		INPUT b
		LET c = a^b
		PRINT c
		END
	Versuchen wir schrittweise, die Bedienerfreundlichkeit zu heben (du
	kannst das alte Programm ergänzen):
		CLS
		INPUT "Wie heisst die Basis    "; a
		INPUT "Wie heisst der Exponent "; b
		LET c = a^b
		PRINT
		PRINT "Der Potenzwert beträgt: ", c
		END
	Damit wir das Programm nicht nach jeder Rechnung wieder neu starten
	müssen, packen wir es in eine Schleife ein:
		w$ = "j"
		WHILE w$ = "j"
		CLS
		INPUT "Wie heisst die Basis    "; a
		INPUT "Wie heisst der Exponent "; b
		LET c = a^b
		PRINT
		PRINT "Der Potenzwert beträgt: ", c
		PRINT
		INPUT "Noch eine Aufgabe (j/n) "; w$
		WEND
		END
	Zuletzt fügen wir noch ein paar Bemerkungen bei und machen, dass sich
	das Programm am Schluss verabschiedet:
		REM "POTENZ.BAS"
		REM Berechnung von Potenzen
		REM Februar 2005
		w$ = "j"
		WHILE w$ = "j"
			CLS
			INPUT "Wie heisst die Basis    "; a
			INPUT "Wie heisst der Exponent "; b
			LET c = a^b
			PRINT
			PRINT "Der Potenzwert beträgt: ", c
			PRINT
			INPUT "Noch eine Aufgabe (j/n) "; w$
		WEND
		PRINT
		PRINT "Tschüss !"
		END
	Markiere bei jeder Version, was neu dazu gekommen ist. Verstehst du alle
	Befehle?
	Speichere die letzte Version. Wie wird ein Programm gespeichert, wie
	wird es geladen?
	
2.	Ein Programm zu Rechtecksberechnungen: Schreibe das Programm ab, speichere
        es dann unter dem angegebenen Namen und starte es.
		REM "RECHTECK.BAS"
		REM Februar 2005
		CLS : PRINT
		PRINT "Rechtecksberechnungen"
		PRINT "*********************"
		PRINT
		INPUT "Wie lang (in cm) ist das Rechteck  "; a
		INPUT "Wie breit (in cm) ist das Rechteck "; b
		u = (a+b)*2
		f = a*b
		PRINT
		PRINT "Umfang = "; u; "cm"
		PRINT "Fläche = "; f; "cm2"
		END
	Ändere das Programm "RECHTECK.BAS" so ab, dass der Benutzer gefragt
	wird,ob er noch eine weitere Aufgabe lösen wolle. Wenn ja, dann werden
	neue Seiteneingaben gefordert.
	Ausbau: Wenn wir von Länge, Breite, Umfang und Fläche zwei Grössen
	eingeben, dann werden die andern beiden berechnet.

3.	Schreibe ein Programm für Kreisberechnungen: Eingabe des Radius ergibt
        Umfang und Fläche. Zusatz: Sektorberechnungen

4.	Umrechnungen von Franken in Euro (und umgekehrt). Der Benutzer wird
        zunächst nach dem aktuellen Kurs gefragt und dann, ob er Franken in
        Euro oder Euro in Franken umrechnen wolle. Je nach Antwort wird ein
        Franken- oder Eurobetrag verlangt und in die andere Währung umgerechnet.

5.	In den USA wird die Temperatur in Fahrenheit angegeben, bei uns in
        Celsius. Es gilt:
		  0°C =  32°F	Schmelzpunkt von Wasser
		100°C = 212°F	Siedepunkt von Wasser
	Entwickle ein Programm für die Umwandlung von Celsius in Fahrenheit
	(und umgekehrt).	

6.	Runden:
	a) Was bewirkt die INT-Funktion? Probiere sie aus!
	b) Vergleiche INT(x) mit INT(x+0.5).
	c) Was bewirkt die Funktion INT(x*10)/10 ?
	d) Was bewirkt die Funktion INT(x*10+0.5)/10 ?
	e) Wie wird eine Zahl auf Zehntel, Hundertstel, Tausendstel,...gerundet?
	f) Wie könnte ein Betrag auf 5 Rp. genau gerundet werden?

7.	Entwirf ein kleines Programm, das
	a) die geraden Zahlen von 0 bis 100
	b) die ungeraden Zahlen < 50
	c) die Zahlen der Zwölferreihe
	d) die Quadratzahlen bis 152
	produziert.

8.	Programmierkniffe:
	a) Wie kann ich prüfen, ob eine Division ganzzahlig aufgeht?
	b) Wie produziere ich eine Zufallszahl zwischen 0 und n?
	c) Wie produziere ich eine Zufallszahl zwischen m und n?
	d) Wie lässt sich ein Programm kurz unterbrechen?

9.	Ist 2341 eine Primzahl? Der Computer weiss das zwar auch nicht, aber er
        kann blitzschnell rechnen und rasch nachschauen, ob die Division durch
        2,3,4,5,... aufgeht. Bis zu welchem Divisor musst du ihn arbeiten
        lassen? Die Division durch die geraden Zahlen (ausser 2) kann man sich
        auch sparen!
	Ausbau: Bruchkürzungs-Programm
10.	Bruchrechnen: Nach Eingabe zweier Brüche und einer Operation liefert
        der Computer das Resultat (vielleicht sogar gekürzt).

11.	Nicht aufgehende Divisionen durch n liefern periodische Dezimalbrüche,
        wobei die Periode höchstens (n-1) Stellen aufweisen kann. Eine schöne
        Arbeit für den Computer!

12.	Die Kreiszahl Pi lässt sich auf verschiedene Arten bestimmen. Eine
        interessante Art hat Gottfried Wilhelm Leibniz 1673 gefunden:
		? = 4*(1-1/3+1/5-1/7+1/9-...)
	Entwickle ein Programm, das den Pi-Wert aus den ersten n Brüchen ergibt.
	Hinweis: Verwende statt der üblichen Single-Variablen (für
	Dezimalbrüche mit 7 Stellen) so genannte Double-Variablen (16 Stellen).
	Kennzeichnung mit #: x# , y# , z# ,...

13.	Zinsrechnen: Nach Eingabe von Kapital, Zinssatz und Zeit (Datum der
        Einlage, Datum des Abhebens) soll der Zins (auf 5 Rp. gerundet)
        ausgegeben werden. Vielleicht werden automatisch 35% Verrechnungssteuer
        abgezogen, falls der Bruttozins Fr. 50.- oder mehr beträgt.

14.	TIMER gibt die momentane Anzahl Sekunden an, die seit Mitternacht
        verflossen sind. Entwickle ein Programm, das die aktuelle Uhrzeit
        in h, min und sec angibt. Ausbau: Digital-Uhr

15.	Ein guter Würfel sollte alle Augenzahlen gleich häufig zeigen (bei
        genügend grosser Anzahl Würfe). Wie gut ist der QBasic-Würfel? - Lass
        den Computer viele Male würfeln und gleichzeitig zählen, wie oft er
        eine Eins, eine Zwei,... gewürfelt hat.

16.	Rechentrainer: Du wählst den Zahlenbereich (z.Bsp. Zahlen von 1 bis 25)
        und die Operation, der Computer stellt dir dann eine Serie von
        Kopfrechnungen und korrigiert deine Resultate.

17.	Ein Ratespiel: Der Computer würfelt eine Zahl, der Spieler versucht,
        sie zu erraten. Wie gross ist die Trefferchance (theoretisch,
        praktisch)?

18.	Ein anderes Ratespiel: Der Computer wählt eine Zufallszahl zwischen
        0 und n. Der Spieler soll mit möglichst wenigen Versuchen diese Zahl
        erraten, indem er das mögliche Intervall einschränkt ("Die gesuchte
        Zahl liegt zwischen ... und ...").

19.	Böse Eins: Ein Spieler würfelt ein oder mehrere Male nacheinander und
        addiert die Augenzahlen. Wenn er eine 1 würfelt, so ist die erhaltene
        Summe verloren und er muss den Würfel dem Gegner geben. Natürlich darf
        er den Würfel weitergeben bevor er eine Eins würfelt. Dann kann er die
        Summe zu seinen bereits gewürfelten Punkten hinzugeben. Gewonnen hat,
        wer zuerst 100 Punkte erreicht.
	Probiere das Spiel zunächst aus und entwickle dann ein Programm dafür.

20.	Das folgende Programm erzeugt "Pseudo-Zufallszahlen":
		INPUT "Anzahl Werte: "; n
		x = TIMER/1000
		x = x - INT(x)
		FOR i=1 to n
			x = x+1
			x = x^6
			x = x - INT(x)
			PRINT x,
		NEXT i
		END
	Kontrolliere mit der Würfelstatistik (Nr.15), ob es sich um einen guten
	Generator von "Zufallszahlen" handelt. Weshalb liefert er sicher keine
	echten Zufallszahlen?
	
21.	Ein Ton-Experiment:
		x = 3200 : y = 1
		FOR n = 1 TO 50
			x = x * 0.95
			y = y * 1.04
			SOUND x, y
		NEXT n
		FOR n = 1 TO 50
			x = x * 1.04
			y = y * 0.95
			SOUND x, y
		NEXT n
		END
	Mach eigene Versuche und schreibe das interessanteste Resultat als
	Programm auf (speichern nicht vergessen!).

22.	Hörtest: Bis zu welcher Frequenz hörst du einen Ton? Der Test soll
        von tiefen Tönen nach oben verlaufen und dann von sehr hohen, unhörbaren
        Tönen zu tieferen.	

23.	Bring dem Computer bei, ein Lied zu singen (z.Bsp. "Frère Jacques")!

24.	Mit dem folgenden Programm kannst du Klavier spielen:
		CLS : CLEAR
		PRINT "Klavier spielen"
		PRINT "---------------"
		PRINT
		PRINT "Drücke die Tasten 1, 2, 3, ... 8"
		PRINT "(beenden mit q)"
		WHILE t$lt;gt;"q"
			t$ = INKEY$
			IF t$ = "1" THEN PLAY "O1 L4 C"
			IF t$ = "2" THEN PLAY "O1 L4 D"
			IF t$ = "3" THEN PLAY "O1 L4 E"
			IF t$ = "4" THEN PLAY "O1 L4 F"
			IF t$ = "5" THEN PLAY "O1 L4 G"
			IF t$ = "6" THEN PLAY "O1 L4 A"
			IF t$ = "7" THEN PLAY "O1 L4 B"
			IF t$ = "8" THEN PLAY "O2 L4 C"
		WEND
		END

25.	Untersuche den Befehl COLOR: Welche Zahl erzeugt welche Farbe?

26.	Ein Roboter geht eine Anzahl Pixel nach rechts, dann eine (andere)
       Anzahl Pixel nach unten, dann eine gewisse Anzahl Pixel nach links
       und dann noch etwas nach oben. Diese Bewegung wiederholt er einige
       Male und zeichnet dabei seine Spur auf den Bildschirm.

27.	Bring einen Kreis dazu, quer über den Bildschirm zu laufen! Vielleicht
        ändert er dabei sogar seine Grösse und er quietscht dazu ...

28.	Den Zufall sichtbar machen: Entwickle ein Programm, das
	a) zeigt, wie Schneeflocken auf dem Bildschirm landen! Oder 
	b) zeigt, wie es regnet! Oder
	c) auf dem Bildschirm einen wirren Linienzug erzeugt! Oder...

                                                         .... zurück zum Inhalt



3.1 Befehle
================================================================================

+  -	plus, minus
*  /	mal, durch
^	hoch
=  lt;gt;	gleich, ungleich
lt;  gt;	kleiner, grösser
lt;=  gt;=	höchstens, mindestens
a	Variable für Zahlen
a$	Variable für Text (Zeichenkette, String)
:	trennt Befehle auf der gleichen Zeile
CIRCLE (a,b),c,d	Kreis mit M(a/b) und Radius c, Farbe d
CIRCLE (a,b),c,d,,,e	Ellipse mit r2 = r1oe
CLEAR	leert alle Speicher
CLS	leert den Bildschirm
COLOR a,b	Textfarbe a auf Hintergrundfarbe b
DRAW	zeichnet Polygonzug
END	beendet ein Programm
ENDIF	beendet einen bedingten Befehl
EXIT FOR	Verlassen einer Zählschleife
FOR...NEXT (...STEP)	Schleife (mit gezählten Durchläufen)
GOTO a	Sprung zur Marke a (oder a$)
IF...THEN (...ELSE) (...END IF)	Befehlsbedingung
INKEY	Tastatureingabe ohne Programmstop
INPUT	Tastatureingabe mit Programmstop
INT(a)	Integerfunktion
LET	Zuweisung (Zahl oder Text in Speicher)
LINE (a,b)-(c,d),e	Linie von (a/b) zu (c/d), Farbe e
LINE (a,b)-(c,d),e,B	Rechteck zwischen (a/b) und (c/d), Farbe e
LINE (a,b)-(c,d),e,BF	gefülltes Rechteck
LOCATE a,b	Cursorsprung nach Zeile a, Spalte b
PAINT (a,b),c	Kreisfüllung mit Farbe c
PLAY a$	Ton der Tonleiter
PRINT	Bildschirmausgabe
PRINT TAB (a)	Bildschirmausgabe ab Spalte a
PSET (a,b),c	Punkt bei (a/b), Farbe c
RANDOMIZE TIMER	richtet den Zufallszahlengenerator ein
REM	Bemerkung
RND	liefert eine Zufallszahl
SCREEN a	Text- oder Grafikbildschirm
SLEEP a	Unterbruch während a Sekunden
SOUND a,b	Ton mit Frequenz a Hz während bo0,056 Sek
SQR(a)	Quadratwurzel
TIMER	Zeit (Anzahl Sekunden nach Mitternacht)
WHILE...WEND	Schleife (abhängig von Bedingung)


[Ctrl]+[Pause/Break]	Programm-Abbruch
[Umschalttaste]+[F5]	Programm-Start

                                                         .... zurück zum Inhalt



3.2 Farbcode
================================================================================

Das folgende kleine Programm ermöglicht dir, den Farbcode zu untersuchen:

	REM "FARBCODE.BAS"
	REM Februar 2005
	CLS
	FOR n = 0 TO 15
	  m = n+1
	  IF m = 16 THEN m = 0
	  COLOR n,m
	  PRINT "Das ist Schriftfarbe";n;"auf Hintergrund";m
	NEXT n
	END



0	. . . . . . . . . . . . . 	8	. . . . . . . . . . . . .


1	. . . . . . . . . . . . .	9	. . . . . . . . . . . . .


2	. . . . . . . . . . . . .	10	. . . . . . . . . . . . .


3	. . . . . . . . . . . . .	11	. . . . . . . . . . . . .


4	. . . . . . . . . . . . .	12	. . . . . . . . . . . . .


5	. . . . . . . . . . . . .	13	. . . . . . . . . . . . .


6	. . . . . . . . . . . . .	14	. . . . . . . . . . . . .


7	. . . . . . . . . . . . .	15	. . . . . . . . . . . . .



Mit diesem Code kann die Farbe auch bei den grafischen Befehlen PSET, LINE, 
CIRCLE, PAINT und DRAW bestimmt werden.

                                                         .... zurück zum Inhalt


3.3 Zahlen runden
================================================================================

Die Integer-Funktion schneidet bei positiven Dezimalbrüchen einfach den Teil 
nach dem Komma ab und lässt die ganze Zahl vor dem Komma stehen, sie liefert 
also die nächst tiefere ganze Zahl. Beim Runden auf Einer muss ab 0,5 aber die 
nächst höhere ganze Zahl genommen werden. Man erreicht das durch Addition von 
0,5 vor dem Abschneiden:


x	INT(x)	x + 0.5	INT(x + 0.5)
___________________________________________________________________________


1,214	..........	..........	..........


2,438	..........	..........	..........


3,542	..........	..........	..........


4,751	..........	..........	..........


5,975	..........	..........	..........

___________________________________________________________________________


Wenn wir auf Zehntel runden wollen, so nehmen wir das Zehnfache der gegebenen 
Zahl, runden auf Einer und dividieren das Resultat durch 10:


x	x*10+0.5	INT(x*10+0.5)	INT(x*10+0.5)/10
___________________________________________________________________________


1,214	..........	..........	..........


2,438	..........	..........	..........


3,542	..........	..........	..........


4,751	..........	..........	..........


5,975	..........	..........	..........

___________________________________________________________________________


Wie lassen sich Dezimalbrüche auf Hundertstel, Tausendstel,... runden?



3.4 Würfelzahlen
================================================================================

Bei vielen Spielen muss auch der Computer würfeln können. Mit Hilfe der Zufalls-
Funktion RND (random) produzieren wir aus Dezimalbrüchen <1 die Würfelzahlen 
1,2,3,4,5,6:


Befehl      Ausgabe                von               bis
___________________________________________________________________________

RND           Dezimalbrüche        .,..........      .,..........


RND*6         Dezimalbrüche        .,..........      .,..........


INT(RND*6)    natürliche Zahlen    ...               ...


INT(RND*6)+1  natürliche Zahlen    ...               ...

___________________________________________________________________________


Probiere das folgende Programm aus:

CLS
RANDOMIZE TIMER
FOR n=1 TO 600
  w = INT(RND*6)+1
  PRINT w;
NEXT n
END


Was unterscheidet einen guten Würfel von einem schlechten? Welche Bedingungen 
muss die produzierte Zahlenfolge erfüllen, damit sie dem Resultat eines guten 
Würfels entspricht? 

                                                         .... zurück zum Inhalt



3.5 PLAY-Befehl - Musik erzeugen
================================================================================

Der PLAY-Befehl wird über eine Zeichenkette (einen String) gesteuert, wobei 
Normaleinstellungen nicht erwähnt werden müssen. Elemente dieses Befehls-Strings 
sind:


MF	Musik im Vordergrund: Die Folgebefehle des Programms wer-
	den erst erledigt, wenn der PLAY-Befehl ausgeführt ist 
	(Normaleinstellung).

MB	Musik im Hintergrund: Folgebefehle werden bereits während 
	der Ausführung des Play-Befehls erledigt.

O1,O2,...O6	Oktave, aus der die nachfolgenden Noten stammen.

lt;	Wechsel zur nächst tieferen Oktave.

gt;	Wechsel zur nächst höheren Oktave.

L1,L2,...L64	Länge der nachfolgenden Noten: L1 ganze Noten, L2 halbe 
	Noten, L4 Viertelnoten (Normaleinstellung), L8 Achtel-
	noten usw.

T32,T33,...T255	Tempo der nachfolgenden Noten: Anzahl Viertelnoten pro 
	Minute (Normaleinstellung: T128)

P1,P2,...P64	Pause zwischen zwei Noten: P1 ganze Pause, P2 halbe 
	Pause, P4 Viertelpause (Normaleinstellung) usw.

MS	Nachfolgende Noten staccato spielen.

ML	Nachfolgende Noten legato spielen.

MN	Nachfolgende Noten normal spielen (Normaleinstellung).

C,D,E,F,G,A,B	Noten einer Oktave (c,d,e,f,g,a,h)

+	Vorangehende Note um einen Halbtonschritt erhöhen.

-	Vorangehende Note um einen Halbtonschritt herabsetzen.

N0,N1,...N84	Eine der 85 Noten aus den vorhandenen 7 Oktaven


Beispiel:	PLAY "ML T160 L2 O1 GDEC P2 lt; G gt; DEC" 'lässt den Big-Ben-
	                                               'Schlag ertönen.

                                                         .... zurück zum Inhalt



3.6 DRAW-Befehl - Grafiken erzeugen
================================================================================

Zum DRAW-Befehl gehört eine Zeichenkette (ähnlich wie zu PLAY). Mit diesem 
String wird ein gedachter Zeichenstift über den Bildschirm dirigiert, der eine 
Spur hinterlässt oder auch vom Zeichenblatt abgehoben werden kann. Elemente des 
Befehls-Strings sind:


B	Hebt den Zeichenstift für die nachfolgende Bewegung.

Mx,y	Bewegt den Zeichenstift zum Punkt (x/y).

Rn	Bewegt den Zeichenstift um n Pixel nach rechts (right).
Ln	Bewegt den Zeichenstift um n Pixel nach links (left).
Un	Bewegt den Zeichenstift um n Pixel nach oben (up).
Dn	Bewegt den Zeichenstift um n Pixel nach unten (down).
En	Bewegt den Zeichenstift um n Pixel nach rechts oben.
Fn	Bewegt den Zeichenstift um n Pixel nach rechts unten.
Gn	Bewegt den Zeichenstift um n Pixel nach links unten.
Hn	Bewegt den Zeichenstift um n Pixel nach links oben.

	Schema:		        H   U   E

				L   ·   R

				G   D   F

An	Dreht das Zeichenblatt unter dem Stift um n*90° im Uhr-
	zeigersinn (n = 1,2,3).

TAn	Dreht das Zeichenblatt unter dem Stift um n°.

Cn	Bestimmt die Zeichenfarbe (n = 0,1,2,...15).

Pm,n	Bestimmt die Füllfarbe m und die Randfarbe n einer Figur.


Beispiel:	DRAW "C2 BM280,80 R50 F30 D50 G30 L50 H30 U50 E30" 
	zeichnet mit grüner Linie ein Achteck.

                                                         .... zurück zum Inhalt

                                   ---=== Ende ===--- 

HTML-Konvertierung von Thomas Antoni - www.qbasic.de