Welche Hausnummer hat der Kölner Dom?
Meist sind sie in der wärmeren Jahreszeit unterwegs, um die Gegend zu »erkunden« – die Orientierungsfahrer. Wer schon einmal an dieser Art Autorallye teilgenommen hat, weiß, wieviel Spaß es macht, eine – häufig verschlüsselt – vorgegebene Strecke abzufahren, unterwegs Aufgaben zu lösen und dabei die eigene Originalität und Kreativität gründlich unter Beweis zu stellen.

Wie lästig ist es aber zum Schluß, nachdem auch die letzten von ihren Irrfahrten eingetrudelt sind, die Auswertung abzuwarten. Das merkte auch Ingo Molitor als er an einer Orientierungsfahrt im Kölner Raum teilnahm. Nach 240 km Fahrtstrecke und enthusiastischem Eifer, alle unterwegs gestellten Aufgaben herauszubekommen, wollte er am liebsten auf der Stelle wissen, wie er im Vergleich zu den anderen Teilnehmern abgeschnitten hatte. Vielleicht war er sogar Erster geworden?
Gezwungenermaßen mußte er seine Ungeduld zügeln — zwei Stunden lang. Und das Ergebnis verbesserte auch nicht gerade seine mittlerweile auf den Nullpunkt gesunkene Laune: Platz 12. Doch kurz vor der Siegerehrung wußte man es besser. Nachdem alle bis dahin verkündeten Ergebnisse von Berechnungs- und Auswertungsfehlern bereinigt waren, besetzte er Platz 8 — nur richtig freuen konnte sich Ingo Molitor jetzt nicht mehr über seinen unfreiwilligen Aufstieg. Ihn beschäftigte schon längst ein ganz anderer Gedanke: So etwas durfte nie wieder vorkommen. Wozu hatte er denn einen Computer — der müßte doch geeignet sein, die bei einer Orientierungsfahrt übliche Spontanität und Freude auch bis zuletzt aufrechtzuerhalten.
Bereits am nächsten Tag begab sich der »Rallyeverbesserer« ans Werk, er schrieb das notwendige Programm auf seinem VC 20. Wenige Tage später »stand« es. Nur jetzt ließ die nächste Orientierungsfahrt auf sich warten. Der Termin war leider nicht per Computer zu steuern.
Sommer und Herbst gingen ins Land — und aufregender als das bevorstehende Weihnachtsfest war der 18. Dezember für Ingo Molitor, denn heute sollte eine Rallye stattfinden. Namen der Fahrer, Beifahrer, Autotypen, Startnummern und so weiter hatte er bereits gespeichert. Mit einem Ausdruck der Startliste in der Hand stand er voller Lampenfieber auf dem Parkplatz, wo die »Jungfernfahrt« seines Programms beginnen sollte. Das Lampenfieber war nicht ganz unbegründet, denn in einem »Anfall« totaler Sicherheit hatte man sich vollkommen auf den Computer verlassen — es gab keinerlei handschriftliche Aufzeichnungen oder Notizen.
Doch die Bedenken gingen zunächst unter, denn das Wesentliche war gegeben: alle Teilnehmer hatten einen Riesenspaß, dafür sorgten schon die gestellten. Aufgaben. So mußte man beispielsweise erkunden »Welche Hausnummer hat der Kölner Dom? Wieviele Stufen führen zum Turm?« Darüber hinaus sollte sich jeder eine Quittung darüber besorgen, daß er in einem fremden Haus ein Fenster geputzt hatte. Und dann ging’s unter der Erde weiter, es galt herauszufinden, wie die Patenstadt eines bestimmten Wagens der Linie 16 heißt.


Sieger bei der Ein-Mann-Rallye
Da Ingo Molitor zu den Organisatoren gehörte, durfte er leider nicht mitmachen — aber eine Rallye sollte er auch noch erleben. Mit einigen Freunden fuhr er zum Zielpunkt, um bei einer gemütlichen Tasse Kaffee den nächsten Coup vorzubereiten: Jetzt stand Eierkochen auf dem Plan. Gegen 15 Uhr fuhr Ingo Molitor vom Zielpunkt zu einem der unterwegs festgelegten Kontrollpunkte und drückte jedem Team ein unverwechselbar markiertes rohes Ei »in die Hand«. Es sollte bis zum Ziel auf irgendeine Weise in ein gekochtes verwandelt werden — Kreativität war Trumpf.
Nun blieb für den Organisator nicht mehr viel zu tun. Am Zielpunkt mußte der VC 20 mit Programm und Drucker für das Eintreffen der Teilnehmer vorbereitet werden. Vor 18 Uhr konnten auch die Schnellsten nicht da sein; Ingo Molitor hatte noch viel Zeit. Doch das änderte sich schlagartig: Als er nämlich das Hauptprogramm starten wollte, erschien auf dem Bildschirm nur eine sehr klare aber in dem Moment außerordentlich freche Meldung »LOAD ERROR«. Trotz zwölf Versuchen und gutem Zureden, der Computer blieb bei seiner Ansicht. Keine Daten — keine Auswertung ..., das wäre die logische Folge gewesen.
Dies war der Startschuß für Ingo Molitors Privat-Rallye. »Streng« nach den Vorschriften der Straßenverkehrsordnung fuhr er nach Hause, um eine Sicherungskopie des Programms zu holen. Er blieb auch Gewinnen dieser nicht angemeldeten Ein-Mann-Rallye.
Die Auswertung klappte dann bilderbuchartig: Keine mühselige Rechnerei für fünf Leute, die damit systematisch 20 andere entsetzlich langweilen. Eher ein Spiel für einen, an dem sich alle beteiligten, denn die nach dem Eintreffen eines jeden Teams ausgedruckten Zwischenlisten heizten die Stimmung ganz schön an.
Übrigens: Die rohen Eier waren fast alle gekocht. Ein Teilnehmer hatte es jedoch — mangels anderer Gelegenheit vorgezogen, zwischendurch ab und zu anzuhalten, um es auf den heißen Motor zu legen. Auch so wird ein Ei hart ohne daß es gekocht ist! Ein anderer Teilnehmer hat einen Geschäftsmann recht beglückt, indem er dessen Schaufensterscheibe gegen Quittung putzte.
(Ingo Molitor/kg)Programmbeschreibung
Das Programm für die Auswertung einer Orientierungsfahrt läuft auf einem VC 20 mit 32 KByte RAM, Datasette und einem Epson-RX80-Drucker mit VC 20 Interface.
Es besteht aus zwei Teilen und unterstützt die Vorbereitung und Auswertung einer Autorallye beziehungsweise Orientierungsfahrt mit bis zu 100 Teilnehmern. Der erste Programmteil steuert die Datenerfassung und Speicherung, der zweite Teil beinhaltet die Auswertung. Je nach Speicherausbau können auch die Daten von mehr als 100 Teams nach Änderung der DIM-Zeilen verarbeitet werden.
1. Programmteil
Der erste Teil dient zur Erfassung der Teams und der Fahrzeugtypen. Nach Eingabe des Tagesdatums meldet sich der VC 20 mit einem Menü und die Eingabe kann beginnen.
1. Eingabe | Zeilen 100 bis 300
Anfangs wird nach dem Team gefragt, also nach dem Fahrer und Beifahrer. Bei längeren Namen sollten die Vornamen abgekürzt werden. Nach der Abfrage des Fahrzeugtyps muß zuletzt zur Überwachung der Startgeld-Zahlung »J« für »bezahlt« und »N« für »nicht bezahlt« eingegeben werden. Gibt man zu allen Punkten nur »Return« ein, so verläßt das Programm in Zeile 260 den Eingabeteil und kehrt zum Menü zurück.
2. Druckliste | Zeilen 350 bis 880
In Zeile 360 ist ein Wartepunkt gesetzt, der das Programm solange stoppt, bis der Drucker angeschaltet wurde, um eine eventuelle Fehlermeldung zu vermeiden. Zeile 380 Open 4,4,0 simuliert auf dem Epson-RX 80 den Commodore VC-1525. Die speziellen Möglichkeiten des Epson werden mit OPEN 1,4,1 eingeschaltet. Die Epson-Befehle sind im Anschluß an das Listing noch genauer erklärt. Die Jahreszahl des anfangs eingegebenen Datums wird jetzt zur Überschrift der Liste genutzt. Zeile 642 sorgt für rechtsbündige Startnummernausgabe. In Zeile 740 werden Spalten angelegt für die spätere Eintragung von Anfangskilometern und Startzeit. Die fertige Startliste kann man dann am Tag der Rallye mit an den Startplatz nehmen, um die aktuellen Daten dort einzutragen.
3. Daten sichern | Zeilen 900 bis 1160
Die Daten werden für den Auswertungsteil gespeichert, entweder auf der Commodore-Datasette oder nach entsprechender Änderung auf Diskette.
4. Daten laden | Zeilen 1200 bis 1470
Hier werden die gespeicherten Daten wieder geladen, um eventuelle Änderungen durchzuführen.
5. Ende | Zeile 2000
In Zeile 2000 endet das Programm.
2. Programmteil
Nach Abfrage von Datum und Uhrzeit (HHMMSS) wird das Menü gezeigt. Das Datum wird hier nicht vom ersten Programmteil genommen, da ja Anmeldearbeiten und Auswertungsarbeiten an verschiedenen Tagen geschehen.
Der Computer sollte bei der Bearbeitung des zweiten Programmteils am Zielplatz der Rallye stehen, damit schneller auf die neuesten Meldungen reagiert werden kann. Zuerst muß der Menüpunkt »8. Laden alte Daten« gewählt werden, um die Daten aus dem ersten Programmteil wieder abzurufen. Dies geschieht m den Zeilen 6000 bis 6300. Danach kehrt das Programm automatisch zum Menü zurück.
1. Daten ergänzen | Zeilen 100 bis 370
In diesem Menüpunkt werden die Daten des ersten Programmteils mit den aktuellen Daten, die am Startplatz in die Liste eingetragen wurden, verknüpft. Hier kann nochmals die Startgeldüberwachung erfolgen und korrigiert werden. Es müssen Start-Kilometer und Start-Zeit eingegeben werden. Sind alle Teams aktualisiert, werden mit
7.A/N Daten | Zeilen 4000 bis 4720
die neuen Daten abgespeichert beziehungsweise wieder geladen. Hiermit wird erreicht, daß der Computer nicht stundenlang bis zum Eintreffen der ersten Teilnehmer das Programm halten muß.
2. Ankunft der Fahrer | Zeilen 400 bis 960
Eingegeben wird die Startnummer des Teams, das soeben eingetroffen ist. Ist es disqualifiziert, wird das in Zeile 550 erkannt und das Menü erscheint wieder. Ist dieses Team noch in der Wertung, so wird die Abfahrts- und Ankunftszeit gezeigt. Die Ankunftszeit wird von der internen Uhr genommen. Danach erscheint der Anfangskilometerstand und der Endkilometerstand wird abgefragt. In Zeile 610 werden die gefahrenen Kilometer berechnet. In den Zeilen 620 bis 640 werden die Punkte für die benötigte Zeit vergeben. Da Startzeit und Endzeit verrechnet werden, ergibt sich nicht die reale Zeit, sondern ein Wert, der der Punktrechnung zugrundegelegt wird. In der Zeile 635 muß abhängig von der Mindestdauer der Rallye dem Wert der Gesamtzeit ein Wert hinzuaddiert werden (die Gesamtzeit wird von der Mindestdauer abgezogen). Im Programm ist 500 als Wert vorgegeben. In der Zeile 680 werden Strafpunkte für beispielsweise zu schnelles Fahren wieder abgezogen. Auch dieser Wert muß je nach Dauer der Rallye geändert werden. In Zeile 740 bis 830 können die Punkte für gelöste Aufgaben vergeben werden.
Die erreichten Gesamtpunkte des Teams werden in Zeile 890 errechnet und angezeigt. Stimmen die eingegebenen Daten eines Teams nicht, kann man unter Menüpunkt 2 einfach wieder die Startnummer des Teams eingeben und die Werte korrigieren.
3. Vorläufige Liste | Zeilen 1000 bis 1430
In diesem Menüpunkt können vorläufige Ranglisten auf dem Bildschirm angezeigt werden; so kann man zu jedem Zeitpunkt der Rallye den aktuellen Stand der einzelnen Fahrzeuge erkennen und verfolgen. Nachdem alle Fahrer am Zielplatz eingetroffen sind, kann mit Punkt
4. Ausdruck der Liste | Zeilen 2000 bis 2910
die endgültige Liste ausgedruckt werden. Mit Open 1,4,1 wird der Epson-Möglichkeiten und mit Open 2,4,0 der Commodore-Drucker angesprochen. In Zeile 2050 wird zu einem Unterprogramm (30000 bis 30900) verzweigt, das grafisch eine Reihe von Autos (oder anderen Symbolen) druckt. Wem diese Möglichkeiten mit seinem Drucker nicht zur Verfügung stehen, der läßt ganz einfach die Zeilen 2050 und 30000 bis 30900 weg. In den Zeilen 2080 bis 2270 werden die Teams mit Rang, Punkten und gefahrenen Kilometern ausgedruckt. Danach springt das Programm automatisch zum Menü zurück.
Für die Sortierung der Daten wurde in Zeile 10000 ff. ein Shell-Sort-Unterprogramm eingebettet. Dieses erlaubt auch die Sortierung großer Datenmengen in relativ kurzer Zeit. Es wurde bewußt keine Quick-Sort-Routine genommen, da diese bei kleineren Datenmengen keinen Zeitvorteil gegenüber Shell-Sort zeigt.
5. Druck der persönlichen Liste | Zeilen 7000 bis 7500
Hier wird für jeden Rallyeteilnehmer die Endliste ausgedruckt. Unter der Überschrift erscheint der jeweilige Platz des Teams und das Team wird unterstrichen. Aus Zeitgründen wird hier der Druck der Autoreihe unterlassen. Wem es Spaß macht, der kann natürlich die Zeile 7110 GOSUB 30000 einfügen. Allerdings kostet dieser Spaß dann beim Drucken etwas mehr Zeit.
5. Ende | Zeile 41000
Über die Eingabe des Menüpunktes 6 ist das Programm beendet.
Viel Spaß bei der Auswertung der nächsten Orientierungsfahrt. Wem das Eintippen der Programme zu mühselig erscheint, der kann sich gerne an den Autor wenden, und das Programm auf Kassette erhalten. (Ingo Molitor/kg)OPEN 4,4,0 | SIMULIERT VC-1525 |
OPEN 1 | EPSON MÖGLICHKEITEN |
CHR$(14) | BREITSCHRIFT |
CHR$(20) | LÖSCHEN BREITSCHRIFT |
CHR$(15) | SCHMALSCHRIFT |
CHR$(18) | LÖSCHEN SCHMALSCHRIFT |
CHR$(27);"E-"; | FETTDRUCK |
CHR$(27);"F"; | LÖSCHEN FETTDRUCK |
CHR$(7) | BELL |
CHR$(27);"N-";CHRS(X) | ÜBERSPRINGEN DER PERFORATION UM X SPALTEN |
CHR$(27);F";CHR$(27);"K-"; CHR$(22);CHR$(0) |
EINSCHALTEN DES EPSON BIT IMAGE-MODE |
CHR$;(27); | DOPPELDRUCK |
CHR$(27);"H-"; | 3LÖSCHEN DOPPELDRUCK |
CHR$;(27);CHR$(X) | X=1 UNTERSTREICHEN X=0 UNTERSTREICHEN LÖSCHEN |
CHR$(12); | SEITENVORSCHUB |
CMD | ALLE FOLGENDEN ANGABEN WERDEN ÜBER DEN DRUCKER AUSGEGEBEN |


5 poke36879,25:poke650,128 7 : 10 : 20 rem autorallye by ingo molitor 30 print"{clr}tagesdatum":inputda$ 40 rem bis zu 100 team's 50 : 60 : 70 dimte$(100),ft$(100),be$(100) 80 goto1500:rem anfang des programms 90 : 100 rem eingabeteil 110 : 120 : 130 x=1 140 : 150 : 160 print"{clr}{rght}{rght}{rght}{rght}{rght}{rght}{red}eingabeteil{blu}" 170 print"{rght}{rght}{rght}{rght}{rght}{rght}{red}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{blu}" 180 : 190 : 200 print"{down}{red}team";x;":{blu}" 210 inputte$(x) 215 : 220 print"{down}{red}fahrzeugtyp :{blu}" 230 inputft$(x) 235 : 240 print"{down}{red}schon bezahlt {blu}" 250 input" j{left}{left}{left}";be$(x) 255 : 260 ifte$(x)=""orleft$(te$(x),1)=" "thenx=x-1:return:rem ende der eingabe 270 : 275 print"{down}alles richtig":a$="" 280 input" ja{left}{left}{left}{left}";a$:ifa$<>"ja"then295 290 x=x+1 295 goto160 296 : 297 return 300 : 310 : 320 : 330 : 350 rem druckausgabe 360 print"{clr}{rvon}machen sie bitte den drucker an. {rvof}":wait198,1:geta$ 370 : 380 open4,4,0:rem simuliert auf epson rx 80 den commodore-drucker 390 : 400 rem druckausgabe 410 print#4,"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}"; 420 print#4,"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}"; 430 print#4 440 print#4 450 print#4 460 print#4 470 print#4 480 open1,4,1:print#1,chr$(14);" autorallye '";right$(da$,2);chr$(20):close1 485 print#4 490 print#4 500 print#4 505 print#4 510 print#4 520 print#4 530 print#4 540 print#4,"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}"; 545 print#4,"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}"; 550 print#4 560 print#4,"start fahrer / beifahrer kfz "; 570 print#4," km-stand startzeit" 580 print#4,"nr. CCCCCC CCCCCCCCC CCC "; 590 print#4," CCCCCCCC CCCCCCCCC " 610 print#4,"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}"; 620 print#4,"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}" 630 open1,4,1 640 fork=1tox 642 ifk<10thenprint#1," "; 650 print#1,k;" "; 657 print#1,te$(k);" auf ";ft$(k);" ";be$(k); 660 : 680 : 690 e=len(te$(k))+len(ft$(k))+len(be$(k))+q 700 p=49-e 710 fora=1top-1:print#4,"C";:nexta 720 : 730 : 740 print#4,"L{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}B{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{SHIFT-@}" 750 : 760 nextk 770 : 780 : 790 fork=1to5:print#1:nextk 800 print#1,chr$(15);"dies ist ein ingo molitor soft-idee programm (c) 1983" 810 print#1:print#1,"bergheim / erft den ";da$;chr$(18) 820 : 840 : 850 close4:close1 860 : 870 : 880 return:rem ende druckausgabe 890 : 900 rem sichern der daten 910 : 920 : 930 print"{clr}{red}sollen die daten ge- sichert werden{blu}" 940 input" j{left}{left}{left}";a$:ifa$<>"j"thenreturn 950 print:print"{down}{down}" 960 : 970 : 980 open1,1,2 990 : 1000 print#1,x:print"daten werden gesichert" 1010 print#1,x 1020 print#1,x:print"{down}{down}einen moment bitte" 1030 print#1,x 1040 print#1,x 1050 : 1060 fork=1tox 1070 : 1080 print#1,te$(k) 1090 print#1,ft$(k) 1100 print#1,be$(k) 1110 : 1120 nextk 1130 close1 1150 : 1160 return:rem ende der datensicherung 1170 : 1180 : 1190 : 1200 rem laden der daten 1210 : 1220 : 1230 print"{clr}{red}sollen die daten ge- laden werden{blu}" 1240 input" j{left}{left}{left}";a$:ifa$<>"j"thenreturn 1260 : 1265 print:print"{down}{down}" 1270 open2,1,0 1280 : 1290 : 1300 input#2,x:print"daten werden geladen" 1310 input#2,x 1320 input#2,x:print"einen moment bitte" 1330 input#2,x 1340 input#2,x 1350 : 1360 : 1370 fork=1tox 1380 : 1390 input#2,te$(k) 1400 input#2,ft$(k) 1410 input#2,be$(k) 1420 : 1430 nextk 1440 : 1450 close2 1460 : 1470 return:rem ende des ladevorgangs 1480 : 1490 : 1500 rem beginn des programms 1510 : 1520 print"{clr} {CBM-A}CCCCCCCCCCCCCC{CBM-S}" 1530 print" B{red} autoralley {blu}B" 1540 print" B {red}1.programm{blu} B" 1550 print" B {red}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{blu} B" 1560 print" B erfassen der B" 1570 print" B team's und B" 1580 print" B fahrzeugtypenB" 1590 print" {CBM-Z}CCCCCCCCCCCCCC{CBM-X}" 1600 print"{down}{down}" 1610 print" {CBM-A}CCCCCCCCCCCCCC{CBM-S}" 1620 print" B{red}1=eingabe {blu}B" 1625 print" B{red}2=druck liste {blu}B" 1630 print" B{red}3=da. sichern {blu}B" 1640 print" B{red}4=da. laden {blu}B" 1645 print" B{red}5=e n d e {blu}B" 1650 print" {CBM-Z}CCCCCCCCCCCCCC{CBM-X}" 1690 print"{down}{down}" 1700 print" "; 1710 input"wahl 1{left}{left}{left}";a 1720 : 1730 : 1740 ifa>5ora<1thenprint"{up}";:goto1700 1750 : 1760 onagosub100,350,900,1200,200 1770 : 1780 : 1790 : 1800 goto1500 2000 print"{clr}":end 3000 open1,4,0:cmd1 3020 list 3030 print#1,fre(0)
5 poke36879,25:poke650,128 10 rem auswertung 20 rem der ralley 30 : 40 : 50 : 60 : 70 dimte$(100),ft$(100),be$(100),di$(100),am(100),az(100),em(100),km(100) 75 dimz2(100),gz(100),pk(100),gp(100),g2(100),g3(100),a(100) 80 goto3000:rem programmanfang 90 : 100 rem ergaenzung 110 k=1 115 : 120 : 130 : 140 : 150 print"{clr}{red}{rght}{rght}{rght}{rght}{rght}{rght}eingabeteil{blu}" 160 print"{red}{rght}{rght}{rght}{rght}{rght}{rght}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{blu}" 170 : 180 : 190 : 200 print"{red}{down}team:";k;"{blu}" 210 printte$(k) 220 : 230 print"{down}{red}fahrzeugtyp:{blu}" 240 printft$(k) 250 : 260 print"{down}{red}bezahlt:{blu}";be$(k) 270 input" j{left}{left}{left}";be$(k) 275 print"{down}{red}noch i. wertung{blu} ";di$(k) 277 input" j{left}{left}{left}";di$(k) 280 : 290 input"{down}{red}km-stand";am(k) 295 input"{down}{red}startzeit";az(k) 300 : 310 : 320 print"{down}{red}{down}das war's !{blu}" 330 wait198,1:geta$ 340 k=k+1:ifk=x+1ork>xthenreturn 350 : 360 goto120 370 rem ende der ergaenzung 380 : 390 : 400 rem ankunft der teilnehmer 410 : 420 : 430 : 440 : 450 print"{clr}{red}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}ankunft" 455 : 460 print"{red}{down}{rght}{rght}{rght}{rght}der teilnehmer{blu}" 470 print"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}" 480 : 490 : 500 print"{down}{red}team nr.:{blu}" 510 inputk 520 print"{up}{up}{red}team nr.:";k;"{blu}":print" " 530 print"{red}team:{pur}";te$(k);"{blu}" 540 : 550 print"{down}{red}noch i. wertung{blu} ";di$(k) 555 inputdi$(k) 556 ifdi$(k)<>"j"thente$(k)=te$(k)+" disqualifiziert":gp(k)=0:g3(k)=0:g2(k)=0:km(k)=0 557 ifdi$(k)<>"j"thenreturn:rem wenn disqualifiziert dann zurueck zum menue 560 print"{down}{red}abfahrt (ssmm){blu}" 570 printaz(k) 580 print"{down}{red}ankunft (ssmm){blu}" 590 z2(k)=val(left$(ti$,4)):printz2(k) 600 print"{down}{red}anfang-km{blu}" 605 printam(k) 607 print"{down}{red}end-km{blu}" 609 inputem(k) 610 print"{down}{red}gefahrene km.{blu}" 612 km(k)=em(k)-am(k):printkm(k) 615 : 620 print"{down}{red}punkte f. zeit" 630 gz(k)=z2(k)-az(k) 635 gz(k)=-gz(k)+500:rem muss je nach laenge der ralley veraendert werden 640 printgz(k);"{blu}" 650 : 660 rem zu schnell gefahren 670 rem muss je nach wunsch veraendert werden 680 ifgz(k)>300theni=gz(k)-150:print"{down}strafpunkte";i:gz(k)=gz(k)-i 690 : 700 rem punkte fuer km muss je nach wunsch veraendert werden 705 print"{down}{red}punkte f. km{blu}" 707 km(k)=(km(k)-500)*-1 709 printkm(k) 710 : 720 : 730 : 740 rem punkte fuer geloeste aufgaben 750 : 760 print"{red}{down}punkte f. aufgaben{blu}" 770 inputpk(k) 780 : 790 : 800 : 810 : 820 input"richtig j{left}{left}{left}";a$:rem punkte richtig wenn nicht dann neue punkte 830 ifa$<>"j"orleft$(a$,1)<>"j"thenprint"{up}{up}{up}{up}";:goto760 840 : 850 rem gesamtpunkte 860 : 870 print"{down}{down}{pur}gesammtpunkte{blu}" 880 : 890 gp(k)=pk(k)+gz(k)+km(k) 900 : 910 print"CCCCC";gp(k) 920 : 930 : 940 wait198,1:geta$:return 950 : 960 rem ende ankunft teilnehmer 970 : 980 : 990 : 1000 rem vorlaeufige rangliste 1010 : 1020 : 1030 : 1040 print"{clr}{red}vorlaeufige liste" 1050 print"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{blu}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}" 1060 : 1070 : 1080 : 1090 rem hilfsvariablen 1100 fork=1tox 1120 g2(k)=gp(k):g3(k)=gp(k) 1130 ifleft$(di$(k),1)="n"theng3(k)=0 1140 nextk 1150 : 1160 : 1170 rem sortierung 1180 : 1190 forn=1tox-1 1200 fork=1tox-1 1210 : 1220 ifg2(k)>g2(k+1)thenl=g2(k):m=g2(k+1):g2(k)=m:g2(k+1)=l 1230 : 1240 nextk,n 1250 : 1260 : 1270 rem zuordnung der hilfsvariablen 1280 : 1285 print"{red}platz punkte kfz {down}{blu}" 1290 l=0 1300 fork=1tox 1310 : 1320 printx-k+1;g2(k), 1330 : 1340 ifg2(k)=g3(l)thenprint" ";ft$(l):l=0:goto1380 1350 l=l+1:ifl>xthenl=0 1360 goto1340 1370 : 1380 nextk 1390 : 1400 : 1410 rem ende sortieren 1420 wait198,1:geta$ 1430 return 1440 : 1450 : 2000 rem ausdruck der liste 2005 rem eroeffnen simulations-1525 und epson moeglichkeiten 2010 open1,4,1:open2,4,0 2017 print#1,chr$(7) 2020 print#1,chr$(27);"n";chr$(3);:print#1,chr$(7); 2025 print#1,chr$(7); 2030 print#2,"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW" 2040 print#1,chr$(14);"auswertung autoralley vom ";da$;chr$(20) 2045 print#2,"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW" 2050 gosub30000:rem drucken von autos 2055 print#1 2056 print#1 2057 print#1 2058 print#1 2060 print#1,chr$(27);"g"; 2070 print#1,"rang pkt. km fahrzeug team";chr$(27);"h" 2072 print#2,"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}" 2075 print#1 2080 : 2085 : 2090 gosub10000 2100 l=0:h=0 2110 fork=xto1step-1 2120 l=l+1 2130 ifl<10thenprint#1," ";l;:goto2150 2140 ifl<100thenprint#1," ";l;:goto2150 2150 print#1," "; 2160 print#1,g3(k);km(k);" ";ft$(k);" "; 2180 g=len(ft$(k))+8:g=30-g 2185 fort=1tog:print#1," ";:nextt:rem leerstellen bis team drucken 2190 print#1,chr$(15);te$(k);chr$(18) 2200 h=0 2230 goto2270 2260 : 2270 nextk 2910 close1:close2:return:rem ende druckvorgang 3000 : 3010 rem programmvorstellung datum und uhrzeit 3020 : 3030 : 3035 print"{clr}{down}{down}{rght}{rght}{rght}{rght}{CBM-A}CCCCCCCCCCCC{CBM-S}" 3037 print"{rght}{rght}{rght}{rght}B B" 3040 print"{rght}{rght}{rght}{rght}B{red}ingo molitor{blu}B" 3050 print"{rght}{rght}{rght}{rght}B B" 3060 print"{rght}{rght}{rght}{rght}B{red} software {blu} B" 3070 print"{rght}{rght}{rght}{rght}B{red} idee {blu} B" 3080 print"{rght}{rght}{rght}{rght}B B" 3090 print"{rght}{rght}{rght}{rght}BpraesentiertB" 3100 print"{rght}{rght}{rght}{rght}B B" 3110 print"{rght}{rght}{rght}{rght}B{grn} autoralley{blu} B" 3120 print"{rght}{rght}{rght}{rght}B B" 3130 : 3140 print"{rght}{rght}{rght}{rght}B B" 3142 print"{rght}{rght}{rght}{rght}B auswertung B" 3146 print"{rght}{rght}{rght}{rght}B {CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y} B" 3148 print"{rght}{rght}{rght}{rght}B B" 3150 print"{rght}{rght}{rght}{rght}{CBM-Z}CCCCCCCCCCCC{CBM-X}" 3160 print"{down}{rght}(c) by {pur}imo-soft{blu} 1983" 3170 fork=1to4000:nextk 3180 input"tagesdat.";da$ 3190 input"uhrzeit hhmmss{left}{left}{left}{left}{left}{left}{left}{left}";ti$ 3200 : 3210 : 3220 rem anfang menue 3230 : 3240 print"{clr}{down}{down}{down}{red}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}menue" 3250 print"{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{rght}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{blu}" 3260 : 3270 : 3280 print"{down}{rght}1 =da.ergaenzen" 3290 print"{down}{rght}2 =ankunft d. fahrer" 3300 print"{down}{rght}3 =vorlaeufige liste":rem auf bildschirm 3310 print"{down}{rght}4 =ausdruck d. liste" 3320 print"{down}{rght}5 =druck d. p. liste" 3325 print"{down}{rght}6 =e n d e " 3330 print"{down}{rght}7 =a/n daten " 3340 rem a/n daten fuer unterbrechung des programms bzw. wiederaufnahme 3350 print"{down}{rght}8 ={red}laden alte daten{blu}{down}{down}{down}":rem daten des 1.programms 3360 : 3370 input"wahl 2{left}{left}{left}";a 3380 : 3385 onagosub100,400,1000,2000,7000,41000,4000,6000 3390 goto3200 3400 : 3410 : 4000 rem laden saven daten 4010 print"{clr}{down}{down}{down}{down}{down}>{red}l{blu}< aden{down}" 4020 print"oder {down}" 4030 print">{red}s{blu} aven{down}" 4040 print"daten ?{down}" 4050 : 4060 input"{down}wahl *{left}{left}{left}";w$:ifw$="*"thenreturn 4070 ifw$<>"s"thenifw$<>"l"thenreturn 4080 : 4090 : 4100 ifw$="s"thengoto4510 4110 : 4120 print"{clr}ok.daten werden ge- laden{down}{down}" 4130 : 4140 open1,1,0 4150 : 4160 input#1,x:print"{down}{down}{down}einen moment bitte" 4170 input#1,x 4180 input#1,x 4190 input#1,x 4200 input#1,x 4210 : 4220 fork01tox 4230 input#1,te$(k) 4240 input#1,ft$(k) 4250 input#1,be$(k) 4260 input#1,di$(k) 4270 input#1,am(k) 4280 input#1,az(k) 4290 : 4300 next 4310 close1 4320 return:rem ende laden daten zurueck zu menue 4510 : 4520 print"{clr}ok.daten werden ge- saved{down}{down}" 4540 open1,1,2 4550 : 4560 print#1,x:print"{down}{down}{down}einen moment bitte" 4570 print#1,x 4580 print#1,x 4590 print#1,x 4600 print#1,x 4610 : 4620 fork=1tox 4630 print#1,te$(k) 4640 print#1,ft$(k) 4650 print#1,be$(k) 4660 print#1,di$(k) 4670 print#1,am(k) 4680 print#1,az(k) 4690 : 4700 next 4710 close1 4720 return:rem ende saven daten zurueck zu menue 4990 : 6000 rem laden daten des 1.programms 6010 : 6020 : 6030 : 6040 print"{clr}sollen alte daten ge- laden werden" 6050 : 6060 input" n{left}{left}{left}";a$ 6070 : 6080 ifa$="n"orleft$(a$,1)<>"j"thenreturn 6090 : 6095 : 6100 open1,1,0 6110 : 6120 input#1,x:print"{down}{down}{down}einen moment bitte" 6130 input#1,x 6140 input#1,x 6150 input#1,x 6160 input#1,x 6170 : 6180 : 6190 fork=1tox 6200 : 6210 input#1,te$(k) 6220 input#1,ft$(k) 6230 input#1,be$(k) 6265 nextk 6270 : 6280 close1 6290 : 6300 return:rem ende laden daten des 1.programms zurueck zum menue 7000 : 7010 rem druck der persoenlichen liste 7020 : 7030 r=0 7040 fork=xto1step-1 7042 r=r+1 7045 open1,4,1:open2,4,0:rem simulieren des vc-1525 und epson moeglichkeiten 7050 print#1,chr$(7) 7060 print#1,chr$(27);"n";chr$(3);:print#1,chr$(7); 7070 print#1,chr$(7); 7080 print#2,"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW" 7090 print#1,chr$(14);"auswertung autoralley vom{$a0}";da$;chr$(20) 7100 print#2,"WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW" 7110 : 7120 print#1 7125 print#1 7130 print#2," {CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}" 7132 print#2," platz";r 7134 print#2," {CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}{CBM-+}" 7136 print#1 7140 print#1 7150 print#1,chr$(27);"g"; 7160 print#1,"rang pkt. km fahrzeug team";chr$(27);"h" 7170 print#2,"{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}{CBM-Y}" 7180 print#1 7200 gosub10000 7220 fory=xto1step-1 7230 l=l+1 7240 ify=kthenprint#1,chr$(27);"-";chr$(1);:rem jeweiliges team wird unterstrichen 7250 ifl<10thenprint#1," ";l;:goto7270 7260 ifl<100thenprint#1," ";l;:goto7270 7270 print#1," "; 7280 print#1,g3(y);km(y);" ";ft$(y);" "; 7300 g=len(ft$(y))+8:g=30-g 7310 fort=1tog:print#1," ";:nextt 7320 print#1,chr$(15);te$(y);chr$(18) 7350 : 7360 : 7370 ify=kthenprint#1,chr$(27)"-";chr$(0); 7380 nexty 7385 : 7810 print#1,chr$(27);"e" 7815 print#1,"die rennleitung bedankt sich fuer ihr faires mitfahren !";chr$(27);"f" 7820 rem print#1,chr$(12) 7840 close1:close2 7850 nextk 7900 return:rem ende des ausdrucks persoenliche listen 10000 rem shell-metzner-sotierroutine 10010 : 10020 : 10030 j6=x 10040 j6=int(j6/2) 10050 if(j6=0)then10490 10060 j2=x-j6 10070 forj=1toj2 10080 i=j 10090 j3=i+j6 10100 if(g3(i)<=g3(j3))then10160 10110 h1=g3(i):h2=km(i):h3$=ft$(i):h4$=te$(i) 10120 g3(i)=g3(j3):km(i)=km(j3):ft$(i)=ft$(j3):te$(i)=te$(j3) 10130 g3(j3)=h1:km(j3)=h2:ft$(j3)=h3$:te$(j3)=h4$ 10140 i=i-j6 10150 if(i>0)then10090 10160 nextj 10170 goto10040 10490 return:rem ende shell-sort 30000 rem autos drucken 30010 rem in epson bit image schreibweise 30015 print#1,chr$(27);"f"; 30025 fort=1to20 30030 print#1,chr$(27);"k";chr$(22);chr$(0); 30040 forn=1to22 30045 readd 30050 print#1,chr$(d); 30060 nextn 30065 restore:nextt 30800 data24,56,56,56,60,126,158,156,152,248,248,152,152,152,156,158,126,60,56,24,0,0 30900 restore:return 40000 open1,4,0:cmd1:list:print#1 41000 print"{clr}{down}{down}{down}{down}{down}{down}{down}{down}{rght}{rght}{rght}{rght}{rght}";:end