Das erste Programm soll den Benutzer begrüßen.
$ = "Guten Tag!"Das Ganze ist eine
Das nächste Programm soll einen Kreis berechnen.
d = 2; Umfang = d * 3.14; $ = 'Der Umfang ist ' + Umfang;
Das ganze Programm besteht hier aus einer Sequenz von 3
Am Anfang war der Term. Einen Term zu verstehen und auszuwerten war das erste, was Recapis lernen musste. Ein Term ist u.a. eine Zahl oder eine Operation. Eine Zahl wird als Dezimalzifferstring notiert z.B. "123". Operationen sind u.a. Binär- und Monäroperationen in Infix- Präfixnotation, wie z.B. die Grundrechenarten, Potenzieren, Radizieren, Logarithmieren und trigonometrische Funktionen. "wurzel (3**2+4**2)" wird z.B. zu 5 ausgewertet.
Eine Variable wird als Zeichenkette notiert, die aus Buchstaben, Ziffern und
Unterstrichen besteht kann. Das erste Zeichen muss ein Buchstabe oder ein Unterstrich sein.
Beispiel: "abc_1" ist eine Variable. (Die Anführungsstriche gehören nicht dazu.)
Die Variable kann als Ziel einer Zuweisung einen Wert erhalten
oder auch in einem Term einen Wert liefern.
Dazu werden die Definitionen von Term und Operation erweitert:
ein Term ist u.a. eine Zahl, eine Variable oder eine Operation.
Eine Operation nimmt als Operanden einen Term.
Eine weitere Operation ist die Zuweisung,
die wie folgt definiert wird:
Wertempfänger Zuweisungsoperator Wertlieferant
Variable = Term
Nach
"a = sin PI/2"
hat die Variable a den Wert 1.
Eine Aufgabe wird in Anweisungen (Arbeitsschritte) aufgeteilt, die nacheinander ausgeführt werden sollen. Die Abfolge dieser Anweisungen ergibt ein Programm. Beispiel: a=3;b=4; // Initialisierungen a_2 = a**2; b_2 = b**2; c = wurzel ( // Hypothenuse berechnen! a_2 + b_2 ); Die einzelnen Anweisungen müssen mit Semikolon abgeschlossen werden. Nach '//' kann der Zeilenrest einen Kommentar enthalten. Leerzeichen und Zeilenschaltung können nach Belieben und Leserlichkeit verwendet werden.
Bislang ab es lediglich den Datentyp Zahl. Neben dem Inhalt (dem Wert) hat die Variable noch die weitere Eigenschaft Datentyp. Beim Datentyp Zahl wird u.a. unterschieden zwischen Ganzzahlen und Floatzahlen.
g = 314; // g hat den Datentyp Ganzzahl f= 3.14; // f hat den Datentyp Floatzahl
Es wird ein weiter Datentyp Vektor (Array, Feld) eingeführt, der wie folgt allokiert und in einer Variablen abgelegt wird.
iv Ivector 3; // wenn Rechtsargument genau eine Ganzzahl --> Vektorlänge gemeint fv Fvector (3.14,6.28); sv Svector ("ab","xyz"); // wenn argument liste --> allok + init gemeintDas i-te Elemente kann mit arr[i] referenziert werden (sowohl als Zuweisungsquelle denn auch als Zuweisungsziel). Die Elemente werden mit 0 beginnend adressiert.. Nach
arr Ivector 3; arr[0]=12; arr[2]=arr[0]; $=arr[2]; // gibt 12 aus delete arr; // danach ist arr unbekannt
Die Funktion split, die einen String bei einem definierten Zeichen in mehrere Teilstrings zerlegt, benötigt eine Variable vom Typ Stringvector, in der diese Teilstrings abgelegt werden sollen.
sv Svector 2; sv split(' ','ab xy'); // zerlegt bei blank $=sv[1]; // gibt xy aus
Die Funktion agetfile liest eine Datei 'fn' ein und legt die Zeilen in einem Stringvector sv ab.
'a\nb\n' putfile 'fn'; // erstellt Datei 'fn' mit 2 Zeilen sv agetfile 'fn'; // erstellt Stringvector sv mit 2 Elementen $=sv[1]; // gibt 'b' (die 2. Zeile) ausDie Schreibweise (Vektor links von der Funktion) lehnt sich an die objektorientierte Programmierung an, in der man nach entsprechener Deklaration der Klasse
vector <string> *sv = new vector<string>; sv.agetfile('fn');notieren würde. Recapis-typisch kann (aber muss nicht) die Definition des stringvektors entfallen.
for (init;bedingung;inkrement) // Schleifenkopf {Schleifenrumpf} if (Bedingung) {if-Zweig} else {else-Zweig}
Beispiel: Es soll die Summe aller Zahlen von 1 bis 100 berechnetwerden.
sum = 0; for (i=1;i\lt;=100;i++) sum += i; $ = 'Die Summe ist ' + sum;
Die
int sum = 0; for (int i=1;i<=;;i++) sum += i;
function up(a) return a+2; $=up (10); // gibt 12 aus
Eine Operation kann 0, 1 oder 2 Operanden haben. o // keine Operanden Larg o // Präfixnotation o Rarg // Postfixnotation Larg o Rarg // Infixnotation Die Operanden können Konstante, Variable oder wertliefernde Operationen sein. einfacher Ausdruck mit nur einem Operator und zwei (Infixnotation) einem (Präfix oder Postfixnotation) oder keinem Argument sind Operator und evtl. Argumente eindeutig. Wenn ein ungeklammerter Ausdruck zwei oder mehr Operatoren enthält, muss
In "a+b*c" kann die Klamerung weggelassen werden, wenn a+(b*c) gemeint ist (Punkt- vor Strichrechnung). Operatoren haben einen Rang, der die Klammerersparnis regelt.Datentyp Text
t = 'abc'; $ = roem 'XIV'+2; // gibt 16 aus $ = 'roem 16 = ' + roem 16; // gibt 'roem 16 = XVI' ausEinzelne Zeichen einer Textvariablen können per Indexierung angesprochen werden.
t = 'abc'; t[0] = char (char t[0] + 32); $ = t; // Abc