Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problemy z wyświetlaniem wyniku po podzieleniu float z int

Ostatnio zmodyfikowano 2012-07-04 20:56
Autor Wiadomość
marcin107
Temat założony przez niniejszego użytkownika
Problemy z wyświetlaniem wyniku po podzieleniu float z int
» 2012-06-30 21:44:03
Witam mam problem z wyświetleniem wyniku po wykonania następującego działa:
C/C++
{
    float stealvalue[ 3 ];
    int limitsurowcow[ 11 ] = { 0, 2000, 5000, 8000, 10000, 14000, 18000, 20000, 25000, 30000, 50000 };
    int buildinglvls[ 15 ] = { 0, 1, 0, 1, 2, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0 };
    const int magazynnum = 4;
    int wood = 500;
    int stone = 500;
    int gold = 500;
    int days = 8;
   
    cout << "\nPotajemnie obrabiono nasza wioske!\n";
    if( days > 7 && days <= 20 )
    {
        stealvalue[ 1 ] = rand() % 25;
        stealvalue[ 2 ] = rand() % 25;
        stealvalue[ 3 ] = rand() % 25;
    }
    if( days > 20 && days <= 35 )
         stealvalue[ 2 ] = rand() % 30;
   
    if( days > 35 && days <= 50 )
         stealvalue[ 2 ] = rand() % 36;
   
    if( days > 50 )
         stealvalue[ 2 ] = rand() % 50;
   
    cout.precision( 0 );
    cout << "-" <<( stealvalue[ 1 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) << " drewna\n";
    cout << "-" <<( stealvalue[ 2 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) << " kamienia\n";
    cout << "-" <<( stealvalue[ 3 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) << " zlota\n";
    wood = wood -( stealvalue[ 1 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
    stone = stone -( stealvalue[ 2 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
    gold = gold -( stealvalue[ 3 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
}

Kiedy wywołam funkcję powyżej efekt przykładowy jest taki:
Potajemnie obrabiono nasza wioske!
-1e+002 drewna!
-1e+002 kamienia!
-4e+002 zlota!

Proszę o pomoc, żeby te liczby wyglądały normalnie, a nie jak wyżej.
-----------------------------------------
Należy dodać, że jak zrobię takie coś:  
int o = 10;
float a = 5/100;
cout << o * a;
To wynik wyniesie 0, to dlaczego tam nie może wyjść wynik na ten sam sposób??
P-59397
DejaVu
» 2012-06-30 22:40:57
To jest notacja naukowa. Zmiana ustawień opisana w lekcji: » Kurs C++Obsługa strumienia cout lekcja
P-59400
ison
» 2012-06-30 23:32:35
Należy dodać, że jak zrobię takie coś: 
int o = 10;
float a = 5/100;
cout << o * a;
To wynik wyniesie 0, to dlaczego tam nie może wyjść wynik na ten sam sposób??
ponieważ 5/100 to 0
P-59405
marcin107
Temat założony przez niniejszego użytkownika
» 2012-07-01 10:21:41
@ison
5/100 = 0.05
a o * a = 10 * 0.05 = 0.5

Tym razem mam problem z pętlą. Zanim zrobiłem pętle wszystko działało, ponieważ każdą zmienną osobno(wtedy bez tablicy float stealvalue1,2,3) losowałem i dzieliłem. Teraz są jakieś kosmiczne liczby.
C/C++
float stealvalue[ 4 ];
/*
        float stealvalue2;
        float stealvalue3;
        */

cout << "\nPotajemnie obrabiono nasza wioske!\n";
if( days > 7 && days <= 20 )
{
    for( int i = 0; i > 3; i++ )
         stealvalue[ i ] = rand() % 25;
    /*
                    stealvalue2 = rand() % 25;
                    stealvalue3 = rand() % 25;
                    */
}
if( days > 20 && days <= 35 )
{
    stealvalue[ 1 ] = rand() % 33;
    /*
                    stealvalue2 = rand() % 33;
   
                    stealvalue3 = rand() % 33;
                    */
}
if( days > 35 && days <= 50 )
{
    stealvalue[ 1 ] = rand() % 38;
    /*
                    stealvalue2 = rand() % 38;
                    stealvalue3 = rand() % 38;
                    */
}
if( days > 50 )
{
    stealvalue[ 1 ] = rand() % 50;
    /*
                    stealvalue2 = rand() % 50;
                    stealvalue3 = rand() % 50;
                    */
   
   
}
stealvalue[ 1 ] = stealvalue[ 1 ] / 100;
stealvalue[ 2 ] = stealvalue[ 2 ] / 100;
stealvalue[ 3 ] = stealvalue[ 3 ] / 100;

cout.setf( ios::fixed );
cout << "-" << stealvalue[ 1 ] *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) << " drewna\n";
cout << "-" << stealvalue[ 2 ] *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) << " kamienia\n";
cout << "-" << stealvalue[ 3 ] *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) << " zlota\n";
wood = wood - stealvalue[ 1 ] *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
stone = stone - stealvalue[ 2 ] *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
gold = gold - stealvalue[ 3 ] *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
}
}
P-59409
szymczak1503
» 2012-07-03 23:50:39
C/C++
{
    float stealvalue[ 3 ];
    int limitsurowcow[ 11 ] = { 0, 2000, 5000, 8000, 10000, 14000, 18000, 20000, 25000, 30000, 50000 };
    int buildinglvls[ 15 ] = { 0, 1, 0, 1, 2, 0, 2, 3, 1, 0, 0, 0, 0, 0, 0 };
    const int magazynnum = 4;
    int wood = 500;
    int stone = 500;
    int gold = 500;
    int days = 8;
   
    cout << "\nPotajemnie obrabiono nasza wioske!\n";
    if( days > 7 && days <= 20 )
    {
        stealvalue[ 0 ] = rand() % 25;
        stealvalue[ 1 ] = rand() % 25;
        stealvalue[ 2 ] = rand() % 25;
    }
    if( days > 20 && days <= 35 )
         stealvalue[ 1 ] = rand() % 30;
   
    if( days > 35 && days <= 50 )
         stealvalue[ 1 ] = rand() % 36;
   
    if( days > 50 )
         stealvalue[ 1 ] = rand() % 50;
   
    cout.precision( 0 );
    cout << "-" << int(( stealvalue[ 0 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) ) << " drewna\n";
    cout << "-" << int(( stealvalue[ 1 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) ) << " kamienia\n";
    cout << "-" << int(( stealvalue[ 2 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] ) ) << " zlota\n";
    wood = wood -( stealvalue[ 0 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
    stone = stone -( stealvalue[ 1 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
    gold = gold -( stealvalue[ 2 ] / 100 ) *( limitsurowcow[ buildinglvls[ magazynnum ] - 1 ] );
   
   
}
float stealvalue[ 3 ];
 - mówimy ze tablica ma 3 elementy czyli 0,1,2 , a ty odniosłeś sie do
stealvalue[ 3 ] = rand() % 25;
         wiec mały błąd.

zamieniłem typ wyświeltanego wyniku na int
sprawdz czy działa
P-59498
ison
» 2012-07-04 00:22:31
@ison
5/100 = 0.05
nie w C++ ;)

5 i 100 to liczby całkowite, więc wynik też będzie całkowity
5/100 = 0
5.f / 100.f = 0.05f
5.0 / 100.0 = 0.05
P-59499
marcin107
Temat założony przez niniejszego użytkownika
» 2012-07-04 20:56:03
Dużo kombinowałem zanim jeszcze otrzymałem Twoje rozwiązanie, mogłem napisać, że znalazłem odpowiedź.
@ison - nie będę się kłócił, pewnie masz racje
To jest odpowiedź, ewentualne deklaracje pomijam.
C/C++
if( block != 1 )
{
    float stealvalue1;
    float stealvalue2;
    float stealvalue3;
    if( days > 7 && days <= 20 )
    {
       
        stealvalue1 = rand() % 25;
        stealvalue2 = rand() % 25;
        stealvalue3 = rand() % 25;
    }
    if( days > 20 && days <= 35 )
    {
        stealvalue1 = rand() % 33;
        stealvalue2 = rand() % 33;
        stealvalue3 = rand() % 33;
    }
    if( days > 35 && days <= 50 )
    {
        stealvalue1 = rand() % 38;
        stealvalue2 = rand() % 38;
        stealvalue3 = rand() % 38;
    }
    if( days > 50 )
    {
        stealvalue1 = rand() % 50;
        stealvalue2 = rand() % 50;
        stealvalue3 = rand() % 50;
    }
   
    stealvalue1 = stealvalue1 / 100;
    stealvalue2 = stealvalue2 / 100;
    stealvalue3 = stealvalue3 / 100;
   
    cout.setf( ios::fixed );
    cout.precision( 0 );
    cout << "-" << stealvalue1 * wood << " drewna\n";
    cout << "-" << stealvalue2 * stone << " kamienia\n";
    cout << "-" << stealvalue3 * gold << " zlota\n";
    wood = wood - stealvalue1 * wood;
    stone = stone - stealvalue2 * stone;
    gold = gold - stealvalue3 * gold;
}
}

Dzięki wszystkim za pomoc, szczególnie za te dwie linijki cout.setf( ios::fixed ); oraz cout.precision(0);
P-59540
« 1 »
  Strona 1 z 1