Einfache Programme mit typischen Beispielen von Spaghetti-Code.
Einige sind sie sehr kurz und ohne viel Sinn (z.B. Quader.bas),
taugen aber als Anleitung für Anfänger und Abschreckung
vor zu vielen Sprungmarken (z.B: Spiel.bas) (und schlechtem
Programmierstil).
Die Programme sind fast so übernommen, wie ich
sie bis 1996/97 programmiert habe, aber mit etwas Strukturierung durch
Einrückung, Kommentaren und Fehlerbeseitigung.
Zu jedem Programm gibt es mindestens einen Screen-Shot. Diese sind dann
jeweils vor dem Quelltext erreichbar.
Größe: je ca. 3-20 KB
Benutzung auf eigene Gefahr, keine Gewähr bei Fehlern, frei
kopierbar, Geldverdienen und Patentierung von Teilen der der Gesamtheit mit
diesen Programmen nicht erlaubt.
(Using on your own risk, No warranty in error cases, free copying, No
moneymaking with this programs and No patenting of parts or the whole of
these programmes)
| Programm-Name | Beschreibung |
|---|---|
| Graphik1.bas | Kleine Animation mit Kreisen und Rechtecken, Bildschirmschoner |
| Mathe.bas | Das ist ein Rechnen-Übungsprogramm mit Addition, Subtraktion und Multiplikation. |
| Primzahl.bas | Programm errechnet Teiler einer Zahl. |
| Quader.bas | berechnet Oberfläche und das Volumen von einem Quader. |
| Spiel.bas | Spiel der 23 Streichhölzer. |
| Textscro.bas | Bildschirmschoner, Scrollt von rechts nach links. |
| Graphik1.bas (Quelltextdatei) | Bild zum Programm | Seitenanfang |
REM Kleine Animation mit Kreisen und Rechtecken, Bildschirmschoner
SCREEN 12 'Grafikmodus 640x480, 16 Farben
DO
COLOR 3
LINE (0, 0)-(639, 479), 3, BF 'Hintergrund
COLOR 10
s = 1: w = 630: x = 10
r = 550: t = 400: u = 600: v = 450
FOR i = 1 TO 180
CIRCLE (w, x), s 'Kreis x, y, radius
LINE (r, t)-(u, v), 4, B 'Rechteck x1, y1, x2, y2
FOR j = 1 TO 100: a = a + 1: NEXT j 'Pausenschleife
r = r - 3: t = t - 2 'Neue Punkte berechnen
u = u - 3: v = v - 2
s = s + 1
w = w - 2: x = x + 2
NEXT i
FOR i = 1 TO 10000: a = a + 1: NEXT i 'Pausenschleife
CLS
LOOP UNTIL INKEY$ > CHR$(0) 'Beenden bei Tastendruck
SCREEN 0 'In Textmodus
END
|
| Mathe.bas (Quelltextdatei) | Bild zum Programm | Seitenanfang |
1 CLS
rechoper = 0: zahl1 = 0: zahl2 = 0: erg = 0: ed = 0: punkte = 0:
punktsum = 0: anzahlauf = 0: u = 0: z = 0
PRINT "Das ist ein Rechnen-Uebungsprogramm mit Addition, Subtraktion und Multiplikation."
PRINT "Je schwieriger die Aufgaben sind desto mehr Punkte gibt es. "
7 anzahlauf = 0 'Aufgabenzahl
INPUT "Wieviel Aufgaben "; anzahlauf
anzahlauf = anzahlauf + 1
z = 0
5 RANDOMIZE TIMER
z = z + 1
IF anzahlauf = z THEN 'Abfrage am Ende
PRINT "Du hast jetzt "; punktsum; " Punkte von "; u; " moeglichen Punkten."
INPUT "Nocheinmal (j/ja//n/*) "; noche$
IF noche$ = "j" OR noche$ = "ja" THEN GOTO 7 ELSE GOTO 8
END IF
rechoper = INT(RND * 3) + 1 'Auswahl Rechenoperation
zahl1 = 0: zahl2 = 0: erg = 0: ed = 0: punkte = 0: i = 0
IF rechoper = 1 THEN GOTO 2 '+
IF rechoper = 2 THEN GOTO 3 '-
IF rechoper = 3 THEN GOTO 4 '*
2 REM ***Addition*************************************************************
6 zahl1 = INT(RND * 50) + 1 'Zufallszahlen
zahl2 = INT(RND * 50) + 1
ed = zahl1 + zahl2 'Ergebnis berechnen
IF (ed > 50) THEN GOTO 6 'Ergebnis < 51 ?
PRINT zahl1; " + "; zahl2; " = "; 'Abfrage Ergebnis
INPUT erg
IF (ed <> erg) THEN punkte = 0 'Eingabe falsch keine Punkte
IF (ed <= 10) AND (erg = ed) THEN punkte = 10 'Eingabe richtig, Ergebnis <= 10, Bewertung 10 Punkte
IF (ed <= 10) THEN u = u + 10 ELSE u = u + 20 'Berechnung moegl. Punkte
IF (ed > 10) AND (erg = ed) THEN punkte = 20 'Eingabe richtig, Ergebnis > 10, Bewertung 20 Punkte
punktsum = punktsum + punkte
IF erg <> ed THEN 'Ausgabe bei falscher Eingabe
PRINT "Richtig waere "; ed; ". ";
PRINT "Leider falsch - keine Punkte. Insgesamt "; punktsum; " Punkte."
ELSE 'Ausgabe bei richtiger Eingabe
PRINT "Richtig ! Das gibt "; punkte; " Punkte. Insgesamt "; punktsum; " Punkte. "
END IF
GOTO 5 'Zurueck zu Schleifenanfang
'naechste Aufgabe
3 REM ***Subtraktion**********************************************************
9 zahl1 = INT(RND * 50) + 1
zahl2 = INT(RND * 50) + 1
IF zahl1 < zahl2 THEN GOTO 9 'Kein negatives Ergebnis
ed = zahl1 - zahl2
PRINT zahl1; " - "; zahl2; " = ";
INPUT erg
IF ((zahl1 <= 10) OR (zahl2 <= 10)) AND (erg = ed) THEN punkte = 10
IF (zahl1 > 10) AND (zahl2 > 10) AND (erg = ed) THEN punkte = 30
IF (ed <> erg) THEN punkte = 0 'Bewertung 0/10/30 Punkte
IF (zahl1 <= 10) OR (zahl2 <= 10) THEN u = u + 10
IF (zahl1 > 10) AND (zahl2 > 10) THEN u = u + 30
punktsum = punktsum + punkte
IF erg <> ed THEN
PRINT "Richtig waere "; ed; ". ";
PRINT "Leider falsch - keine Punkte. Insgesamt "; punktsum; " Punkte."
ELSE
PRINT "Richtig ! Das gibt "; punkte; " Punkte. Insgesamt "; punktsum; " Punkte. "
END IF
GOTO 5
4 REM ***Multiplikation*******************************************************
zahl1 = INT(RND * 10) + 1 'Ergebnis <= 100, also Faktoren <=10
zahl2 = INT(RND * 10) + 1
ed = zahl1 * zahl2
PRINT zahl1; " * "; zahl2; " = "; : INPUT erg
IF (ed <= 20) AND (erg = ed) THEN punkte = 20
IF (ed > 20) AND (erg = ed) THEN punkte = 40
IF (ed <= 20) THEN u = u + 20 ELSE u = u + 40
IF (ed <> erg) THEN punkte = 0 'Bewertung 0/20/40 Punkte
punktsum = punktsum + punkte
IF erg <> ed THEN
PRINT "Richtig waere "; ed; ". ";
PRINT "Leider falsch - keine Punkte. Insgesamt "; punktsum; " Punkte."
ELSE
PRINT "Richtig ! Das gibt "; punkte; " Punkte. Insgesamt "; punktsum; " Punkte. "
END IF
GOTO 5
8 END
|
| Primzahl.bas (Quelltextdatei) | Bild zum Programm | Seitenanfang |
REM Programm errechnet Teiler einer Zahl
CLS
INPUT "Zahl: "; a
FOR i = 1 TO a 'Zaehle von 1 bis Zahl
IF a MOD i = 0 THEN PRINT i; 'Wenn Rest Division Zahl/Schleife 0, dann Ausgabe
NEXT i
END
|
| Quader.bas (Quelltextdatei) | Bild zum Programm | Seitenanfang |
CLS
PRINT "Dieses Programm errechnet die Oberflaeche und das Volumen von einem Quaders."
INPUT "Geben Sie bitte a,b und c ein (z.B. 3,2,1) !:"; a, b, c 'Eingabe Masse in cm
V = a * b * c 'Volumen berechnen
O = 2 * (a * b + b * c + a * c) 'Oberflaeche berechnen
PRINT "Das Volumen des Quaders betraegt "; V; "cm^3 und die Oberflaeche "; O; "cm^2 ."
END
|
| Spiel.bas (Quelltextdatei) | Bilder zum Programm | Seitenanfang |
CLS
PRINT "Das ist das Spiel der 23 Streichhoelzer. Man bekommt 23 Streichhoelzer. Jeder
Spieler ( 2 Spieler oder der Computer und du ) nimmt 1, 2 oder 3 Streichhoelzer
weg. Wer das letzte nimmt hat verloren. Kapiert? Dann gehts los!"
1 INPUT "1 Spieler und der Computer (1) oder 2 Spieler (2) ?"; spieler
IF spieler = 1 THEN GOTO 6 'Auswahl 1/2 Spieler
REM *************2 Spieler****************************************************
streich = 0
PRINT
INPUT "Name des 1. Spielers : "; spieler1$ 'Namenseingabe fuer Spielende
INPUT "Name des 2. Spielers : "; spieler2$
PRINT
PRINT "Hier sind nun 23 Streichhoelzer."
PRINT
REM --------------------------------------------------------------------------
2 INPUT "Spieler 1 nimmt wieviel Streichhoelzer :"; i
IF i < 1 OR i > 3 THEN
PRINT "Spieler 1 hat gemogelt."
GOTO 2
END IF 'Auswahl Anzahl, nur 1-3
IF i > (23 - streich) THEN
PRINT "Es sind nicht mehr so viele Streichhoelzer da."
GOTO 2
END IF 'Nur maximal soviele wie da sind.
streich = streich + i
IF streich = 23 THEN GOTO 13 'Spielende
i = 0 'Ruecksetzen fuer richtige Gewinnbestimmung
3 INPUT "Spieler 2 nimmt wieviele Streichhoelzer :"; u
IF u < 1 OR u > 3 THEN PRINT "Spieler 2 hat gemogelt.": GOTO 3
IF u > (23 - streich) THEN
PRINT "Es sind nicht mehr so viele Streichhoelzer da."
GOTO 3
END IF
streich = streich + u
IF streich < 23 THEN
u = 0
GOTO 2 'Weiterspielen
END IF
13 REM -----------------------------------------------------------------------
IF streich - i = 22 THEN GOTO 4
IF streich - u = 22 THEN GOTO 9
IF streich - i = 21 THEN GOTO 4
IF streich - u = 21 THEN GOTO 9
IF streich - i = 20 THEN GOTO 4
IF streich - u = 20 THEN GOTO 9
9 PRINT spieler1$; " hat gewonnen !!!!!": GOTO 10
4 PRINT spieler2$; " hat gewonnen !!!!!"
REM --------------------------------------------------------------------------
10 INPUT "Wollen Sie noch einmal spielen? (ja/j//nein/*):"; nocheinmal$
PRINT
IF nocheinmal$ = "ja" THEN GOTO 1
IF nocheinmal$ = "j" THEN GOTO 1 ELSE END
6 REM ***********1 Spieler und Computer***************************************
streich = 0
PRINT
INPUT "Name des Spielers : "; spieler$
PRINT
PRINT "Hier sind nun 23 Streichhoelzer."
PRINT
REM --------------------------------------------------------------------------
5 INPUT "Du nimmst wieviel Streichhoelzer :"; i
IF i < 1 THEN PRINT "Spieler 1 hat gemogelt.": GOTO 5
IF i > 3 THEN PRINT "Spieler 1 hat gemogelt.": GOTO 5
IF i > 23 - streich THEN
PRINT "Es sind nicht mehr so viele Streichhoelzer da."
GOTO 5
END IF
streich = streich + i
IF streich = 23 THEN GOTO 14
i = 0
7 u = INT(RND * 4)
IF u < 1 THEN GOTO 7
IF u > 23 - streich THEN GOTO 7
IF (u + streich = 23) AND (u > 1) THEN GOTO 7
PRINT "Der Computer nimmt "; u; " Streichhoelzer."
streich = streich + u
IF streich < 23 THEN
u = 0
GOTO 5
END IF
14 REM -----------------------------------------------------------------------
IF streich - i = 22 THEN GOTO 8
IF streich - u = 22 THEN GOTO 11
IF streich - i = 21 THEN GOTO 8
IF streich - u = 21 THEN GOTO 11
IF streich - i = 20 THEN GOTO 8
IF streich - u = 20 THEN GOTO 11
11 PRINT spieler$; " hat gewonnen!!!!!": GOTO 12
8 PRINT "Der Computer hat gewonnen!!!!!"
REM --------------------------------------------------------------------------
12 INPUT "Wollen Sie noch einmal spielen? (ja/j//nein/*):"; nocheinmal$
PRINT
IF nocheinmal$ = "ja" THEN GOTO 1
IF nocheinmal$ = "j" THEN GOTO 1 ELSE END
REM **************************************************************************
END
|
| Textscro.bas (Quelltextdatei) | Bild zum Programm | Seitenanfang |
REM Bildschirmschoner, Scrollt von rechts nach links (so sieht es nur aus)
RANDOMIZE TIMER
CLS
COLOR 2
FOR i = 1 TO 80 * 25 'Hintergrund (oben/unten)
PRINT "";
NEXT i
Farbe = 0
VIEW PRINT 2 TO 22 'Ausgabe bei Print nur in Zeilen 2-22
FOR i = 1 TO 80 '1. Zeile
PRINT CHR$(i + 32); 'Zeichen von 33-255,
NEXT i '0-32 Steuer-/Leerzeichen
PRINT
DO
Farbe = ((Farbe + 1) MOD 15) + 1 'Farbe in Reihenfolge, 1-15, kein Schwarz(0)
COLOR Farbe, 0 'Farbe setzen, Hintergrund Schwarz
FOR i = 1 TO 80 'Aktuelle Zeile schreiben
x = SCREEN(CSRLIN - 1, i) 'Lese Zeichen von Zeile darber
IF x >= 255 THEN x = 32
PRINT CHR$(x + 1); 'Ausgabe des richtigen Zeichens
NEXT i
FOR j = 1 TO 200 'Pausenschleife
x = x + 1
NEXT j
LOOP UNTIL INKEY$ > CHR$(0) 'Solange bis Taste gedrueckt
COLOR 7, 0 'Farben wie vorher
VIEW PRINT 1 TO 25 'Ausgabebereich wie vorher
CLS 'Bildschirm loeschen
END
|
|
Homepage Programme von SZ |
Letzte Änderung: 18.04.2001 |
| E-Mail: Stefan Ziegler |