Brauche dringend Hilfe

DunklerEngel

Mitglied
Hallo,
ich nehme an einem Fernlehrgang teil und hänge gerade bei meiner Hausaufgabe. Ich habe mir den Kopf schon, denke ich, zuviel verbrochen, jetzt fehlt es mir gerade an meiner Logik, hab sogar davon geträumt ;-(
Es geht eigentlich um einen einfachen Taschenrechner, wozu ich hier im Forum auch etwas nützliches gefunden habe. Doch bin ich mir unsicher, ob es genau das ist, was der Studienlehrer abfragen möchte.

Ich schreibe mal die Aufgabenstellung hier hinein und denn meine Lösung:
Programmieren Sie einen einfachen Taschenrechner. Er soll zwei Werte von der Tastatur einlesen. Als Rechenoperationen sollen Addition, Subtraktion, Division und Mulitplikation möglich sein. Die Rechenoperationen sollen als eigene Funktion implementiert werden.

Wobei ich jetzt noch sagen muss, dass ich in der nächsten Aufgabe den Taschenrechner erweitern soll, dass er die Ergebnisse aller Rechenoperationen auf dem Bildschirm ausgibt. Also geht es in der ersten lediglich eigentlich darum, die Funktionen zu definieren.

Mein Lösungsweg:

#include <iostream.h>
int main ()
{
int x;
int y;
int ergebnis;
char rechenzeichen;

cout<<"Geben Sie Zahl 1 ein:";
cin>>x;
cout<<"Geben Sie die gewuenschte Rechenoperation an (+ - * /):";
cin>>rechenzeichen;
cout<<"Geben Sie Zahl 2 ein:";
cin>>y;

if (rechenzeichen=='+')
{
ergebnis=x+y;
}
else if (rechenzeichen=='-')
{
ergebnis=x-y;
}
else if (rechenzeichen=='*')
{
ergebnis=x*y;
}
else
{
ergebnis=x/y;
}

return ergebnis;




char p[50];
cin.getline(p,50);

}

Das mag so funzten, aber jetzt schreibe ich Euch mal als Beispiel eine andere Rechnung hinein, denn, ich bin mir unsicher, ob ich die Funktionen richtig benannt habe.
Bspi.:
Schreiben Sie eine Funktion quadrat(), die das Quadrat einer Zahl x berechnet. Zur Berechnung setzten Sie jedoch nicht den Produktoperator ein, sondern rufen Sie in der Funktion quadrat() stattdessen die Funktion produkt() aus Aufgabe 3 auf. Schreiben Sie eine passende Hauptfunktion main(), um die eingabe zu überprüfen:

Lösung:
#include <iostream.h>
int produkt(int x, int y){
return (x*y);

}

int quadrat(int x) {
return produkt(x,x);

}

void main() {
int a;
cout<<"Geben Sie bitte eine Zahl ein:";
cin>>a;
cout<<"Das Quadrat der Zahl ist:"<<quadrat(a)<<endl;
char p[50];
cin.getline(p,50);
cin.getline(p,50);

}

Ich hoffe, Ihr seht jetzt den Unterschied, bin so unsicher und ziemlich verzweifelt, weil die Aufgaben auch benotet werden.
kann mir jemand einen Tip geben, wie ich den einfachen Taschenrechner so schlicht und kompakt wie möglich schreiben kann? Darauf legt der Studienlehrer grossen WErt.
 
So, wie ich das sehe hast du die Aufgabe nicht ganz richtig gelöst: Die Aufgabe war es doch jede Rechenoperationen in je eine Funktion zu schreiben, und nicht die Operationen direkt in der main()-Funktion auszuwerten.

Ich würde die Aufgabe ca. so lösen:
Nach dem die Zahlen eingelesen wurden, wird ja auch die Rechenoperation verglichen. Nun würde ich statt deiner Lösung
Code:
if(rechenzeichen == '+') ergebnis= x+y;
bspw.
Code:
if(rechenzeichen == '+') ergebnis= addieren(x,y);
schreiben.

Dabei ist zu beachten, dass "addieren" eine eigene Funktion ist, die ähnlich wie "produkt(x,y)" arbeitet.

Um die Aufgabe nun zu lösen, schreibe einfach 4 Funktionen zu den 4 Grundrechenarten und setze die bei der Abfrage der Operation ein. Damit dürftest du die Aufgabe erfüllt haben.
 
Hi, erstmal Danke schonmal für die Antwort. Ist vollkomisch logisch, was Du einwendest. Es stimmt, somit füge ich ja nicht jede Rechenoperation einzeln als Funktion ein.
Liegt es jetzt an meinen Kopfschmerzen oder der nahenden Erkältung ;-(, dass ich mich heute so dumm anstelle? Ist mir schon fast peinlich, weil ich sehe auf dem ersten Blick, dass mein geänderter Quelltext falsch ist, ich probiere hin und her und komme nicht auf den Punkt ;-(

#include <iostream.h>
int rechne (int x, int y) {
{
int ergebnis;
char rechenzeichen;
int addieren;
int subtrahieren;
int multiplizieren;
int dividieren;


cout<<"Geben Sie Zahl 1 ein:";
cin>>x;
cout<<"Geben Sie die gewuenschte Rechenoperation an (+ - * /):";
cin>>rechenzeichen;
cout<<"Geben Sie Zahl 2 ein:";
cin>>y;

if (rechenzeichen=='+')
{
ergebnis=addieren(x, y);
}
else if (rechenzeichen=='-')
{
ergebnis=subtrahieren(x,y);
}
else if (rechenzeichen=='*')
{
ergebnis=multiplizieren(x,y);
}
else
{
ergebnis=dividieren(x,y);
}

return ergebnis;




char p[50];
cin.getline(p,50);

}

Ist mir wirklich etwas peinlich, weil ich leider feststellen muss, dass ich oft Probleme bei leichten Dingen habe, die eigentlich simpel sind. Wahrscheinlich, weil sie wieder zu simpel sind, übersieht man wichtige Kleinigkeiten. Wenn ich den Quelltext so kompiliere, meldet die IDE Aufruf einer Nicht-Funktion....

Kannst Du mir nochmal helfen?*lieb*guck:(
 
Hi!

Du deklarierst dir int Variabeln (addieren, subtrahieren usw.), d.h. du reservierst dir Speicher! Dann versuchst du diesen als Zeiger auf eine Funktion der Form "int f(int x, int y)" zu benutzen und bekommst deine Fehlermeldung.

Code:
int rechne (int x, int y) {
{
...
int addieren; // Variabeldeklaration
int subtrahieren; // Variabeldeklaration
int multiplizieren; // Variabeldeklaration
int dividieren; // Variabeldeklaration
...
if (rechenzeichen=='+')
{
ergebnis=addieren(x, y); // Funktionsaufruf
}
else if (rechenzeichen=='-')
{
ergebnis=subtrahieren(x,y); // Funktionsaufruf
}
else if (rechenzeichen=='*')
{
ergebnis=multiplizieren(x,y); // Funktionsaufruf
}
else
{
ergebnis=dividieren(x,y); // Funktionsaufruf
}

Code:
int produkt(int x, int y){
return (x*y);

}

int quadrat(int x) {
return produkt(x,x);

}
An der Stelle hast du doch schon gezeigt, dass du Funktionen definieren kannst! Mache es doch hier genauso!
Code:
int addieren(int x, int y)
{
  ...
}

int subtrahieren(int x, int y)
...usw.
Hoffe, ich konnte ein wenig helfen.

Johannes
 
Zuletzt bearbeitet:
Ui, das ist aber sehr lieb von Dir, dass Du Dir hier die Zeit genommen hast. Also, wenn ich nachher wieder die Zeit habe, werde ich nocheinmal neu coden.
Ich melde mich dann, sobald es geklappt hat.

Und natürlich hast Du mir geholfen Sehr sogar, echt supervielen Dank dafür.

Aber ich melde mich dann nochmal, um Dir ein Ergebnis mitzuteilen.

Liebe Grüsse
Anja
 
Ich würde auch anstatt der 4 if-Anweisung eine switch-Anweisung nehmen.
Sie ist glaube ich effizienter und sieht schöner aus.
(Geht natürlich nur wenn ihr sie schon durchgenommen habt)
Bsp.:
Code:
switch(rechenzeichen) {
	case '+':
		ergebnis = addieren(x, y);
		break;
	case '-':
		....
}
 
Ja, switch case habe ich schon durchgelernt, da musste ich eine kleine Menükarte programmieren.
Aber *gg*, jetzt komme ich ganz durcheinander. Verstehe das zwar alles, aber irgendwie hänge ich im Moment.
Ich werde mich heute abend in aller Ruhe nochmal hinsetzen und ganz von vorne anfangen. Dieses Ändern in den Quelltexten macht mir nur noch mehr Übersetzungsfehler, wie ich jetzt schon habe:)
Ich weiss auch nicht, warum ich mich so schwer tue, aber ich denke, ich habe einen logischen Denkfehler, ist meistens so bei mir, wenn ich den erreiche, dann klappt alles wie von alleine.
Meistens fallen mir die Dinge echt im Schlaf ein, so blöd wie es sich anhören mag. Aber ich schlafe meistens mit irgendwelchen zahlen und codes im Kopf ein...*schäm*...

Also ich versuche dann nachher nochmal mein Glück.
 
Ich würde zuerst alle hilfstfunktionen implementieren (addieren(x, y)
multiplizieren(x, y) usw.) und dann erst mit der main-funktion anfangen.
Aber das bleibt ja jedem selbst überlassen.
Na dann viel spaß :p
 
Man sieht die Rauchwolken aus meinem Gehirn, aber ich habs geschafft, einen Quelltext zu erstellen, der sogar sauber kompiliert wird.
Man beachte dabei, dass ja kein Endergebnis stehen soll. *gg*, das wird wohl gleich wieder zu meiner zweiten Hürde werden, weil hier und da mal wieder eine Klammer fehlt:

So, ich gebe mal meinen Quelltext her und wäre sehr freundlich von Euch, wenn ihr mir jetzt sagen könnt, ob ich auf den Pkt. genau die Aufgabenstellung erfüllt habe. Falls net *wo ist der balkon zum springen* *lol*:)


#include <iostream.h>

int addieren (int x, int y) {
return (x+y);
}

int subtrahieren(int x, int y) {
return (x-y);
}
int multiplizieren(int x, int y) {
return (x+y);
}
int dividieren(int x, int y) {
return (x/y);
}
int ergebnis;
int x;
int y;
char rechenzeichen;

void main() {

cout<<"Geben Sie Zahl 1 ein:";
cin>>x;
cout<<"Geben Sie die gewuenschte Rechenoperation an (+ - * /):";
cin>>rechenzeichen;
cout<<"Geben Sie Zahl 2 ein:";
cin>>y;

if (rechenzeichen=='+')
{
ergebnis=x+y;
}
else if (rechenzeichen=='-')
{
ergebnis=x-y;
}
else if (rechenzeichen=='*')
{
ergebnis=x*y;
}
if (rechenzeichen=='/')
{
ergebnis=x/y;
}
char p[50];
cin.getline(p,50);
cin.getline(p,50);

}
 
Mir sind ein paar Sachen aufgefallen, aber nichts Ernstes:

- In deinem if-Block da unten solltest du auch deine mit Mühe geschriebenen Funktionen benutzen, oder? ;)
- Vor dem if mit '/' könnte auch ein "else if" stehen.
- Wozu das getline usw. ganz unten? Warum zwei mal?
- Du könntest das Ergebnis auch ausgeben, zum Beispiel mit printf().
- Im Forum für Code am besten Codetags verwenden!
 

Anhänge

  • _codetags.gif
    _codetags.gif
    7,5 KB · Aufrufe: 48

Neue Beiträge

Zurück