Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

Hallo Community

hab das Forum schon durchsucht aber nichts gefunden was mit helfen kann.

Habe folgende Aufgabe bekommen :

Es soll ein kleines Taschenrechner-Programm erstellt werden das zwei Zahlen (Operanden) und einen Operator nach folgender Syntax einliest:

Operand1 Operator Operand2

Als Operator sind nur +, -, * und / zulässig. Wird ein anderer Operator eingegeben, so soll eine entsprechende Fehlermeldung ausgegeben werden. Die Operanden sind als short-Werte einzulesen.

Bei korrekter Eingabe ist das Ergebnis der eingegebenen Formel als Ganzzahl zu berechnen und auszugeben.

bin so vorgegangen das ich erstmal die operanden definiert hab mit

short operand1;

short operand2;

dann kommt das erste problem

ich komm nicht drauf wie das mit dem Operator geht. Kann man ihn definieren mit den zeichen *+-/?! wenn ja wie? muss ich ihn nicht definieren?!

zudem hät ich noch gemacht

double = result

int main()

result = operand1 operator operand2 ;

cout << "Eingabe der Werte" ;

cin >> operand1 >> operator >> operand2;

if (!operator)

{

cout << "Fehler" << endl;

}

else

{

cout << result;

}

nun ich denke bzw. weiß das einiges falsch ist

deswegen brauch ich hilfe

Geschrieben

Zunächst musst du dir darüber im Klaren sein, dass du nicht auf "magische" Weise aus Benutzereingaben Code erzeugen kannst. Das geht nur bei Scriptsprachen und Sprachen, die Reflection unterstützen. C++ gehört nicht dazu.

Die Eingabe des Benutzers ist also zunächst mal nur Text, ohne semantische Bedeutung für deinen Code. Der Operator ist also nur ein Zeichen, und als solches solltest du dann auch die Variable definieren: als char. Die Eingabe kannst du prüfen, indem du sie mit den Zeichenliteralen '+', '-', '*' oder '/' vergleichst.

Das heißt aber natürlich auch, dass du dafür verantwortlich bist, dass je nach Operator die richtige Operation ausgeführt wird. Du kannst char-Ausdrücke übrigens als Steuerungsausdruck für eine Switch-Anweisung verwenden:

char c;
cin >> c;
switch( c )
{
case '+':
// Addieren
break;

// ... usw ...

default:
// Falsche Eingabe
break;
}[/code]

Zweitens musst du die richtige Reihenfolge der Arbeitsschritte einhalten. In deinem Code berechnest du das Ergebnis, bevor der Benutzer die Daten eingibt. Es sollte offensichtlich sein, dass das nicht funktioniert.

Drittens darfst du "operator" nicht als Variablenname verwenden. Das ist ein Schlüsselwort in C++.

Geschrieben

Könntest du deine Fragen etwas präziser stellen?

Ich habe doch eben geschrieben, dass du operator nicht als Variablennamen benutzen darfst. Du darf ja auch keine Variable namens int, return oder for anlegen. Das sind Schlüsselwörter, die sind reserviert.

Das heißt, wenn du deine char-Variable für den Operator deklarierst, darfst du sie nicht operator nennen.

Geschrieben

mit IF :

int main ()

{

short operand1;

short operand2;

char oper;

std::cout << "Formel nach Syntax Operand 1 Operator Operand2 eingeben!" << std::endl;

std::cout << "Operator kann +,*, -,/ sein" << std::endl;

std::cout << "Formel :" ;

std::cin >> operand1 >> oper >> operand2;

std::cout << "Ergebnis: \n";

if (oper == '+')

std::cout << operand1 + operand2;

if (oper == '-')

std::cout << operand1 - operand2;

if (oper == '*')

std::cout << operand1 * operand2;

if (oper == '/')

std::cout << operand1 / operand2;

else

std::cout << "Falsche Eingabe";

}

also es funktioniert

ist vielleicht trotzdem irgendwas mhh schlecht gemacht oder so!?

Geschrieben
also es funktioniert
Nicht ganz.

Das else bezieht sich immer nur auf das letzte if. Du müsstest also auch bei +, - und * die Ausgabe "Falsche Eingabe" erhalten.

Das kannst du verhindern, indem du die if (bis auf das erste) durch else if ersetzt.

Geschrieben

if (oper == '+')

std::cout << operand1 + operand2;

else

if (oper == '-')

else

std::cout << operand1 - operand2;

....

so gemeint?!

hab gerade festgestellt das es ein relativ dummes programm ist :)

das kann ja nix außergewöhnliches rechnen

Geschrieben

hab gerade festgestellt das es ein relativ dummes programm ist :)

das kann ja nix außergewöhnliches rechnen

Naja was hast du denn erwartet? :)

Der nächste Schritt wäre jetzt die Eingaben auf ihre Korrektheit zu prüfen bevor du damit arbeitest. Danach könntest du zum Beispiel einen einfachen Parser integrieren so das der Benutzer evtl auch "3+2*5-8" eingeben kann und wenn das funktioniert dir mal Gedanken drüber machen wie du Punkt-vor-Strich Rechnung einbauen kannst ;)

Geschrieben

Soweit bin ich nocht nicht, dass ich wüßte was ein Parser is und wie ich ihn einsetze. ich steck noch in den Kinderschuhen.

Erwartet hab nur soviel das er funktioniert ;)

aba das bei sowas wie 5/4 = 1 rauskommt is halt dann scho simpelst

müsst ma noch dran rumspieln und ihn bissl tunen :D

Geschrieben

ja ich wollte ja nicht darauf raus das es falsch ist , sondern das man normalerweiße "Vierfünftel" erwartet ;)

und wie gesagt da müsste man änderungen vornehmen , was ich aber etz gar net mag. muss weiter lernen ;)

danke guy =)

bis zum nächsten Problem :D

Geschrieben

Du kannst auch einfach den Datentyp auf z.B. double ändern, dann würde er das Ergebnis nicht runden.

edit: Wer lesen kann ist klar im Vorteil :D

War ja die Aufgabe, das als short zu deklarieren.

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...