home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er Special 63
/
64er_Magazin_Sonderheft_63_19xx_Markt__Technik_de_Side_A.d64
/
hprogramm
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
2022-10-26
|
20KB
|
988 lines
10 rem ********************************
20 rem * funktionenhilfe fuer den c64 *
30 rem * michael suhr *
40 rem * 5160 dueren wernerstr. 10 *
50 rem * tel: 02421/14666 *
60 rem * zeilen-70 bitte loeschen!! *
70 rem ********************************
100 run900
110 :
120 rem ** zeitkritische u-programme ***
130 :
140 rem ** steigung ***
150 :
160 y=(fnx(x+h)-fnx(x-h))/h
170 return
180 :
190 rem ** nullstellen ***
200 :
210 gosub8140
220 pokeh4,h8:if fnx(rnd(ti)*5)=fnx(rnd(h8)*5)andst=h8then330
230 hh=1e-31:h=h2:z=-en:sw=.2+h
240 z=z+sw:x=z:ze=h8:printint(x)"[157] [145]":geta$:ifa$="_"thenreturn
250 pokeh4,h8
260 y1=fnx(x):ifabs(y1)>enandz<en then240
270 x=x-y1/((fnx(x+h)-y1)/h+hh):ze=ze+h9
280 ifabs(z-x)>sw/2 or ze>24 or (st<>h8 and de<>2) then320
290 if abs(y1)>=h3 orze<20 then 250
300 ifst=h8 orde=2thenx=int(x*1e5+.5)/1e5:lz=lz+1:de(lz)=x:iffuthende$(lz)="f"
310 ifabs(de(lz))<5e-2thende(lz)=h8
320 if z<enthen240
330 gosub8190
340 return
350 :
360 rem ** extremasuche ***
370 :
380 printf$(59)
390 ex=h9:lz=h8:gosub9680
400 gosub8140
410 hh=1e-31:h=h2:z=-en:sw=.1+h
420 z=z+sw:x=z:ze=h8:printint(x)"[157] [145]":geta$:ifa$="_"thenreturn
430 pokeh4,h8
440 gosub140:y1=y
450 if(abs(fnx(x))>en or abs(y)>2 or st<>h8 or(y=h8 andze=h8)) and z<enthen420
460 x=x+h:gosub140:y3=y:x=x-h
470 x=x-y1/((y3-y1)/h+hh):ze=ze+h9
480 ifabs(z-x)>sw/2 orze>24then550
490 ifst<>h8then550
500 ifabs(y1)>=h2orze<22then430
510 x=int(x*h5+.5)/h5
520 ifabs(x)<5e-2thenx=h8
530 gosub4340
540 ifabs(de(lz))<hthende(lz)=h8
550 ifz<enthen420
560 gosub8190
570 iflu>0thengosub8660
580 iflz=h8orde$(1)=""thende$(1)="[203]eine"+chr$(160)+"[197]xtremwerte":de(1)=-50:lz=1
590 return
600 :
610 rem ** zur stringverarbeitung ***
620 :
630 q$=mid$(e$,f,h9):return
640 :
650 q$=mid$(e$,f,2):return
660 :
670 q$=mid$(e$,f,3):return
680 :
690 rem ** linien ziehen ***
700 :
710 y1=int(y1+.5):y2=int(y2+.5)
720 ify1<h8 theny1=h8
730 ify1>160theny1=160
740 ify2<h8 theny2=h8
750 ify2>160theny2=160
760 :
770 forza=y1 to y2 step sgn(y2-y1)
780 syss1,x1,za
790 next
800 return
810 :
820 rem ** def'luecke zeichnen ***
830 :
840 if lz<>h8then for za=h8to159:syss1,x1+sw,za:next:return
850 forza=h9+ge to 160+ge step 2
860 syss1,x1,za
870 next
880 return
890 :
900 rem ** start ***
910 :
920 gosub7400:rem startwerte
930 gosub4430:rem eingabe
940 gosub9220:rem berechnen
950 gosub7790:rem entscheidung
960 goto 930
970 :
980 rem ** def'luecken ***
990 :
1000 gosub8240:rem init
1010 gosub1140:rem suche
1020 gosub8490:rem sortieren
1030 gosub9330:rem gleiche stellen
1040 le=7:gosub1970:rem vereinfachen
1050 gosub2570:rem verkuerzen
1060 gosub9150:rem funkt.init
1070 ifpl=h8thengosub 9440:goto1120:rem normalausgabe
1080 gosub8870:rem graphik ein
1090 gosub2710:rem def'zeichnen
1100 gosub2790:rem def'in graphik
1110 gosub8930:rem graphik aus
1120 de=h9:return
1130 :
1140 rem ** funktionen **
1150 gosub9680
1160 printf$(16)
1170 de$(1)="[196](x)=[167][210]":de(1)=-50:lz=h9:de=2:fe=h8
1180 forf=h9tolen(e$)
1190 ifmid$(e$,f,1)=chr$(188)ormid$(e$,f,1)=chr$(186)thengosub1430:rem (log+sqr)
1200 ifmid$(e$,f,h9)=chr$(174)thengosub1520:rem (^)
1210 next
1220 :
1230 rem ** brueche ***
1240 :
1250 forf=h9tolen(e$)
1260 ifmid$(e$,f,h9)=chr$(173)thengosub1350:rem (/)
1270 next
1280 gosub 9150:iflz<>h9then1310
1290 iflz=h9thengosub8140:pokeh4,h8:y=fnx(rnd(ti)*en):gosub8190:ifst<>h8then1320
1300 return
1310 de$(h9)=de$(h9)+chr$(160)+"ohne":gosub9330:gosub1730
1320 iflz=h9thende$(h9)="[206]icht definiert!"
1330 return
1340 :
1350 rem ** bruch gefunden ***
1360 :
1370 printf$(17)
1380 gosub8990
1390 gosub9080
1400 fu=h9:gosub190:fu=h8
1410 return
1420 :
1430 rem ** log+sqr finden ***
1440 :
1450 ll=lz:printf$(18)
1460 gosub8990
1470 gosub9080
1480 if mid$(e$,f,h9)<>chr$(186)thenfu=h9:rem sqr
1490 gosub190:fu=h8:rem nullstellen
1500 return
1510 :
1520 rem ** ^ finden ***
1530 :
1540 printf$(19)
1550 gosub8990
1560 gosub9080
1570 ll=lz
1580 gosub 8140
1590 if int(fnx(.345))<>fnx(.543) or fnx(.345234)<=h8then1610
1600 return:rem keine luecke
1610 a=h8:fs=f:za=f-h9
1620 f=f-h9
1630 ifmid$(e$,f,h9)="("thena=a+1
1640 ifmid$(e$,f,h9)=")"thena=a-1
1650 ifa<>h8then1620
1660 f=f-h9
1670 gosub9080
1680 gosub190
1690 gosub9150
1700 f=fs
1710 return
1720 :
1730 rem ** bereiche ***
1740 :
1750 printf$(20)
1760 gosub8140
1770 ze=h9
1780 ze=ze+h9:a$=""
1790 x=de(ze):if de$(ze)="f"then a$="=":lu=lu+h9:lu(lu)=de(ze)
1800 pokeh4,h8
1810 y=fnx(x+.101)
1820 ifst<>h8then1870
1830 y=fnx(x-.101)
1840 if ze=2andst<>h8thende$(ze)="[ x<"+a$+str$(de(ze))+"]":goto1930
1850 if st=h8thende$(ze)="["+str$(de(ze))+"]":lu=lu+1:lu(lu)=de(ze)
1860 goto1930
1870 pokeh4,h8:y=fnx(x-.101)
1880 ifst<>h8thenforf=zetolz:de(f)=de(f+1):next:lz=lz-1:iflz>h9then1770
1890 de$(ze)="["+str$(de(ze))+"<"+a$+"x"
1900 ifze>=lzthen1920
1910 de$(ze)=de$(ze)+"<"+a$+str$(de(ze+1))+"]":ze=ze+1:de$(ze)="def":goto1930
1920 if ze=lzthende$(ze)=de$(ze)+"]"
1930 ifze<lzthen1780
1940 gosub8190
1950 return
1960 :
1970 rem ** vereinfachen ***
1980 :
1990 printf$(21)
2000 forf=h9tolz:printlz-f+h9"[157] [145]"
2010 ifde$(f)=""then2140
2020 za=h8:a$=de$(f)
2030 za=za+h9
2040 if mid$(a$,za,h9)<"-"or mid$(a$,za,1)>"9"then2120
2050 h=val(mid$(a$,za)):b$=str$(h):ze=len(b$)
2060 ifmid$(b$,h9,h9)=" "thenb$=mid$(b$,2):ze=len(b$)
2070 h=int(h*h6+.5)/h6:ifint(h)=hthenb$=str$(h)
2080 if int(h)<>h then gosub2170
2090 iflen(b$)>le thenb$=left$(b$,le)
2100 ifb$=""orh=0thenb$="":goto2120
2110 h$=mid$(a$,(za+ze)):a$=left$(a$,za-h9)+b$:za=len(a$):a$=a$+h$
2120 ifza<len(a$)then2030
2130 de$(f)=a$
2140 next
2150 return
2160 :
2170 rem ** zuordnen ***
2180 :
2190 hh=h1:a=h6
2200 for d=h9 to 6
2210 fors=-10to10:ifs=h8thennext
2220 x=s*(NULL)/d:x=int(x*a+.5)/a
2230 ifabs(h-x)>hhthen2320
2240 ifs=h9or s=-h9then2280
2250 b$=str$(s)+"pi"
2260 ifd<>1thenb$=b$+"/"+mid$(str$(d),2)
2270 return
2280 ifs=h9andd=h9thenb$="pi":return
2290 ifs=-h9andd=h9thenb$="-pi":return
2300 ifs=h9thenb$="pi/"+str$(d):return
2310 ifs=-h9thenb$="-pi/"+str$(d):return
2320 next:next
2330 :
2340 s=h9
2350 s=s+h9
2360 x=h*s:x=int(x*h7+.5)/h7
2370 ifx=int(x)thenb$=str$(x)+"/"+mid$(str$(s),2):return
2380 ifs<20then2350
2390 :
2400 ford=h9to4
2410 fors=2to12
2420 x=(1/d)*sqr(s):x=int(x*a+.5)/a
2430 ifd=h9andabs(h-x)<hhthenb$=" [186]"+mid$(str$(s),2):return
2440 ifabs(h-x)<hhthenb$=" [186]"+mid$(str$(s),2)+"/"+mid$(str$(d),2):return
2450 next:next
2460 :
2470 ford=h9to4
2480 fors=2to12
2490 x=(1/d)*-sqr(s):x=int(x*a+.5)/a
2500 ifd=h9andabs(h-x)<hhthenb$="-[186]"+mid$(str$(s),2):return
2510 ifabs(h-x)<hhthenb$="-[186]"+mid$(str$(s),2)+"/"+mid$(str$(d),2):return
2520 next:next
2530 :
2540 :
2550 return
2560 :
2570 rem ** kuerzen ***
2580 :
2590 a$=""
2600 forza=h9tolz
2610 ifde$(za)=""then2680
2620 a$=de$(za)
2630 forze=h9tolen(a$)
2640 ifmid$(a$,ze,h9)<>" "then2660
2650 ifze>2andze<>9andze<>6thena$=mid$(a$,h9,ze-h9)+mid$(a$,ze+h9):ze=ze-h9
2660 next
2670 de$(za)=a$
2680 next
2690 return
2700 :
2710 rem ** def'zeichnen ***
2720 :
2730 forf=h9tolz
2740 x=de(f):x1=fa*(en+x):ifx1<h8thenx1=h8
2750 gosub820
2760 next
2770 return
2780 :
2790 rem ** de$ in graphik ***
2800 :
2810 x=20:x1=gp:fl=h8
2820 forgp=x1+h9tox1+lz
2830 a$=de$(gp-x1+fl):ifa$="def"thenfl=fl+h9:goto2830
2840 ifgp<20thengosub3700
2850 next:gp=gp-fl
2860 return
2870 :
2880 rem ** plotten ***
2890 :
2900 sw=h9/fa:ge=1
2910 syss2:rem graphik loeschen
2920 gosub8240: rem init
2930 pl=h8:gosub8870:pl=h9
2940 gosub3630:rem achsen
2950 gosub8740:rem gitter
2960 gosub3050:ifa$="_"then3000:rem zeichnen;abruchmerkmal
2970 gosub3400:rem funktion schreiben
2980 gosub3540:rem intervall schreiben
2990 gosub8810:rem rahmen
3000 gosub8930:rem graphik aus
3010 b$=f$(60):gosub8050:rem entscheidung
3020 ifa$="[133]"thengosub8310:goto2900
3030 gp=h8:pl=h9:return
3040 :
3050 rem ** zeichnen ***
3060 :
3070 gosub8140
3080 x=-en:gosub8870
3090 pokeh4,h8
3100 y=fa*(en-fnx(x))
3110 geta$:ifa$="_"ora$=chr$(13)then3250
3120 ifst=h8then3170
3130 x1=fa*(en+x):gosub 820:ge=(ge=h8)
3140 ifx>enthen3250
3150 x=x+sw
3160 goto3090
3170 x=x+sw:x1=fa*(en+x):ge=(ge=h8)
3180 geta$:ifa$="_"ora$=chr$(13)then3250
3190 y1=y:ifst<>h8theny1=fa*(en-fnx(x))
3200 pokeh4,h8
3210 y=fa*(en-fnx(x)):y2=y
3220 ifst=h8thengosub690
3230 ifst<>h8thengosub820
3240 ifx<enthen3170
3250 gosub8190
3260 return
3270 :
3280 rem ** schrift in graphik ***
3290 :
3300 poke56334,peek(56334)and254
3310 poke1,peek(1)and251
3320 fors=h9tolen(b$)
3330 if (mid$(b$,s,h9))=" "then3360
3340 hh=asc(mid$(b$,s,h9))*8:h=x*8+24576+320*gp+s*8
3350 ford=h8to7:pokeh+d,peek(hh+55296+d):next
3360 next
3370 poke1,55:poke56334,h9
3380 return
3390 :
3400 rem ** funktion in graphik ***
3410 :
3420 print"[147][198](x)="es$:x=h8:gp=20:b$=""
3430 forza=1024to1024+len(es$)+4
3440 b$=b$+chr$(peek(za))
3450 next
3460 gosub3280
3470 x=h8:gp=21:b$=""
3480 forza=1064to1064+len(es$)+4
3490 b$=b$+chr$(peek(za))
3500 next
3510 gosub3280
3520 return
3530 :
3540 rem ** intervall schreiben ***
3550 :
3560 a$=str$(en):a$=mid$(a$,2,3):print"[147][201]ntervall [-"a$";"a$"]":x=h8:gp=23:b$=""
3570 forza=1024to1060
3580 b$=b$+chr$(peek(za))
3590 next
3600 gosub3280
3610 return
3620 :
3630 rem ** achsen bezeichnen ***
3640 :
3650 x=9:gp=h8:b$=chr$(25)
3660 gosub3280
3670 x=18:gp=10:b$=chr$(24)
3680 gosub3280:return
3690 :
3700 rem ** erste zeile schreiben ***
3710 :
3720 print"[147]"a$:b$=""
3730 forza=1024to1060
3740 b$=b$+chr$(peek(za))
3750 next
3760 gosub3280
3770 return
3780 :
3790 rem ** nullstellen ***
3800 :
3810 printf$(22)
3820 gosub3950:rem suche
3830 gosub9150:rem re-init
3840 ifa$="_"thenreturn
3850 gosub9540:rem gueltigkeit
3860 gosub4110:rem de in de$
3870 le=7:gosub1970:rem vereinf.+zuordnen
3880 gosub2570:rem kuerzen
3890 ifpl=h8thengosub 9440:goto3930:rem normalausgabe
3900 gosub8870:rem graphik ein
3910 gosub2790:rem schreiben
3920 gosub8930:rem graphik aus
3930 return
3940 :
3950 rem ** suche n. nullstellen ***
3960 :
3970 lz=h8:nu=h9:gosub9680
3980 gosub190:rem ganze fkt.
3990 for f=1tolen(e$):rem fkt. teilen
4000 ifa$="_"thenreturn
4010 f=f+h9:gosub630:ifq$<>chr$(182)andq$<>chr$(186)thenf=f-h9
4020 gosub630
4030 if q$=chr$(173)thengosub8990:f=za+h9:rem (/)
4040 ifq$=chr$(188)orq$=chr$(189)orq$=chr$(180)then 4090:rem ln,exp,sgn
4050 ifq$=chr$(186)orq$=chr$(182)thengosub8990:gosub9080:gosub190:rem abs;sqr
4060 iff=h9then 4080
4070 ifq$<>chr$(172)then4090:rem (*)
4080 gosub8990:gosub9080:gosub190
4090 next:return
4100 :
4110 rem ** de in de$ ***
4120 :
4130 iflz=h8then4170
4140 forza=h9tolz:de$(za)="[206]ullst.:"+str$(de(za)):next:gosub8490
4150 gosub9330
4160 iflu>0thengosub8660
4170 iflz=h8then de$(1)="[203]eine"+chr$(160)+"[206]ullstellen":de(1)=-50:lz=h9
4180 return
4190 :
4200 rem ** extremas ***
4210 :
4220 gosub8240:rem init
4230 gosub360:rem suche
4240 ifa$="_"thenreturn
4250 le=6:gosub1970:rem vereinfachen
4260 gosub2570:rem verkuerzen
4270 ifpl=h8thengosub9440:goto4320:rem normalausgabe
4280 gosub8870:rem graphik ein
4290 gosub 8490:rem sortieren
4300 gosub2790:rem extrema in graphik
4310 gosub8930:rem graphik aus
4320 return
4330 :
4340 rem ** minima oder maxima ***
4350 :
4360 y=fnx(x):y=int(y*h5+.5)/h5
4370 ifabs(y)<h1theny=h8
4380 r=fnx(x+.1):l=fnx(x-.1):m=fnx(x)
4390 ifr<m and l<m thenlz=lz+h9:de$(lz)="[205]ax.:"+str$(x)+";"+str$(y):de(lz)=x
4400 ifr>m and l>m thenlz=lz+h9:de$(lz)="[205]in.:"+str$(x)+";"+str$(y):de(lz)=x
4410 return
4420 :
4430 rem ** eingaberoutine ***
4440 :
4450 gosub4650:rem eingabe
4460 gosub4950:rem syntaxkontrolle
4470 gosub7010:rem betraege
4480 gosub6890:rem pi suche
4490 gosub5760:rem malzeichen
4500 gosub5670:rem potenzen
4510 gosub5890:rem klammern1
4520 gosub7220:rem tan
4530 gosub6010:rem klammern2
4540 gosub6110:rem klammern3
4550 gosub6300:rem klammern4
4560 gosub6210:rem log+ln
4570 gosub6460:rem eulerische zahl
4580 gosub6550:rem tokens
4590 gosub5290:rem letzte syntaxkontrolle
4600 gosub5590:rem fehlermeldungen
4610 if fe then4450
4620 gosub6800:rem speichern
4630 return
4640 :
4650 rem ** eingabeteil ***
4660 :
4670 printf$(23):sys46374
4680 fe=h8:fl=h8:ll=h8:hi=h8
4690 print""es$"_[145]":e$=es$
4700 geta$:ifa$=""then4700
4710 a=asc(a$):ifa=20andlen(e$)=h8then4700
4720 if(a$="[200]"ora$="h")andfl=h8thenes$=e$:gosub9790:goto4650
4730 if peek(211)>34andpeek(211)<40orpeek(211)>74anda<>20thena=20
4740 ifa$="[194]"thena$="[221]":a=221:be=be+h9
4750 print
4760 ifa<>13ore$=""then 4820
4770 if fl<>h8then4810
4780 es$=e$:e$=e$+":"
4790 b$=""+es$+chr$(13)+f$(24):gosub8050:ifa$="[136]"thenreturn
4800 goto4650:rem neue eingabe
4810 if right$(e$,3)<>" [157][145]"thene$=e$+"":fl=h8
4820 if e$=""then4890
4830 ifa$="^"andfl=0andright$(e$,1)<>""thene$=e$+" [157][145]":fl=h9:goto4910
4840 ifa<>20then4900
4850 ifright$(e$,h9)=""thene$=left$(e$,len(e$)-1):fl=h9
4860 ifright$(e$,3)=" [157][145]"thene$=left$(e$,len(e$)-3):fl=h8
4870 ifright$(e$,h9)="[221]"thenbe=be-1
4880 e$=left$(e$,len(e$)-h9)
4890 ifa$="^"ande$=""then4910
4900 if(a>32anda<96)ora=186ora=222ora=221thene$=e$+a$
4910 e$=e$+"[145] [157][157]_ [157][157][157][157] [145]":print"[145]"e$;:e$=left$(e$,len(e$)-18)
4920 iffl=h9thenprint"";
4930 goto4700
4940 :
4950 rem ** syntax 1 ***
4960 :
4970 printf$(25)
4980 a=h8:forf=h9tolen(e$)
4990 gosub630
5000 ifq$="("thena=a+1
5010 ifq$=")"thena=a-1
5020 ifq$="x"thenll=ll+1
5030 next
5040 ifa<>h8thenfe=1:gosub9740:return
5050 ifll=h8thenfe=8192:gosub9740:return
5060 a=h8:forf=h9tolen(e$)
5070 gosub630
5080 ifq$="["thena=a+1
5090 ifq$="]"thena=a-1
5100 next
5110 ifa<>h8thenfe=2:gosub9740
5120 forf=h9tolen(e$)
5130 gosub630
5140 ifq$<>"/"then 5180
5150 f=f+h9:gosub630
5160 if (q$<"0" or q$>"9") and (q$<>"("and q$<>"["and q$ <>"x") thenfe=2048
5170 iffethengosub9740:return
5180 next
5190 forf=h9tolen(e$)
5200 gosub630:ifq$="("orq$=")"orq$="]"orq$="["then5230
5210 ifq$>="0"andq$<="9"then5230
5220 a$=q$:f=f+h9:gosub630:f=f-h9:ifa$=q$thenfe=4096:gosub9740:return
5230 gosub630:ifq$<>"*"andq$<>"("then 5260
5240 f=f+h9:gosub630:f=f-h9
5250 ifq$="*"orq$="/"orq$="+"orq$=")"thenfe=4096:gosub9740:return
5260 next
5270 return
5280 :
5290 rem ** letzte syntaxkontrolle ***
5300 :
5310 iffethen return
5320 printf$(26)
5330 forf=2tolen(e$)-h9
5340 gosub630
5350 a=asc(q$):ifa<45and(a<40ora=44)or(a=>58anda<170anda<>88)thenfe=8
5360 iffethenprint"'"q$"[146]'":return
5370 next
5380 forf=2tolen(e$)-h9
5390 gosub630
5400 ifq$<>"("then5440
5410 f=f+1:gosub630
5420 a=asc(q$):ifa=172or a=173 ora=174 thenfe=4096:return
5430 f=f-1:gosub630
5440 gosub650:ifq$=")("thenfe=32:return
5450 ifq$="x)"thenf=f+2:gosub630:f=f-2:if(q$<"[167]"orq$>"[174]")andq$>":"thenfe=64
5460 iffethenreturn
5470 gosub630:ifq$<="x"orq$=chr$(255)then5520
5480 f=f+h9:gosub630:ifq$<>"("andq$<>":"andasc(q$)<170thenfe=4096:return
5490 ifq$="[174]"thenf=f-1:gosub630:f=f+1:ifq$>"9"andasc(q$)<>255thenfe=4:return
5500 f=f-h9:gosub630
5510 ifq$>"[180]"andq$<"[192]"thenf=f+1:gosub630:f=f-1:ifq$<>"("thenfe=128:return
5520 ifq$<>")"then5550
5530 f=f+h9:gosub630:f=f-h9
5540 a=asc(q$):if(a<170ora>174)and(a<>58)and(a<>41)thenfe=512:return
5550 next
5560 iflen(e$)>79thenfe=256
5570 return
5580 :
5590 rem ** fehlermeldungen ***
5600 :
5610 iffe=h8thenreturn
5620 hi=log(fe)/log(2)+1
5630 printf$(hi):gosub7970
5640 ifa$="[200]"ora$="h"thengosub9790:hi=0
5650 return
5660 :
5670 rem ** potenzen in klammern ***
5680 :
5690 iffethenreturn
5700 printf$(27)
5710 forf=h9tolen(e$)
5720 if mid$(e$,f,3)=" [157][145]"thene$=left$(e$,f-1)+"^("+right$(e$,len(e$)-f-2)
5730 if mid$(e$,f,h9)=""thene$=left$(e$,f-1)+")"+right$(e$,len(e$)-f)
5740 next:return
5750 :
5760 rem ** mal zeichen setzen ***
5770 :
5780 iffethenreturn
5790 printf$(28):f=h8
5800 f=f+h9
5810 gosub630
5820 a=asc(q$):if(a<64ora>90)and(a<>255anda<>40anda<>186)then5860
5830 iff<>1thenf=f-h9:gosub630
5840 a=asc(q$):ifa<48ora>57thenf=f+h9:goto5860
5850 ifa>47anda<58thene$=left$(e$,f)+"*"+right$(e$,len(e$)-f):f=f+2
5860 iff<len(e$)then5800
5870 return
5880 :
5890 rem ** klammern setzen (1) ***
5900 :
5910 iffethenreturn
5920 printf$(29)
5930 f=h8:e$=" "+e$
5940 f=f+h9:gosub630:a=asc(q$)
5950 gosub630:ifq$="x"thene$=left$(e$,f-1)+"(x)"+right$(e$,len(e$)-f):f=f+2
5960 ifq$="e"thene$=left$(e$,f-1)+"(e)"+right$(e$,len(e$)-f):f=f+2
5970 ifq$=chr$(255)thene$=left$(e$,f-1)+"("+chr$(255)+")"+right$(e$,len(e$)-f):f=f+2
5980 iff<len(e$)then5940
5990 return
6000 :
6010 rem ** klammern setzen (2) ***
6020 :
6030 iffe thenreturn
6040 printf$(30)
6050 f=h8
6060 f=f+h9
6070 ifmid$(e$,f,2)=")("thene$=left$(e$,f-1)+")*"+right$(e$,len(e$)-f):f=f+2
6080 iff<len(e$)then6060
6090 return
6100 :
6110 rem ** klammern setzen (3) ***
6120 :
6130 iffethenreturn
6140 printf$(31)
6150 forf=h9tolen(e$)
6160 gosub630
6170 ifq$="["thene$=left$(e$,f-1)+"("+right$(e$,len(e$)-f)
6180 ifq$="]"thene$=left$(e$,f-1)+")"+right$(e$,len(e$)-f)
6190 next:return
6200 :
6210 rem ** log+ln umwandlung ***
6220 :
6230 iffe thenreturn
6240 printf$(32)
6250 forf=h9tolen(e$)
6260 ifmid$(e$,f,2)="ln"thene$=left$(e$,f-1)+"log"+right$(e$,len(e$)-f-1):f=f+1
6270 ifmid$(e$,f,3)="log"thenfe=feor16
6280 next:return
6290 :
6300 rem ** klammern setzen (4) ***
6310 :
6320 iffethenreturn
6330 printf$(33)
6340 f=h8
6350 f=f+h9
6360 gosub630:a=asc(q$)
6370 if(a>47anda<58)ora=46thengosub6400
6380 iff<len(e$)then6350
6390 return
6400 e$=left$(e$,f-h9)+"("+right$(e$,len(e$)-f+1)
6410 f=f+h9
6420 gosub630:a=asc(q$)
6430 if(a>47anda<58)ora=46then6410
6440 e$=left$(e$,f-h9)+")"+right$(e$,len(e$)-f+1):return
6450 :
6460 rem ** e wandeln ***
6470 :
6480 iffethenreturn
6490 f=h8
6500 f=f+h9
6510 gosub630:ifq$="e"thene$=left$(e$,f-1)+"exp(1)"+right$(e$,len(e$)-f):f=f+3
6520 iff<len(e$)then6500
6530 return
6540 :
6550 rem ** string in tokens wandeln ***
6560 :
6570 iffethenreturn
6580 printf$(34)
6590 me$=e$
6600 forf=h9tolen(e$):gosub630
6610 ifq$="+"thena=170:gosub6770
6620 ifq$="-"thena=171:gosub6770
6630 ifq$="*"thena=172:gosub6770
6640 ifq$="/"thena=173:gosub6770
6650 ifq$="^"thena=174:gosub6770
6660 next
6670 forf=h9tolen(e$):gosub670
6680 ifq$="cos"thena=190:gosub6780
6690 ifq$="sin"thena=191:gosub6780
6700 ifq$="tan"thena=192:gosub6780
6710 ifq$="log"thena=188:gosub6780
6720 ifq$="exp"thena=189:gosub6780
6730 ifq$="abs"thena=182:gosub6780
6740 ifq$="sgn"thena=180:gosub6780
6750 ifq$="sqr"thena=186:gosub6780
6760 next:return
6770 e$=left$(e$,f-h9)+chr$(a)+right$(e$,len(e$)-f):return
6780 e$=left$(e$,f-h9)+chr$(a)+right$(e$,len(e$)-f-2):return
6790 :
6800 rem ** funktion speichern ***
6810 :
6820 printf$(47)
6830 ad=49152+999
6840 forf=h9tolen(e$)
6850 pokead+f,asc(mid$(e$,f,h9))
6860 next
6870 pokead+f,h8
6880 return
6890 :
6900 rem ** pi wandeln ***
6910 :
6920 iffethenreturn
6930 printf$(35)
6940 f=h8
6950 f=f+h9:gosub650
6960 ifq$="pi"thene$=left$(e$,f-1)+chr$(255)+right$(e$,len(e$)-f-1):f=f+1
6970 ifq$=chr$(222)thene$=left$(e$,f-1)+chr$(255)+right$(e$,len(e$)-f)
6980 iff<len(e$)then6950
6990 return
7000 :
7010 rem *** betraege ***
7020 :
7030 iffe<>0orbe=0thenreturn
7040 printf$(36)
7050 fl=h8:a=h8:s=h8:f=h8
7060 f=f+h9:gosub630:ifq$="[221]"thena=a+h9
7070 if(q$="/"orq$="*"orq$="+"orq$="-")anda=2thenza=f:gosub7120:a=h8:s=za:f=za
7080 iff<len(e$)then7060
7090 gosub7120
7100 return
7110 :
7120 ifa=h9ora>2thenfe=1024:return
7130 f=s:fl=h8
7140 f=f+h9
7150 gosub630
7160 ifq$="[221]"thenfl=fl+h9:iffl=3thenfl=1
7170 ifq$="[221]"andfl=h9thene$=left$(e$,f-1)+"abs("+right$(e$,len(e$)-f)
7180 iffl=2andq$="[221]"thene$=left$(e$,f-1)+")"+right$(e$,len(e$)-f)
7190 iff<len(e$)then7140
7200 return
7210 :
7220 rem ** tangens ***
7230 :
7240 iffethenreturn
7250 printf$(37):f=h8
7260 f=f+h9
7270 gosub670
7280 ifq$<>"tan"then7370
7290 a=h8:s=f-h9:f=f+2:q$=""
7300 f=f+h9
7310 gosub 630
7320 ifq$="("thena=a+h9
7330 ifq$=")"thena=a-h9
7340 ifa<>h8then7300
7350 q$=mid$(e$,s+4,f-s-3)
7360 e$=left$(e$,s)+"(sin"+q$+")/(cos"+q$+")"+right$(e$,len(e$)-f)
7370 if f<len(e$)then7260
7380 return
7390 :
7400 rem ** startwerte ***
7410 :
7420 x=1:ze=1:za=1:y1=1:sw=1:z=1:en=1:h=1:h9=1:h4=144:h8=0:f=1:h5=1e8:y3=1:y2=1
7430 a=1:h1=1e-3:h2=1e-4:h3=1e-5:h6=1e4:h7=1e3:fl=1:x1=1
7440 s1=49152:s2=49380:dimde$(50):dimde(50):dimlu(50):dimf$(62)
7450 open1,8,8,"strings":forf=1to62:input#1,f$(f):next:close1
7460 return
7470 :
7480 rem ** drucken ***
7490 :
7500 b$=f$(38):gosub 8050
7510 ifa$="[133]"thenreturn
7520 printf$(39)
7530 ze=h8:ifdr=h8thendimdr%(320):dr=h9
7540 forf=h8to7:d%(f)=2^(7-f):next
7550 forza=24576 to 32576 step 8
7560 print"[206]och"32576-za"[157] [218]eichen "
7570 for d=h8 to 7:h=peek(za+d)
7580 ifh=h8then 7620
7590 for f=h8 to 7
7600 if (handd%(f))thendr%(ze+f)=dr%(ze+f)ord%(d)
7610 next
7620 next
7630 ze=ze+8
7640 if ze= 320 then gosub 7680
7650 next
7660 return
7670 :
7680 rem *druckeranpassung und ausdruck*
7690 :
7700 open1,4,4:a$=chr$(27):rem escape
7710 print#1,a$;chr$(51);chr$(24);:rem 8 nadeln vorschub
7720 print#1,a$;chr$(108);chr$(16);:rem 16 zeichen vom rand
7730 print#1,a$;"*";chr$(5);:rem zeichendichte,fuer epson 5= 1:1
7740 print#1,chr$(64);chr$(1);:rem anzahl der daten im low/highbyte format
7750 forf=h8to320:print#1,chr$(dr%(f));:dr%(f)=h8:next:rem zeichen drucken
7760 print#1,chr$(10):rem zeilenvorschub
7770 close1:ze=h8:return
7780 :
7790 rem ** entscheidung ***
7800 :
7810 printf$(40)
7820 printf$(41)
7830 ifpl<>h8thenprintf$(42)
7840 ifpl<>h8thenprintf$(43)
7850 printf$(44)
7860 printf$(45)
7870 printf$(46)
7880 gosub7970
7890 ifa$="[133]"thenpl=0:de=0:nu=0:ex=0:lz=0:lu=0:ge=0:return
7900 ifpl<>h8anda$="[134]"then gosub8870:gosub7970:gosub8930:goto7790
7910 ifpl<>h8anda$="[135]"thengosub 7480:goto7790
7920 ifa$="[136]"thenlz=h8:gosub9220:goto7790
7930 ifa$="[137]"thenpl=0:de=0:nu=0:ex=0:lz=0:lu=0:gosub 9220:goto7790
7940 ifa$="[140]"thenprint"[147][193]uf [215]iedersehen!":sys64738
7950 goto7880
7960 :
7970 rem ** auf tastendruck warten ***
7980 :
7990 printf$(15)
8000 geta$:ifa$<>""then8000
8010 geta$:ifa$=""then8010
8020 printf$(62)
8030 return
8040 :
8050 rem ** entscheidung ***
8060 :
8070 print"[147]"b$""
8080 printf$(48)
8090 printf$(49)
8100 gosub7970:rem warten
8110 ifa$<>"[133]"anda$<>"[136]"then8100
8120 return
8130 :
8140 rem ** fehlermeldung abschalten ***
8150 :
8160 poke768,188:poke769,2
8170 return
8180 :
8190 rem ** fehlermeldung einschalten ***
8200 :
8210 poke768,139:poke769,227
8220 return
8230 :
8240 rem ** initialisierung der fkt. ***
8250 :
8260 def fnx(x)=x:
8270 a=256*peek(79)+peek(78)
8280 poke a,232:poke a+h9,195
8290 return
8300 :
8310 rem ** intervall ***
8320 :
8330 print"[147] [198](x)="es$
8340 printf$(50)
8350 printf$(51)
8360 printf$(52)
8370 printf$(53)
8380 printf$(54)
8390 gosub7970:rem warten
8400 ifa$="[133]"then x=-4
8410 ifa$="[134]"then x=-8
8420 ifa$="[135]"then x=-16
8430 ifa$="[136]"then x=-32
8440 ifa$<"[133]"ora$>"[136]"then8390
8450 en=-x
8460 fa=-80/x
8470 return
8480 :
8490 rem ** sortieren ***
8500 :
8510 forza=h9tolz
8520 forze=h9tolz
8530 ifde(za)=>de(ze)then8550
8540 a=de(za):a$=de$(za):de(za)=de(ze):de$(za)=de$(ze):de(ze)=a:de$(ze)=a$:ze=1
8550 next
8560 next:za=h8
8570 za=za+h9
8580 if de$(za)<>""then8630
8590 forze=za tolz
8600 de(ze)=de(ze+h9):de$(ze)=de$(ze+h9)
8610 next
8620 lz=lz-h9:za=h9
8630 ifza<lzthen8570
8640 return
8650 :
8660 rem ** auf def'l. pruefen ***
8670 :
8680 forza=h9tolu
8690 forze=h9tolz
8700 if abs(lu(za)-de(ze))>h1 or lz=h8 then8720
8710 forf=zetolz:de(f)=de(f+h9):de$(f)=de$(f+1):next:lz=lz-h9:ze=h9:goto8680
8720 next:next:return
8730 :
8740 rem ** gitter ***
8750 :
8760 for ze=h8 to 160 step 20
8770 forza=h8to160step4:syss1,za,ze:syss1,ze,za:next
8780 next
8790 forza=160to0step-2:syss1,za,80:syss1,80,za:next:return
8800 :
8810 rem ** rahmen ***
8820 :
8830 forza=h8to319:syss1,za,h8:syss1,za,199:next
8840 forza=h8to199:syss1,h8,za:syss1,319,za:next
8850 return
8860 :
8870 rem ** graphik ein ***
8880 :
8890 poke53265,59:poke53272,104:poke56576,2:rem graphik ein
8900 ifpl<>h8thenv=53248:pokev+21,1:pokev+39,11:poke23544,116:rem sprite ein
8910 return
8920 :
8930 rem ** graphik aus ***
8940 :
8950 poke53265,155:poke53272,21:pokev+21,h8:poke56576,3
8960 printchr$(14)
8970 return
8980 :
8990 rem ** argument finden (def'l) ***
9000 :
9010 a=h8:za=f:fl=h8
9020 za=za+h9
9030 ifmid$(e$,za,h9)="("thena=a+1:fl=h9
9040 ifmid$(e$,za,h9)=")"thena=a-1
9050 ifa<>h8 or fl=h8then9020
9060 return
9070 :
9080 rem ** argument initialisieren ***
9090 :
9100 forze=h9toza-f
9110 poke49152+999+ze,asc(mid$(e$,ze+f,h9))
9120 next:pokeze+49152+999,asc(":")
9130 return
9140 :
9150 rem ** funktion reinitialisieren ***
9160 :
9170 forze=h9tolen(e$)
9180 poke49152+999+ze,asc(mid$(e$,ze,h9))
9190 next:pokeze+49152+999,asc(":")
9200 return
9210 :
9220 rem ** hauptprogramm berechnen ***
9230 :
9240 ifpl=h8andde=h8andnu=h8andex=h8thengosub8310:rem startwerte
9250 ifpl=h8thenb$=f$(55):gosub8050:ifa$="[136]"thende=0:nu=0:ex=0:lu=0:gosub2880
9260 if be then return:rem betraege
9270 ifde=h8thenb$=f$(56):gosub8050:ifa$="[136]"thengosub980
9280 ifde=h8thenreturn
9290 ifnu=h8thenb$=f$(57):gosub8050:ifa$="[136]"thengosub3790
9300 ifex=h8thenb$=f$(58):gosub8050:ifa$="[136]"thengosub4200
9310 return
9320 :
9330 rem ** gleiche stellen pruefen ***
9340 :
9350 iflz=h9thenreturn
9360 gosub8140:forza=h9-(de=2)tolz-h9
9370 if abs(de(za)-de(za+1))>.2orlz<=h9-(de=2)then9410
9380 ifnu=1and(abs(fnx(de(za)))<abs(fnx(de(za+1))))then 9400
9390 forf=zatolz:de$(f)=de$(f+1):de(f)=de(f+1):next:lz=lz-h9:goto9360
9400 forf=zatolz:de$(f+1)=de$(f+2):de(f+1)=de(f+2):next:lz=lz-h9:goto9360
9410 next
9420 gosub8190:return
9430 :
9440 rem ** normalausgabe ***
9450 :
9460 x=20:x1=gp:print"[147]"
9470 forgp=x1+h9tox1+lz
9480 a$=de$(gp-x1)
9490 ifa$<>"def"thenprinta$
9500 next
9510 gosub 7970
9520 return
9530 :
9540 rem ** gueltigkeit ***
9550 :
9560 printf$(61)
9570 gosub8140
9580 for za= h9 to lz:pokeh4,h8:y=fnx(de(za))
9590 if st=h8then9630
9600 pokeh4,h8:y=fnx(de(za)+h1):ifst=h8then9630
9610 pokeh4,h8:y=fnx(de(za)-h1):ifst=h8then9630
9620 iflz>h8thengoto9640
9630 if abs(y)<.5orlz=h8then9650
9640 forf=zatolz:de$(f)=de$(f+h9):de(f)=de(f+h9):next:lz=lz-h9:goto9580
9650 next
9660 gosub8190:return
9670 :
9680 rem ** loeschen ***
9690 :
9700 forf=h9to50
9710 de(f)=h8:de$(f)=""
9720 next :return
9730 :
9740 rem ** syntaxfehler markieren ***
9750 :
9760 es$=left$(es$,f-1)+"_"+mid$(es$,f)
9770 return
9780 :
9790 rem ** hilfsmeldungen ***
9800 :
9810 a$=mid$(str$(hi),2)+"hilfe"
9820 open8,8,8,a$
9830 input#8,a$
9840 ifa$<>"warte"thenprinta$
9850 ifa$="warte"thengosub7970
9860 ifst<>64anda$<>"_"then9830
9870 close8:hi=0
9880 return
10000 open15,8,15,"s:hpro*":close15:save"hprogramm",8:verify"hprogramm",8