VC 20
So machen's andere
5/84, S. 128-135

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.

»Eingeborene« haben einen enormen Heimvorteil

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.

Der Kölner Dom! Wo steht die Hausnummer?
Die Lösung der Titelfrage

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)
Epson-Druckbefehle
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
Steuerzeichen des EPSON-Druckers
Flußdiagramm des 1. Programmteils
Flußdiagramm des 2. Programmteils
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)
Listing 1. Programmteil 1
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
Listing 2. Programmteil 2
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →