Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » unsigned long long und 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 < [ 2 ]
000
28.01.2007, 20:42 Uhr
xXx
Devil


Hab ein Programm schreiben was etwas länger zum berechnen Braucht, weil es von 0 bis zum maximal für unsigned long long möglichen Zahlenbereich durcharbeitet. D.h. wollte ich dem User eine Prozessbar anzeigen. Aber wie kann ich denn bei einer Division dann die Nachkommastellen mit dabei haben ... in nen double zu casten würde mir die Vorkommastellen wegnehmen, da ich da ja nicht so weit komme ... hat jemand ne Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
28.01.2007, 20:43 Uhr
tobias
hmm....


bin selber c++ anfänger aber evtl. so


C++:
unsigned long long double


--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
28.01.2007, 20:48 Uhr
xXx
Devil


aja

C++:
unsigned long long number = 0;

for (unsigned long long x = 0; x < number; ++x)
{
    unsigned short show_percent = 0;
    unsigned short cur_percent = (x / number * 10); // Hier ist das Problem ... (*10 anstelle von *100 ist gewollt, damit das in 10er Schritten geht ;)
    if (cur_percent > show_percent)
    {
        ++show_percent;
        cout << _T(".");
    }
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
28.01.2007, 20:58 Uhr
tobias
hmm....


xd erklär mal bitte was du genau willst...

also solange er die zahlen 0 - z.b. 568978524

durchläuft soll ein ... erscheinen?
--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
28.01.2007, 21:03 Uhr
tobias
hmm....


ungefähr so was du meinst?


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

int main(void)
{
    unsigned long long int number = 23;
    int prozent;

for (int i = 1; i < number; i++)
{
    prozent = 100-(i*100/number);
     cout << "Noch " << prozent << "%" << endl;
}
system("PAUSE");
}




und hier nochmal:


C++:
#include <iostream>
#include <stdlib.h>
using namespace std;




int main(void)
{
    unsigned long long int number = 169;
    int j;
    int percent = 0;
        
for (int i = 1; i < number; i++)
{
    j++;
    percent = (100-((i*100)/number));
    
    if (j == 5)
    {
        j = 0;
        system("cls");
        cout << "Noch " << percent << "%" << endl;
    }
}
cout << "Fertig" << endl;
system("PAUSE");
}




edit: ich bin schon bei 80%
--
Danke

Dieser Post wurde am 28.01.2007 um 21:39 Uhr von tobias editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
28.01.2007, 21:38 Uhr
tobias
hmm....


edit: ich habe gerade viel getestet... ich empfehle die hier:


C++:
#include <iostream>
#include <stdlib.h>
using namespace std;




int main(void)
{
    unsigned long long int number = 56987;
    int j;
    int percent = 0;
        
for (int i = 1; i < number; i++)
{
    j++;
    percent = (100-((i*100)/number));
    
    if (j == 10)
    {
        j = 0;
        system("cls");
        cout << "Noch " << percent << "%" << endl;
    }
}
cout << "Fertig" << endl;
system("PAUSE");
}



wenn das mal 2 min läuft dann siehste wies von 100% auf 99 etc. geht
--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
28.01.2007, 21:45 Uhr
Blubber2063



Also das wird nur Random Ergebnisse liefern, denn du hast j nicht initialisiert und ich wage zu bezweifeln das du für diese Schleife auf einem halbwegs aktuellen Rechner 2 min brauchst .

Achso zur Sicherheit(habs mal Compiliert, sonst hätte ich jetzt auch nicht dran gedacht) du solltest die Zahlen die du vergleichst alles signed oder unsigned machen, sonst kannst du nen Fehlerhaften Vergleich kriegen. Achja das System böse ist solltest du hier noch mal nachlesen, und wenn du das ganze ohne cls machst, das verlangsamt das ganze erheblich, dann bist du in maximal 2 sek fertig(etwas älterer Rechener).

Dieser Post wurde am 28.01.2007 um 21:52 Uhr von Blubber2063 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
28.01.2007, 21:57 Uhr
tobias
hmm....


ja aber ohne cls habe ich ich ja ne liste von prozentzeilen..

j ist dafür da, das alle 10 mal nur eine ausgabe erzeugt wird, sonst erhält man:

100
99
99
99
98


und nein das braucht bei mir viel länger als 10 min aber nach 2 min geht es von 100 auf 99 runter.....und immer weiter...

system ist bad ich weis aber ich benutz es ja nur damit die console offen bleibt und ich ein leeres fenster habe, denn die clscr funktion von flosoft in der faq funktioniert nämlich nicht...
--
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
28.01.2007, 22:01 Uhr
Blubber2063



Aber du weisst schon das system("cls") ein externes Programm startet, das ist der Grund warum das bei dir 10 min läuft, nimm es raus und der Code läuft in wenigen Sekunden durch. Das säubern der Console geht manuell garantiert schneller und die Anzeige soll ja nicht seinen Rechenprozess ausbremsen, das wäre kontraproduktiv, wobei ich die ganze Progressbar eh in nem extra Thread dispatchen würde, Ausgaben dauern einfach zu lange im Vergleich mit normalen Operationen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
28.01.2007, 22:08 Uhr
tobias
hmm....


ok... trotzdem habe ich eine frage:


C++:
#include <iostream>
#include <stdlib.h>
using namespace std;




int main(void)
{
    unsigned long long int number = 5000;
    int j;
    int j2;
    int percent = 0;
        
for (int i = 1; i < number; i++)
{
    j++;
    j2++;
    percent = (100-((i*100)/number));
    
    if (j2 == 200)
    {
           j2 = 0;
           cout << '\a' << endl;
    }
    
    if (j == 10)
    {
        j = 0;
        system("cls");
        cout << "Bitte haben sie einen Moment geduld ...[" << 100-percent << "%]" << flush;
    }
}
system("cls");
cout << '\n' << "Fertig" << endl;
system("PAUSE");
}



bei dem cout 100-percent... da hängt sich die console auf... es wird nixmehr ausgegeben.


ohne 100- funzt es wieder...
--
Danke

Dieser Post wurde am 28.01.2007 um 22:11 Uhr von tobias editiert.
 
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: