Kurvenplotten mit Hardcopy
Mit Hilfe dieses Programmes ist es auf dem C 16 möglich, eine oder mehrere Funktionen in ein Koordinatensystem zu plotten und anschließend eine Hardcopy herzustellen.
Da der C 16 bei hochauflösender Grafik leider nur noch 2 KByte für Basic übrig hat, mußte auf REM-Zeilen verzichtet werden, wodurch die Übersichtlichkeit des Programms etwas leidet.
Das Programm gliedert sich in folgende Teile:
10-190 | Initialisierung, Eingabe der Funktion, Wahl von Koordinatensystem und Maßstab |
200-320 | Funktion wird geplottet |
330-390 | Festlegung des Nullpunktes |
400-480 | Festlegung der Vergrößerung |
510-610 | Koordinatensystem und Beschriftung zeichnen 620-710 Bildschirm lesen und Ausgabe an Drucker |
Nach dem Starten des Programmes mit RUN muß zunächst die gewünschte Funktion eingegeben werden. Dies geschieht dadurch, daß in der aufgelisteten Zeile 200 die gewünschte Funktion anstelle von F(x) eingegeben wird (x muß als Variable benutzt werden).
Durch Drücken von RETURN wird die Zeile programmiert. Wenn Sie wünschen, daß der hochauflösende Bildschirm gelöscht werden soll, so drücken Sie nun F1; soll die neue Funktion dagegen zu bestehenden Kurven hinzugeplottet werden, so drücken Sie F3.
Nun müssen Sie den Maßstab eingeben (für eine Sinusfunktion ist beispielsweise 40 ein guter Wert) und eines von den drei möglichen Koordinatensystemen auswählen.
Bei der Eingabe der Funktion braucht man nicht auf Definitionslücken zu achten, da die TRAP-Anweisung in Zeile 240 »DIVISION BY ZERO« Fehler und andere abfängt.

Nach Beendigung des Plottens erscheint in der rechten oberen Ecke ein »E«. Drückt man jetzt auf »C«, wird der Bildschirm gelesen und als Hardcopy über den Drucker ausgegeben. Dies dauert leider fast 30 Minuten, da jeder der 64000 Bildpunkte einzeln ausgelesen und in ein dem Drucker genehmes Bitmuster umgewandelt werden muß. Dieser Programmteil (ab Zeile 620) wurde für den Seikosha GP100VC geschrieben und muß für andere Drucker eventuell geändert werden. Jeder andere Tastendruck führt zu einem kurzen Menü.
Man kann durch Druck auf F1 Maßstab und Koordinatensystem neu wählen.
Durch Druck auf F2 kommt man wieder zur Anfangsroutine und kann eine neue Funktion eingeben.
(Christian Schoske/ev)10 rem christian schoske 20 1,"o=1:goto90"+chr$(13) 30 2,"run"+chr$(13) 40 3,"o=0:goto90"+chr$(13) 50 0 60 print"{clr}geben sie fuer f(x) die funktion ein. anschliessend {rvon}return{rvof} druecken" 70 print"{rvon}f1{rvof} bildschirm loeschen":print"{rvon}f3{rvof} bildschiem nicht loeschen":print 80 print"200 def fna(q)=f(x)" :end 90 rem 100 0:print:print:input"masstab ";sc 110 print:print"koordinatensystem " 120 print:printspc(3)"{CBM-N}"spc(8)"{CBM-N}"spc(9)"{CBM-N}"spc(17)"1 {CBM-N}"spc(8)"{CBM-N} 2"spc(6)"{CBM-N} 3" 130 print"{CBM-P}{CBM-P}{CBM-P}{SHIFT-@}{CBM-P}{CBM-P}{CBM-P}{CBM-P}"spc(4)"{CBM-N}"spc(9)"{CBM-N}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}"spc(13)"{CBM-N}"spc(8)"{CBM-N}"spc(9)"{CBM-N} " 140 printspc(3)"{CBM-N}"spc(8)"{CBM-N}"spc(9)"{CBM-N}"spc(20)"{CBM-N}"spc(8)"{CBM-N}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P}{CBM-P} {CBM-N}" 150 geta$:a%=val(a$):ifa%<1ora%>3then150 160 1,1,1 170 1,o:1,38,0," " 180 ona%goto 330,350,370 190 rem 200 def fna(q)=sqr(x) 210 z=0 220 230 x=(-ax+z)/sc 240 270 250 y=sc*(fna(x)) 260 1,z,ay-y 270 z=z+1 280 z<320 290 1,38,0,"e" 300 geta$:ifa$="c"then620:0 310 print"{clr}f1 neuer masstab":print"f2 neue funtion{up}" 320 end 330 ay=100:ax=160:1,0,ayto320,ay:1,ax,0toax,200 340 goto380 350 ay=199:ax=0:1,ax,0toax,ay:1,ax,ayto320,ay 360 goto380 370 ay=100:ax=0:1,ax,0toax,200:1,ax,ayto320,ay 380 gosub400:ifo<>0thengosub510 390 goto190 400 we =320/sc 410 ifwe >=230thenm=50 420 ifwe >=200andwe <230thenm=25 430 ifwe >=120andwe <200thenm=20 440 ifwe >= 65andwe <120thenm=10 450 ifwe >= 26andwe < 65thenm=5 460 ifwe >= 13andwe < 26thenm=2 470 ifwe<13thenm=1:f=1 480 return 510 ya=ay: xa=ax:mc=0:ifm>1thenf=1 520 530 ford=1tom 540 xa=xa+sc:ya=ya-sc:if(xa/f)>312then 550 nextd:mc=mc+1 560 if(xa/f/8)-1>39then580 570 1,(xa/f),ayto(xa/f),(ay-5):1,(xa/f/8-1),(ay/8)-1,str$(mc*m) 580 if(ya/f/8)<1then600 590 1,ax,(ya/f)to(ax+5),(ya/f):1,(ax/8+1),(ya/f/8),str$(mc*m) 600 610 return 620 open4,4:z=0:cmd4 630 fora=0to27 640 forb=0to31 650 forc=0to10 660 ford=0to6:(b*10+c),(a*7+d):if(2)=1thenz=z+2^d 670 nextd 680 z=z+128:a$=a$+chr$(z):z=0:nextc 690 printchr$(8)a$;:a$="":nextb 700 print" ":nexta 710 print#4,chr$(15):close4:goto300