Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem mit der berechnung (Prozent)

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 <
000
04.07.2007, 10:34 Uhr
~gast86
Gast


Ich hab den Gewinn, den durchlauf der Spiele, und den einsatz. daraus soll ich jetzt die berechnung machen wie hoch der gewinn in % ist.


C++:
info.sum=(double)(info.win/(info.counter*getnvram(el_bet)))*100L;


info.sum ist ein double
info.win ist der gesammt gewinn der bis jetzt gewonnen worden ist.
getnvram(el_bet) ist der einsatz (unsigned long glaube ich ).

wenn ich jetzt ein gewinn von 40 hane und der counter ist 2 gibt er mir ein prozent von 200 aus. mein problem ist das er auch falsch rundet.
bei der ausgabe hab ich "%f" ich glaube auch das die berechnung auch falsch ist
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
04.07.2007, 10:42 Uhr
KFC Embryo
Ein Huhn


Wie hoch ist dein Einsatz?
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
04.07.2007, 10:49 Uhr
~gast86
Gast


der ist 10 das steht in der el_bet weil es variieren kann. aber jetzt in dem fall ist es 10
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.07.2007, 10:55 Uhr
KFC Embryo
Ein Huhn


Du muss noch unterscheiden denn wenn die Zahl zweistellig ist gilt:


Code:

info.sum=(double)(info.win/(info.counter*getnvram(el_bet)))*10L;



Probier es mal mit einer einstelligen Zahl da wirst du keine Probleme haben.

So sollte es funktionieren:


Code:

if (info.win <=9)
   info.sum=(double)(info.win/(info.counter*getnvram(el_bet)))*100L;
   else
        info.sum=(double)(info.win/(info.counter*getnvram(el_bet)))*10L;
End-If



mfg
--
An nescis, mi fili, quantilla prudentia mundus regatur?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.07.2007, 11:52 Uhr
~gast86
Gast


das Problem es geht nicht unter 10 weil der bet 0,10 Pfund ist und in der variable steht es als 10. ich kann nicht 0,09 pfund machen weil der mindest einsatz 0,10 pfund ist.

wenn ich also

gewinn ist 40 (also 0,40 pfund)
counter: 1
prozent: 40,000..
(etwas gewonnen)

gewinn:40
counter:2
prozent:20
(nichts gewonnen)

gewinn:40
counter 3
prozent:10
(nichts gewonnen)

gewinn:40
counter:4
prozent:10
(nichts gewonnen)

gewinn:40
counter:5
prozent:0

auch mit der if abfrage kommt es. Ich glaub er rundet es falsch leider weiß ich aber nicht wie ich es beheben kann.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.07.2007, 14:57 Uhr
~WarMal
Gast


Hmm,

das sieht doch alles richtig aus. Wenn man einen Gewinn von 40 hat 2 mal für 10 Öcken Einsatz gespielt hat, dann ist es doch klar, dass da 200 % rauskommt, oder? Wo ist denn das Problem überhaupt?
Es kann allerdings vielleicht Rundungsfehler geben, wenn alle Variablen, die du reinsteckst integers sind, da denke ich noch mal drüber nach, ich hab grade keine Compiler zur Hand :-)
Noch mal eine Anmerkung von der Logik: Der Gewinn ist doch (Auszahlung - Einsatz) / Einsatz, und nicht Auszahlung / Einsatz, oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
05.07.2007, 09:34 Uhr
~gast86
Gast


ich bin mir zwa nicht ganz sicher was du damit jetzt meinst. wahrschienlich liegt es daran das ich noch nicht ganz munter bin. (Noch mal eine Anmerkung von der Logik: Der Gewinn ist doch (Auszahlung - Einsatz) / Einsatz, und nicht Auszahlung / Einsatz, oder?)

prozent=(gewinn/(gesamte spiele*meinsatz))*100
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
05.07.2007, 11:06 Uhr
~gast86
Gast


habs hin bekommen. keine ahnung an was es liegt aber jetzt gehts.hab nichts verändert von euch aber jetzt gehts. danke noch mals an alle!!

ich hab aber jetzt noch ein problem.

Ich hab eine arry das heist info.wlc[32] in den arry ist die position was gewonnen ist(das symbol) und er rechnet es dann zusammen der code:

Code:
for (int uiii=0;uiii<32;uiii++)
    {
        sprintf(info.xwlc,"index: %d Counter: %lu",uiii,info.wlc[uiii]);
        debugxy(350,0+uiii*15,info.xwlc);
    }


jetzt muss ich ein prozent draus machen.

in den arry info.wlc steht leider nicht die ganze zahl sonder mehrere. sprich wenn der index 1 den counter 3 hat dann steht in den der variable 1 1 1 drinnen. die schleife funktioniert. nur leider hab ich keine ahnung wie ich daraus prozente mache.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
05.07.2007, 11:10 Uhr
~gast86
Gast


hab mir schon überlegt ein 2D arry zu machen wo dann der index und der counter drinnen steht aber da hab ich eben das problem wie ich das mache das er sich es merkt an welchem index der höchste counter ist damit er dann 100% hat und mit den anderen dann rechne.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.07.2007, 07:46 Uhr
~WarMal
Gast


Igitt, da ist ja alles voller C-Code

Also, die letzten beiden Posts waren mir jetzt schleierhaft, aber wenn Du wirklich nur den prozentualen Gewinn haben willst, brauchst Du absolut keinen Array. Ich gehe mal davon aus, dass info ein struct ist, indem du mehrere Informationen gruppierst?

Du zählst einfach bei jedem Spiel die Spielezahl weiter hoch.

C++:
info.counter++


Außerdem musst Du natürlich die Gewinnsumme immer aktualisieren:

C++:
info.win += aktuellerGewinn


So, wenn Du dann den prozentualen Gewinn haben willst, dann machst Du:

C++:
info.sum = ( double(info.win) / (info.counter*getnvram(el_bet)) ) * 100 ;


...was natürlich nur ohne heftige Rundungsfehler funktioniert, wenn info.sum ein double oder float ist und kein Integer.


Wenn Du jetzt aber doch alle Einzelgewinne speichern willst, dann mach das doch einfach wie folgt. Erstmal in deinem struct einen passenden container anlegen. Ich nehme einen Vector, weil man dann bei jedem Spiel die praktische Memberfunktion push_back nutzen kann:

C++:
vector<int> gewinne;



Dann bei jedem Spiel den neuesten Gewinn abspeichern:

C++:
info.gewinne.push_back(aktuellerGewinn);



Dann kannst Du Dir jederzeit die Gewinnstatistik produzieren:

C++:
double gesamtgewinn = 0;
for ( vector<double>::size_type i = 0; i != info.gewinne.size(); i++)
{
    cout << "Spiel Nr. " << (i+1) << "\t Gewinn: " << info.gewinne[i] << endl;
    gesamtgewinn += info.gewinne[i];
}

// Gewinn in Prozent ausrechnen:
double prozentgewinn = 100 * gesamtgewinn / (info.gewinne.size() * einsatz);

// Den Gesamtgewinn anzeigen
cout << "Insgesamt haben Sie " << gesamtgewinn << " Euro gewonnen." << endl
       << "Sie haben also " << prozentgewinn << " Ihres Einsatzes wiedergewonnen."
       << endl;

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: