C 64
Anwendung

Trainingsprogramm fürs Maschinenschreiben

Um gleichzeitig schnell und fehlerfrei auf der Schreibmaschine zu schreiben, benötigt man viel Übung. Mit diesem Trainingsprogramm können Sie Ihre Fingerfertigkeit nach den Richtlinien der IHK testen und bewerten.

Immer mehr Schüler und Auszubildende haben Maschinenschreiben als Unterrichtsfach. Diesen hilft das Programm TPFM (Trainingsprogramm für Maschinenschreiben) bei der Leistungskontrolle. Ferner ermöglicht TPFM dem Lernenden ohne Papier- und Farbbandverbrauch mit Hilfe des Commodore 64 zu üben. Auch den technischen Lehrern der Berufs- und Fachschulen leistetTPFM gute Dienste. Das bisher erforderliche arbeitsintensive und fehleranfällige Blättern und Suchen in Umrechnungstabellen entfällt. Der C 64 gibt nach Eingabe von Anschlägen und Fehlerzahl sofort die entsprechende Note auf dem Bildschirm aus.

Nachdem das Programm (Listing 1) geladen und mit »Run« gestartet wurde, wird die Tastatur des C 64 auf die gültige DIN für Schreibmaschinentastaturen umgestellt. Hierauf erscheint das Hauptmenü mit folgenden Auswahlpunkten auf dem Bildschirm:
1 — Schreiben
2 — Korrigieren
3 — Benoten
4 — Ende

Schreiben: Nach der Auswahl dieses Menüpunktes kann ein beliebiger Text eingegeben werden. Die Uhr zum Messen der benötigten Zeit startet erst nach dem Drücken des ersten Buchstabens. Nach zehn Minuten bricht der Computer automatisch die Texteingabe ab. Mit »SHIFT RETURN« kann man sie vorzeitig beenden.

Bei der Notenberechnung wird dann die Anschlags- und Fehlerzahl auf eine Zehnminutenleistung hochgerechnet. In beiden Fällen verzweigt das Programm zu einer Informationsseite. Hier, gleichgültig ob man sie durch Abbruch mit der SHIFT-RETURN-Taste oder nach zehn Minuten auf regulärem Weg erreicht hat, gibt der Computer die Textlänge, die benötigte Zeit und die Anschlagszahl pro Minute an.

Nachdem der Anwender mit »RETURN« die Informationsseite verlassen hat, gelangt er in das Abspeichermenü. Dieses bietet folgende Auswahlpunkte an:
a) Auf Kassette speichern
b) Auf Diskette speichern
c) Korrigieren (ohne speichern)

In den ersten beiden Fällen a und b verzweigt der Computer nach dem Speichern in das Hauptmenü. Im Fall c wird der Programmteil »Text kontrollieren« aufgerufen. Hier wird der Text nicht von einem externen Speicher geladen, da er sich noch im Hauptspeicher befindet.

Hinweis: Der Text wird immer automatisch unter dem Namen »text« abgespeichert.

Korrigieren: Von hier aus verzweigt das Programm in das Lademenü. Dort kann man auswählen, ob die Textdatei von Kassette oder Diskette geladen werden soll. Anschließend wird der Text buchstabenweise auf dem Bildschirm wiedergegeben. Der Anwender drückt nun jedesmal, wenn er einen Fehler entdeckt hat, kurz die Leertaste.

In der obersten Zeile des Bildschirms steht eine Fehleranzeige. Diese erhöht sich nach jedem Druck auf die Leertaste. Man kann den Ablauf durch das Drücken der SHIFT-Taste anhalten. Das Programm setzt das Listen des Textes erst fort, wenn der Anwender diese wieder losläßt. Wenn der Programmteil »Text kontrollieren« beendet ist, gelangt der Anwender durch Drücken der RETURN-Taste in das Unterprogramm »Berechnen der Note«. Hier fragt das Programm, ob man ein Anfänger oder Examenskandidat ist. Wenn man den zweiten Fall wählt, wird die Note ausgegeben, mit der die Schreibleistung in der Schulprüfung honoriert worden wäre. Zusätzlich erfährt der Anwender, ob er die IHK-Prüfung bestanden hätte. Entscheidet man sich für den Auswahlpunkt »Anfänger«, erteilt der Computer eine entsprechend bessere Note. Durch Drücken der RETURN-Taste kann der Anwender TPFM neu starten.

Benoten: Der Menüpunkt »Benoten« ist für Lehrkräfte gedacht. Nach der Eingabe von Anschlags- und Fehlerzahl wird die entsprechende Note ausgegeben. Gibt man bei Fehlerzahl ein »x« ein, kehrt man in das Hauptmenü zurück.

Abändern der Notentabelle: Die in dem Programm verwendete Notentabelle ist unter Umständen nicht für alle Bundesländer gültig. Darum wird hier zusätzlich beschrieben, wie man die Skala — falls erforderlich — anpassen kann:

Ausschnitt der verwendeten Notentabelle
(konventionelle Form):

5.5 5 4.5 4 3.5 3 2.5 2 1.5 1
0 Fehler 1200 1400 1600 1700 1800
1 Fehler 1200 1400 1600 1700 1800
2 Fehler 1200 1400 1500 1600 1700 1800
etc.

Ausschnitt der verwendeten Notentabelle (kodierte Form):
DATA 1200,5,12,14,16,17,18,-1,5,12,14,16,17,18,-1,4,12, 14,15,16,17,18

Die kodierten Werte werden von dem Programm TPFM in ein zweidimensionales Feld eingelesen.

In dieser Tabelle sind 1200 Anschläge Grundvoraussetzung für das Bestehen der Prüfung. Wenn man weniger Anschläge hat, ist man automatisch durchgefallen. Diese Zahl ist der erste DATA-Wert. Der zweite gibt an, wieviele Noten in der Tabelle unbesetzt sind. Bei Fehlerzahl 0 sind dies zum Beispiel 5 Noten (5.5, 5, 4.5, 4, 3.5). Die Note 6 bleibt unberücksichtigt. Die hierauf folgenden DATA-Werte sind die Anschlagsgrenzen zwischen den verschiedenen Noten. Zur Erleichterung der Arbeit des Anwenders wird die Eingabe automatisch rechtsbündig mit Nullen auf vier Stellen ergänzt. Es ist auch vorgesehen, Werte von unter 100 Anschlägen einzuspeichern. Die gewünschte Anschlagszahl wird dann einfach mit einem Minuszeichen versehen. Dieses wird vom Programm beim Einlesen in das zweidimensionale Feld entfernt. Die Anschlagszahl wird in diesem Falle nicht ergänzt. Nachdem alle Werte einer Tabellenzeile eingegeben sind, ist die Kennziffer (DATA-Wert) —1 anzugeben. Wenn man bei dem unteren Ende der Notentabelle, in diesem Fall »20 Fehler«, angelangt ist, gibt man die Kennziffer —2 an. Hierdurch erfährt der Computer, wann die Tabelle vollständig eingelesen ist. Daraufhin verzweigtTPFM zu dem Programmteil »Noten ermitteln«.

(Dirk Marzluf/og)
Variable Description
i,p,pp Laufvariablen
x,y,x$ Einlesen der DATA-Werte
a$(x) Text speichern
b(x,y) Notentabelle speichern
aa$ Tastaturabfrage bei Menüs
f1 Flag (1 = Im Hauptmenü wurde »Benoten« ausgewählt)
a$ Tastaturabfrage im Programmteil »Text schreiben«
ti$ Uhr
et$ Schreibzeit
b$ Zwischenspeichern von Textteilen (bis zu 72 Zeichen)
za Anzahl der eingegebenen Buchstaben
a ASCII Wert von a$
fe$ Fehlerzahl
a2$ Auszugebendes Zeichen im Programmteil »Text korrigieren«
s1 Cursorspalte
z1 Cursorzeile
f2 Flag (1 = Text fertig korrigiert)
pe Gerätenummer
na$ Name der Textdatei
e1 Anzahl der Anschläge pro Minute
st Statusvariable
a2$ Minutenzahl der Schreibzeit (ET$)
a3$ Sekundenzahl der Schreibzeit (ET$)
se Schreibzeit (ET$) in Sekunden
f3 Flag (1 = Rücksprung zum Programmteil »Noten ermitteln«)
e2 Anzahl der Anschläge pro zehn Minuten
fe Anzahl der Fehler (auf zehn Minuten hochgerechnet)
an Flag (1 = Notentabelle für Anfänger)
ma Mindestanschlagszahl
n1 Notenspalte der Fehlertabelle (beim Einlesen)
f Fehlerspalte der Notentabelle (beim Einlesen)
e2$ Anschlagszahl (bei Eingabe)
z2 Notenspalte der Fehlertabelle (beim Ermitteln)
no Note
ih Flag (1 = Industrie- und Handelskammerprüfung bestanden)
q$ Cursorsteuerzeichen
mi Anzahl der zum Schreiben des Textes benötigten Minuten
s2 restliche Sekunden
d ASCII-Wert des überprüften Zeichens der ersten und zweiten Tastaturdecodiertabelle
i1,i2 Adressen der zu vertauschenden Buchstaben in den beiden Tastaturdecodiertabellen
Bild 1. Variablenliste
Zeile Funktion
10 Bildschirm- und Cursorfarbe festlegen
20 Maschinen-Routine (Kopieren des ROM ins RAM) einlesen
30 Unterprogramm zum Umstellen der Tastatur aufrufen
40 - 75 Hauptmenü
1000 - 1060 Texteingabe (auch Umlaute)
2000 - 2220 Unterprogramm zur Textkontrolle
3000 - 3006 Speichermenü
3010 - 3020 Text speichern
4000 - 4003 Lademenü
4009 - 4020 Text laden
5000 - 5100 Informationsseite auf den Bildschirm ausgeben
6000 - 6040 Notentabelle in ein zweidimensionales Feld einlesen
6100 - 6250 Note ermitteln und feststellen, ob der Anwender die IHK-Prüfung bestanden hätte
6300 - 6330 Ausgabe der Note und zusätzlicher Informationen
7000 - 7020 Die Tastatur des C 64 wird auf die gültige DIN für Schreibmaschinentastaturen umgestellt
8000 - 8020 Text für das Abspeichern auf Kassette
9000 - 9020 Es wird ausgegeben, ob der Anwender die IHK-Prüfung bestanden hätte
50000 - 50010 Daten für die Maschinen-Routine zum Kopieren des ROM
51000 ASCII-Werte der zu vertauschenden Buchstaben
52000 - 52090 Notentabelle in kodierter Form
Bild 2. Schrittweise Einführung in das Programm
Adresse Bedeutung
53280 Rahmenfarbe des Bildschirms
53281 Hintergrundfarbe des Bildschirms
214 Zeile, in der sich der Cursor befindet
211 Spalte, in der sich der Cursor befindet
58640 Durch den Aufruf dieser Routine wird der Cursor positioniert
653 Flag für SHIFT
60289 Erste Tastaturdecodiertabelle (ohne SHIFT)
60354 Zweite Tastaturdecodiertabelle (mit SHIFT)
1 6510 Ausgaberegister
198 Anzahl der Zeichen im Tastaturpuffer
Bild 3. Erklärung der verwendeten Adressen
1 rem**********************************
2 rem*     trainingsprogramm fuer     *
3 rem*       maschinenschreiben       *
4 rem*  dirk marzluf  brombeermatt 2  *
5 rem*        7614 gengenbach         *
6 rem**********************************
7 :
10 printchr$(147);chr$(5);chr$(14);chr$(8):poke53280,0:poke53281,0
20 fori=53000to53021:readx:pokei,x:nexti
30 gosub7000
37 :
38 rem***        hauptmenue         ***
39 :
40 dima$(200):dimb(30,20):print"{clr}{down}{down}{down}{down}1 = Schreiben"
50 print"{down}{down}2 = Kontrollieren"
53 print"{down}{down}3 = Benoten"
55 print"{down}{down}4 = Ende"
60 getaa$:ifaa$<>"1"andaa$<>"2"andaa$<>"3"andaa$<>"4"then60
70 ifaa$="2"then2000
72 ifaa$="3"thenf1=1:goto6007
75 ifaa$="4"thenprint"{clr}":poke1,55:end
997 :
998 rem***      text schreiben      ***
999 :
1000 i=0:printchr$(147);"'Shift Return' beendet Text vorzeitig{down}{down}"
1010 geta$
1012 ifti$="001000"thenet$=ti$:a$(i)=b$:print"{clr}":gosub5000:gosub3000:run40
1013 ifza=0thenti$="000000"
1014 ifa$=""then1010
1015 a=asc(a$)
1020 ifa=141andza<>0thenet$=ti$:a$(i)=b$:print"{clr}":gosub5010:gosub3000:run40
1025 ifa<32anda<>13ora>127anda<161then1010
1030 ifa$=chr$(64)thena$="ue"
1032 ifa$=chr$(186)thena$="Ue"
1034 ifa$=chr$(62)thena$="oe"
1036 ifa$=chr$(91)thena$="Oe"
1040 ifa$=chr$(60)thena$="ae"
1042 ifa$=chr$(93)thena$="Ae"
1044 ifa$=chr$(192)thena$="ss"
1050 printa$;:za=za+1
1052 ifa=13thena$=chr$(190)
1053 ifa=58thena$=chr$(191)
1054 ifa=44thena$=chr$(192)
1055 b$=b$+a$:iflen(b$)>70thena$(i)=b$:i=i+1:b$=""
1060 goto1010
1997 :
1998 rem***    text kontrollieren   ***
1999 :
2000 gosub4000
2002 fe$="00":print"{down}Mit 'Space' wird Fehlerzahl erhoeht."
2004 print"{down}Mit 'Shift' kann das Listing des Textes"
2005 print"{down}gestoppt werden.{down}{down}"
2006 forp=0toi:forpp=1to72
2010 a2$=mid$(a$(p),pp,1):ifa2$<>""thenifasc(a2$)=190thena2$=chr$(13)
2012 ifa2$<>""thenifasc(a2$)=191thena2$=chr$(58)
2013 ifa2$<>""thenifasc(a2$)=192thena2$=chr$(44)
2015 ifs1=40thenprint"{up}";
2020 printa2$;:getaa$
2025 ifaa$=" "thenfe=fe+1:fe$=str$(fe):fe$=mid$(fe$,2,2):iffe<10thenfe$="0"+fe$
2027 iffe=99thenfe=98
2030 z1=peek(214):ifpeek(653)=1then2030
2040 s1=peek(211):print"{home}Anzahl der Fehler: ";fe$;"                   "
2060 iff2=1then2205
2100 poke214,z1:poke211,s1:sys58640:nextpp:nextp
2200 print:print"{down}{down}{rvon}'Return'=weiter{rvof} (Auswertung)":f2=1
2205 getaa$:ifaa$<>""thenifasc(aa$)=13then6000
2220 goto2025
2997 :
2998 rem***     abspeichermenue     ***
2999 :
3000 print"{clr}{down}{down}{down}{down}1 = Auf Kassette abspeichern"
3001 print"{down}{down}2 = Auf Diskette abspeichern"
3002 print"{down}{down}3 = Korrigieren (ohne Abspeichern)"
3004 getaa$:ifaa$<>"1"andaa$<>"2"andaa$<>"3"then3004
3005 print"{clr}":pe=8:na$="@:text":ifaa$="1"thenpe=1:gosub8000:na$="text"
3006 ifaa$="3"then2002
3007 :
3008 rem***    text abspeichern     ***
3009 :
3010 open1,pe,1,na$:print#1,e1:print#1,et$
3020 forp=0toi:print#1,a$(p):next:close1:return
3997 :
3998 rem***        lademenue        ***
3999 :
4000 i=0:print"{clr}{down}{down}{down}{down}1 = Von Kassette laden"
4001 print"{down}{down}2 = Von Diskette laden"
4002 getaa$:ifaa$<>"1"andaa$<>"2"then4002
4003 print"{clr}":pe=8:ifaa$="1"thenpe=1:gosub8000
4004 :
4005 rem***       text laden        ***
4006 :
4009 open1,pe,0,"text":input#1,e1:input#1,et$
4010 input#1,a$(i):ifst=64thenclose1:print"{clr}":return
4020 i=i+1:goto4010
4997 :
4998 rem***ergebnisse, informationen***
4999 :
5000 print"{down}Die Zehnminutenabschrift ist zu Ende."
5005 print"{down}Weitere Informationen folgen."
5010 ifet$="000000"thenet$="000001"
5012 a2$=mid$(et$,3,2)
5020 a3$=mid$(et$,5,2)
5030 se=val(a2$)*60+val(a3$):iff3=1thenreturn
5040 print"{down}{down}{down}{down}Der Text hat eine Laenge von";za
5050 print"{down}Zeichen und Sie haben";se;"Sekunden"
5055 print"{down}dafuer benoetigt."
5057 e1=int(za/(se/600)+.5)/10
5060 print"{down}Sie haben einen Anschlag von";e1
5070 print"{down}Zeichen pro Minute."
5080 print"{down}{down}{down}{down}{rvon}'Return'=weiter{rvof} (Abspeicher-Menue)"
5090 getaa$:ifaa$<>""thenifasc(aa$)=13thenreturn
5100 goto5090
5997 :
5998 rem***einlesen der notentabelle***
5999 :
6000 e2=e1*10:f3=1:gosub5010:fe=int((fe/(se/600))+.5)
6001 print"{clr}{down}{down}{down}{down}1 = Anfaenger":print"{down}{down}2 = Examenskandidat"
6002 wait198,1:geta$:ifa$="1"thenan=1:fe=int(fe/2):e2=e2*2:print"{clr}":goto6007
6003 print"{clr}Jetzt wird die Note errechnet, die Sie"
6004 print"{down}in der Abschlusspruefung eines Schreib-"
6005 print"{down}maschinenkurses erhalten haetten."
6006 print"{down}****************************************"
6007 restore:fori=1to43:readx$:nexti:readma:iff1=1thenprint"{clr}"
6008 readx:n1=x
6010 readx:ifx=-1thenf=f+1:goto6008
6020 ifx=-2then6100
6021 ifx<0thenx=abs(x):goto6030
6022 ifx<10thenx=x*1000
6024 ifx<100thenx=x*100
6026 ifx<1000thenx=x*10
6030 b(f,n1)=x:n1=n1+1
6040 goto6010
6097 :
6098 rem***   berechnen der note    ***
6099 :
6100 z2=0:iff1=0then6104
6101 print"{clr}Fuer erneuten Start bei Fehlerzahl 'x'  {down}eingeben."
6102 input"{down}{down}{down}Fehlerzahl";fe$:iffe$="x"thenrun40
6103 input"{down}{down}Anschlagszahl";e2$:e2=val(e2$):fe=val(fe$)
6104 ife2<maorfe>fthenno=6:goto6250
6105 forno=6to1.5step-.5:ifb(fe,z2)>e2then6250
6150 ifb(fe,z2)>b(fe,z2+1)thenno=no-.5:goto6250
6200 z2=z2+1:next
6250 ih=0:ife2<>0ande2>=matheniffe/e2*100<=0.5thenih=1
6297 :
6298 rem***    ausgabe der note     ***
6299 :
6300 iff1=0then6304
6301 print"{down}{down}{rvon}Pruefungsnote:";no:gosub9000
6302 print"{down}{down}{down}Zur Vortsetzung beliebige Taste         {down}druecken."
6303 wait198,1:poke198,0:goto6100
6304 print"Sie haetten die Note";no;"bekommen."
6305 ifet$="001000"thengosub9000:q$="{down}{down}{down}{down}{down}{down}{down}":goto6311
6306 mi=int(se/60):s2=se-mi*60
6307 print"{down}Sie haben";mi;"Min. und";s2;"Sek."
6308 print"{down}geschrieben. Anzahl der Fehler und"
6309 print"{down}Anschlaege wurden auf Zehnminuten-"
6310 print"{down}leistung hochgerechnet.":q$="{down}":gosub9000
6311 printq$;"{rvon}'Return'=weiter{rvof} (erneuter Start)"
6320 getaa$:ifaa$<>""thenifasc(aa$)=13thenrun40
6330 goto6320
6997 :
6998 rem*** umstellen der tastatur  ***
6999 :
7000 print"Die Tastatur wird jetzt umgestellt.{down}{down}{down}"
7002 sys53000:poke1,53
7005 readx:ifx=-1thenpoke60389,61:poke60407,39:return
7010 ready:printchr$(x)" wird zu "chr$(y)
7015 fori=60289to60419:d=peek(i):ifd<>xandd<>ythennext
7016 ifd=xtheni1=i
7017 ifd=ytheni2=i
7018 ifi1=0ori2=0thennext
7020 pokei1,y:pokei2,x:i1=0:i2=0:goto7005
7997 :
7998 rem***       textausgabe       ***
7999 :
8000 print"{down}{down}{down}Bitte Kassette zum Textbeginn zurueck-  {down}spulen."
8010 print"{down}Anschliessend druecken Sie bitte eine"
8015 print"{down}beliebige Taste.{down}{down}{down}"
8020 wait198,1:poke198,0:return
9000 ifan=1thenq$="{down}{down}{down}{down}{down}":return
9002 ifih=0then9010
9005 print"{down}{down}Sie haetten die I.H.K. Pruefung         {down}bestanden."
9007 return
9010 print"{down}{down}Sie haetten die I.H.K. Pruefung nicht   {down}bestanden."
9020 return
49996 :
49997 rem*** daten fuer rom-kopier  ***
49998 rem***        -routine        ***
49999 :
50000 data160,  0,169,192,133, 91,133, 89,132, 90,132, 88,169,224
50010 data132, 95,133, 96, 32,191,163, 96
50996 :
50997 rem***  daten fuer tastatur-  ***
50998 rem***       umstellung       ***
50999 :
51000 data89,90,217,218,45,47,47,39,58,62,59,60,63,219,43,42,42,192,35,61,-1
51997 :
51998 rem***      notentabelle      ***
51999 :
52000 data1200,5,12,14,16,17,18,-1,5,12,14,16,17,18,-1,4,12,14,15,16,17,18,-1
52010 data3,12,14,15,16,17,18,24,-1,3,12,15,16,17,18,2133,32,-1
52020 data2,12,14,16,17,18,2,2667,4,-1,2,12,15,16,17,1875,24,32,-1
52030 data1,12,14,16,17,18,2188,28,3733,-1,1,12,15,16,17,2,25,32,-1
52040 data0,12,14,16,17,18,225,2813,36,-1,0,12,15,16,17,2,25,3125,4,-1
52050 data0,14,15,17,18,22,275,3438,-1,0,15,16,17,2,24,3,375,-1
52060 data0,15,16,18,2167,26,325,-1,0,16,17,1867,2333,2028,35,-1
52070 data0,16,17,2,25,3,375,-1,0,17,18,2133,2667,32,-1
52080 data0,17,1889,2267,2833,34,-1,0,18,2,24,3,36,-1,0,18,2111,2533,3167,-1
52090 data0,1905,2222,2667,3333,-2
Listing 1. »Trainingsprogramm für Maschinenschreiben«. Bitte mit dem Checksummer auf Seite 6 eingeben.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →