Definitionen, Funktionen und Operatoren unter Profan²

Viele angehende Programmierer fragen immer wieder, warum man nicht in Profan² einfach 1 + 1 rechnen kann. Diese Schreibweise versteht selbst der billigste Taschenrechner und BASIC kann das ja auch. Um diese Frage richtig beantworten zu können, sollte man das Grundprinzip von Profan² kennen.

Es beruht ganz allgemein darauf, daß alles was Sie ausdrücken wollen, immer in klare, logische Funktionen umgesetzt werden muß. - ein Vorteil, wie Sie selber noch feststellen werden, der nicht von der Hand zu weisen ist.

Es muß aber auch gesagt werden, daß weiterentwickelte Versionen von Profan² auch 1 + 1 rechnen können. Jedoch ist das nicht Gegenstand dieses Forums und in den Hilfen der entsprechenden Versionen zu Profan² hinreichend erklärt.

Jeder kennt Funktionen aus der Schule und die einfachste könnte da lauten: x = a + b und in diese könnte ich die spezielle Aufgabe 1 + 1 einordnen. Nur ist das in diesem Fall ein sehr einfaches Beispiel.

Der Autor hat u.a. diese Funktion für den Programmierer bereits definiert und ihr den Namen @ADD gegeben. Sie als Programmierer brauchen sich also keine Gedanken mehr darüber zu machen, wie zwei Zahlen miteinander zu addieren sind - Sie können sich um Wichtigeres kümmern. Sie benutzen nur noch die Funktion @ADD und haben auch schon das Ergebnis.

   PRINT @ADD(1,1)    
   WAITINPUT 

Alle vom Autor bereits vordefinierten Funktionen werden in der Hilfe und Referenz zu Profan² ausführlich beschrieben. Sie brauchen sich also nur noch die benötigten Funktionen heraussuchen und einsetzen. Das ist zugegebener Maßen am Anfang etwas mühsam. Aber sehr schnell werden Sie sich die wichtigsten Funktionen eingeprägt haben, da der Autor hier versucht hat, möglichst sinnverwandte Abkürzungen zu benutzen. So steht z.B. für Subtraktion @SUB, für Division @DIV, für MulTipplikation @MUL ...

Natürlich ist es unmöglich, alle Funktionen und Varianten zu erfassen. Daher hat sich der Autor von Profan² hier in die Karten sehen lassen und die Möglichkeit angeboten, daß Sie sich benötigte Funktionen selber auf einfache Art definieren können.

Daß solche Definitionen an den Anfang eines Programmes gehören, versteht sich sicher von selbst. Ich möchte hier nur im folgenden an einem Beispiel kurz darstellen, wie eine Funktion definiert und benutzt werden muß. Als Aufgabe soll dabei das Beispiel aus der Hilfe zu Profan² "Funktion zur Errechnung der dritten Potenz einer Zahl" dienen.

Zunächst machen wir uns die Aufgabe einmal klar, oder besser, stellen wir uns die Frage: Wie ist die dritte Potenz einer beliebigen Zahl zu ermitteln?

Möglich wären hier zunächst diese zwei Wege:  X = Y * Y * Y  oder  X = Y² * Y

   PRINT @MUL(@MUL(Y%,Y%),Y%)    
   WAITINPUT 
   PRINT MUL(@SQU(Y%),Y%)    
   WAITINPUT 

Den zweiten Lösungsweg zu benutzen erscheint sinnvoller, da er bereits eine vordefinierte Funktion (Y² -> @SQU) enthält und somit hier ein Teil mathematischen Quelltextes entfällt.

Eine Definition wird mit dem Befehlswort DEF eingeleitet, gefolgt vom Name der Funktion. Nach dem Namen folgt in Klammern die Anzahl der Parameter, also die Anzahl, mit wieviel verschiedenen Werten in der Funktion gerechnet (wieviel verschiedene Werte von der Funktion benutzt) werden sollen. In unserem Beispiel, ganz klar, ist es nur Y%, also nur ein Wert.

   DEF @POT3(1) 
   DEF @POT3(1) 

Jetzt bräuchten wir eigentlich nur noch den mathematischen Ausdruck anzufügen, der die Funktion (der dritten Potenz einer Zahl) beschreibt, also z.B:  MUL ( @SQU ( 1. Wert), 1. Wert) .

Der Einfachheit wegen wird anstatt "1. Wert" einfach nur eine "1" geschrieben, und damit das Programm auch weiß, um welche Art von Wert (Variable) es sich handelt, mit der gerechnet werden soll, stellen wir dieser Angabe das Postfix voran: "@!". Das Postfix "!" steht hier, damit wir ein möglichst genaues Rechenergebnis (bis 15 Stellen nach dem Komma) erzielen.

   DEF @POT3(1) @MUL(@MUL(@!(1)),@!(1)),@!(1)) 
   DEF @POT3(1) @MUL(@SQU(@!(1)),@!(1)) 

Mit der so erstellten Definition können wir nun wie gewohnt arbeiten:

   DECLARE Y%    
   DEF @POT3(1) @MUL(@SQU(@!(1)),@!(1))     
   PRINT @POT3(Y%)    
   WAITINPUT 

Wenden wir das eben gesagt auf das zweite Beispiel in der Hilfe zu Profan² einmal konsequent an. Hier bestand die Aufgabe darin, "die ersten X Zeichen eines Strings" (String -> Zeichenkette) zu ermitteln.

Zunächst machen wir uns die Aufgabe wieder klar, oder eben besser, stellen wir uns die Frage:
Wie ermittle ich die ersten X Zeichen eines Strings?

Um eine bestimmte Anzahl von Zeichen aus einer Zeichenkette auszulesen, hat der Autor von Profan² bereits eine Funktion zur Verfügung gestellt: @MID$(S,N1,N2)

Sie ermittelt uns einen String, der N2 Zeichen ab Position N1 aus dem String S enthält, also für unsere Aufgabe z.B.:

   DECLARE A$   
   LET A$="lidos berlin"     
   PRINT @MID$(A$,1,5)    
   WAITINPUT 

Mit Hilfe der zu erstellenden Funktion läßt sich das Ganze doch um einen Parameter vereinfachen, da ein Parameter eigentlich eine Konstante ist und wir hier nur zwei Parameter übergeben brauchen. Dementsprechend könnten wir sagen:

   DEF @LETF$(2) @MID$(1. Wert, 1 , 2. Wert) 

Vereinfachen wir jetzt und setzen die Postfixe entsprechend ein, für den ersten zu übergebenden Wert einen String, für den 2. zu übergebenden Wert ein Integer. Die Zahl "1" an zweiter Stelle ist kein zu übergebender Wert, sie ist ja die Konstante.

   DEF @LETF$(2) @MID$(@$(1), 1 ,@%(2))    
   DECLARE A$     
   LET A$="lidos berlin"     
   PRINT @LETF$(A$,5)    
   WAITINPUT 



 

Beachten Sie folgenden Hinweis:

Schreib- und Tippfehler bleiben nicht aus und so ist das Beispiel in der Hilfe zu Profan² "die ersten n Zeichen eines Strings ermitteln" falsch oder besser gesagt: Es ist unvollständig und verursacht daher einen Fehler. Es wurde die Konstante (eine 1) einfach nur vergessen.

In Ihrer Arbeit als Programmierer werden Ihnen mit absoluter Sicherheit solche Fehler auch unterlaufen! Und Sie werden fluchen und schimpfen ... und dunkle Ringe unter Ihre Augen bekommen.

Erleichtert atmen Sie nach Stunden oder Tagen auf, klatschen sich an die Stirn und sagen: "'ne 1 vergessen!"

 
 
 
Copyright © 2010 Juniors-Workstation. Alle Rechte vorbehalten.
Joomla! ist freie, unter der GNU/GPL-Lizenz veröffentlichte Software.
 
 
     
 
   
Design by windows vista forum and energiesparlampen