Basic-Programme von Stefan Ziegler

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-NameBeschreibung
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 darüber 
    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 
    
Seitenanfang
Homepage
Programme von SZ
Letzte Änderung: 18.04.2001
E-Mail: Stefan Ziegler