arab utworzono 16 grudnia 2015 utworzono 16 grudnia 2015 siemka mam zrobić program ktory podaje ile razy mam wydac dany nominal. problem jest gdy podam np. 2.55, wtedy pokazuje 2x1 0,5x1, 0,02x2, i 0 zl x1 a powinno byc 0,01 zl x 1 ??? #include <iostream> using namespace std; int main() { //tablica dostepnych nominalow double N[14]={20000, 10000, 5000, 2000, 1000, 500, 200, 100,50,20,10,5,2,1}; int P, i; double R; cout << "Podaj reszte do wyplacenia: "; cin >> R; R=R*100; i=0; while (R>0) //dopoki nie wydano calej reszty { if (R >= N[i]) //sprawdz czy mozna wydac danym nominalem { P=R / N[i]; //ile razy wydac dany nominal R=R-(N[i]*P); //zmniejsz reszte o wydany nominal N[i]=N[i]/100; cout << N[i] << " zl x " << P << endl; //wypisz wynik } i++; //rozpatrz kolejny nominal } return 0; }
Gość komentarz 28 grudnia 2015 komentarz 28 grudnia 2015 [spoiler]nie zabieraj sie za programowanie[/spoiler]
rafalluz komentarz 28 grudnia 2015 komentarz 28 grudnia 2015 (edytowane) Problem w tym, że operujesz na double, zmienne tego typu mają specyficzne błędy reprezentacji, np. wpisując 2.55, tak naprawdę w pamięci masz 2.5499999999999997. Żeby to obejść, trzeba korzystać z innego typu zmiennych, np. intów/longów i operować na groszach. Ewentualnie do porównania R >= N[i] uwzględnić tolerancję. Np. if(abs(R - N[i]) > 0.001)
Wciąż szukasz rozwiązania problemu? Napisz teraz na forum!
Możesz zadać pytanie bez konieczności rejestracji - wystarczy, że wypełnisz formularz.