• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Wydawanie reszty - program się wysypuję

Object Storage Arubacloud
0 głosów
569 wizyt
pytanie zadane 3 lutego 2021 w C i C++ przez Hipolit Roszkowski Obywatel (1,480 p.)

Stworzyłem program, który oblicza ilość nominałów, którą wydaję, a jeśli nie ma takiej ilość monet to wypisuję komunikat i kończy program. Cały czas jednak borykam się z błędem, którego nie jestem w stanie zlokalizować a przez którego cały program się wysypuję. Proszę o pomoc i wyjaśnienie czemu dochodzi do takiej sytuacji.

Błędy które są komunikowane: ,Floating point exception , Program finished with exit code 136

#include <iostream>
using namespace std;

int main(){
        int nominaly[15]={50000,20000,10000,5000,2000,1000,500,200,100,50,20,10,5,2,1};
        int ileWydano[15]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
        int iloscDostepnychNominalow[15]={5,2,3,5,6,32,12,22,13,12,222,123,1234,123,1111};

        double reszta;
        cout<<"Z czego wydac reszte? = ";
        cin>>reszta;
        int resztaInt = (int)(reszta*100);

        int i=0;
        int suma = 0;

        for (i=0; i<15; i++){
            suma = suma + (iloscDostepnychNominalow[i]*nominaly[i]);
        }

        if (suma > resztaInt){
                while(resztaInt>0){
                    if(iloscDostepnychNominalow[i] >= resztaInt/nominaly[i]){
                        ileWydano[i]=(resztaInt/nominaly[i]);
                        resztaInt = resztaInt%nominaly[i];
                    }

                    else{
                        ileWydano[i]=0;
                    }

                    i++;
                }

        cout<<"nominaly="<<endl;
        for(int i=0; i<15;i++){
            cout<<"nominal="<<(double)nominaly[i]/100<< "PLN,\t liczba="<<ileWydano[i]<<endl;
        }
}
    else cout<<"NIE MOZNA WYDAC RESZTY -- BRAK NOMINALOW";
    return 0;
	system("pause");
}

 

1 odpowiedź

+2 głosów
odpowiedź 3 lutego 2021 przez Radfler VIP (101,030 p.)
wybrane 3 lutego 2021 przez Hipolit Roszkowski
 
Najlepsza

Problem jest ze zmienną `i`, a konkretnie ze sposobem w jaki jej używasz w drugiej pętli => nie jest ona prawidłowym indeksem żadnej z używanych tablic => wychodzisz poza zakresy i masz `undefined behaviour`.

Na twoim miejscu poprawiłbym pierwszą pętlę w taki sposób:

int suma = 0;
 
for (int i=0; i<15; i++){ // zmienna `i` jest teraz tutaj
  suma = suma + (iloscDostepnychNominalow[i]*nominaly[i]);
}

A drugą w taki:
 

for(int i = 0; resztaInt>0 && i < 15; ++i){ /* ... */

 

Podobne pytania

0 głosów
2 odpowiedzi 1,385 wizyt
+1 głos
1 odpowiedź 306 wizyt
pytanie zadane 8 lutego 2022 w Algorytmy przez Billy Użytkownik (680 p.)
0 głosów
1 odpowiedź 1,148 wizyt
pytanie zadane 31 marca 2018 w C i C++ przez kosciuszkobest Nowicjusz (120 p.)

92,595 zapytań

141,444 odpowiedzi

319,716 komentarzy

61,980 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...