[C++] Taschenrechner programmieren

unerfahren

Cadet 1st Year
Registriert
Sep. 2006
Beiträge
11
Hallo, ich möchte einen einfachen Taschenrechner Programmieren. Er soll 2 Werte vond er Tastatur einlesen und das Ergebnis einer Rechenoperation auf dem Bildschirm ausgeben. Als Rechenoperation sollen Addition, Subtraktion, Division und Multiplikation möglich sein. Die Rechenoperationen sollen als eigene Funktion erstellt werden. :

Soweit bin ich schon, aber ich möchte das er mir nur das eineErgebnis ausgibt und nicht alle.

#include "stdafx.h"

using namespace System;

Int32 addition(Int32 x, Int32 y){
return (x+y);
}
Int32 subtraktion(Int32 x, Int32 y){
return (x-y);
}
Int32 division(Int32 x, Int32 y){
return (x/y);
}
Int32 multiplikation(Int32 x, Int32 y){
return (y*y);
}

int main(array<System::String ^> ^args)
{
Int32 zahl1, zahl2;
Char eingabe;

Console::Write("Geben Sie bitte eine Zahl ein.");
zahl1=Convert::ToInt32(Console::ReadLine());

Console::Write("Geben Sie bitte die Rechenoperation ein.");
eingabe=Convert::ToChar(Console::ReadLine());

Console::Write("Geben Sie bitte die nächste Zahl ein.");
zahl2=Convert::ToInt32(Console::ReadLine());

Console::WriteLine("Die Summe beider Zahlen ist {0} + {1} ergibt = {2}", zahl1, zahl2, zahl1 + zahl2);
Console::WriteLine("Die Summe beider zahlen ist {0} - {1} ergibt = {2}", zahl1,zahl2, zahl1 - zahl2);
Console::WriteLine("Die Summe beider zahlen ist {0} / {1} ergibt = {2}", zahl1, zahl2, zahl1 / zahl2);
Console::WriteLine("Die Summe beider zahlen ist {0} * {1} ergibt = {2}", zahl1,zahl2,zahl1 * zahl2);

return 0;
}


Wer kann mir da weiter helfen?? Ich schreibe mit dem Programm Visual C++ 2005 Express Edition. Wer mir helfen kann, könnt Ihr es mir auch ein wenig kommentieren??? Das auch ich das verstehe???

Ich danke euch jetzt schon für Eure Hilfe. Und wer kann welches Buch empfehlen, das ich euch nicht immer fragen muß???? :

LG
unerfahren
 
da switch nur zählbare datentypen verarbeiten kann und Char aller wahrscheinlichkeit nach eine klasse ist, ist es am einfachsten if-abfragen zu bauen:
if (eingabe=='+')
Console::WriteLine("Die Summe beider Zahlen ist {0} + {1} ergibt = {2}", zahl1, zahl2, zahl1 + zahl2);
if (eingabe=='-')
usw.

eleganter wäre es sicher, wenn du den Char erst in einem char konvertierst, dann kannst du auch ein switch benutzen.
das sieht dann so aus:
switch (eingabe_als_char)
{
case '+':
Console::WriteLine("Die Summe beider Zahlen ist {0} + {1} ergibt = {2}", zahl1, zahl2, zahl1 + zahl2);
break;

case '-':
usw.
}
 
He he ich danke dir vielmals, nun klappt es und sieht auch klasse aus. Noch eine Frage kannst du mir ein Buch empfehlen, was gut für diese Sprache ist???

LG
unerfahren

ghorst schrieb:
da switch nur zählbare datentypen verarbeiten kann und Char aller wahrscheinlichkeit nach eine klasse ist, ist es am einfachsten if-abfragen zu bauen:
if (eingabe=='+')
Console::WriteLine("Die Summe beider Zahlen ist {0} + {1} ergibt = {2}", zahl1, zahl2, zahl1 + zahl2);
if (eingabe=='-')
usw.

eleganter wäre es sicher, wenn du den Char erst in einem char konvertierst, dann kannst du auch ein switch benutzen.
das sieht dann so aus:
switch (eingabe_als_char)
{
case '+':
Console::WriteLine("Die Summe beider Zahlen ist {0} + {1} ergibt = {2}", zahl1, zahl2, zahl1 + zahl2);
break;

case '-':
usw.
}
 
wenn du schon programmieren kannst: bjarne stroustrup "die c++ programmiersprache". das ist aber als einstiegsbuch mehr als ungeeignet. ;-)
einsteigerbüche kenne ich leider für c++ keine guten. (was aber nicht daran liegt, dass es keine gibt, sondern daran dass ich nie eines gebraucht hatte, da ich von pascal und c zu c++ kam.)
 
Woher hast du eigentlich diesen Code?

Kann Visual C++ 2005 kein ordentliches C++ oder was ist das da alles? Warum wird das ganze nicht über normale ints und chars und cout und cin gelöst??

Gibt es dafür einen Grund, oder sollten wir besser von Anfang an klarstellen, dass der gepostete Code schrecklich aussieht?
 
ja, das sieht sehr nach C# .net aus c++ist das jedenfalls nicht
 
Nunja... Bis auf die ^-Zeichen, hätte ich das alles für eine Microsoft Abwandlung von C++ gehalten. Zumindest hatte ich es mir vorstellen können.
Aber vermutlich hast du recht dass es kein C++ ist...
 
Könnte auch Managed C++ / CLI sein. Hab ich aber noch nie was mit gemacht, nur mal die Spec überflogen.
 
@7H3 N4C3 jetzt wo du es sagst. es scheint wirklich managed c++ zu sein. ich hatte den code nur kurz überflogen und ihn als c++ einsortiert.
@kampfgnom an dem stil anderer leute oder ihrem system rumzunörgeln habe ich inzwischen aufgegeben und es daher einfach als eine ms-abart von c++ einsortiert.
 
was ist denn bitte managed c++ ?!
kennt int32 nur von den .net sprachen
 
Ich finds schrecklich... Und allen Anfänger, die das hier lesen, rate ich lieber "normales" standard C++ zu programmieren...
 
Ich würde einfach mal behaupten so muss das aussehen ;)
Das andere ist doch kein C++ sondern Visual Basic oder?

Code:
#include <cstdlib>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
   double zahl_1;
   double zahl_2;
   int a;
   cout<<"Zahl1: ";
   cin>>zahl_1;
   cout<<"Zahl2: ";
   cin>>zahl_2;
   cout<<"Operatation (1 = +, 2 = -, 3 = *, 4 = /)";
   cin>>a;
   switch(a)
   {
   case 1:
      cout<<zahl_1+zahl_2<<endl;
      break;
   case 2:
      cout<<zahl_1-zahl_2<<endl;
      break;
   case 3:
      cout<<zahl_1*zahl_2<<endl;
      break;
   case 4:
      cout<<zahl_1/zahl_2<<endl;
      break;
   };
    system("PAUSE");
    return EXIT_SUCCESS;
}

Edit:
Hab ausversehen "Code" mit "Php" vertauscht.
Nur gegen allgemeine verwirrung.
 
Zuletzt bearbeitet:
wenn schon versuchst schönes standard-c++ zu schreiben:
1. benutze die namespaces nicht mittels using namespace. das sorgt meist nur für schlechter lesbaren code. die tipperei für "std::" wird dich auch nicht umbringen.
2. das "system("PAUSE");" macht man nicht, da es nicht portabel ist. PAUSE funktioniert einzig und allein unter windows, da es dem befehl pause.exe aufruf. das ist so gesehen gleich doppelt böse, da es zum einen die groß- und kleinschreibung missachtet, die windows bei ausführbaren datein aber nicht interessiert und weil es halt an windows gebunden ist.
3. "return EXIT_SUCCESS;" EXIT_SUCCESS ist teil des c standards und sollte in c++, genau wie der rest der c-libs nicht genutzt werden.

wenn hier jemand managed-c++ schreiben will, so soll er das tun und nicht erklärt bekommen, dass c++ schöner ist...

btw. die variante für die operationen zahlen-eingaben zu verlangen ist hässlich und wiederspricht der intuition. du kannst den spaß auch mit einer switch-abfrage für char machen.
also:
char a;
switch(a)
{
case '+':
cout<<zahl_1+zahl_2<<endl;
break;
case '-':
cout<<zahl_1-zahl_2<<endl;
break;
case '*':
cout<<zahl_1*zahl_2<<endl;
break;
case '/':
cout<<zahl_1/zahl_2<<endl;
break;
};
und man sollte immer ein default einbauen und den user darauf hinweise, dass etwas schief ging.
 
Huhu,

der Threadersteller hat exakt die selbe Frage wie ich:)
Nur mit einem kleinen Unterschied.

Erstmal der Code den ich mit if-Verzweigungen
geschrieben habe.

Mein Problem ist:
Wie kann ich es erreichen dass das Ergebnis der Zeile(n):

Console::WriteLine("{0} + {1} = {2}", zahl1, zahl2, zahl1 + zahl2);
Console::WriteLine("{0} + {1} = {2}", zahl1, zahl2, zahl1 - zahl2);
etc

als Funktion schreiben?

Sozusagen sollte unter

"if (eingabe=='+')"
der Funktions name stehen.

Und oberhalb der main Funktion die eigendliche Funktion.

Wie das:
Int32 addition(Int32 x, Int32 y)
{
return (x+y);
}

Nur dass das Ergebniss da stehen sollte.

Habe schon einiges versucht, bekomme dabei aber nur
mehere Errors.
Bitte keine Einwende gegen den Code selbst da ich es
erstmal so lernen muss/will.
Namespace std ist zwar sinnvoller aber dazu exestiert
nicht genug Material zum lernen.
(Internet sowie in meinem Heft)

Danke.




#include "stdafx.h"

using namespace System;


Int32 addition(Int32 x, Int32 y)
{
return (x+y);
}

Int32 subtraktion(Int32 x, Int32 y)
{
return (x-y);
}

Int32 division(Int32 x, Int32 y)
{
return (x/y);
}


Int32 multiplikation(Int32 x, Int32 y)
{
return (y*y);
}




int main(array<System::String ^> ^args)
{
Int32 zahl1, zahl2;
Char eingabe;

Console::Write("Geben Sie bitte eine Zahl ein.");
zahl1=Convert::ToInt32(Console::ReadLine());

Console::Write("Geben Sie bitte die Rechenoperation ein.");
eingabe=Convert::ToChar(Console::ReadLine());

Console::Write("Geben Sie bitte die nächste Zahl ein.");
zahl2=Convert::ToInt32(Console::ReadLine());

if (eingabe=='+')
Console::WriteLine("{0} + {1} = {2}", zahl1, zahl2, zahl1 + zahl2);

else if (eingabe=='-')
Console::WriteLine("{0} + {1} ergibt = {2}", zahl1, zahl2, zahl1 - zahl2);

else if (eingabe=='*')
Console::WriteLine("{0} * {1} ergibt = {2}", zahl1,zahl2,zahl1 * zahl2);

else if (eingabe=='/')
Console::WriteLine("{0} / {1} ergibt = {2}", zahl1, zahl2, zahl1 / zahl2);

else

Console::WriteLine("Falsche Eingabe");


return 0;
}
 
ghorst schrieb:
1. benutze die namespaces nicht mittels using namespace. das sorgt meist nur für schlechter lesbaren code. die tipperei für "std::" wird dich auch nicht umbringen.
Wenn er using namespace benutzen will, soll er dies tun. Ich denke selbst du kannst den Code gut lesen. ;)

ghorst schrieb:
2. das "system("PAUSE");" macht man nicht, da es nicht portabel ist. PAUSE funktioniert einzig und allein unter windows, da es dem befehl pause.exe aufruf. das ist so gesehen gleich doppelt böse, da es zum einen die groß- und kleinschreibung missachtet, die windows bei ausführbaren datein aber nicht interessiert und weil es halt an windows gebunden ist.
Das wird wohl kein Programm das auf anderen Plattformen laufen muss, zudem ist das system("PAUSE>NUL"); ja nur dafür da damit sich die konsole nicht schließt... deswegen läuft das Programm auch und erbringt den lern/übungseffekt voll und ganz.


ghorst schrieb:
3. "return EXIT_SUCCESS;" EXIT_SUCCESS ist teil des c standards und sollte in c++, genau wie der rest der c-libs nicht genutzt werden.
:rolleyes:

ghorst schrieb:
...an dem stil anderer leute oder ihrem system rumzunörgeln habe ich inzwischen aufgegeben...
:D
 
hallo ! ich bin auch neu beim c++ programmieren. Dachte nicht, dass es so schwer sein kann. Habe ebenfalls diesen Taschenrechner so programmiert:

#include "stdafx.h"

using namespace System;

Double addition(Double x, Double y){
return (x+y);
}
Double subtraktion(Double x, Double y){
return (x-y);
}
Double division(Double x, Double y){
return (x/y);
}
Double multip(Double x, Double y){
return (x*y);
}

int main(array<System::String ^> ^args)
{
Double zahl1, zahl2;
Char eingabe;

Console::Write("Geben Sie bitte eine erste Zahl ein.");
zahl1=Convert::ToDouble(Console::ReadLine());

Console::Write("Geben Sie bitte eine Rechenoperation ein (+ - / oder *):");
eingabe=Convert::ToChar(Console::ReadLine());

Console::Write("Geben Sie bitte die zweite Zahl ein:");
zahl2=Convert::ToDouble(Console::ReadLine());

if (eingabe=='+')

Console::WriteLine("Die Addition der Zahl {0} + {1} ergibt = {2}", zahl1, zahl2, addition(zahl1, zahl2));

else

if (eingabe=='-')
Console::WriteLine("Die Subtrahierung der Zahl {0} - {1} ergibt = {2}", zahl1, zahl2, subtraktion(zahl1, zahl2));

else

if (eingabe=='/')
Console::WriteLine("Die Divison der Zahl {0} / {1} ergibt = {2}", zahl1, zahl2, division(zahl1, zahl2));

else
if (eingabe =='*')

Console::WriteLine("Die Multiplizierung der Zahl {0} * {1} ergibt = {2}", zahl1, zahl2, multip(zahl1, zahl2));

else

Console::WriteLine("Sie haben keine gültige Rechenoperation eingegeben");

return 0;
}


Jetzt hätte ich aber gerne, dass neben der Ausgabe der einzelnen Ergebnisse zusätzlich die Ergebnisse ALLER Rechenoperationen gleichzeitig auf dem Bildschirm ausgegeben werden. Dies soll über eine extra Funktion gemacht werden.
Hat hierzu irgendjemand eine Idee ??

Vielen Dank
 
das einfachste....
zahlen auslesen.... als int schreiben
klammern erkennen
ausdrück analysieren
entscheidungsregel fällen
und fertig...
das was da oben steht ist nicht für komplexe formeln geeignet :D
 
danke für deine schnelle Antwort. Ich bin leider mit dem ganzen C dermassen blackout-mässig gefesselt, dass ich gerade gar nichts mehr verstehe :(
das ganze ist eigentlich einfach zu lösen, aber mit einer extra Funktion ?? :eek:
 

Ähnliche Themen

W
  • Gesperrt
  • Frage Frage
2 3
Antworten
45
Aufrufe
3.961
Antworten
15
Aufrufe
4.846
Zurück
Oben