Dieses Programm ist in der Lage, einen von der Tastatur eingegebenen mathematischen Term zu analysieren und zu berechnen. Es beherrscht die Addition, die Subtraktion, die Klammerrechnung, die Potenzrechnung, die Multiplikation, die Division und verarbeitet einfache komplexe Zahlen. Weiter kann es trigonometrische Funktionen berechnen. Dieser Parser setzt die eingegebenen Komponenten sehr schnell zum gewünschten Ergebnis zusammen.
Das Programm hat viele Anwendungsmöglichkeiten. Es kann sowohl von Schülern, Studenten und weniger versierten Anwendern, als auch von Fachleuten in den unterschiedlichsten Branchen eingesetzt werden und unterstützt die verschiedensten Rechenprobleme des Alltags. Die Bedienung des Interpreters ist dem des im Direktmodus laufenden GFA-BASIC sehr ähnlich. Es können alle Rechenoperationen, die im Startup-Menü angegeben sind, verwendet werden, z.B *,-,+ usw. Häufig vorkommende Zahlen in der Mathematik sind ebenfalls integriert, wie z.B “pi” und “e”. Die aufgeführten Sonderfunktionen “sin,cos,abs...” können wie in der linken Reihe angegeben benützt werden. Hier einige Beispiele.
Diese Terme können wie folgt eingegeben werden:
1.) OK->1+1-6 oder OK->(1+1)-6 oder OK->((1+1)-+6)
2.) OK->2/9+6 oder OK->(2/9)+6 oder OK->((2/9)+6)
3.) OK->29+4A5 oder OK->(29)+(4^5) oder OK->((2*9)+4^5)
Der Interpreter beherrscht auch ohne Klammerrechnung die Regeln der Mathematik. Natürlich kann man sie durch Setzen von Klammem umgehen.
Es werden weiterhin die Vorzeichen berücksichtigt, die im Term vorkommen z.B :
OK->--5+6 oder OK->5+-8
u.s.w siehe Beispiel oben. Einige Beispiele zu den Sonderfunktionen. Der sin(45) soll berechnet werden:
1.) OK->s(45) oder OK->s45 (Ergebnis in Grad)
Alle anderen Sonderfunktionen werden wie bei “sin” eingegeben, nur mit dem ersten kleinen Buchstaben.
2.) OK->c(80)OK->t(80) OK->w(6) usw.
Das ist aber noch nicht alles, was das Programm kann! Alle Sonderfunktionen können natürlich auch beliebig miteinander kombiniert werden:
z.B: OK->a(c(45)A2+s(45)A2) usw.
Der Interpreter prüft, ob ein Term richtig eingegeben ist, indem er einen kompletten “Syntax-Check” durchführt. Auftretende Fehler werden größtenteils abgefangen.
z.B: OK->-*+ oder OK->1/0 oder OK->((((((((1+6) usw.
Es können auch Variabeln definiert werden, und zwar alle GROSSBUCHSTABEN von A-Z, das sieht dann so aus :
OK->A=5 oder OK->D=s(7)+5*9 oder OK->L=d(7) usw.
Eine weitere Attraktion weist der Parser auf: Er ist in der Lage, einfache komplexe Zahlen zu verarbeiten. Es ist möglich, eine negative Wurzel oder einen negativen Logarithmus zu berechnen.
Beispiel: es soll die 2.te Wurzel aus (-8) berechnet werden
OK->w(-8) oder OK->(-8)^(1/2) oder OK->-8^(1/2)
Es erscheint eine komplexe Lösung, die aus einer imaginären und reellen Lösung besteht. Es soll eine 8. Wurzel aus einer negativen Zahl berechnet werden.
Das sieht dann so aus: OK->(-5)^(1/8) usw.
Es können alle negativen Zahlen mit allen Elementen der natürlichen Zahlen potenziert werden: Vorsicht: den Exponenten nicht als Dezimalzahl schreiben, (-8)^(0.5) z.B. führt zum Überlauf!
OK->(-21)^(5/16) usw.
Eine Logarithmierung einer negativen Zahl ist ebenfalls möglich, das sieht dann so aus:
OK->l(-9) oder OK-> d (-9) oder OK->d-9.
Klammern sind in diesem Fall auch nicht nötig. Es erscheinen komplexe Lösungen von zl -zn, die aus imaginären und reellen Lösungen bestehen. Ich hoffe, daß einige Anwender dieses Programm verwerten können. Mit einem kleinen Tip möchte ich diese Dokumentation zu meinem Programm schließen: Der Parser-Interpreter macht sich gut in einem Tabellenkalkulations-Programm!
' ----------------------------------------------
' Parse Interpreter written by P.S. Bauer,
' Romberstr.8 , 5000 Köln 41
' Version 4.00 08.05.89
' (c) MAXON Computer GmbH
' ----------------------------------------------
DIM var$(60)
SETCOLOR 0,0
DO ! Menu Steuerung
@text
v=INP(2) ! Tastaturklick
IF v=27 ! ESC Taste
SETCOLOR 0,1
END
ENDIF
CLS ! Bild Löschen
DO
ADD pose,3 ! Icon Lage OK=>
IF pose>=24 ! Letzte Zeile
pose=3 ! 3 Addieren (Zeile+3)
CLS ! Bild Löschen
IF LEN(re$)>0
PRINT AT (1,2+pose); ! Icon setzen
PRINT "OK >"
PRINT AT(5,2+pose);unt$ ! Term
PRINT re$ ! Ergebnis falls schon vorhanden
pose=pose+3
ENDIF
ENDIF
@eingabe ! Zur Hauptschleife
EXIT IF ASC(re$)=27 ! Esc
LOOP
CLR re$ ! Ergebnis Löschen
pose=0 ! zeile =0
CLS
LOOP
PROCEDURE eingabe ! Hauptprozedur
GRAPHMODE 4
DEFTEXT 1,0,0,13
TEXT 5,15," Bitte Term Eingeben "
TEXT 5,31," mit Esc zurück "
GRAPHMODE 0
ERASE sx$()
DIM sx$(80) !Feld vorbereiten
nrt:
DEFFILL 1,2,8 ! Daten für falsche Syntax
tabe%=0 ! Syntax Flag=0
sqo:
DATA "*)","(*","(/","(^","()","**","//","ss","ww","cc","tt","^^","sw","tw","cw"
DATA "/)","^)","/)","s)","w)","c)","t)","+)", "-)","..",".)","(.",".(",")."
DATA "-.","./","s.",".s","w.",".c",".t","w.","c.","t.","+.","*.","/.","^.",".^"
DATA ".-",".+",".*","./","a)","i)",".a",".i",")a",")i","ia","is","ic","it","iw"
DATA "aa","ii","sa","ca","ta","wa","i+","i-","i*","i^","i/","a-","a+","a*","a/","a^"
DATA "d*","d/","d)",".d","d.",")d","di","da","ds","dc","dt","dw","d^"
DATA "l+","l*","l/","l)",".l","l.",")l","li","la","ls","lc","lt","lw"
DATA "1^","ld","/*","/^"
PRINT AT(1,2+pose); ! Icon positonieren
PRINT "OK >"
PRINT AT(5,2+pose);
FORM INPUT 40,re$ ! Term Eingeben
unt$=re$ ! Unt$=term
IF INSTR(1,re$,"=")>0 ! Variablen Untersuchen
IF LEN(re$)>=1 AND ASC(re$)<65 OR ASC(re$)>90
tabe%=1
ENDIF ! Var zuordnen?
lio%=INSTR(1,re$,)+1
IF INSTR(1,re$,"=")>0 AND ASC(re$)>=65 AND ASC(re$)<=90
IF LEN(STR$(VAL(MID$(re$,lio%,LEN(re$)))))=LEN(MID$(re$,lio%,LEN(re$))) AND VAL(MID$(re$,lio%,LEN(re$)))>0
@variable
re$=MID$(re$,lio%,LEN(re$)) ! String erneuern
ELSE
varflag%=1 ! Variable Flag Setzen
varterm$=MID$(re$,0,lio%-1) ! Termvariable Bestimmen
re$=MID$(re$,lio%,LEN(re$)) ! Term Retten wenn Var Vorhanden
ENDIF
ELSE
tabe%=1 ! Oh oh Fehler
ENDIF
ENDIF
IF ASC(re$)<>27 ! ESC untersuchen
IF LEN(re$)>0 ! Exp und E unterschieden
CLR anzklam%,anzklam2%
IF INSTR(0,re$,"E")>0
exop$=MID$(re$,INSTR(0,re$,"E")-1,1)
ENDIF
FOR varwo%=1 TO LEN(re$)
FOR wova%=ASC("A")-65 TO ASC("Z")-65
obvar%=INSTR(varwo%,re$,CHR$(wova%+65)) !wo ist eine variable ?
IF INSTR(0,re$,"E")>0 AND ASC(exop$)>ASC("0") AND ASC(exop$)<=ASC("9")
obvar%=0
ENDIF
IF obvar%>0 ! Wert in Var einsetzen
re$=MID$(re$,0,obvar%-1)+var$(wova%)+MID$(re$,obvar%+1,LEN(re$))
ENDIF
NEXT wova%
NEXT varwo%
CLR lop$
pei%=INSTR(wobin%,re$,"pi") !wo ist pi ?
IF pei%>0
re$=MID$(re$,0,pei%-1)+STR$(PI)+MID$(re$,pei%+2,LEN(re$))
ENDIF
expo%=INSTR(wobin%,re$,"e") ! wo ist e
IF expo%>0
re$=MID$(re$,0,expo%-1)+STR$(EXP(1))+MID$(re$,expo%+1,LEN(re$))
ENDIF
IF INSTR(1,re$," ") >0 ! Leerstellen suchen
FOR spce%=1 TO LEN(re$)
ase$=MID$(re$,spce%, 1)
IF ase$<>CHR$(32) ! selbe entfernen
f$=f$+ase$
ENDIF
NEXT spce%
re$=f$
ENDIF
FOR synklam%=0 TO LEN(re$) ! Anzahl Klammern Überprüfen
IF MID$(re$,synklam%+1,1)="(" !(
ADD anzklam%,1 !( ist gefunden
ENDIF
IF MID$(re$,LEN(re$)-synklam%,1)=")" !)
ADD anzklam2%,1 !) ist gefunden
ENDIF
NEXT synklam%
IF anzklam%<>anzklam2% ! Klammer vergessen ?
tabe%=1 ! Syntax Flag=1
ENDIF
IF LEN(re$)>0 ! Syntax prüfen
FOR pol%=1 TO LEN(re$)
polx%=ASC(MID$(re$,pol%,1)) ! String aufspalten
IF polx%>57 OR polx%<=36 AND polx%<>94 AND polx%<>46 AND polx%<>115 AND polx%<>99 AND polx%<>116 AND polx%<>119 AND polx%<>105 AND polx%<>97 AND polx%<>100 AND polx%<>108 AND polx%<>69
tabe%=1 ! Syntaxfehler Flag=1
ENDIF
EXIT IF polx%>57 OR polx%<=36 AND polx%<>94 AND polx%<>46 AND polx%<>115 AND polx%<>99 AND polx%Oll6 AND polx%<>119 AND polx%<>105 AND polx%<>97 AND polx%<>100 AND polx%<>108 AND polx%<>69
NEXT pol%
RESTORE sqo
FOR g=0 TO 107 ! Syntaxdata Einlesen
READ syntax$
IF INSTR(1,re$,syntax$)>0
IF syntax$<>"/0"
tabe%=1 ! Falls Fehler Syntax Flag=1
ENDIF
ENDIF
EXIT IF INSTR(1,re$,syntax$)>0
NEXT g
IF tabe%=1 ! Syntax Anzeigen
PRINT "Syntax Fehler "
ADD pose,3 ! nächste Position
GOTO nrt ! Neu eingeben
ENDIF
@fidel
IF INSTR(1,re$,")")>0 AND INSTR(1,re$,"(")>0 ! Klammer erkennen
hint%=LEN(re$)
c$=re$
DO
IF INSTR(1,C$,"(")>0 AND INSTR(1,C$, ")")>0 ! Klammer auswerten
suche%=LEN(c$)
DO ! Klammer von Innen nach Aussen
SUB suche%,1
hint%=INSTR(suche%,c$,"(")
EXIT IF hint%>0
LOOP
CLR suche%
tor%=INSTR(hint%+1,c$,")") ! ) Entfernen
re$=MID$(c$,hint%+1,tor%)
tor2%=INSTR(1,re$,")") ! ( Entfernen
re$=MID$(re$,1,tor2%-1) ! String ohne ()
ENDIF
@fidel
@num
c$=MID$(c$,0,hint%-1)+SPACE$(LEN(re$))+MID$(c$,tor%+1,LEN(c$))
MID$(c$,hint%,LEN(re$))=re$ ! String zusammenbauen
EXIT IF INSTR(1,C$,")")=0 AND INSTR(1,C$,"(")=0
LOOP
re$=c$ !String retten
ENDIF
@fidel
@num
DEFFILL 1,2,8
IF varflag%=1 ! Termflag abfrage
var$(ASC(varterm$)-65)=re$ ! Termvar setzen
varflag%=0 ! Flag auf Null
ENDIF
IF nuuld%=0 AND llog%=0
PRINT re$ ! und ausgeben
ENDIF
CLR nuuld%,llog%
ENDIF
ENDIF
ENDIF
DEFFILL 1,2,8
CLR sc$,rb$
ERASE sx$()
RETURN
PROCEDURE num ! Hier werden die Rechnungen ausgeführt
tabe%=0
DO
EXIT IF INSTR(1,re$,"i")=0 ! Integer
ADD w,1
IF sx$(w)="i" ! ist i dabei
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"i") ! wo ist i
we=1+LEN(sx$(w+1))
sx$(w-1)=STR$(INT(VAL(sx$(w+1)))) ! Ausführen
@ordner
@fidel
CLR w
ENDIF
LOOP
DO
EXIT IF INSTR(1,re$,"a")=0 ! Absolut
ADD w,1
IF sx$(w)="a" ! ist a dabei
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"a") ! wo ist i
we=1+LEN(sx$(w+1))
sx$(w-1)=STR$(ABS(VAL(sx$(w+1)))) ! Ausführen
@ordner
@fidel
CLR w
ENDIF
LOOP
DO
EXIT IF INSTR(1,re$,"1")=0 ! Logarithmus e
ADD w,1
IF sx$(w)="l"
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"1")
we=1+LEN(sx$(w+1))
IF VAL(sx$(w+1))<=0
nulllog%=l
@komplex
ELSE
sx$(w-1)=STR$(LOG(VAL(sx$(w+1))))
@ordner
@fidel
ENDIF
CLR w
ENDIF
EXIT IF nulllog%=1
LOOP
CLR nulllog%
DO
EXIT IF INSTR(1,re$,"d")=0 ! Logaritmus 10
ADD w,1
IF sx$(w)="d"
eg=LEN(sx$(w+1))
isr=INSTR(1,re$, "d")
we=1+LEN(sx$(w+1))
IF VAL(sx$(w+1))<=0
nulllog%=1
@komplex
ELSE
sx$(w-1)=STR$(LOG10(VAL(sx$(w+1))))
@ordner
@fidel
ENDIF
CLR w
ENDIF
EXIT IF nulllog%=1
LOOP
CLR nulllog%
DO
EXIT IF INSTR(1,re$,"s")=0 ! Sinus
ADD w,1
IF sx$(w)="s"
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"s")
we=1+LEN(sx$(w+1))
sx$(w-1)=STR$(SIN(VAL(sx$(w+1))*PI/180))
@ordner
@fidel
CLR w
ENDIF
LOOP
DO
EXIT IF INSTR(1,re$,"c")=0 ! Cosinus
ADD w,1
IF sx$(w)="c"
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"c")
we=1+LEN(sx$(w+1))
sx$(w-1)=STR$(COS(VAL(sx$(w+1))+PI/180))
@ordner
@fidel
CLR w
ENDIF
LOOP
DO
EXIT IF INSTR(1,re$,"t")=0 ! Tangens
ADD w,1
IF sx$(w)="t"
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"t")
we=1+LEN(sx$(w+1))
sx$(w-1)=STR$(TAN(VAL(sx$(w+1))+PI/180))
@ordner
@fidel
CLR w
ENDIF
LOOP
DO
EXIT IF INSTR(1,re$,"w")=0 ! Wurzelziehen
ADD w,1
IF sx$(w)="w"
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"w")
we=1+LEN(sx$(w+1))
IF VAL(sx$(w+1))<0
nullsqr%=1
wa%=2
@komplex
ELSE
sx$(w-1)=STR$(SQR(VAL(sx$(w+1))))
@ordner
@fidel
ENDIF
CLR w
ENDIF
EXIT IF nullsqr%=1
LOOP
CLR nullsqr%
DO
EXIT IF INSTR(1,re$,"1")=0 ! Potenzieren
ADD w,1
IF sx$(w)="1"
ad=LEN(sx$(w-1))
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"^")
we=LEN(sx$(w-1))+1+LEN(sx$(w+1))
minus%=0
IF VAL(sx$(w-1))<0 AND INT(VAL(sx$(w+1)))<>VAL(sx$(w+1))
nullsq2%=1
wa%=anzzeig%
@komplex
ELSE
IF VAL(sx$(w-1))<0 AND tor2%=0 ! negativ erkennen
minus%=1
sx$(w-1)=STR$(VAL(sx$(w-1))*-1)
ENDIF
sx$(w-1)=STR$(VAL(sx$(w-1))^(VAL(sx$(w+1))))
IF minus%=1
sx$(w-1)=STR$(VAL(sx$(w-1))*-1)
ENDIF
@ordner
@fidel
ENDIF
CLR w
ENDIF
EXIT IF nullsq2%=1
LOOP
CLR nullsq2%
DO
EXIT IF INSTR(1,re$,"/")=0 ! Teilen
ADD w,1
IF sx$(w)="/"
ad=LEN(sx$(w-1))
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"/")
we=LEN(sx$(w-1))+1+LEN(sx$(w+1))
IF VAL(sx$(w+1))<>0
anzzeig%=VAL(sx$(w+1))
sx$(w-1)=STR$(VAL(sx$(w-1))/(VAL(sx$(w+1))))
@ordner
@fidel
ELSE
GOSUB null
ENDIF
CLR w
ENDIF
EXIT IF nulldiv%=1
LOOP
CLR nulldiv%
DO
EXIT IF INSTR(1,re$,"*")=0 ! Multiplizieren
ADD w,1
IF sx$(w)="*"
ad=LEN(sx$(w-1))
eg=LEN(sx$(w+1))
isr=INSTR(1,re$,"*")
we=LEN(sx$(w-1))+1+LEN(sx$(w+1))
sx$(w-1)=STR$(VAL(sx$(w-1))*(VAL(sx$(w+1))))
@ordner
@fidel
CLR w
ENDIF
LOOP
DO
EXIT IF INSTR(1,re$,"-")=0 ! Subtrahieren
EXIT IF INSTR(1,rb$,"-")=() ! Negation ?
ADD w,1
IF sx$(w)="-"
ad=LEN(sx$(w-1))
eg=LEN(sx$(w+1))
isr=INSTR(1,rb$,"-")
IF VAL(sx$(w-1))<0
ADD isr,1
ENDIF
we=LEN(sx$(w-1))+1+LEN(sx$(w+1))
sx$(w-1)=STR$(VAL(sx$(w-1))-(VAL(sx$(w+1))))
@ordner
@fidel
CLR w
ENDIF
LOOP
DO
EXIT IF INSTR(1,re$,"+")=0 ! Addieren
EXIT IF INSTR(1,rb$,"+")=0 ! positiv ?
ADD w,1
IF sx$(w)="+"
ad=LEN(sx$(w-1))
eg=LEN(sx$(w+1))
isr=INSTR(1,rb$ , "+")
IF VAL(sx$(w-1))<0
ADD isr,1
ENDIF
we=LEN(sx$(w-1))+1+LEN(sx$(w+1))
sx$(w-1)=STR$(VAL(sx$(w-1))+(VAL(sx$(w+1))))
@ordner
@fidel
CLR w
ENDIF
LOOP
RETURN
PROCEDURE null
nulldiv%=1
PRINT "Division durch Null "
nuuld%=1
RETURN
PROCEDURE ordner ! String wieder zusammenbauen
leh=LEN(sx$(w-1))
re$=MID$(re$,0,(isr-ad-1))+SPACE$(leh)+MID$(re$,isr+eg+1,LEN(re$))
MID$(re$,(isr-ad),leh)=sx$(w-1)
CLR ad
RETURN
PROCEDURE fidel ! Zahlen und Rechenoperationen trennen
CLR rb$
DO
ADD s,1
anf$=MID$(re$,s,1)
EXIT IF LEN(anf$)<=0
ADD e,1
syn%=ASC(MID$(re$,s,1))
IF MID$(re$,s,1)="-" ! Negation Erkenntnisse
sn1%=ASC(MID$(re$,s-1,1))
IF sn1%<=45 OR sn1%=47 OR sn1%=99 OR sn1%=116 OR sn1%=115 OR sn1%=119 OR sn1%=97 OR sn1%=105 OR sn1%=100 OR sn1%=108
syn%=48 ! Programm Syntax ?
ENDIF
ENDIF
IF syn%>47 AND syn%<>94 AND syn%<>46 AND syn%<>115 AND syn%<>99 AND syn%<>116 AND syn%<>119 AND syn%<>97 AND syn%<>105 AND syn%<>100 AND syn%<>108
DO
ADD s,1
synt%=ASC(MID$(re$,s,1))
IF MID$(re$,s,1)="--" ! Negativ erkennen
sn%=ASC(MID$(re$,s-1,1))
IF sn%<=45 OR sn%=47
synt%=48
ENDIF
ENDIF
IF MID$(re$,s,2)= "E+" OR MID$(re$,s,2)="E-" ! Exponent erkennen
expo%=1
synt%=48
ENDIF
EXIT IF synt%<=45 OR synt%=47 OR synt%=94 OR synt%=115 OR synt%=99 OR synt%=116
EXIT IF synt%=119 OR synt%=97 OR synt%=105 OR synt%=100 OR synt%=108
IF expo%=1 ! Exponent setzten
anf$=anf$+MID$(re$,s, 2) ! mit Exponent
ADD s,1
ELSE
anf$=anf$+MID$(re$,s,1) ! Ohne Exponent
ENDIF
expo%=0
LOOP
SUB s,1
ENDIF
sx$(e)=anf$ ! Aufspalten
as%=INSTR(1,sx$(e),"E")
wisch$=sx$(e)
IF as%>0 ! Exponent ?
MID$(wisch$,as%+1,1)="0"
ENDIF
IF VAL(wisch$)>=0
rb$=rb$+wisch$ ! Hilfstring bilden
ELSE
IF as%>0
wisch$=STR$(ABS(VAL(wisch$)))
MID$(wisch$,as%,1)="0"
rb$=rb$+wisch$
ELSE
rb$=rb$+STR$(ABS(VAL(wisch$))) ! Hilfstring fertig
ENDIF
ENDIF
CLR anf$
LOOP
CLR s,e
RETURN ! Aufspaltung beendet
PROCEDURE text ! Info für Benutzer
GRAPHMODE 4
DEFTEXT 1,0,0,13
TEXT 150,50," Parse-Interpreter written by P.Bauer "
TEXT 150,66," Rombergstr.8, 5000 Köln 41. Vers: 4.00 "
GRAPHMODE 0
TEXT 150,110," Folgende Rechenoperationen sind möglich:"
TEXT 148,140," Standardfunktionen :"
TEXT 148,160," | + | - | / | * | ^ | pi | () |”
TEXT 148,180,” Variablen = Alle GroPbuchstaben von A->Z"
TEXT 148,200," Sonderfunktionen
TEXT 450,360," Taste Drücken !!"
TEXT 450,376," Esc =End"
RESTORE 44
FOR bn%=1 TO 9
READ hel$
TEXT 280,210+(bn%*17),hel$
NEXT bn%
44:
DATA s()=Sin(),c()=Cos(),t()=Tan(),d(+-)=Log(),l(+-)=Ln()
DATA w(+-)=Sqr(),i()=Int(),a()=Abs(),e=Exp(1)
RETURN
PROCEDURE variable
vai%=INSTR(1,re$,"=")-1 !wo ist = ?
var$(ASC(MID$(re$,0,vai%))-65)=MID$(re$,vai%+2,LEN(re$)) ! Zuweisungs var (z.B. A=)
RETURN
PROCEDURE komplex
DIM z(100),h(100)
DEFNUM 5
IF nulllog%=1
PRINT "z=ln(";(ABS(VAL(sx$(w+1))));")+i*(";CHR$(227);"+2*k* ";CHR$(227);")(für k ";CHR$(238);" G)"
llog%=1
ENDIF
IF nullsqr%=1 OR nullsq2%=1
nuuld%=1
pose=pose+wa%
FOR kom%=1 TO wa%
IF nullsq2%=1
a=(ABS(VAL(sx$(w-1))))^(1/wa%)
ELSE
a=(ABS(VAL(sx$(w+1))))^(1/wa%)
ENDIF
al=180/wa%
umr=(al+(((kom%-l)*(360/wa%))))
z(kom%)=a*(COS(umr*PI/180))
h(kom%)=a*(SIN(umr*PI/180))
IF ABS((z(kom%)))<1.0E-07
z(kom%)=0
ELSE
IF ABS((h(kom%)))<1.0E-07
h(kom%)=0
ENDIF
ENDIF
ADD pos,1
PRINT ;"z";kom%;"= ";z(kom%)+" +";h(kom%);"*i"
NEXT kom%
ENDIF
DEFNUM 12
ERASE h()
ERASE z()
RETURN