Tips & Tricks

Formeln perfekt gedruckt

Endlich ist es möglich, mit dem Epson FX-80 mathematische Sonderzeichen zu drucken.

Mit diesem Programm können mathematische Formeln in korrekter Schreibweise zu Papier gebracht werden. Es ist lauffähig auf dem Commodore 64 mit Epson-Drucker FX-80 und Görlitz-Interface.

Das Programm beinhaltet folgende Funktionen:

  1. Umwandlung des Basic-Zeichens »/«in einen echten Bruch (siehe Bild 1, Beispiel 1).
  2. Umwandlung des Basic-Zeichens »t« in echte Potenzschreibweise (siehe Bild 1, Beispiel 2).
  3. Umwandlung der Basic-Funktion »EXP(X)« in echte Exponentialschreibweise (siehe Bild 1, Beispiel 3).
  4. Umwandlung der Basic-Funktion »SQR(X)« in echte Wurzelschreibweise (siehe Bild 1, Beispiel 4).
  5. Mischung von Bruch-, Wurzel-, Exponential- und Potenzschreibweise (siehe Bild 1, Beispiel 5 bis 18).
  6. Beachtung der Klammerregeln (siehe Bild 1, Beispiel 8 bis 12).
  7. Ausgabe des Bruchstrichs exakt auf der Höhe der ganzrationalen Funktionsterme.
  8. Einbindung in andere Programme ohne weiteres möglich, es muß nur die Funktion und die Druckposition übergeben werden.
  9. Nach Ende des Druckvorgangs befindetsich der Druckkopf auf der gleichen Höhe wie zu Beginn, genau hinter der ausgedruckten Funktion. Es können also in einer Reihe ohne Probleme mehrere Funktionen ausgegeben werden.
Bild 1. Druckbeispiele »Formeldruck« (verkleinert)

Soweit eine kurze Übersicht über die Fähigkeiten des Programms. Kommen wir nun zu einer Beschreibung des Programmaufbaus (Tabelle 1).

120 - 1150 Beispielprogramm
50180 - 50400 Einstellung der Grundbedingungen; Definition der Sonderzeichen für den Wurzelausdruck
50460 - 50560 Umwandlung der Basic-Funktion EXP in die später zum Ausdruck benötigte Form
50560 - 50720 Umwandlung der Basic-Funktion SQR in die später zum Ausdruck benötigte Form
50780 - 50920 Test auf gebrochenrationale Funktion zur Faktorzerlegung
50980 - 51260 Zerlegung in ganzrationale und gebrochenrationale Funktionsterme
51320 - 51390 Schleife zum Ausdruck der einzelnen Terme
51450 - 51530 Test auf gebrochenrationale Funktion im Term
51590 - 51630 Einstellen der Bedingungen für ganzrationalen Term
51650 - 51720 Zerlegung der gebrochenrationalen Funktion in Zähler und Nenner
51780 - 52050 Berechnung der Verkürzung von Zähler und Nenner der neuen Potenz- und Wurzelausdruck
52110 - 52230 Zähler drucken
52260 - 52360 Bruchstrich drucken
52420 - 52520 Nenner drucken
52580 - 52820 Potenzausdruck
52850 - 53150 Wurzelausdruck
53150 - 53170 Ende
Tabelle 1. Programmbeschreibung »Formeldruck«

In den Zeilen 120 bis 1150 befindet sich ein Beispielprogramm. Es bewirkt einen Ausdruck der Beispiele aus Bild 1.

Die Funktionen werden definiert und in G$(1) bis G$(18) festgehalten. In der sich anschließenden Schleife (Zeilen 1040 bis 1130) werden nun nacheinander die Funktionen einmal in Basic-Schreibweise und durch den Aufruf des Unterprogramms (Zeile 1120) in exakter Schreibweise ausgegeben. Vor dem Aufruf des Unterprogramms werden in den beiden Variablen BB und F$ die zu übergebenden Informationen definiert (siehe Tabelle 2). Zum einen ist das der Abstand vom linken Rand (hier 55) und zum anderen die Funktion selber (hier von G$(1) bis G$(18)).

F$ Funktion, muß vom Hauptprogramm übergeben werden und liegt hinterher unverändert vor.
BB Abstand vom linken Rand, muß vom Hauptprogramm übergeben werden und enthält hinterher die Position des Funktionsendes.
T$ Einzelne Zeichen der Funktion
FU$ Funktion während der Bearbeitung
F$(SC) Funktionsterme nach der Zerlegung
SC Anzahl der Funktionsterme
L Länge der Funktion
E$ Vergleichsvariable für EXP und SQR
WR Zeichenzahl im Zähler (bei der Zerlegung)
WV Zeichenzahl im Nenner (bei der Zerlegung)
KL, EK Anzahl der offenen Klammerpaare
LO Länge des Zählers
LU Länge des Nenners
OB$ Zähler
UB$ Nenner
Z Markierung für Zähler (Z = 1) oder Nenner (Z = 2)
WO Stellenverkürzung für den Zähler durch Potenz- und Wurzelausdruck
WU Stellenverkürzung für den Nenner durch Potenz- und Wurzelausdruck
AA Bruchstrichlänge
M Stellenverkürzung für ganzrationale Funktion durch Potenz- und Wurzelausdruck
WW Markierung für Wurzelausdruck
WM Stellenverkürzung bei Wurzelausdruck
E;G;I;J;O;Q;R;T;U;Y Zählvariablen
Tabelle 2. Variablenliste »Formeldruck«

Das Beispielprogramm soll nur einen kurzen Überblick über die vielfältigen Möglichkeiten von »Formel-Druck« geben und demonstrieren, wie die vom Programm benötigten Informationen zu übergeben sind. Wichtig ist in diesem Fall auch Zeile 120. In F$(..) werden im Programm späterdie einzelnen Terme der zu druckenden Funktion abgelegt. Ist eine Funktion sehr lang, kann es leicht zu einer größeren Anzahl an Einzeltermen als 11 kommen. Um allen Eventualitäten vorzubeugen, ist es besser, F$ gleich genügend groß zu dimensionieren. Hier wurde der Wert 50 gewählt, aber auch eine kleinere Zahl reicht meistens aus und kann vom Anwender nach eigenem Willen eingesetzt werden.

Ab Zeile 50000 beginnt nun das eigentliche Programm, die Routine zum Umwandeln der Basic-Funktionen mit sich anschließendem Ausdruck.

In Zeile 50170 ist zunächst einmal das sehr häufig benutzte Unterprogramm zum Auslesen eines Zeichens (in T$) aus der Funktion (FU$) angelegt. In den Zeilen bis 50400 werden nun die nötigen Anfangsbedingungen eingestellt. Das ist erstens in Zeile 50180 die Festlegung des Zeichensatzes für den Drucker (Groß-/Kleinschrift mit Zeilenabstand von sieben Punkten), in der für das Görlitz-Interface typischen Form. Zweitens die Definition der Sonderzeichen zum Wurzelausdruck (das »&« wird zum Strich über den Zeichen und das »%« zum Wurzelzeichen). Schließlich werden noch die benötigten Variablen festgelegt und der Fettdruck eingeschaltet.

In den Zeilen 50420 bis 50720 werden die beiden Basic-Befehlsworte EXP und SQR aus der Funktion eliminiert und durch für das Programm später verständliche Befehle ersetzt (Zeile 50550 und 50710). Durch die Verminderung von L wird die sich verkürzende Funktionslänge berücksichtigt.

Anschließend folgt der Test auf gebrochenrationale Funktion (Zeile 50780 bis 50850). Trittin der zu druckenden Funktion ein Divisionszeichen auf, wird in Zeile 50980 verzweigt und die Funktion in ganzrationale und gebrochenrationale Terme zerlegt. Zu diesem Zweck werden zum einen die vor dem Bruchstrich (Zeile 50980 bis 51070) und zum anderen die hinter dem Bruchstrich (Zeile 51080 bis 51180) auftretenden Zeichen betrachtet. Als Abbruchkriterium giltjeweils das erste »+«,»—« oder »*«-Zeichen, das nicht mehr zum Zähler oder Nenner gehört. In den Zeilen 51190 bis 51260 findet dann die Zuweisung der entsprechenden Einzelelemente in F$(SC) statt. Hierbei wird SC bei jedem neu hinzukommenden Term um eins erhöht. Nun wird in Zeile 51260 wieder nach 50780 zurückgesprungen und der restliche Funktionsteil untersucht. Das geschieht so lange, bis alle Divisionszeichen abgearbeitet sind. Dann wird der restliche Teil in F$(SC) abgelegt und zur Hauptschleife des Programms zurückgekehrt (Zeile 50910 bis 50920).

Diese Schleife beginnt in Zeile 51320. Mitjedem Durchlauf der Schleife wird ein in F$(SC) abgelegter Term aufgerufen, die jeweilige Druckposition festgelegt und der Fettdruck gesetzt.

Jeder einzelne Term wird in den Zeilen 51450 bis 51530 auf gebrochenrationale Funktion geprüft. Liegt eine vor, muß diese in den Zeilen 51650 bis 51720 in Zähler und Nenner zerlegt werden. Während dieser Prozedur werden auch gleich die überflüssigen Klammern entfernt (Zeile 51680 und Zeile 51720). Handelt es sich um einen ganzrationalen Funktionsteil, wird dieser in Zeile 51590 im Zähler abgelegt und der Nenner für spätere Kontrollen mit einem Leerstring belegt.

Um hinterher beim Ausdruck ein exaktes Druckbild zu erhalten (Bruchstrich mit der richtigen Länge und Zähler und Nenner zentriert übereinander) muß die Verkürzung des Druckbildes durch Potenzausdruck und Wegfall von einigen Zeichen durch die Eliminierung von SQR berücksichtigt werden. Das Ausmaß der Verkürzung wird in den Zeilen 51780 bis 52020 berechnet. Bei jeder auftretenden Potenz verkürzt sich die Länge des Ausdrucks um 0,5 und durch Wegfall des Zeichens »t« um eine Druckposition. Dies wird jeweils für Zähler und Nenner getrennt in Zeile 51970 beziehungsweise 51980 festgehalten.

Die Verkürzung durch den Wegfall der Klammern beim Wurzelausdruck wird jeweils in Zeile 52010 beziehungsweise 52020 berücksichtigt.

Die erhaltene Gesamtverkürzung ist in WO beziehungsweise WU enthalten. Diese wird beim Umwandeln von Zähler und Nenner auf die gleiche Länge (Zeile 52030 bis 52050) mit einberechnet. Dadurch wird eine ordentliche Bruchschreibweise gewährleistet.

Ab Zeile 52110 beginnt die Druckroutine. Als erstes wird der Zähler jedes einzelnen Terms ausgegeben. Hierbei wird ein ganzrationaler Funktionsteil als Zähler mit dem Nenner als Leerstring betrachtet. Handelt es sich um einen gebrochenrationalen Funktionsteil, wird in Zeile 52130 das Papier um eine Position rückwärts transportiert, um später den Bruchstrich auf Höhe der ganzrationalen Funktion ausgeben zu können. Zum Ausdruck wird jedes Zeichen des Zählers untersucht, ob es sich um ein Potenz- oder Wurzelsymbol handelt. Ist dies der Fall, werden die entsprechenden Routinen zum Potenz- beziehungsweise Wurzelausdruck ausgeführt. Alle anderen Zeichen werden sofort gedruckt.

Handelt es sich beim ausgegebenen Term um eine ganzrationale Funktion, wird ein Rückwärtstransport des Papiers von einer Zeile durchgeführt und das Ende des Terms in BB festgehalten, damit die nächsten Funktionsteile direkt im Anschluß gedruckt werden können.

Ansonsten kommt es zur Ausgabe des Bruchstrichs (Zeile 52280 bis 52360). Die Länge des Bruchstrichs wird in AA festgehalten und aus den oben genannten Verkürzungswerten WO und WU und der Länge des Zählers und Nenners berechnet (Zeile 52300 bis 52310).

Als letztes wird dann der Nenner ausgedruckt. Dies erfolgt auf die gleiche Weise wie beim Zähler. Auch hier wird am Ende ein Rücktransport des Papiers durchgeführt. Das Ende eines gebrochenrationalen Funktionsteils ergibt sich aus der Länge des Bruchstrichs und wird in BB gespeichert.

In den Zeilen 52580 bis 53090 stehen die beiden Unterprogramme zum Potenz- beziehungsweise Wurzelausdruck. Die Potenzausdruckroutine beginnt in Zeile 52580. Es wird die Superscript- und die Schmalschrift eingestellt. Dann wird jedes dem Potenzsymbol folgende Zeichen überprüft, ob es noch im Exponenten steht oder nicht. Als Abbruchkriterium gelten die gängigen mathematischen Kriterien (Zeilen 52650 bis 52705). In den Zeilen 52720 bis 52750 wird überprüft, ob die Potenz unter der Wurzel steht, in diesem Fall ist WW = 1, und der entsprechende Wurzelstrich wird ausgegeben. Nach Abarbeitung aller in Frage kommenden Zeichen wird wieder die Normalschrift und der Fettdruck eingeschaltet und zurück ins Hauptprogramm gesprungen (Zeile 52810 bis 52850). Die Variable M (Zeile 52760) dient zur Berechnung der Verkürzung des Terms durch den Potenzausdruck und wird bei ganzrationalen Funktionen berücksichtigt.

In der Wurzelausdruckroutine läuft im Prinzip das gleiche ab. Sie beginnt in Zeile 52910 und druckt zuerst das Wurzelsymbol und über alle folgenden Zeichen den Wurzelstrich. Zur Ausgabe dieses Strichs wird der Druckkopfjeweils um ein Zeichen zurück und einen Matrixpunkt nach oben bewegt und anschließend das Sonderzeichen ausgegeben (Zeile 53020 bis 53060).

Den Abschluß des Programms bilden die Zeilen 53150 bis 53170. Hier wird der Drucker normiert, das heißt in den Einschaltzustand zurückversetzt, alle offenen Kanäle geschlossen und der Epson-Modus mit automatischem Zeilenvorschub eingestellt.

(Patrick Bödeker/rg)
10 rem ********************************
20 rem *                              *
30 rem *        formel-druck          *
40 rem *                              *
50 rem *     1985 by patrick boedeker *
60 rem *             neustr. 11       *
70 rem *        4350 recklinghausen   *
80 rem *                              *
90 rem ********************************
100 :
110 :
120 dimf$(50)
130 dimg$(18)
140 g$(1)="1/x"
150 g$(2)="x^2"
160 g$(3)="exp(x)"
170 g$(4)="sqr(x)"
180 g$(5)="sqr(exp(x))"
190 g$(6)="exp(sqr(x))"
200 g$(7)="sqr(x^(3*x+4))"
210 g$(8)="1/(7*x^6+3*x^2)"
220 g$(9)="(3*x^2-2*x+4)/(5*x^3+2*x-12)"
230 g$(10)="3*x^2-2*x+4/(5*x^3+2*x-12)"
240 g$(11)="(3*x^2-2*x+4)/5*x^3+2*x-12"
250 g$(12)="3*x^2-2*x+4/5*x^3+2*x-12"
260 g$(13)="(3*x^(7*x+4))/(2*x^2-7*x+2)"
270 g$(14)="exp(x)+sqr(x^4+x^3+x^2)/7*x^3+14"
280 g$(15)="(x^sqr(3*x+4)+sqr(x^4+3))/7"
290 g$(16)="exp(x)/sqr(x^3+4*x)+sqr(3*x)-1/x^2"
300 g$(17)="3/4*(7*x^2-3*x)+(7*x^2)/(14*x^3)"
310 g$(18)="sqr(x^23-4)+1/(3+x)-sqr(2*x^3)+1/x"
1000 open1,4,8
1010 print#1,"                              basic                    ";
1020 print#1,"    formel-druck"
1030 print#1:close1
1040 fora=1to18
1050 open1,4
1060 print#1:print#1
1070 print#1,chr$(27)" t"
1080 print#1,"  Beispiel";a;" :   ";
1090 print#1,chr$(27)" g";
1100 print#1,g$(a);
1110 close1
1120 bb=55:f$=g$(a):gosub50000
1130 nexta
1140 open1,4,4:print#1,chr$(12):close1
1150 end
1160 :
1170 :
50000 rem *****************************
50010 rem *                           *
50020 rem *  ausgabe von mathemati-   *
50030 rem *  schen formeln in bruch-, *
50040 rem *  wurzel- und potenz-      *
50050 rem *  schreibweise auf den     *
50060 rem *  drucker fx-80 mit        *
50070 rem *  goerlitz interface.      *
50080 rem *                           *
50090 rem *  die funktion muss in f$, *
50100 rem *  der abstand vom linken   *
50110 rem *  rand in bb uebergeben    *
50120 rem *  werden                   *
50130 rem *****************************
50140 :
50150 :
50160 goto50180
50170 t$=mid$(fu$,t,1):return
50180 open1,4:open2,4,10,"7"
50230 :
50240 rem *********************
50250 rem * zeichendefinition *
50260 rem *********************
50270 :
50280 print#1,chr$(27);":";chr$(0);chr$(0);chr$(0);
50290 print#1,chr$(27);"&";chr$(0);"%%";chr$(139);
50300 print#1,chr$(0);chr$(4);chr$(4);chr$(3);chr$(2);chr$(4);
50310 print#1,chr$(8);chr$(16);chr$(32);chr$(64);chr$(128);chr$(0);
50320 print#1,chr$(27);"&";chr$(0);"&&";chr$(139);
50330 print#1,chr$(128);chr$(128);chr$(128);chr$(128);chr$(128);chr$(128);
50340 print#1,chr$(128);chr$(128);chr$(128);chr$(128);chr$(128);chr$(0);
50350 print#1,chr$(27);"%";chr$(1);chr$(0);
50360 fu$=f$
50370 sc=0:y=0
50390 print#1,chr$(27);"e";
50400 l=len(fu$)
50410 :
50420 rem ***********************
50430 rem * exponentialfunktion *
50440 rem ***********************
50450 :
50460 i=1
50470 t=i:gosub50170
50480 ift$="e"then50520
50490 i=i+1
50500 ifi<=lthen50470
50510 goto50620
50520 forr=itoi+2
50530 t=r:gosub50170
50540 e$=e$+t$:nextr
50550 ife$="exp"thenfu$=left$(fu$,i-1)+"e^"+right$(fu$,l-i-2):l=l-1
50560 e$="":goto50490
50570 :
50580 rem ******************
50590 rem * wurzelfunktion *
50600 rem ******************
50610 :
50620 i=1
50630 t=i:gosub50170
50640 ift$="s"then50680
50650 i=i+1
50660 ifi<=lthen50630
50670 goto50780
50680 forr=itoi+2
50690 t=r:gosub50170
50700 e$=e$+t$:nextr
50710 ife$="sqr"thenfu$=left$(fu$,i-1)+"%"+right$(fu$,l-i-2):l=l-2
50720 e$="":goto50650
50730 :
50740 rem *****************************
50750 rem *gebrochenrationale funktion*
50760 rem *****************************
50770 :
50780 i=1:kl=0
50790 t=i:gosub50170
50800 ift$="("thenkl=kl+1
50810 ift$=")"thenkl=kl-1
50820 ift$="/"andkl>0then50840
50830 ift$="/"then50980
50840 i=i+1
50850 ifi<=lthen50790
50860 :
50870 rem **************************
50880 rem * ganzrationale funktion *
50890 rem **************************
50900 :
50910 sc=sc+1:f$(sc)=fu$
50920 goto51320
50930 :
50940 rem *******************
50950 rem * faktorzerlegung *
50960 rem *******************
50970 :
50980 wr=i:kl=0
50990 wr=wr-1:t=wr:gosub50170
51000 ift$=")"thenkl=kl+1
51010 ift$="("thenkl=kl-1
51020 ift$="+"andkl=0then51070
51030 ift$="-"andkl=0then51070
51040 ift$="*"andkl=0then51070
51050 ifwr=1thenwr=0:goto51070
51060 goto50990
51070 wr=i-wr-1
51080 wv=i
51090 wv=wv+1:t=wv:gosub50170
51100 ift$="("thenkl=kl+1
51110 ift$=")"thenkl=kl-1
51120 ift$="+"andkl=0thenwv=wv-1:goto51170
51130 ift$="-"andkl=0thenwv=wv-1:goto51170
51140 ift$="*"andkl=0thenwv=wv-1:goto51170
51150 ifwv=lthen51170
51160 goto51090
51170 wv=wv-i
51180 ifkl<0thenwv=wv-1
51190 sc=sc+1
51200 f$(sc)=left$(fu$,i-1-wr)
51210 fu$=right$(fu$,l-i+wr+1)
51220 sc=sc+1
51230 f$(sc)=left$(fu$,wr+wv+1)
51240 f$(sc+1)=right$(fu$,l-i-wv)
51250 fu$=right$(fu$,l-i-wv):l=len(fu$)
51260 goto50780
51270 :
51280 rem ************
51290 rem * schleife *
51300 rem ************
51310 :
51320 y=y+1
51330 ify>scthen53150
51340 iff$(y)=""then51320
51350 fu$=f$(y)
51360 close4:open4,4,4
51370 print#4,chr$(27);chr$(108);chr$(bb);
51380 print#4,chr$(27);"e";
51390 close2:open2,4,10,"7"
51400 :
51410 rem ***********
51420 rem * bruch ? *
51430 rem ***********
51440 :
51450 l=len(fu$)
51460 i=1:kl=0
51470 t=i:gosub50170
51480 ift$="("thenkl=kl+1
51490 ift$=")"thenkl=kl-1
51500 ift$="/"andkl>0then51520
51510 ift$="/"then51650
51520 i=i+1
51530 ifi<=lthen51470
51540 :
51550 rem **************
51560 rem * kein bruch *
51570 rem **************
51580 :
51590 ob$=fu$:ub$="":lo=l:bb=bb+l:goto52110
51600 :
51610 rem *************
51620 rem * zerlegung *
51630 rem *************
51640 :
51650 ob$=""
51660 forj=1toi-1:t=j:gosub50170
51670 ob$=ob$+t$:nextj:lo=len(ob$)
51680 ifleft$(ob$,1)="("andright$(ob$,1)=")"thenob$=mid$(ob$,2,len(ob$)-2):lo=lo-2
51690 ub$=""
51700 forj=i+1tol:t=j:gosub50170
51710 ub$=ub$+t$:nextj:lu=len(ub$)
51720 ifleft$(ub$,1)="("andright$(ub$,1)=")"thenub$=mid$(ub$,2,len(ub$)-2):lu=lu-2
51730 :
51740 rem ****************
51750 rem * potenzanzahl *
51760 rem ****************
51770 :
51780 z=0:wo=0:wu=0
51790 i=0:kl=0:z=z+1
51800 i=i+1
51810 ifz=1thent$=mid$(ob$,i,1)
51820 ifz=2thent$=mid$(ub$,i,1)
51830 ift$="^"then51870
51831 ifz=1andt$="%"thenwo=wo+2
51832 ifz=2andt$="%"thenwu=wu+2
51840 ifz=1andi<lothen51800
51850 ifz=2andi<luthen51800
51860 goto52000
51870 ifz=1thent$=mid$(ob$,i,1)
51880 ifz=2thent$=mid$(ub$,i,1)
51890 ift$="("thenkl=kl+1
51900 ift$=")"andkl=0then51800
51910 ift$=")"andkl>0thenkl=kl-1
51920 ift$="+"andkl=0then51800
51930 ift$="-"andkl=0then51800
51940 ift$="*"andkl=0then51800
51945 ift$="/"andkl=0then51800
51950 i=i+1
51960 ift$=""then52000
51970 ifz=1thenwo=wo+.5:ift$="^"thenwo=wo+.5
51980 ifz=2thenwu=wu+.5:ift$="^"thenwu=wu+.5
51990 goto51870
52000 ifz=1then51790
52030 iflo-wo+1.5<lu-wuthenob$=" "+ob$+" ":lo=lo+2:d=1:goto52030
52040 ifd=1thend=0:goto52060
52050 iflu-wu+1.5<lo-wothenub$=" "+ub$+" ":lu=lu+2:goto52050
52060 :
52070 rem *******************
52080 rem * zaehler drucken *
52090 rem *******************
52100 :
52110 m=0
52120 print#1,chr$(27);"e";
52130 ifub$<>""thenprint#4,chr$(27);chr$(106);chr$(22);:close3:open3,4,10,"7"
52140 o=1:z=1
52150 t=o:t$=mid$(ob$,t,1)
52160 ift$="^"thene=o:gosub52580:o=e:m=m+1
52170 ift$="%"thenq=o:gosub52910:o=q
52180 ifs=1thens=0:goto52200
52190 print#1,t$;
52200 o=o+1
52210 ifo<=lothen52150
52220 ifub$=""thenprint#1:print#4,chr$(27);chr$(106);chr$(21):close3:open3,4,10,"7"
52225 ifub$=""thenbb=bb-int(m-.5):goto51320
52230 :
52240 rem ***************
52250 rem * bruchstrich *
52260 rem ***************
52270 :
52280 close3:open3,4,9,"7"
52290 print#3
52300 iflo-wo<=lu-wuthenaa=lu-wu+.5
52310 iflo-wo>=lu-wuthenaa=lo-wo+.5
52320 fori=1toint(aa)
52330 print#3,"{SHIFT-*}";:nexti
52340 print#3
52350 close3:open3,4,10,"7"
52360 bb=bb+int(aa+1)
52370 :
52380 rem ******************
52390 rem * nenner drucken *
52400 rem ******************
52410 :
52420 u=1:z=2
52430 t=u:t$=mid$(ub$,t,1)
52440 ift$="^"thene=u:gosub52580:u=e
52450 ift$="%"thenq=u:gosub52910:u=q
52460 ifs=1thens=0:goto52480
52470 print#1,t$;
52480 u=u+1
52490 ifu<=luthen52430
52500 print#1
52510 print#4,chr$(27);chr$(106);chr$(40);
52520 goto51320
52530 :
52540 rem ******************
52550 rem * potenzausdruck *
52560 rem ******************
52570 :
52580 close3:open3,4,9,"7"
52590 print#1,chr$(27);"f";
52600 print#1,chr$(27);"s";chr$(0);chr$(15);
52610 e=e+1
52620 t=e
52630 ifz=1thent$=mid$(ob$,t,1):ao=ao+.5
52640 ifz=2thent$=mid$(ub$,t,1):au=au+.5
52645 ift$="%"thenq=e:pp=0:gosub52910:e=q:m=m+pp
52650 ift$="("thenek=ek+1
52660 ift$=")"andek=0then52810
52670 ift$=")"andek>0thenek=ek-1
52680 ift$="+"andek=0then52810
52690 ift$="-"andek=0then52810
52700 ift$="*"andek=0then52810
52705 ift$="/"andek=0then52810
52710 print#1,t$;
52720 ifww=1thenprint#4,chr$(27);chr$(106);chr$(3);:close3:open3,4,10,"7"
52730 ifww=1thenprint#1,chr$(8);
52740 ifww=1thenprint#1,"&";
52750 ifww=1thenprint#4,chr$(27);chr$(74);chr$(3);:close3:open3,4,9,"7"
52760 m=m+.5
52770 ifz=1ande=lothens=1:goto52810
52780 ifz=2ande=luthens=1:goto52810
52790 e=e+1
52800 goto52620
52810 print#4,chr$(27);chr$(84);chr$(18);
52820 ek=0
52830 print#1,chr$(27);"e";
52840 close3:open3,4,10,"7"
52850 return
52860 :
52870 rem ******************
52880 rem * wurzelausdruck *
52890 rem ******************
52900 :
52910 print#1,"%";:kl=1:q=q+1:ww=1:wm=0
52920 q=q+1
52930 t=q
52940 ifz=1thent$=mid$(ob$,t,1)
52950 ifz=2thent$=mid$(ub$,t,1)
52960 ift$="^"thene=q:gosub52580:q=e:wm=wm+1
52970 ifs=1thens=0:goto52920
52980 ift$="("thenkl=kl+1
52990 ift$=")"thenkl=kl-1
53000 ift$=")"andkl=0thens=1:goto53070
53010 print#1,t$;
53015 pp=pp+.5
53020 print#4,chr$(27);chr$(106);chr$(3);:close3:open3,4,10,"7"
53030 print#1,chr$(8);
53040 print#1,"&";
53050 print#4,chr$(27);chr$(74);chr$(3);:close3:open3,4,10,"7"
53060 goto52920
53070 ww=0
53080 m=m+wm+2
53090 return
53100 :
53110 rem ********
53120 rem * ende *
53130 rem ********
53140 :
53150 print#4,chr$(27);"@";:close1:close2:close3:close4
53160 open3,4,8,"12":close3
53170 return
Listing »Formeldruck«. Bitte beachten Sie die Eingabe- hinweise auf Seite 6.
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →