Beep- zahlenspiel

X

xan1cel

Hi an alle!
Also ich brauche sehr dringend Hilfe bei diesem BeepSpiel...
Und zwar liegt der Fehler dadrin, dass ich die modf-Funktion (so schätze ich) nicht richtig verwende, jedenfalls sind Merker[1] und Merker[2] immer 0 oder 1...

Kann mir jemand nen Tipp geben? Danke ;)

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

class beep
{
public:
beep();
void Zahl_einlesen(int Zahl);
void ausgeben_berechnen();
private:
int beepzahl;
};

beep::beep()
{
beepzahl = 0;
}

void beep::Zahl_einlesen(int Zahl)
{
beepzahl = Zahl;
}

void beep::ausgeben_berechnen()
{
int i;
float cache;
double Merker[3];

for(i = 1; i<101; i++)
{
cache = i/10;
Merker[0] = i % beepzahl;
Merker[1] = modf(cache, &Merker[2]);

cout << "merker1: " << Merker[1] << endl;
cout << "merker2: " << Merker[2] << endl;

if (Merker[0] == 0)
{
cout << "BEEP!" << endl;
}
else {
if (Merker[1] == 3)
{
cout << "BEEP!!" << endl;
}
else {
if (Merker[2] == 0.3)
{
cout << "BEEP" << endl;
}
else {
cout << i << endl;
}
}
}
getch();
}
}



void main()
{
int Zahl;
beep Rechner;

do
{
cout << "Bitte geben Sie die Beepzahl ein: "; cin >> Zahl;

} while(Zahl<3 || Zahl > 9);

Rechner.Zahl_einlesen(Zahl);

Rechner.ausgeben_berechnen();
}
 
xan1cel hat gesagt.:
Hi an alle!
Also ich brauche sehr dringend Hilfe bei diesem BeepSpiel...
Und zwar liegt der Fehler dadrin, dass ich die modf-Funktion (so schätze ich) nicht richtig verwende, jedenfalls sind Merker[1] und Merker[2] immer 0 oder 1...
Also bei mir nicht. cache läuft ja von 1 bis 10. Bei mir ist daher Merker[1] immer 0 da die Zahlen offensichtlich genau (ohne Nachkommastelle) in einem float (bzw. double) gespeichert werden kann.

Merker[2] ist logischerweise dann jeweils 1 bis 10.

Du solltest vielleicht keine Integer-Division durchführen bei der Zuweisung
Code:
cache = i/10;
sondern
Code:
cache = i / 10.;
und der Aufruf von modf sollte vermutlich lauten
Code:
Merker[2] = modf (cache, &Merker[1]);

Allerdings ist es keine gute Idee eine Gleitkommazahl auf einen exakten Wert zu prüfen, da nicht jeder Integer Wert sich exakt in einen Gleitkommawert speichern läßt. Warum verwendest du nicht ausschließlich Integer?
Code:
if (i % beepzahl == 0) {
  // ...
} else if (i / 10 == 3)
  // ...
} else if (i % 10 == 3)
  // ...
}

Die Methode main muß den Rückgabetyp "int" haben. Siehe z.B. http://www.parashift.com/c++-faq-lite/newbie.html#faq-29.3

PS: bitte verwende doch das nächste mal die Code Tags.
 
Zurück