Verwendete IO-Ports bzw. Hardware:
Dieses Programm erwartet ein ROM-BASIC, bzw die Startaddresse wird als 0x03C0 angenommen. Später wird mit
CALL*40A (und dort CALL 0C4DAH) eine Maschinensprachroutine aufgerufen.
Zeichensatz UTF-8+Z1013()+CTRL()-ohne Umlaute(äöüß)
0 REMB!b!G># :# ####(~#> Copyright H.Voelz Dez.1987
10 CLEAR 5000:WINDOW:CLS
20 DEF FN A(X)=2*2^X
30 DEF FN B(X)=2*2^X*(LN(2))
40 M=30:DIM F$(M),FS$(M),FU$(M),FV$(M),F1$(M),O(M)
50 Z$="+-*/":READ FZ:DIM X$(FZ),XS$(FZ),L(FZ)
60 FOR I=1 TO FZ:READ X$(I),XS$(I):L(I)=LEN(X$(I)):NEXT:GOTO 1190
70 Z=0:F$(0)="":POKE 1032,65:INPUT "f(x) =";F$(0):CALL*40A:GOSUB 110:POKE 1030,1
75 LF$=F$(0)
80 POKE 1031,1:PRINT "f'(x)= "FS$(0):IF LEN(FS$(0))>65 THEN POKE 1031,2:RETURN
90 FOR I=1 TO LEN(FS$(0)):POKE 865+I,ASC(MID$(FS$(0),I,1)):NEXT
100 POKE 865+I,0:POKE 1032,66:CALL*40A:RETURN
110 F$=F$(Z):S$=F$:GOSUB 1010
120 IF P=L THEN 990:ELSE IF P=1 AND O>2 THEN 990
130 IF P=0 THEN 760
140! u,v
150 O(Z)=O:FU$(Z)=LEFT$(F$,P-1):FV$(Z)=MID$(F$,P+1)
160 Z=Z+1:F$(Z)=FU$(Z-1):GOSUB 110:F1$(Z-1)=FS$(Z)
170 F$(Z)=FV$(Z-1):GOSUB 110:Z=Z-1
180 FU$=FU$(Z):FV$=FV$(Z):F1$=F1$(Z):F2$=FS$(Z+1):O=O(Z)
190 ON O GOTO 210,210,260,260,450
200! u+v
210 IF F1$<>"0"AND F2$<>"0"THEN FS$(Z)=F1$+MID$(Z$,O,1)+F2$:RETURN
220 IF F1$<>"0"THEN FS$(Z)=F1$:RETURN
230 IF F2$<>"0"THEN FS$(Z)=MID$(Z$,2,O-1)+F2$:RETURN
240 FS$(Z)="0":RETURN
250! u*v
260 IF F1$="0"THEN T=0:FS$=F1$:GOTO 310
270 T=1:IF F1$="1"THEN FS$=FV$:GOTO 310
280 S$=F1$:GOSUB 1010:IF O<3 THEN F1$="("+F1$+")"
290 FF$=FV$:S$=FF$:GOSUB 1010:IF O<3 THEN FF$="("+FF$+")"
300 FS$=F1$+"*"+FF$
310 IF F2$="0"THEN 390
320 FF$=F1$:S$=F1$:GOSUB 1010:IF O<3 THEN FF$="("+FF$+")"
330 T=T+1
340 FS$=MID$(FS$,1-(T=1))+MID$(Z$,O(Z)-2,1+((T=1)AND O(Z)=3))
350 IF F2$="1"THEN FS$=FS$+FU$:GOTO 390
360 S$=FU$:GOSUB 1010:IF O<3 THEN FU$="("+FU$+")"
370 S$=F2$:GOSUB 1010:IF O<3 THEN F2$="("+F2$+")"
380 FS$=FS$+FU$+"*"+F2$
390 IF F2$="0"OR O(Z)=3 THEN 430
400 IF T=2 THEN FS$="("+FS$+")"
410 S$=FV$:GOSUB 1010:IF O<3 THEN FV$="("+FV$+")"
420 FS$=FS$+"/"+FV$+"^2"
430 FS$(Z)=FS$:RETURN
440! u^v
450 IF F2$<>"0"THEN 650
460 IF F1$="0"THEN FS$(Z)=F1$:RETURN
470 IF F1$="1"THEN FS$="":GOTO 500
480 S$=F1$:GOSUB 1010:IF O<3 THEN F1$="("+F1$+")"
490 FS$=F1$+"*"
500 IF RIGHT$(FV$,1)=")"THEN FV$=LEFT$(FV$,LEN(FV$)-1)
510 IF LEFT$(FV$,1)="("THEN FV$=MID$(FV$,2)
515 IF FV$<>"1"THEN FS$=FV$+"*"+FS$
520 S$=FV$:GOSUB 1110:IF N THEN F2=VAL(FV$)-1:ELSE 590
530 F2$=STR$(F2):IF F2<0 THEN 610:ELSE F2$=MID$(F2$,2):GOTO 620
590 F2$=FV$+"-1"
610 F2$="("+F2$+")"
620 IF F2$="1"THEN FS$(Z)=FS$+FU$:RETURN
630 IF F2$="0"THEN FS$(Z)=FS$+"1":RETURN
640 FS$(Z)=FS$+FU$+"^"+F2$:RETURN
650 FF$=FU$
660 S$=FF$:GOSUB 1010:IF O<3 THEN FF$="("+FF$+")"
670 S$=F1$:GOSUB 1010:IF O<3 THEN F1$="("+F1$+")"
680 S$=FV$:GOSUB 1010:IF O<3 THEN FV$="("+FV$+")"
690 S$=F2$:GOSUB 1010:IF O<3 THEN F2$="("+F2$+")"
700 FS$=F$(Z)+"*(":IF F1$<>"0"THEN FS$=FS$+F1$+"/"+FF$+"*"+FV$+"+"
710 FS$=FS$+"LN":IF LEFT$(FU$,1)<>"("THEN FU$="("+FU$+")"
720 FS$=FS$+FU$
730 IF F2$="1"THEN FS$(Z)=FS$+")":RETURN
740 FS$(Z)=FS$+"*"+F2$+")":RETURN
750!F-Suche
760 FOR I=1 TO FZ:IF LEFT$(F$,L(I))<>X$(I)THEN NEXT:GOTO 940
770 II=I:I=FZ:NEXT:IF RIGHT$(F$,1)<>")"THEN 990
780! u
790 O(Z)=II
800 Z=Z+1:F$(Z)=MID$(F$,L(II)+1,L-L(II)-1):GOSUB 110:Z=Z-1
810 F$=F$(Z):FU$=F$(Z+1):F1$=FS$(Z+1)
820 IF F1$="0"THEN FS$(Z)="0":RETURN
830 S$=F1$:GOSUB 1010:IF O<3 THEN F1$="("+F1$+")"
840 O=O(Z):IF O>10 THEN 900
850!f'=u'*g(u)
860 FS$=XS$(O)+FU$+")":IF F1$<>"1"THEN FS$=F1$+"*"+FS$
870 IF O>5 THEN FS$=FS$+"^2"
880 FS$(Z)=FS$:RETURN
890!f'=u'/g(u)
900 FS$=XS$(O)+FU$+")":FS$=F1$+"/"+FS$
910 IF O<>19 THEN FS$=FS$+"2)"
920 FS$(Z)=FS$:RETURN
930! ([{< >}])
940 IF LEFT$(F$,1)<>"("OR RIGHT$(F$,1)<>")"THEN 970
950 S$=MID$(F$,2,LEN(F$)-2):GOSUB 1110:IF N THEN FS$(Z)="0":RETURN
960 F$(Z)=MID$(F$,2,LEN(F$)-2):GOTO 110
970 IF F$="X"THEN FS$(Z)="1":RETURN
980 FS$(Z)="0":RETURN
990 PRINT "Fehlerhafte Eingabe !":GOSUB 1320:RUN
1000! +-*/
1010 L=LEN(S$):P=0:O=6:KL=0:IF L=0 THEN S$=" ":GOTO 1010
1020 FOR I=1 TO L:K$=MID$(S$,I,1):KL=KL+(K$=")"):KL=KL-(K$="(")
1030 IF KL<>0 THEN NEXT:GOTO 1080
1040 IF K$="+"OR K$="-"THEN P=I:O=1-(K$="-")
1050 IF K$="*"OR K$="/"THEN IF O>2 THEN P=I:O=3-(K$="/")
1060 IF K$="^"THEN IF O>4 THEN P=I:O=5
1070 NEXT
1080 IF KL THEN 990
1090 RETURN
1100!TERM=ZAHL ?
1110 FOR I=1 TO LEN(S$):K$=MID$(S$,I,1)
1120 IF K$>"/"AND K$<":"THEN NEXT:N=1:RETURN
1130 IF(K$="-"OR K$=" ")AND I=1 THEN NEXT
1140 N=0:RETURN
1150!FKT.
1160 DATA 7,SIN(,COS(,COS(,(-1)*SIN(,EXP(,EXP(,LN(,1/(
1170 DATA SQR(,.5/SQR(,TAN(,1/COS(,ATN(,1/(1+
1180!MAIN
1190 WINDOW:CLS:A$=STRING$(32,""):PRINT AT(0,0);A$
1200 FOR I=0 TO 30:PRINT AT(I,31);"":NEXT:PRINT AT(31,0);A$
1210 PRINT AT(2,6);"DIFFERENZIALRECHNUNG":PRINT AT(3,5);STRING$(22,"*")
1220 WINDOW 6,29,2,30:CLS:PRINT "1 1. Ableitung bilden":PRINT
1230 PRINT "2 hoehere Ableitungen":PRINT:PRINT "3 rechnen":PRINT
1240 PRINT "4 Ende":PRINT:PRINT:PRINT "Ihre Wahl ..."
1250 A$=INKEY$:IF A$<"1"OR A$>"4"THEN 1250
1260 CLS:ON VAL(A$)GOSUB 70,1340,1280,1270:GOSUB 1320:GOTO 1220
1270 WINDOW:CLS:END
1280 IF PEEK(1031)=2 THEN PRINT "Die Ableitung kann wegen":ELSE 1282
1281 PRINT "Ueberlaenge nicht bearbeitet werden !":PRINT
1282 INPUT "Startwert:";X1
1283 INPUT "Endwert :";X2
1284 INPUT "Anzahl :";N:GOTO 1300
1285 CLS:PRINT " f(x)="LF$:PRINT:PRINT STR$(PEEK(1030))". Ableitung:"
1288 PRINT " g(x)="FS$(0):PRINT
1290 PRINT " x"TAB(10)"f(x)"TAB(16)STR$(PEEK(1030))".Ableitung"
1295 PRINT:RETURN
1300 GOSUB 1285:N1=0:FOR X=X1 TO X2 STEP(X2-X1)/(N-1)
1310 PRINT X TAB(9)FN A(X);:IF PEEK(1031)=2 THEN 1312
1311 PRINT TAB(19);FN B(X);
1312 PRINT:N1=N1+1:IF N1>9 THEN N1=0:GOSUB 1320:GOSUB 1285
1313 NEXT:RETURN
1320 PRINT:PRINT TAB(20)">ENTER<"
1330 IF INKEY$=CHR$(13)THEN RETURN:ELSE 1330
1340 INPUT "Nr. der Ableitung:";AN:IF AN<1 OR AN>INT(AN)THEN 1340
1350 PRINT "Alle Ableitungen listen J/(N) ?"
1360 AL$=INKEY$:IF AL$=""THEN 1360
1370 POKE 1032,65:F$(0)="":INPUT "f(x)=";F$(0):CALL*40A:LF$=F$(0)
1380 FOR AB=1 TO AN:Z=0:GOSUB 110:GOSUB 1400:IF LEN(FS$(0))>65 THEN 1420
1390 F$(0)=FS$(0):NEXT:POKE 1030,AN:GOSUB 90:POKE 1031,1:GOTO 1430
1400 IF AL$="N"THEN RETURN
1410 PRINT:PRINT STR$(AB)". Ableitung:":PRINT "g(x)=";FS$(0):RETURN
1420 X=AB:AB=AN+1:NEXT:POKE 1031,2:PRINT:PRINT "Ueberlaenge !":AB=X+1:POKE 1030,X
1430 AB=AB-1:IF AL$="N"THEN 1410:ELSE RETURN