Rechenfunktion

Patematthes

Mitglied

Schönen guten Tag ich habe seit einer Woche einen C Lehrgang auf der Arbeit. Ich habe mir als Asbchlussprojekt vorgenommen einen kleinen Taschenrechner zu bauen, dieser soll alle eingaben in einer Zeile ausrechnen können wie z.b. + - * /
Ich hatte schon einen Denkansatz aber dieser scheint nicht richtig zu sein, ich hoffe mir kann jemand einen denkanstoss geben.

Ein Beispiel wäre:

Zeileneingabe: 2+2*3
Ausgabe(printf) 8

So sah mein ansatz aus:

Code:
else
{
printf("\nBitte geben sie maximal %i Zeichen ein.",ZEILENLAENGE);
printf("\nEs werde folgende Zeichen akzeptiert:");
printf("\n\n + ");
printf("\n\n - ");
printf("\n\n * ");
printf("\n\n / ");
printf("\n\n ( ");
printf("\n\n ) ");
for (i=1;i<=5;i++)		 //schleife für den Bildschirm
{			 //schleifen klammer (auf)
printf("\n");
} 
printf("\n\nWenn sie die Rechnung eingegeben haben schreiben sie nach dem Enter dr%ccken",129);
printf("\nin der n%cchsten Zeile bitte einen . zum beenden",132);
do
{
printf("\n=");
gets(s);
if(strcmp(s,"."))
{
fputs(s,rechnen);
fputs("\n",rechnen);
}
}
while(strcmp(s,"."));
fclose(rechnen);
printf("Eingabe erfolgreich");
}
}
 
void lesen (void)
{
FILE*rechnen;
rechnen=fopen(DATEI,"r");
{
if(!rechnen)
{
printf("Datei ist nicht vorhanden!\n\n");
}
else
{
fgets(s,ZEILENLAENGE,rechnen);
if(feof(rechnen))
{
do
{
	erg=s;
	printf("\nDas ergebniss lautet: %.2lf",erg);
}
while(feof(rechnen));
}
fclose(rechnen);
printf("\nEnde der Rechnung!");
}
}
}

Ich danke schon mal im vorraus.
 
Zuletzt bearbeitet:
moin


Mir ist keine Standartfunktion bekannt die so etwas automatisch macht.
Also bleibt dir nchts übrig als im internet nacht einer Bibliothek zu suchen mit der man sowas machen kann, oder du musst deiner String selber parsen, dann erst bestimmte Schritte ausrechnen ( Punkt vor Strich ) und dann den Rest.

Vielleicht wäre es auch Sinvoll schon bei der Eingabe des Therms, Zahlen und Operatoren getrennt einzulesen.


mfg
umbrasaxum
 
Hi,
ich würde auch von Klammern abraten.Vor allem, wenn man gerade erst mit C begonnen hat.
Es ist nicht so einfach, einen geklammerten Ausdruck zu parsen.

Mfg
 
Ob man Klammern zuläßt oder nicht erübrigt sich eigentlich,
weil Punkt-vor-Strich in sich schon eine Klammer ist.

D.h. wenn man vor dem Parsen erstmal überall Klammern setzt,
wo sie hinkommen könnten (auch um die Punkt-vor-Strich-Fälle ),
dann erspart man sich Punkt-vor-Strich bei der eigentlichen Rechnung.

Diese sollte dann natürlich rekursiv sein, jede weitere Klammerungsebene
bedeutet Rekursion.

Ich hab das, wie von mir beschrieben, mal für Bool'sche Algebra gelöst,
mit Klammern ist es definitv einfacher...

Greets
BadMourning
 
Ob man Klammern zuläßt oder nicht erübrigt sich eigentlich,weil Punkt-vor-Strich in sich schon eine Klammer ist.

Das ist mir schon klar.

Ob der String nun vollständig geklammert ist, oder die Klammern nur Zusammenfassen, ändert nichts an der Tatsache, dass das nicht leicht ist für einen C-Anfänger.
Oder siehst Du das anders?
Ich jedenfalls bräuchte schon ne Weile um mir einen geeigneten Algorithmus zu überlegen. ;)


Mfg
 
Zuletzt bearbeitet:
@colblake:

...ändert nichts an der Tatsache, dass das nicht leicht ist für einen C-Anfänger.

Klar geb ich dir recht, in der Hinsicht wollt ich dir nicht widersprechen.

Ich hab halt in meiner Laufbahn erkannt: Man wächst mit seinen Herausforderungen.
Ein bißchen Hilfestellung kann somit nicht schaden. Nichts für ungut.

BadMourning
 
Zurück