# [C++] Ergebnisse aller Rechenoperationen Anzeigen



## mentalBlock (7. Mai 2008)

Hi Leute,

Ich mache ein C++ Fernstudium und komme einfach nicht weiter. Es soll eine Funktion erstellt werden die die ergebnisse aller Rechenoperationen anzeigen lässt. Nach mehrmalige abarbeitung meines Studienheftes komme ich immer noch nicht auf eine lösung. Für jede Hilfe wäre ich Dankbar.

Mein Quelltext bis jetzt:

#include "stdafx.h"

using namespace System;
//hier werden die rechenfunktionen vereinbart
Double addition(Double zahl1, Double zahl2){
	return (zahl1 + zahl2);
}

Double subtraktion(Double zahl1, Double zahl2){
	return (zahl1 - zahl2);
}

Double multiplikation(Double zahl1, Double zahl2){
	return (zahl1 * zahl2);
}

Double division(Double zahl1, Double zahl2){
	return (zahl1 / zahl2);
}



int main(array<System::String ^> ^args)
{   
	Char beenden, rechenart;
	Double eingabe1, eingabe2;


	Console::WriteLine("Dies ist mein erster Taschenrechner\n");
    Console::WriteLine("Er kann vorerst nur die vier Grundrechenarten\n");
    Console::WriteLine("Bitte Wählen Sie:\nEin + für Additon\nEin - für Subtraktion\nEin * für Multiplikation\nEin / für Division\n\n");
	Console::WriteLine("Geben sie ein 'n' ein um das Programm abzubrechen\n\n");


	do{

		Console::Write("Geben Sie die erste Zahl ein: ");
		eingabe1=Convert::ToDouble(Console::ReadLine());
		Console::WriteLine("");

		Console::Write("Geben Sie jetzt den Rechenzeichen ein: "); 
		rechenart=Convert::ToChar(Console::ReadLine());
		Console::WriteLine("");

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


		switch (rechenart){

		case '+':
			Console::WriteLine("{0} + {1} = {2}\n\n",eingabe1, eingabe2, addition(eingabe1, eingabe2));
			break;

		case '-':
			Console::WriteLine("{0} - {1} = {2}\n\n",eingabe1, eingabe2, subtraktion(eingabe1, eingabe2));
			break;

		case '*':
			Console::WriteLine("{0} * {1} = {2}\n",eingabe1, eingabe2, multiplikation(eingabe1, eingabe2));
			break;

		case '/':
			Console::WriteLine("{0} / {1} = {2}\n\n",eingabe1, eingabe2, division(eingabe1, eingabe2));
			break;

		default:
			Console::WriteLine("Tut mir leid aber Sie haben keinen gültigen Rechenzeichen eingegeben\n\n");
	}
        Console::Write("Möchten Sie weitermachen ? ");
		beenden=Convert::ToChar(Console::ReadLine());
		Console::WriteLine("\n");
		if (beenden == 'n')//hier kann die schleife abgebrochen werden
			break;

	} while (beenden != 'n');


	return 0;
}


----------



## Online-Skater (7. Mai 2008)

Du hast dein Problem nicht konkret beschrieben !?
Es gibt hier Code-Tags damit der Code übersichtlicher aussieht.
Erzähl mal was du genau wissen möchtest. Danke

mfg


----------



## mentalBlock (7. Mai 2008)

Online-Skater hat gesagt.:


> Du hast dein Problem nicht konkret beschrieben !?
> Es gibt hier Code-Tags damit der Code übersichtlicher aussieht.
> Erzähl mal was du genau wissen möchtest. Danke
> 
> mfg




Ja sorry habe das mit dem code tags übersehen.

Also...Ich sollte einen einfachen Taschenrechenr programmieren. So weit alles in ordnung.

Ich soll aber auch eine Funktion einbauen der die Ergebnisse aller Rechenoperationen anzeigt. Ich weiss das die lösung bestimmt ganz einfach ist aber ich komme einfach nicht drauf. 


```
#include "stdafx.h"

using namespace System;
//hier werden die rechenfunktionen vereinbart
Double addition(Double zahl1, Double zahl2){
return (zahl1 + zahl2);
}

Double subtraktion(Double zahl1, Double zahl2){
return (zahl1 - zahl2);
}

Double multiplikation(Double zahl1, Double zahl2){
return (zahl1 * zahl2);
}

Double division(Double zahl1, Double zahl2){
return (zahl1 / zahl2);
}



int main(array<System::String ^> ^args)
{
Char beenden, rechenart;
Double eingabe1, eingabe2;


Console::WriteLine("Dies ist mein erster Taschenrechner\n");
Console::WriteLine("Er kann vorerst nur die vier Grundrechenarten\n");
Console::WriteLine("Bitte Wählen Sie:\nEin + für Additon\nEin - für Subtraktion\nEin * für Multiplikation\nEin / für Division\n\n");
Console::WriteLine("Geben sie ein 'n' ein um das Programm abzubrechen\n\n");


do{

Console::Write("Geben Sie die erste Zahl ein: ");
eingabe1=Convert::ToDouble(Console::ReadLine());
Console::WriteLine("");

Console::Write("Geben Sie jetzt den Rechenzeichen ein: ");
rechenart=Convert::ToChar(Console::ReadLine());
Console::WriteLine("");

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


switch (rechenart){

case '+':
Console::WriteLine("{0} + {1} = {2}\n\n",eingabe1, eingabe2, addition(eingabe1, eingabe2));
break;

case '-':
Console::WriteLine("{0} - {1} = {2}\n\n",eingabe1, eingabe2, subtraktion(eingabe1, eingabe2));
break;

case '*':
Console::WriteLine("{0} * {1} = {2}\n",eingabe1, eingabe2, multiplikation(eingabe1, eingabe2));
break;

case '/':
Console::WriteLine("{0} / {1} = {2}\n\n",eingabe1, eingabe2, division(eingabe1, eingabe2));
break;

default:
Console::WriteLine("Tut mir leid aber Sie haben keinen gültigen Rechenzeichen eingegeben\n\n");
}
Console::Write("Möchten Sie weitermachen ? ");
beenden=Convert::ToChar(Console::ReadLine());
Console::WriteLine("\n");
if (beenden == 'n')//hier kann die schleife abgebrochen werden
break;

} while (beenden != 'n');


return 0;
}
```


----------



## Online-Skater (7. Mai 2008)

Hmm also ich hoffe ich habe es richtig verstanden, meinst du etwa eine Funktion die alle vier Rechenarten kann ? Also wenn der User zwei Zahlen eingibt soll mit der Funktion alle vier Rechenoperationen ausgeführt werden ?
Wenn dies der Fall sein sollte dann könntest du ein Array zurückgeben welches Platz für vier Ergebnisse bietet und in der Funktion selbst schreibst du die Ergebnisse in das Array.

Hoffe ich konnte dir ein wenig helfen.

mfg


----------



## mentalBlock (7. Mai 2008)

Hmm...naja. Vielleicht verstehe ich auch die Aufgabe einfach falsch. 

Hier der wortwörtliche Text:

Erweitern Sie den Taschenrechner aus der Aufgabe so, dass neben der Ausgabe der einzelnen Ergebnisse zusätzlich die Ergebnisse aller Rechenoperationen gleichzeitig auf dem Bildschirm ausgegeben werden können. Erstellen Sie auch diese zusätzliche Funktionalität als Funktion. 

Arrays werden werden erst im nächsten Studienheft behandelt.


----------



## rambaldi (13. Mai 2008)

Hi

Du hast eine PN.


----------



## Onkel Schuppig (17. Mai 2008)

Hi,
du kannst den kompletten "switch(rechenart)"-Block auslagern in eine separate Funktion:

```
void rechne(char rechenart) {
  switch (rechenart) {
  case '+':
     // dein Code ...
  } // end of switch block
}
```
Dann rufst du im Hauptprogramm zunächst rechne(rechenart) auf. Dann bekommst du die Ausgabe wie bisher.
Danach schreibe z.B. 5 weitere Zeilen:

```
Console::WriteLine("Hier das Ergebnis aller Rechenoperationen:");
rechne('+');
rechne('-');
rechne('*');
rechne('/');
```
Jetzt sag nicht, Funktionen kommen erst nächsten Monat dran.


----------



## devDevil (17. Mai 2008)

Kenn mich mit dem Managed kram nicht aus ... unter C++ "normal" würde man das so machen:

```
typedef const double (*fnAction)(const double, const double);

const double addition(const double first, const double second)
{ return first + second; }
 
const double subtraktion(const double first, const double second)
{ return first - second; }
 
const double multiplikation(const double first, const double second)
{ return first * second; }

const double division(const double first, const double second)
{ return first / second; }

int main()
{
    std::map<char, fnAction> registered_actions;
    registered_actions.insert(std::make_pair('+', &addition));
    registered_actions.insert(std::make_pair('-', &subtraktion));
    registered_actions.insert(std::make_pair('*', &multiplikation));
    registered_actions.insert(std::make_pair('/', &division));

    // werte einlesen und so nen bla

    std::cout << eingabe1 << rechenart << eingabe2 << " = " << (*(registered_actions[rechenart]))(eingabe1, eingabe2) << std::endl;
}
```


----------



## jugiii (20. April 2009)

Hallo zusammen ! Ich habe das mit dem Taschenrechner so gemacht:

#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 will ich aber auch, dass zusätzlich die Ergebnisse aller Rechenoperationen unterhalb der einzelnen Berechnungen ausgegeben werden. Dies soll über eine zusätzliche Funktion erfolgen. Leider krieg ich das nicht hin. Bin schon am verzweifeln. Hat jemand eine Idee ?
danke


----------

