WinFuture-Forum.de: Hilfe Beim Potenzieren - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Hilfe Beim Potenzieren


#1 Mitglied ist offline   dönertier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 26
  • Beigetreten: 20. August 07
  • Reputation: 0

geschrieben 08. September 2007 - 14:31

Hallo zusammen,

bin noch völliger C++ Neuling und hab mich erst ein Paar Stunden damit beschäftigt. Irgendwann dacht ich ich wäre soweit einer Taschenrechner zu schreiben, der potenzieren kann. Da ich keinen Befehl dafür kenne habe ich Schleifen geschachtelt (oder wie man das nennt). Klappt auch alles aber eine Frage hab ich noch.
Ab einer Millionen schmeißt der merkwürdige Ergebnisse raus, die (glaub ich jedenfalls) richtig sind, aber völlig schwachsinnig.
Bsp: 999998+1=999999
999999+1=1e+006
Warum?
Ich veröffentlich hier mal den Programmcode. Ich möchte aber bitte keine Kommentare über den Programmierstil. Ich weiß es nicht besser. Gegen konstruktive Tips hab ich aber nicht einzuwenden.

Danke schonmal

dönertier

#include <iostream>
#include <conio.h>
using namespace std;


int main(int nArg, char* pszArgs[])

{

cout << "Erlaubt ist +,-,*,/ und potenzieren.\n";
cout << "Zum potenzieren ! als Operation eingeben. Die Zahl danach ist die Hochzahl.\n";
cout << "Viel Spass!!!\n\n";
int Endlosschleife;
Endlosschleife = 0 ;
while (Endlosschleife = 1)
{


float fZahl1;
float fZahl2;
char cOperation;



cout << "Geben sie ihre Formel ein: ";
cin >> fZahl1 >> cOperation >> fZahl2;





switch (cOperation)
{
case '+':
cout << "Das Ergebniss ist: ";
cout << fZahl1+fZahl2;
cout << "\n\n";
break;
case '-':
cout << "Das Ergebniss ist: ";
cout << fZahl1-fZahl2;
cout << "\n\n";
break;
case '*':
cout << "Das Ergebniss ist: ";
cout << fZahl1*fZahl2;
cout << "\n\n";
break;
case '/':
cout << "Das Ergebniss ist: ";
cout << fZahl1/fZahl2;
cout << "\n\n";
break;
case '!':
float fZahl4;
fZahl4 = fZahl2;
float fZahl5;
int nZahl1;
nZahl1 = fZahl2;

if (nZahl1 > 0)
{


for (float fZahl3 = fZahl2 - 1; fZahl3 > 0; fZahl3--)
{
fZahl5 = fZahl4*fZahl1;
fZahl4 = fZahl5;
}
cout << "Das Ergebniss ist: ";
cout << fZahl4;
cout << "\n\n";
}
else
{
fZahl4 = 1;
for (float fZahl3 = fZahl2; fZahl3 < 0; fZahl3++)
{
fZahl5 = fZahl4/fZahl1;
fZahl4 = fZahl5;
}
cout << "Das Ergebniss ist: ";
cout << fZahl4;
cout << "\n\n";
}
break;

default:
cout << "Irgendwas haben sie falsch gemacht.";
cout << "\n\n";
}


}

return 0;
}
0

Anzeige



#2 Mitglied ist offline   Der Kenner 

  • Gruppe: aktive Mitglieder
  • Beiträge: 574
  • Beigetreten: 30. Januar 05
  • Reputation: 0

geschrieben 08. September 2007 - 19:54

Zitat

999999+1=1e+006

1e+006 = 10^6
0

#3 Mitglied ist offline   dönertier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 26
  • Beigetreten: 20. August 07
  • Reputation: 0

geschrieben 09. September 2007 - 10:30

kann ich dem beibringen das er das anders ausfrücken soll?
0

#4 Mitglied ist offline   Diewie 

  • Gruppe: aktive Mitglieder
  • Beiträge: 409
  • Beigetreten: 18. Juni 06
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:Geisenhausen / München

geschrieben 09. September 2007 - 19:18

Hi,

habe über dein Programm kurz drübergesehen und es leicht abgeändert.

Zum Ausschreiben von Float-Zahlen gibt es mehrere Möglichkeiten. Ich habe es hier mal mit einem Ausgabemanipulator (fixed) demonstriert.

#include <iostream>
#include <iomanip>	// IO Manipulatoren: http://www.fredosaurus.com/notes-cpp/io/omanipulators.html
#include <conio.h>
#include <math.h>	// Mathematische Funktionen: http://www.cplusplus.com/reference/clibrary/cmath/pow.html
using namespace std;


int main(int nArg, char* pszArgs[])
{
	float fZahl1;
	float fZahl2;
	float fErgebnis = 0.0;
	char cOperation;

	cout << "Syntax: Zahl1 OPERATOR Zahl2\n";
	cout << "Erlaubte Operatoren sind +, -, *, / und ^ (potenzieren).\n";
	cout << "Zum Beenden Strg + C benutzen. Viel Spass!\n\n";

	while (1) //Das reicht um eine Endlosschleife zu erzeugen
	{
		cout << "Geben sie ihre Formel ein: ";
		cin >> fZahl1 >> cOperation >> fZahl2;
		
		//Damit bei einer "falschen Eingabe" nichts im Puffer bleibt.
		cin.clear();
   		cin.ignore(INT_MAX, '\n');

		switch (cOperation)
		{
			case '+':
				fErgebnis = fZahl1 + fZahl2;
				break;
			case '-':
				fErgebnis = fZahl1 - fZahl2;
				break;
			case '*':
				fErgebnis = fZahl1 * fZahl2;
				break;
			case '/':
				fErgebnis = fZahl1 / fZahl2; 
				break;
			case '^':
				fErgebnis = pow(fZahl1, fZahl2);	//pow: http://www.cplusplus.com/reference/clibrary/cmath/pow.html
				break;
			default:
				cout << "\aBitte die Syntax beachten.\n\n";
				continue;	//Mit continue wird die Schleife an dieser Stelle sofort wieder oben begonnen und läuft nicht ganz durch.
		}
		
		//fixed: Float-Zahl ausschreiben mit 6 Nachkommastellen (http://www.fredosaurus.com/notes-cpp/io/omanipulators.html)
		cout << fZahl1 << " " << cOperation << " " << fZahl2 << " = " << fixed << fErgebnis << "\n\n";
	}

return 0;
}


Ich hoffe, das hilft dir weiter.

Gruß,
Stefan
0

#5 Mitglied ist offline   dönertier 

  • Gruppe: aktive Mitglieder
  • Beiträge: 26
  • Beigetreten: 20. August 07
  • Reputation: 0

geschrieben 09. September 2007 - 20:42

man o man und ich hab mir die arbeit mit den schleifen gemacht und dann gibt es pow.
Da sieht man ma wieder: Google is your friend.
Aber dankeschön für die Antwort. Hab mein Programm mal danach umgeschrieben und erweitert. Hab vorher versucht das Problem selbst zu lösen indem ich alles mal nach double packe. Sieht jetzt so aus:

// Taschenrechner
// von: Mir
#include <iostream>
#include <math.h>
#include <iomanip>

using namespace std;


int main(int nArg, char* pszArgs[])

{

cout << "Willkommen in meinem kleinen Taschenrechner!\n";
cout << "Erlaubt ist +,-,*,/,%, die Fläche eines Kreises ausrechnen und potenzieren.\n";
cout << "Zum potenzieren ! als Operation eingeben. Die Zahl danach ist die Hochzahl.\n";
cout << "\"p\" ist das Zeichen für Pi. Die zweite Zahl spielt keine Rolle\n";
cout << "Viel Spass!!!\n\n";
int Endlosschleife;
Endlosschleife = 0 ;
while (Endlosschleife = 1)
{


double dZahl1;
double dZahl2;
char cOperation;
double dErgebniss;


cout << "Geben sie ihre Formel ein: ";
cin >> dZahl1 >> cOperation >> dZahl2;





switch (cOperation)
{
case '+':
dErgebniss = dZahl1+dZahl2;
break;

case '-':
dErgebniss = dZahl1-dZahl2;
break;

case '*':
dErgebniss = dZahl1*dZahl2;
break;
case '/':
dErgebniss = dZahl1/dZahl2;
break;

case '!':
dErgebniss = pow(dZahl1,dZahl2);
break;

case 'p':
dErgebniss = dZahl1*3.141592654;
break;

case '%':
dErgebniss = (dZahl1/100)*dZahl2;
break;

default:
cout << "Irgendwas haben sie falsch gemacht.";
cout << "\n\n";
}
cout << dZahl1 << " " << cOperation << " " << dZahl2 << " = " << fixed << dErgebniss << "\n\n";

}

return 0;
}



Jetzt hab ich noch eine Frage. Gibt es einen logischen Operator, mit dem ich überprüfen kann, ob dZahl2 nur aus Zahlen besteht?

@Diewie: Wie hast du das so als Quellcode da reinbekommen?

Dieser Beitrag wurde von dönertier bearbeitet: 10. September 2007 - 17:19

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0