Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » fortlaufender Taschrenrechner

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
13.11.2005, 15:29 Uhr
~sandro
Gast


Hallo, ich soll einen fortlaufenden Taschenrechner programmieren. So sieht derzeit mein Code aus ..


C++:
//Taschenrechner-Programm
#include <iostream.h>

void main ()
{

char operant;
float zahl2, ergebnis;
const start=ergebnus;

cout <<"Bitte geben Sie zwei reelle Zahlen - und ein Rechenzeichen ein  "<<endl;
cout <<"0";

cin>>operant;
cin >> zahl2;

switch (operant)
{
case '+':    ergebnis=start+zahl2; break;
case '-':     ergebnis=start-zahl2; break;
case '*':     ergebnis=start*zahl2; break;
case '/':   ergebnis=start/zahl2; break;
default: ergebnis=0;

}

cout<< ergebnis << endl;

}


Besonderheiten sollen sein: Der Rechner soll mit einer 0 beginnen. Anschließend soll ein Operant und eine Zahl eingeben werden zum weiterrechnen .. also z.B.

0+3
3*2
6/2
3-3
0+10
10

wirdein falscher Operant eingegeben, z.B. % soll eine Fehlermeldung erfolgen. Das Programm soll erst mit Eingabe von e beendet werden (exit(0)? - aber wie und wo?, bei c soll er wieder bei 0 anfangen.

Am besten geht das wohl mit der While-Schleife, aber ich weiß nicht wie ich sie einbinden soll und wie er dann weiterrechnet. So wie mein Programm jetzt aussieht müsste er eigentlich immer wieder mit 0 rechnen, weil ich es als const-größe angegeben habe.

Wäre super wenn mir einer helfen könnte, wie das Programm richtig auszusehen hat.

LG,
Sandro
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
13.11.2005, 17:42 Uhr
predator



Also erstens sollte es

C++:
int main()


heißen, zweitens solltest du für C++ die neuen Header verwenden, also:

C++:
#include <iostream>


und dann using namespace std; oder halt immer std::blabla
und drittens, warum machst du das start const?

So jetzt, zu der Aufgabe:
Du weißt also nicht, wo/wie du die Schleife einbinden sollst und wie man es anstellt, dass er immer mit dem vorherigen Wert weiterrechnet?

Wegen der Schleife musst du dir überlegen, welche Operationen er immer ausführen muss/soll, die packst du dann rein.
Also überlegen wir mal ... die Eingabe muss immer wieder neu erfolgen, also rein damit in die Schleife! Die Berechnung natürlich auch, also die ganze switch-Konstruktion auch rein!
Wenn das Programm nach jedem Schritt das Zwischenergebnis anzeigen soll, gehört das auch in die Schleife
So, das wäre das erste..., wie machst du es jetzt, dass er immer mit dem vorigen Wert weiterrechnet?
Ganz einfach, weise start einfach am Ende der Schleife das ergebnis zu!

So, und jetzt noch die Abfrage:
Ich würde einfachheitshalber nach jedem Rechenschritt fragen, ob es weiter gehen soll, oder beendet werden soll, oder wieder von vorne losgehen soll (start auf 0 setzen)
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.11.2005, 12:28 Uhr
~san|dro
Gast


ich hab es versucht und wieder was geändert .. aber es kommen ganz falsche ergebnisse heraus. er soll ja mit 0 beginnen, deshalb habe ich cout << "0" gemacht .. anschließend operant und die zweite zahl eingeben .. das ergebnis soll dann gleichzeitig wieder die erste zahl sein .. ich weiß echt nicht weiter ..


C++:
//Rechner
#include <iostream>
using namespace std;

void main ()
{

char operant;
float zahl1,zahl2,ergebnis;

cout <<"Bitte geben Sie Operant und Operator ein: "<<endl;

while(ergebnis)
{

cout << "0";
cin >> operant;
cin >> zahl2;
cout << ergebnis;

ergebnis=zahl1;

switch (operant)
{
case '+': ergebnis=zahl1+zahl2; break;
case '-': ergebnis=zahl1-zahl2; break;
case '*': ergebnis=zahl1*zahl2; break;
case '/': ergebnis=zahl1/zahl2; break;

}
}}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.11.2005, 12:31 Uhr
hsp



Man könnte das ganze doch über Rekursion lösen. Du musst dann allerdings am Ende der Schleife jeweils die Möglichkeit geben sie zu verlassen, sonst kriegst du früher oder später einen Overflow
--
Actiones nostras, quaesumus, Domine, aspirando praeveni et adiuvando prosequere, ut cuncta nostra operatio a te semper incipiat, et per te coepta finiatur.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
14.11.2005, 12:33 Uhr
Pler
Einer von Vielen
(Operator)


zahl1 wird doch nirgendwo ein wert zugewiesen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
14.11.2005, 12:39 Uhr
hsp



Mhjo stimmt, du übergibst Ergebnis den Wert von zahl1, die jedoch zuvor gar keinen Wert erhalten hat. Wenn du zahl1 den Wert von Ergebnis übergeben willst (was ich annehme) dann stimmt die Syntax so nicht. Dann musst du schreiben


C++:
zahl1 = ergebnis


--
Actiones nostras, quaesumus, Domine, aspirando praeveni et adiuvando prosequere, ut cuncta nostra operatio a te semper incipiat, et per te coepta finiatur.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
14.11.2005, 12:59 Uhr
~san|dro
Gast


danke leute .. aber ich bin absoluter anfänger. keine ahnung was rekursion heißt. wie mache ich das denn mit der möglichkeit die schleife zu verlassen?

ich habe zahl1=ergebnis geändert .. nur er soll ja bei 0 anfangen, was ja dann zahl1 sein müsste. zahl 1 wird ja aber nie abgefragt ..

vielleicht könntet ihr ja mein teil mal richtig umformen, damit ich sehe, wie es richtig auszusehen hat. das wäre echt nett, weil ich das programm auch bald schon fertig haben muß und ich sitz da schon das ganze we dran ..

gruß,
sandro
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
14.11.2005, 13:21 Uhr
hsp



Du kannst zahl1 gleich mit einem Wert initialisieren beispielsweise so:


C++:
int zahl1 = 0;



Rekursion bedeutet eine Art "Selbstaufruf" von einer Funktion. D.h. an ihrem Ende ruft sie sich erneut auf. Soetwas könnte beispielsweise so aussehen:


C++:
void Rekursion()
{
Anweisung1;
Anweisung2;

Rekursion();
}




Du solltest das ganze aber immer an eine Bedingung knüpfen, da sonst ein Overflow im Speicher entstehen kann, weil sich die Funktion unendlich oft hintereinander selbst aufrufen würde. Du könntest z.B. vor dem Selbstaufruf eine Switch Abfrage einbauen, die abfragt ob weitergerechnet werden soll oder nicht.
--
Actiones nostras, quaesumus, Domine, aspirando praeveni et adiuvando prosequere, ut cuncta nostra operatio a te semper incipiat, et per te coepta finiatur.

Dieser Post wurde am 14.11.2005 um 13:49 Uhr von hsp editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
14.11.2005, 13:45 Uhr
ao

(Operator)



Zitat von hsp:
Rekursionen sind aber eher verpöhnt, weil sie (wenn falsch oder unachtsam eingesetzt) Overflows im Speicher erzeugen können, ...

Unsinn. Mit demselben Argument könnte auch Biertrinken verpönt sein. Oder Autofahren oder C-Programmieren oder überhaupt alles.

ao

Dieser Post wurde am 14.11.2005 um 13:47 Uhr von ao editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
14.11.2005, 15:06 Uhr
predator



@sandro
Wenn ich du wäre, würde ich mir mal ein gutes Buch / Tutorial durchlesen...
z.B.
C++ in 21 Tagen
oder
http://tutorial.schornboeck.net/inhalt.htm
--
Gruß
predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: