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: { 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?? |
|
DejaVu |
» 2012-06-30 22:40:57 |
|
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 |
|
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. float stealvalue[ 4 ];
cout << "\nPotajemnie obrabiono nasza wioske!\n"; if( days > 7 && days <= 20 ) { for( int i = 0; i > 3; i++ ) stealvalue[ i ] = rand() % 25; } if( days > 20 && days <= 35 ) { stealvalue[ 1 ] = rand() % 33; } if( days > 35 && days <= 50 ) { stealvalue[ 1 ] = rand() % 38; } if( days > 50 ) { stealvalue[ 1 ] = 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 ] ); } }
|
|
szymczak1503 |
» 2012-07-03 23:50:39 { 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 |
|
ison |
» 2012-07-04 00:22:31 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 |
|
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. 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); |
|
« 1 » |