»Gut Ziel« mit dem C64
Den richtigen Treffer landete Ernst Merk aus Weißenhorn bei seinem Schützenverein mit seinem Programm zur Auswertung der Schießergebnisse.
Als Mitglied im Ausschuß unseres Schützenvereins war es mir meistens vergönnt, bei der Auswertung der Schießergebnisse zu helfen, um zum Saisonende den Schützenmeister zu ermitteln. Das war bei unserem manuellen System eine recht mühsame Arbeit und lange Rechnerei. Ich wollte deshalb die Rechenarbeit von meinem C 64 erledigen und die Ergebnisse von meinem Epson RX 80 ausdrucken lassen. Das Programm, das ich zu diesem Zweck im Sinn hatte, sollte nicht nur eine Auswertung am Saisonende ermöglichen, sondern zusätzlich einen ständigen Überblick über den Leistungsstand der einzelnen Schützen liefern. Auf den aktuellen Leistungsstand mußten wir bisher verzichten. Es hätte jedesmal einfach zu viel Zeit in Anspruch genommen.
Das Programm, das einige Feierabende an Arbeit kostete, habe ich »Meister« getauft. Seitdem wir es zur Auswertung benutzen, haben wir schon einige Zeit eingespart. Denn, sind alle Schießergebnisse eingegeben, steht einer schnellen Auswertung nichts mehr im Weg. Ermittelt wird der Vereinsmeister und die Rangfolge der Schützen in den einzelnen Disziplinen; zum Beispiel Luftgewehr und Pistole. Vereinsmeister wird, wer die größte Gesamtsumme aus den höchsten zehn Einzelergebnissen hat. Bei Summengleichheit entscheidet das höchste Einzelergebnis. Das funktioniert bei bis zu zehn gleichen Ergebnissen.
In der Gruppenauswertung wird der Vereinsmeister nicht mehr berücksichtigt. Für jedes Mitglied wird die Platznummer ermittelt, wenn die Summe der zehn besten Serien größer als 0 ist. Die Auswertung enthält, neben der Plazierung die Summe und den Durchschnitt der zehn höchsten Serien, den Durchschnitt aller Serien und die Zahl der Wettbewerbstage. Beim Ausdruck werden die zehn besten Serien in Fettdruck dargestellt, da nur diese für die Wertung von Bedeutung sind.
Gute Benutzerführung
Während des Ablaufs sagt das Programm an jeder Stelle dem Anwender, was zu tun ist. Es hat meiner Meinung nach viele Funktionen, welche die Arbeit mit dem Programm erleichtern: Es werden relative Dateien angelegt, um die Schießergebnisse von maximal 400 Schützen mit schnellem Datenzugriff verwalten zu können. Dabei können bis zu 15 Disziplinen vergeben werden. Wird die anfangs festgelegte Dateilänge überschritten, wird die Datei um 25 Datensätze erweitert. Die Zahl der freien und neu organisierten Datensätze wird angezeigt. In der Datei kann nach bestimmten Namen gesucht oder geblättert werden. Haben Sie den gewünschten Datensatz gefunden, können Sie davon eine Hardcopy ausdrucken lassen.
(Ernst Merk/hm)
Nach dem Start des Programmes müssen Sie erst eine Datendiskette anlegen. Das Programm fordert Sie selbsttätig dazu auf, wenn es nach RUN keine Datei auf der Diskette findet. Es werden drei Dateien angelegt: SCH.REL (REL), SCH.RELINDEX (SEQ) und GRUPPEN (SEQ).
Auf eine Anleitung kann verzichtet werden, da das Programm eine recht gute Benutzerführung hat. Es ist menügesteuert und zeigt immer die aktuelle Belegung der Funktionstasten an.
(Ernst Merk/hm)10 rem ######################### 11 rem # meister (schuetze) # 12 rem # geschr. am 24.11.1984 # 13 rem # von merk ernst # 14 rem # 7912 weissenhorn # 15 rem # kohlstattstrasse 3 # 16 rem ######################### 40 goto100 50 close5:open5,4,1:print#5,chr$(27);chr$(69);:close5:open5,4,2:return 60 close5:open5,4,1:print#5,chr$(27);chr$(70);:close5:open5,4,2:return 100 printchr$(147) 140 : 150 : 160 gosub30000 170 close1:open1,8,2,fr$+",l,"+chr$(dl) 180 close3:open3,8,8,fi$+",s,r" 190 gosub10000:rem disk fehler 200 if a1<>0thenrun 210 input#3,in$:mx$=left$(in$,15) 220 mx=val(mx$) 230 : 240 in$(0)=in$ 250 printchr$(147) 260 print:print:print 270 print" Information" 280 print:print 290 print" Bisherige Dateigroesse: ";mx 300 print:print: 310 print" Bitte Warten" 320 i=0 330 fori=1tomx 340 :input#3,in$(i),pl%(i),te$(i) 342 : 344 : 346 :print" "itab(7)mxtab(15);in$(i) 350 next:ii=0 351 close3:open3,8,8,"@:gruppen,s,r" 352 fr$="gruppen":fi$=fr$+"index":gosub10000:fr$="sch.rel":fi$=fr$+"index" 353 iffs=1then359 354 ii=ii+1:ifii>15then359 356 input#3,gr$(ii):print" "gr$(ii) 358 ifst<>64then354: close3 359 close3:open3,8,8,fi$+",s,r" 360 gosub10000 365 print:print 370 print" Druecken Sie eine Taste" 380 poke198,0:wait198,1 390 rem ---------------- 1000 rem meneu 1010 rem --------------- 1020 : 1030 printchr$(147)"{rvon} *** Schuetzen - Datei *** {rvof}" 1050 print" Haupt - Menue : " 1055 print" {CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}{CBM-U}" 1060 print 1080 print" X = Programm-Ende" 1085 print 1087 print" B = Freier Speicherplatz" 1090 print 1100 print" G = Anzeigen ges. Datei" 1110 print 1120 print" S = Suchen" 1122 print 1125 print" D = Gruppen definieren" 1130 print 1140 print" N = Neue Namen eingeben" 1142 print 1145 print" E = Ergebnisse eingeben" 1146 print 1147 print" A = Ausdruck d.Ergeb." 1150 print 1160 print" ! = Neue Datei anlegen" 1170 print:print 1180 print"Waehlen Sie "; 1190 poke198,0 1200 get r$:ifr$=""then1200 1210 ifr$="x"thenclose1:gosub15000:close15:printchr$(147)chr$(142):end 1220 ifr$="g"then3500 1225 ifr$="d"then17000 1230 ifr$="s"then3000 1240 ifr$="n"then1800 1245 ifr$="e"then16000 1247 ifr$="a"then20000 1250 ifr$="!"then11000 1260 ifr$="b"thenprintchr$(147)"{rvon}{down}{down}{down}{down}Freier Speicher :{rvof}"fre(o)" Byte":forii=0to3500:next 1270 goto390 1800 rem ----------------------- 1810 rem eingabe 1820 rem ----------------------- 1821 nn$="":rc$="" 1822 fori=1to5:rc$=rc$+" ... ... ... ... ... ... ... ... ... ...":next 1827 printchr$(147)"{rvon} Name u. Vorname eingeben : {down}{rvof}" 1828 bl$=" " 1830 inputnn$:ifnn$=""then390 1832 printchr$(147)"{rvon} Gruppe auswaehlen < NR. 1-15 > : {rvof}"; 1833 print"{rvon} Alle anderen Nummern = << RETURN >> !!!{rvof}" 1834 printchr$(19)"{down}{down}{down}{down}{down}{down}****************************************" 1836 forii=1to15:printii,gr$(ii):next:nn$=left$(nn$,25) 1838 printchr$(19)"{down}{down}Name : "nn$:print 1840 input"Gruppe :";r$: 1842 te=val(r$):ifte<1orte>15then1000 1844 printchr$(145),gr$(te) 1846 nn$=nn$+left$(bl$,25-len(nn$)): 1850 rc$=nn$+rc$ 1860 rem bestimmung satz nr. 1870 lz$=" ":lz=4 1880 i=0 1890 i=i+1:ifi>mxthen1980 1900 : 1910 if in$(i)<>"*"then1890 1920 i$=str$(i):te$(i)=str$(te) 1930 i$=mid$(i$,2)+left$(lz$,lz-len(i$)+1) 1940 in$(i)=i$+nn$ 1950 rn$=str$(i) 1960 gosub14000 1970 gosub8000: 1980 if i>=mxthenprintchr$(147);"Datei voll !":goto11500 1990 goto1000 2000 rem ------------------- 2010 rem ausgabe 1.datensatz 2020 rem ------------------- 2030 printchr$(19)"{down}{down}{down}{down}{down}{down}{down}{down}{down}{down}{down} " 2040 printchr$(19);chr$(17)"{down}{down}{down}{down}{down}****************************************"; 2045 print" Anzeige Datensatz";rn 2050 print:print 2060 print" Nachname :"nn$ 2065 te=val(te$(rn)):te=abs(te) 2070 print" Gruppe :"gr$(te) 2080 print" Ergebnisse :":print:printsr$:print 2100 print" Summe der 10 h. Ergeb.: {left}{left}{left}{left}{left}{left}{left}{left}"pl%(i) 2130 return 2500 rem ------------- 2510 rem drucken 2520 rem ------------- 2530 printchr$(19);"*************** Hardcopy ***************"; 2532 foru=1to4:print" ";:next 2540 printchr$(18)"Ist Drucker eingeschaltet Taste druecken";chr$(146);chr$(145); 2550 getr$:ifr$=""then2550 2560 print" "; 2630 close5:open5,4,0 2640 fory=1024to1984step40 2650 bz$="" 2660 forx=0to39 2670 z%=peek(y+x) 2680 ifz%<32thenz%=z%+64 2690 bz$=bz$+chr$(z%) 2700 next 2710 print#5,bz$ 2720 next 2730 close5:printchr$(19);:goto3180 3000 rem ------------- 3010 rem suchen 3015 rem ------------- 3020 n$="" 3030 printchr$(147); 3040 print"{rvon} --- Suchen --- {rvon}" 3050 print:print 3060 input" Nachname";n$ 3070 n=len(n$) 3080 s1=1 3090 fori=s1tomx 3100 :ifin$(i)="*"then3120 3110 :ifmid$(in$(i),5,n)=n$then3180 3120 next 3130 ifs1>1thenprint:printchr$(147)"{rvon} Suche beendet !!{rvof}":print:goto 3150 3140 print:printn$" nicht gefunden":print 3150 print"Druecke Taste" 3160 get r$:ifr$=""then3160 3170 goto 1000 3180 rn$=left$(in$(i),4):printchr$(147) 3185 iflen(rn$)=0then3230 3190 gosub14000 :rem satznr aufteilen 3200 gosub 9000 :rem lesen / aufteilen 3220 gosub 2000 :rem anzeigen 3225 print 3230 printchr$(19)"{rvon} --- Datensatz --- {rvof}" 3240 w$=" {rvon} Waehle :{rvof} " 3250 print"(W)eitersuchen (Z)urueck" 3260 print"(A)endern (L)oeschen" 3270 print"(D)rucken" 3280 printw$ 3290 get r$:ifr$=""then3290 3300 w$=" {rvon} Warten !{rvof} " 3310 printchr$(145);w$;chr$(17) 3320 if r$="z"then3170 3330 if r$="w"thens1=i+1:goto3090 3340 if r$="a"then6000 3350 if r$="l"thenprintchr$(147);:goto4000 3360 if r$="d"thengoto2500 3370 goto3230 3500 rem --------------------- 3510 rem lesen ges. datei 3520 rem --------------------- 3530 printchr$(147):rn=0 3540 rn=rn+1:i=rn 3550 :hb=int(rn/256) 3560 :lb=rn-hb*256 3570 :gosub9000 :rem lesen 3580 :if er=50 thenprintchr$(147);"Datei-Ende !!!":print:print:print:goto3620 3590 :if f=2thenprintchr$(19)"{down}{down}{down}{down}{down}{rvon} Nicht belegt: Datensatz-Nr. ";rn;"{rvof} ":goto3540 3610 :gosub 2000:rem anzeigen 3620 :print"Druecke Taste" 3630 :get r$:ifr$=""then3630 3640 :r$="" 3650 if er<>50 then3540 3660 goto1000 4000 rem --------------------- 4010 rem loeschen datensatz 4020 rem --------------------- 4030 : 4040 in$(i)="*":pl%(i)=0 4050 rc$="~" 4060 gosub8000:rem speichern 4070 nn$=".":nv$=".":ot$=".":sr$="." 4080 : 4100 goto3220 5000 rem ------------------------------ 5010 rem aufteilen datensatz in feldern 5020 rem ------------------------------ 5030 : 5050 nn$=mid$(rc$,1,25) 5070 sr$=mid$(rc$,26,200) 5110 return 6000 rem ---------------------- 6010 rem - eingabe neue daten 6020 rem ---------------------- 6030 : 6040 printchr$(147);:nv$="":ifj=0thenj=1 6045 gosub2000 6050 print"{home}{rvon} Eingabe - Schiessergebnisse : {rvof}"; 6060 print" "; 6070 print" F7=Zurueck / Cursor ^_ =Schiesstag !!! "; 6080 print" "; 6090 print"{rvon} Schiesstag : {rvof} {left}{left}{left}"j,"{rvon}Ergebniss : {rvof} {left}{left}{left}{left}"nv$ 6100 getr$ 6110 ifr$="{up}"thenj=j-1:ifj<1thenj=1 6120 ifr$="{down}"thenj=j+1:ifj>50thenj=50 6130 ifr$="{f7}"then6300 6140 ifr$=>"0"andr$<="9"thennv$=nv$+r$:iflen(nv$)>3thennv$=left$(nv$,3) 6150 ifr$=chr$(20)andlen(nv$)>0thennv$=left$(nv$,(len(nv$)-1)) 6160 ifr$=chr$(13)then6200 6180 goto6050 6200 rem ergebnis einsortieren 6210 nv$=left$(bl$,4-len(nv$))+nv$ 6215 ifnv$=" "thennv$=" ..." 6220 ii=(j-1)*4:ifii<1then6240 6230 sr$=mid$(sr$,1,ii)+nv$+mid$(sr$,ii+5):goto6260 6240 sr$=nv$+mid$(sr$,j+4) 6260 gosub2000:rc$=nn$+sr$ 6270 nv$="":goto6050 6300 printchr$(147) 6301 print"{rvon} Bitte haben Sie etwas Geduld ! {rvof}":print:print 6303 goto18000:rem 10 h. ergeb. 6305 gosub14000 6310 gosub8000 6990 goto16213 8000 rem --------------------------- 8010 rem daten speicher auf disk 8020 rem --------------------------- 8030 : 8080 print#15,"p"+chr$(2)+chr$(lb)+chr$(hb)+chr$(1) 8100 print#1,rc$ 8110 fs=1:rem flag speichern 8170 return 8180 : 9000 rem --------------------- 9010 rem lesen von disk 9020 rem --------------------- 9030 f=0 9040 print#15,"p"+chr$(2)+chr$(lb)+chr$(hb)+chr$(1) 9050 input#15,er 9060 if er =50then9110 9070 input* 1,226,rc$ 9080 ifleft$(rc$,1)="~"thenf=2:goto9110 9090 f=1: 9100 : 9110 goto5000 9999 close15:open15,8,15 10000 rem ------------------ 10010 rem disketten-fehler 10020 rem ------------------ 10030 printchr$(147) 10040 input#15,a1,a2$,a3,a4 10050 ifa1=0then10180 10055 ifa1=62andfr$="gruppen"thenfs=1:goto 10180 10060 ifa1=62thengosub10200:goto10180 10070 print 10080 printa1,a2$,a3,a4 10090 print:print 10100 print" Disketten-Fehler" 10110 print:print 10120 print" Beheben Sie den Fehler" 10130 print" und druecken Sie" 10140 print" << F >>" 10160 getr$:ifr$=""then10160 10170 printchr$(147) 10180 return 10190 : 10200 printchr$(147) 10210 print:print:print:print 10220 print" Die Datei "fr$ 10230 print 10240 print" oder "fi$ 10250 print 10260 print" Existieren nicht !" 10270 print:print 10280 print" L = Datendisk einlegen" 10290 print 10300 print" N = Datei neu anlegen" 10310 getr$:ifr$=""then10310 10320 ifr$="l"thenreturn 10330 ifr$="n"thengoto11000 10340 goto10310 11000 rem ------------------ 11010 rem neue datei anlegen 11020 rem ------------------ 11030 : 11040 printchr$(147):print 11050 ifa1=0then11070 11060 print" " 11070 print" Achtung,die gesamte Disk wird " 11080 print" geloescht !!!" 11090 print:print 11100 print" N = neue Datei X = Ende" 11110 getr$:ifr$=""then11110 11120 ifr$="x"then close1:gosub15000:close15:printchr$(147):end 11130 ifr$<>"n"then11110 11140 print:print" Bitte Warten !": 11150 print#15,"s:sch.rel" 11160 clr:gosub30000 11170 close1:open1,8,2,fr$+",l,"+chr$(dl) 11180 print"Wieviele Datensaetze soll die Datei" 11190 print"verwalten "; 11200 inputrn$:rn=abs(int(val(rn$))) 11210 ifrn<=mxthen11180 11220 hb=int(rn/256) 11230 lb=rn-hb*256 11240 print" Bitte Warten !" 11250 print#15,"p"+chr$(2)+chr$(lb)+chr$(hb)+chr$(1) 11260 print#1,chr$(255) 11270 mx=rn 11280 mx$=str$(rn) 11290 close1 11300 : 11310 print"{home} " 11320 fori=am+1tomx 11330 :in$(i)="*" 11340 print"{home} "mx;i,in$(i) 11350 next 11360 in$(0)=mx$:am=1 11380 gosub15040:rem seq datei speichern 11420 run 11430 : 11500 rem ------------------ 11510 rem datei erweitern 11520 rem ------------------ 11530 am=mx 11540 mx=mx+25 11550 print:print" Erweitern der Datei" 11560 print:print" Bisherige Groesse = "am 11570 print:print" Neue Groesse = "mx 11580 rn=mx 11590 goto 11220 14000 rem -------------------------- 14010 rem auteilen datensatznummer 14020 rem -------------------------- 14030 : 14040 rn=abs(int(val(rn$))) 14100 hb=int(rn/256) 14110 lb=rn-hb*256 14130 return 14150 : 15000 rem ----------------------- 15010 rem speichern seq datei 15020 rem ----------------------- 15030 if fs<>1then15120 15040 close3:open3,8,8,"@:"+fi$+",s,w" 15050 gosub10000:rem fehlerkanal 15060 ifa1<>0then15040 15065 print#3,str$(mx) 15070 fori=1tomx 15080 :print#3,in$(i)","pl%(i)","te$(i) 15085 printchr$(147)i,"n:"in$(i),"s:"pl%(i),"gr:"te$(i) 15090 next 15092 close3:open3,8,8,"@:gruppen,s,w" 15094 fr$="gruppen":fi$="gruppen":gosub10000:fr$="sch.rel":fi$=fr$+"index" 15100 fori=1to15:print#3,gr$(i):next 15110 close3 15120 return 15130 : 15500 rem --------------------- 15510 rem lesen seq datei 15520 rem --------------------- 15530 close3:open3,8,8,"@:"+fi$+",s,r" 15540 gosub10000:rem fehlerkanal 15550 ifa1<>0then15530 15560 fori=1tomx 15570 print#3,in$(i),pl%(i),te$(i) 15580 :print" "i;mx;in$(i) 15590 next 15592 close3:open3,8,8,"gruppen,s,r" 15594 fr$="gruppen:fi$="gruppen":goS10000:fr$="sch.rel":fi$=fr$+"index" 15595 fori=1to15:input#3,gr$(i):printgr$(i):next 15600 close3 15610 return 15620 : 16000 rem ------------------- 16010 rem ergebnisse eingeben 16020 rem ------------------- 16022 printchr$(147) 16030 goto16250 16100 getr$ 16110 ifr$="{f1}"theni=i+1:goto16201 16120 ifr$="{f2}"theni=i-1:goto16206 16130 ifr$="{f7}"andi>0andi<=mxandleft$(in$(i),1)<>"*"then6000 16140 ifr$="{f8}"then1000 16200 goto16100 16201 ifi>mxtheni=i-1:goto16100 16203 ifin$(i)<>"*"then16213 16205 i=i+1:goto16201 16206 ifi<1theni=i+1:goto16100 16208 ifin$(i)<>"*"then16213 16210 i=i-1:goto 16206 16213 printchr$(147):ifi<0ori>mxthen16100 16214 rn$=str$(i): 16215 gosub14000:rem satznr.auft 16220 gosub9000:rem lesen / aufteilen 16240 gosub2000:rem anzeigen 16250 printchr$(19); 16255 print"{rvon} --- Eingabe - Meneu --- {rvof}"; 16260 print" F1 = Naechster Datensatz" 16270 print" F2 = Letzter Datensatz" 16280 print" F7 = Datensatz aendern" 16285 print" F8 = Zurueck Hauptmenue" 16290 print"{rvon} Waehle :{rvof}" 16300 goto16100 17000 rem-------------------- 17010 rem gruppen definieren 17020 rem-------------------- 17030 printchr$(147);:fs=1 17040 print"{rvon} Gruppen definieren : {rvof}":print"{down}{down}{down}{down}"; 17045 print"****************************************" 17050 forii=1to15 17060 printii,gr$(ii) 17070 next 17080 printchr$(19)"{down} F1 = Eingabe " 17090 print" F7 = Zurueck Haupt-Menue" 17095 print" F2 = Gruppe loeschen " 17098 print"{rvon} Waehle:{rvof}" 17100 getr$:ifr$=""then17100 17110 ifr$="{f7}"then1000 17120 ifr$="{f2}"then17500 17130 ifr$<>"{f1}"then17100 17140 forii=1to15:ifgr$(ii)="."then17160 17150 next:printchr$(147)"{down}{rvon} Alle Gruppen belegt !{rvof}":goto17080 17160 printchr$(147)"{down}{down} Welcher Name :":print 17170 inputgr$(ii):goto17030 17500 printchr$(19);:forii=1to6:print" ";:next 17510 printchr$(19):print" Welche Gruppe soll geloescht werden :" 17520 input"{rvon} NR.: {rvof}";r$:ii=val(r$):ifii>15orii<1then17030 17530 gr$(ii)=".":goto17030 18000 rem------------------------- 18010 rem erm. 10 hoechsten serien 18020 rem------------------------- 18022 h%=0:pl%=0: 18025 forii=1to200step4 18030 ifii=1thensr$=" "+mid$(sr$,ii+1):goto18038 18031 sr$=left$(sr$,ii-1)+" "+mid$(sr$,ii+1) 18038 next 18040 fori1=1to10 18050 forii=1to200step4 18060 r%=val(mid$(sr$,ii,4)) 18070 ifr%>h%thenh%=r%:hh%=ii 18080 next:ifhh%=0then18125 18090 pl%=pl%+h% 18092 h$=str$(h%) 18093 h$=left$(bl$,4-len(h$))+h$ 18094 h$="-"+mid$(h$,2,3) 18100 ifhh%=1thensr$=h$+mid$(sr$,5):goto18120 18110 sr$=left$(sr$,hh%-1)+h$+mid$(sr$,hh%+4) 18120 h%=0:h$="":hh%=0 18125 next 18130 pl%(i)=pl%:rc$=nn$+sr$: 18140 goto6305 20000 rem--------- 20010 rem ausdruck 20020 rem--------- 20030 close1:gosub15000 20035 close1:open1,8,2,fr$+",l,"+chr$(dl) 20040 printchr$(147)"{rvon} ### Drucker-Ausgabe ### {rvof}" 20050 print:print:print"{rvon} Bitte Warten !!! {rvof}"; 20100 printchr$(145)" Bitte waehlen Sie : ":print:print 20110 print" F7 = Zurueck Hauptmene":print 20120 print" 1 = Gesammt Ausdruck":print 20130 print" 2 = Ausdruck Gruppe von / bis":print 20135 print:print"{rvon} Bitte Drucker einschalten !!! {rvof}":print 20140 getr$:ifr$=""then20140 20145 close5:open5,8,1:print#5,chr$(27);chr$(64);:close5 20150 ifr$="{f7}"then1000 20160 ifr$="1"then20260 20170 ifr$<>"2"then20140 20200 printchr$(147)"{rvon} Ausdruck : {rvof}" 20210 forii=1to15:printii,gr$(ii):next:print:print 20220 input"Nr.-Von :";r$:v%=abs(int(val(r$))) 20230 input"Nr.-Bis :";r$:b%=abs(int(val(r$))) 20240 ifv%<1orv%>15orb%<1orb%>15orv%>b%then20200 20250 goto20300 20260 v%=1:b%=15:rr$="vm":rem ges. ausdruck 20300 close5:gosub50 20310 print#5,"########################################"; 20320 print#5,"########################################"; 20330 print#5,"# Schuetzenverein Obe"; 20340 print#5,"rreichenbach e.V. #"; 20350 print#5,"########################################"; 20360 print#5,"########################################" 20370 gosub60:print#5,chr$(10):print:r$="" 20380 input"Datum :";r$ 20390 print#5,"Schiesssaison bis : ";r$;:gosub50:print#5,chr$(10):print#5,,, 20400 ifrr$="vm"thenprint#5,"******* VEREINS-MEISTER : *******" 20410 ifrr$="vm"thengosub50:print#5,,;:close5:z%=0:gosub22000:gosub60:close5 20500 fori1=v%tob% 20510 ifgr$(i1)="."then20600 20520 close5:open5,4,7 20530 gosub50:print#5:print#5,gr$(i1);" :":gosub60:close5:open5,4,7 20535 h=len(gr$(i1))+2 20540 forii=1toh:print#5,"{CBM-U}";:next: 20550 print#5:close5:z%=i1 20560 gosub22000 20600 next: 20610 gosub50:print#5, 20620 forii=1to80:print#5,"+";:next 20630 print#5,"+ COMMODORE - COMPUTER - Sotfware von M"; 20640 print#5,"ERK ERNST / geschrieben am 24.11.1984 +"; 20650 forii=1to80:print#5,"+";:next:print#5,chr$(10):close5 20660 goto29999 22000 rem ----------- 22010 rem platzierung 22020 rem ----------- 22030 f%=1: 22040 h%=0:hh%=0:iz=0:hf=0:w=0: 22050 fori=1tomx 22060 tc%=val(te$(i)) 22070 ifz%=0thentc%=0 22080 ifpl%(i)>h%andtc%=z%thenh%=pl%(i):iz=i 22085 next: 22090 ifh%=0thenreturn 22095 tt(0,0)=iz:tt(0,11)=pl%(iz):pl%(iz)=0:hh%=hh%+1 22110 forw=1tomx 22120 tc%=val(te$(w)) 22130 ifz%=0thentc%=0 22140 ifpl%(w)=h%andtc%=z%thengoto22145 22141 goto22150 22145 i=w:gosub31000:hh%=hh%+1:ifhh%>9then22200 22150 next 22200 ifhh%=1theni=tt(0,0):pl%(i)=tt(0,11):gosub50000:goto22210 22205 iz=hh%:i=tt(0,0):pl%(i)=tt(0,10):hh%=0:j%=1:gosub31060:hh%=iz 22208 goto23000 22210 ifz%=0then29998 22220 f%=f%+1 22230 iff%>mxthen29998 22240 goto22040 23000 rem ---- weitere sortierstufe 23020 fory=0tohh% 23030 forx=1to8 23040 foru=x+1to9 23050 iftt(y,x)<tt(y,u)thenh%=tt(y,x):tt(y,x)=tt(y,u):tt(y,u)=h% 23060 next:next:next 23100 fory=0tohh% 23110 h%=0 23120 forx=9to1step-1 23130 s(y)=s(y)+(2^h%*tt(y,x)) 23140 h%=h%+1 23150 next:next 23200 hf=0 23210 fory=0tohh% 23220 ifs(y)>hfthenhf=s(y):iz=y 23230 next:u=0 23240 i=tt(iz,0):pl%(i)=tt(iz,11):s(iz)=0 23250 gosub50000 23300 fory=0tohh% 23310 ifs(y)=hftheni=tt(y,0):pl%(i)=tt(y,11):s(y)=0:gosub50:close5:gosub50000:u=u+1 23320 next 23400 fory=0tohh% 23410 ifs(y)>0andz%=0theni=tt(y,0):pl%(i)=tt(y,11):s(y)=0:goto23430 23420 ifs(y)>0andz%>0thenf%=f%+1:goto23200 23430 next 23500 fory=0to10 23510 forx=0to10 23520 tt(y,x)=0 23530 next:next 23540 f%=f%+1:f%=f%+u 23550 ifz%<>0then22040 29998 return 29999 close1:close15:printchr$(147)chr$(142):end 30000 rem ---------------- 30010 rem initialisierung 30020 rem ---------------- 30040 dl=226:rem datensatzlaenge 30050 rn=1 30070 bl$=" " 30080 bl=len(bl$) 30090 print"{red}"chr$(14):poke53281,10:poke53280,10 30100 fr$="sch.rel" 30110 fi$=fr$+"index" 30120 dimin$(400),te$(400),pl%(400),gr$(16),tt(10,12) 30125 fori=1to15:gr$(i)=".":next 30130 fori=828to922 30140 read x:pokei,x:s=s+x:next 30150 data169,71,160,3,141,8,3,140,9,3,96,32 30160 data115,0,201,133,240,6,32,121,0,76,231,167 30170 data32,115,0,201,172,240,6,32,191,171,76,174 30180 data167,32,155,183,32,30,225,32,253,174,32,158 30190 data183,138,72,32,253,174,32,139,176,133,73,132 30200 data74,32,163,182,104,32,117,180,160,2,185,97 30210 data0,145,73,136,16,248,200,32,18,225,145,98 30220 data200,196,97,208,246,32,204,255,76,174,167 30230 ifs<>11096thenprint"fehler in datas !!":end 30240 sys 828 30250 close15:open15,8,15 30330 return 31000 rem ----------- 31010 rem 10 h.ergebnisse von schuetze 31020 rem ----------- 31050 tt(hh%,0)=i:tt(hh%,11)=pl%(i):j%=1:pl%(i)=0 31060 rn$=left$(in$(i),4) 31065 close1:open1,8,2,fr$+",l,"+chr$(dl) 31070 gosub14000:gosub9000:gosub5000 31080 forii=1to200step4 31090 ifmid$(sr$,ii,1)<>"-"then31120 31100 tt(hh%,j%)=val(mid$(sr$,ii+1,3)) 31110 j%=j%+1 31120 next 31130 return 50000 rem --------------- 50010 rem ausdruck/papier 50020 rem --------------- 50025 ds%=0:d1%=0:d2%=0:lz=0 50030 rn$=left$(in$(i),4) 50040 gosub14000 50050 gosub9000 50100 open5,4,2 50110 print#5,chr$(10) 50120 ifz%<>0thengosub50:print#5,f%;" Platz : "; 50130 print#5,,nn$;:gosub60:print#5,chr$(10) 50240 forw=1to200step4 50250 ifw=81orw=161thenprint#5,chr$(10); 50260 w$=mid$(sr$,w,4) 50270 ifleft$(w$,1)="-"thengosub50:print#5," ";right$(w$,3);:gosub60 52280 ifleft$(w$,1)="-"thend1%=d1%+1:goto52360 52290 ifright$(w$,3)="..."thenprint#5," ";right$(w$,3);:goto52360 52300 fs=val(right$(w$,3)) 52305 iffs=0thenlz=lz+1 52310 iffs>0thends%=ds%+fs:d2%=d2%+1 52320 print#5," ";right$(w$,3); 52360 next 52370 ds%=ds%+pl%(i):ii=int(pl%(i)/d1%*100+.5)/100 52380 h=int(ds%/(d1%+d2%)*100+.5)/100 52400 print#5,chr$(10) 52410 print#5,"Summe aus den hoechsten 10 Serien :";pl%(i);chr$(10); 52420 print#5,"Durchschnitt der hoechsten 10 Serien :";ii;chr$(10); 52430 print#5,"Durchschnitt aller Serien :";h;chr$(10); 52440 print#5,"Anzahl der Schiess-Abende :";(d1%+d2%+lz);chr$(10); 52450 print#5,chr$(10); 52460 close5:printchr$(147); 52470 gosub2000 52480 pl%(i)=0 52490 return