Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Ich brache Hilfe bei einem Programm, was ich haben muss mit C und C++.

Es soll ein Taschenrechner sein, der die Operatoren einliest und das Ergebnis dann wieder ausgibt.

Er muss aber auch als Besonderheit in Worten geschriebene Zahlen und Operatoren(+,-,* und /) erkennen und berechnen können.

Man soll zum Beispiel vierundvierzig - drei eingeben können, so dass er dann das richtige Ergebnis ausgibt.

Das alles mit +,-,* und /.

Er soll mit den Zahlen zwischen -10.000.000 bis 10.000.000 arbeiten können.

Es wäre sehr nett, wenn Ihr mir Hilfe bezüglich des Programmes in einer oder beiden C-Sprachen geben könntet oder mir ein fertiges Programm (ich benutze devC++ 4.9) per E-Mail an lennart-rademacher@web.de.

Vielen Dank im Vorraus.

Schönen Tag noch

Gruß Lennart

Geschrieben
für 250,- Euro isses deins. Bin heute großzügig, nutze die Chance!

Hast bei Deiner Kalkulation schon berücksichtigt, dass Zahlen und Operatoren ausgeschrieben werden dürfen? Ist doch eigentlich ein Sonderwunsch, oder? :D

Ich brache Hilfe bei einem Programm, was ich haben muss mit C und C++.

Wenn Du eine bestimmt Frage hast, werden ich oder andere Dir gerne helfen, soweit möglich, aber Dir das Programm schreiben wird vermutlich niemand. Da C++ praktisch C beinhaltet ist die Frage nach C und C++ auch nicht ganz klar.

Geschrieben

Hallo,

Ich brache Hilfe bei einem Programm, was ich haben muss mit C und C++.

D.h. Du solltest das Programm einmal in C und einmal in C++ implementieren?

Er muss aber auch als Besonderheit in Worten geschriebene Zahlen und Operatoren(+,-,* und /) erkennen und berechnen können.

Eine Taschenrechner-Implementierung in C/C++ ist nichts besonderes, dafür gibt es jede Menge Beispiele im Netz und die Grundrechenarten lassen sich auch problemlos selbst implementieren.

Wichtig ist nur, dass Du als erstes eine Parser für die natürlichsprachigen Zahlen implementierst. Nach dem Parsen und Umwandeln in ein maschinenlesbares Format kannst Du diese Zahlen dann in eine Standard-Implementierung des Taschenrechners schicken.

Nic

Geschrieben

Ich habe mal den ersten Quellcode:

#include <stdio.h>

#include <stdlib.h>

#include <conio.h>

int main(int argc, char *argv[])

{

int eingabe ;

float addrech, subrech, multrech, divrech;

while(1)

{

printf("--------Menue----------\n");

printf("1) Addieren(+)\n");

printf("2) Subtrahieren(-)\n");

printf("3) Multiplizieren(*)\n");

printf("4) Dividieren(/)\n");

printf("5) Beenden\n");

scanf("%d", &eingabe);

if(eingabe==1)

{printf("Bitte geben Sie die Rechnung ein:");

scanf("%f",&addrech);

printf("Das Ergebnis lautet:");

}

if(eingabe==2)

{printf("Bitte geben Sie die Rechnung ein:");

scanf("%f",&subrech);

printf("Das Ergebnis lautet:");

}

if(eingabe==3)

{printf("Bitte geben Sie die Rechnung ein:");

scanf("%f",&multrech);

printf("Das Ergebnis lautet:");

}

if(eingabe==4)

{printf("Bitte geben Sie die Rechnung ein:");

scanf("%f",&divrech);

printf("Das Ergebnis lautet:");

}

else if(eingabe==5)

printf("Das Programm wird beendet!");

break;

}

else

{

printf("Bitte geben Sie einen gueltigen Meneeintrag ein!");

}

}

getch();

system("PAUSE");

return 0;

}

Der läuft aber noch nicht, aber ich weiss nicht warum, ich habe den jetzt mit einer Schleife gemacht, was aber nicht unbedingt sein muss.

Vielleicht kann einer gucken wo der Fehler ist und mir Hilfe geben, bzw. korrigieren Quellcode zurückposten.

Außerdem weiss ich nicht ob er jetzt ausgeschriebene Zahlen auch bearbeitet...

Danke für eure Hilfe

Geschrieben
else if(eingabe==5)

printf("Das Programm wird beendet!");

break;

}

Du hast zwischen dem "else if" und dem "printf" eine Blockklammer vergessen.

Außerdem weiss ich nicht ob er jetzt ausgeschriebene Zahlen auch bearbeitet...

Er bearbeitet noch nicht mal richtige Zahlen, sondern liest nur eine einzige ein.

Du soltest jetzt erstmal den Code implementieren, der erstmal nur normale Zahlen (also keine ausgeschriebenen) bearbeitet. ;)

Geschrieben

Ist dir denn überhaupt klar, wie das Programm überhaupt funktionieren soll, von der Umsetzung in eine Programmiersprache mal ganz abgesehen?

Sollst du Regeln wie Punkt-vor-Strich berücksichtigen, oder einfach von links nach rechts abarbeiten? Sind Klammern erlaubt?

Geschrieben

Vom Prinzip her benötigst Du zuerst einen Parser, der Dir die Rechenaufgabe zerlegt und prinzipiell einen binären Baum aufbaut, mit dessen Hilfe Du die Aufgabe, unter Berücksichtigung von Punkt vor Strichrechnung, lösen kannst. Anstatt den Baum aufzubauen, kann direkt Rekursion zur Berechnung verwendet werden.

Als Eingabe bekommt der Parser eine Zeichenkette, die die Rechenaufgabe enthält, beispielsweise s0="1+2*3*4*7". Diese Zeichenkette musst Du zuerst an den Operatoren zerlegen. Dazu suchst Du zuerst von links nach Rechts die Operatoren für Strichoperationen (+ und -) und teilst an ihnen den Eingabestring in einen linken und rechten Anteil, jeweils ohne den Operator. Also aus s0 ergibt sich s1="1" und s2="2*3*4". Auf die Teilstrings wendest Du nun wieder rekursiv den Parser für Strichoperationen an, bis keine weiteren gefunden wurden. Sobald ein Teilstring keine Strichoperationen mehr enthält, wendest Du einen Parser an, der für Punktoperationen (* und /) analog vorgeht.

So bleibt s1 erhalten und aus s2 wird s3="2" und s4="3*4" gebildet. Aus s4 ergibt sich in der nächsten Rekursionsstufe s5="3" und s6="4". Nachdem keine Punktoperartionen mehr gefunden wurden bist Du mit der Rekursion zu ende und wandelst die Strings s2, s3, s5 und s6 in Integer oder Double Werte um und verknüpfst sie rückwärts anhand der jeweils gefundenen Operation. Aus s5 und s6 ergibt sich eine 12, die das Ergebnis der Teilaufgabe in s4 darstellt. Aus s4 und s3 ergibt sich eine 24, das Teilergebnis für s2. Aus s1 und s2 ergibst sich zum Schluss das Rechenergebnis 25, was der Aufgabe in s0 entspricht.

Zum Bearbeiten von in Worten geschrieben Aufgaben, baust Du Dir am besten einen Parser, der Wörter von Zahlen und Operationen erkennt und diese in "normale" Zahlen und Operatoren umwandelt. Also aus "zwei mal zwei" soll "2*2" werden.

Ich hoffe ich habe mich bei der Erklärung nicht irgendwo vertan, ich habe den Beitrag recht schnell getippt... Bitte um Nachsicht ;)

Geschrieben
Ich kriege das nicht hin , benötige es aber zu Dienstag, kann sich nicht einer durchringen und mir ein Programm schreiben, das wäre echt nett.

Ist echt wichtig.

Vielen Dank

Vielleicht haben wir auch echt wichtige Sachen zu tun?

Aber ich schließe mich carstenj an. Ich würde für EUR 250,- die Nacht durchackern, falls nötig.

Mal SPaß beiseite. Es ist nicht so, daß keiner helfen will. Du hast Dich für diesen Beruf Fachinformatiker entschieden und Du mußt ihn auch machen. Als Maurer kannst Du auch nicht mal eben im INet nachfragen, ob Dir jemand eine Erker mauern kann, weil Du noch nie was davon gehört hast.

Wenn Du allerdings Probleme hast, hilft Dir gerne jemand.

Geschrieben
Bildet ein Projekt-Team, erhöht die Forderung auf 400 EUR und alle sind zufrieden

Das nenn' ich einen konstruktiven Vorschlag *g*

da wird einfach mal davon ausgegangen, dass jeder ein komplettes Programm mal eben so runterschreiben kann und das auch noch in jeder Situation machen wird

Das erinnert mich an meine Mutter. Die hat sich mal gefragt, wieso man 3 Jahre "Computerisch" lernen müßte. Als sie mal hier war und gesehen hat, an was wir Azubis so arbeiten (und wir arbeiten wirklich, nicht wie die DTAG-Azubis), wurde ihr klar, daß wir zu wenig Zeit haben.

Aber das ist alles ein allgemeines großes Problem auf das man immer wieder stößt. Man denke nur an die vielen Leute, die sich nicht intensiv mit Rechnern beschäftigen und "nur mal eben" einen Text am Rechner schreiben wollen. Was in Programmen alles steckt, damit man "nur mal eben" was tun kann, ist gewaltig. Genauso wie die Leistung des Maurers, der "nur mal eben" einen Erker bastelt. Da wären wir auch wieder bei den Kunden, die alles in kürzester Zeit verlangen.

Aber ich merk' schon, ich werd' wieder philosophisch.

@carstenj: Ganz Deiner Meinung.

Geschrieben
Man denke nur an die vielen Leute, die sich nicht intensiv mit Rechnern beschäftigen und "nur mal eben" einen Text am Rechner schreiben wollen. Was in Programmen alles steckt, damit man "nur mal eben" was tun kann, ist gewaltig.
Richtig!

Darum bastel ich auch keine Programme, sondern entwickle sie. Basteln können viele, aber so sieht dann das Ergebnis hinterher auch aus. Und ich bin mal gespannt, wann es sich bis in die Chefetagen durchspricht, dass ein Programm, was in wenigen Tagen gebastelt worden ist zwar auf den ersten Blick billig erscheint, aber auf den zweiten Blick dann plötzlich tierische Folgekosten nach sich zieht, weil die Wartung (und irgendwann auch vielleicht mal eine Erweiterung) wegen mangelhafter (oder komplett fehlender) Strukturierung das 5fache der Zeit benötigt, die ein von Anfang an vernünftig enwickeltes Programm brauchen würde.

Genauso wie die Leistung des Maurers, der "nur mal eben" einen Erker bastelt. Da wären wir auch wieder bei den Kunden, die alles in kürzester Zeit verlangen.
Das liegt aber auch an der Art, wie Software dem Kunden verkauft wird.

Ich glaube nicht, dass ein Kunde, dem du erklärst "Ja, Sie sehen zwar schon die Oberfläche, aber im Hintergrund fehlt ja noch die komplette Anbindung an XYZ" sich gegen einen längeren Zeitraum sträuben wird.

Das Problem ist, dass man im Marketing gerne selber davon ausgeht "Oberfläche steht, also ist das Produkt fertig". Bei einem Maurer ist das einfacher, da ist die Arbeit halt zuende, wenn die Mauer steht - da gibt's einen relativ einfachen Weg zu sagen "fertig/nicht fertig".

Aber ich merk' schon, ich werd' wieder philosophisch.
Man muss sich auchmal aufregen dürfen :)
Geschrieben

Jetzt ab bitte zurück zum Thema.

@lennart-rademacher: Wenn du konkrete Fragen hast, raus damit. Du hast gemerkt, eine Komplettlösung wirst du hier nicht umsonst bekommen.

@alle anderen: Diskussionen über Softwareentwicklung bitte im DT führen ;)

  • 1 Jahr später...
Geschrieben

hallo,

habe den thread nur überflogen, daher gefahr, dass ich OT bin; die meisten posts hier im thread scheinen das aber auch zu sein.

hier vielleicht ein initialer hinweis: einen rechner mit den grundrechenarten kann man relativ einfach durch 2 stacks implementieren. ein stack für operanden und einer für operatoren. man kann, wenn man UPN verwendet, auch mit einem stack auskommen. google einfach mal mit den o.g. stichwörtern, um eine detailiertere erklärung zu finden.

grüsse

Geschrieben
habe den thread nur überflogen, daher gefahr, dass ich OT bin;

Du bist nicht unbedingt OT, aber dafür mehr als ein wenig spät. Ich glaube nicht, dass der Threadersteller 18 Monate nach dem Abgabetermin damit noch viel anfangen kann.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...