"Einstein Calculator-machine" script help for me ?

Realsoft 3D Discussion forum moderated by Vesa Meskanen, Realsoft OY

Moderator: vesamesk

"Einstein Calculator-machine" script help for me ?

Postby Frankolino » Wednesday 29. November 2006, 12:16

Dear realsoft user, a short interruption from my criminal novel working ;-) Last week I have found an C++ example for a "calculator" machine, I would like to transform it to realsoft for a java script example. I know there is a little new "calculator" js in version 5.1 sp3 ;-), but I like the whole calculator, you can type in and push buttons to get the result. Perhaps somebody has more experience and can help. If does not, it doesn't matter :-) I send here the code structure of the "taschenrechner" (calculator) example here :-)

thank you for helping, see you, a little picture of my first try I send it with this post. best regards from raining germany, Frankolino

-------------------------------------------- example calculator
/* Taschenr.cpp Taschenrechner */ (calculator machine)
#include <stdio>#include <math>
#define MAX 100
void anleitung()
{
printf("\n\t Taschenrechner \n\n");

printf("Der Taschenrechner unterstuetzt:\n");
printf("\n");
printf(" () geklammerte Ausdruecke\n");
printf(" + Addition\n");
printf(" - Subtraktion\n");
printf(" * Multiplikation\n");
printf(" / Division\n");
printf(" ^ Potenzierung\n");
printf(" s() Sinus\n");
printf("\n");
printf("\t z.B.: (s(1.1^4)-2)/(-4+2*s(1))\n");

printf("\n");
printf("Leerzeichen sind nicht erlaubt\n");<BR> printf("Aufeinanderfolg. Operatoren werden durch 0 "
" getrennt!\n");
printf("Ende durch Eingabe von 0 oder )\n\n");
}

char s[MAX]; // der eingegebene Ausdruck, der ausgewertet wird
int i; // s[i] ist das Zeichen, das akt. bearbeitet wird
float expr(); // Vorwaertsdeklaration

// wandelt eine Ziffernfolge in eine Zahl um.
// statt sprintf() zu verwenden, werden die Zahlen
// Stelle fuer Stelle aufgebaut.
float zahl(float q, float c)
{
// c=0 => noch kein '.' eingelesen
// c=(0.1)^n => n-te Nachkommastelle
if(c==0)
q=10*q+s[i]-48;
else
q=q+c*(s[i]-48);
if( (s[i+1]>47) && (s[i+1]<58) ) // s[i+1] ist Ziff er
if (c==0)
{
i++;
q=zahl(q,0);
}
else
{
i++;
q=zahl(q,c/10);
}
if (s[i+1]=='.')
{
i+=2;
q=zahl(q,0.1);
}
return q;
}
// s_expr() wertet einen Ausdruck aus der
//
// subtrahiert (c=0)
// multipliziert/dividiert (c=1)
// potenziert (c=2 ) werden soll
//
// der Parameter c gibt die Prioritaet an
float s_expr(int c)
{
float q=0;
// Punkt- vor Strichrechnung
while( s[i]!=')' && s[i]!='\0' && s[i]!='+' && s[i]!='-'
&& (c<1 || s[i]!='*') && (c<1 || s[i]!='/')
&& (c<2>47 && s[i]<58)
q=zahl(0,0);
switch (s[i])
{
case '(': i++;
q=expr();
break;
case '*': if(c<1)
{
i++;
q*=s_expr(1);
}
break;
case '/': if(c<1)
{
i++;
q/=s_expr(1);
}
&nb sp; break;
case '^': if(c<2> in Zahl umwandeln
if(s[i]>47 && s[i]<58)
q=zahl(0,0);
// s[i] Rechenzeichen/Symbol
switch (s[i])
{
case '(': i++; q =expr(); break;
case '+': i++; q+=expr();i--; break;
case '-': i++; q-=s_ex pr(0); break;
case '*': i++; q*=s_expr(1); break;
case '/': i++; q/=s_expr(1); break;
case '^': i++; q =exp(log(q)*s_expr(2)); break;
case 's': i+=2; q =sin(expr()); break;
}
i++;
}
return q;
}
int main()
{
anleitung();
do
{
// Eingabeband leeren
for(i=0; i<MAX; i++)
s[i]=' ';
; file://Eingabe des Ausdrucks
printf("\n Ihre Eingabe :\n\n\t");

scanf("%s",&s);
i=0; // Auswertung beginnt mit dem ersten Zeichen
// Auswertung und Ausgabe
printf("\n\tErgebnis: %f\n",expr());
} while(s[0]!=')' && s[0]!='0');
return 0;
}
------------------------------------------------------------------------------------- example ending
Attachments
einstein-kalkulator1a-kleiner.jpg
einstein-kalkulator1a-kleiner.jpg (42.71 KiB) Viewed 1352 times
User avatar
Frankolino
 
Posts: 178
Joined: Friday 24. September 2004, 12:10

Return to General Discussion

Who is online

Users browsing this forum: No registered users and 1 guest

cron