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 |
| 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 |
| 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 |
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