Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Program do pokazywania ilość użytych nominałow

checumis 30 Mar 2013 23:57 2313 8
  • #1 30 Mar 2013 23:57
    checumis
    Poziom 7  

    Witam,
    chciałbym napisać program pokazujący mi , ile banknotów i monet potrzeba do wydania reszty. Oto mój kod:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Wiem, że mozna to zrobić za pomocą 14 pętli "while", ale staram się stworzyć coś szybszego.
    Moim problemem jest :
    1) Czy musze tworzyć kolejną zmienną, aby wyświetlić sumę banknotów i monet?
    2) Ogólnie w tym porgramie coś zawodzi, ponieważ podczas wyswietlania mi kolejno wartości użytych nominałów wyskakują mi jakies duże minusowe wartości: -24......., byłbym wdzięczny, gdyby ktoś był skory zwrócić mi uwagę w czym leży problem.
    Uprzedzam dopiero zaczynam z c++ zatem prosze o wyrozumiałość.

    0 8
  • #2 31 Mar 2013 10:34
    starepc.pl
    Poziom 24  

    Uprzedzam, że takie zadanie może się kiedyś pojawić na rozszerzonej maturze z Informatyki - CKE użyło go podczas standaryzacji.

    Jak dla mnie skomplikowałeś, możesz to zrobić przez jedno while, potem if'em porównać, czy reszta jest większa od dostępnego nominału, jeżeli tak, to odejmij od kwoty ten nominał i sprawdź ponownie. Nie mam dostępu do kompilatora, żeby Ci to teraz napisać na szybko.

    Pozdrawiam[/code]

    0
  • #3 01 Kwi 2013 01:33
    checumis
    Poziom 7  

    Tak ,jak Ty proponujesz zrobiłem tzn. jest jedno while i if, ale nie wiem, jak wyświetlić, ile operacji wykonało się w danego warunku( ile w if , a ile w else). Poza tym nie jestem do końca pewien,czy wykorzystany przeze mnie schemat do rozwiązania zadania jest niezawodny, tj, czyb nie brakouje mi niekiedy 1 grosza.

    0
  • #4 01 Kwi 2013 14:04
    Akane
    Poziom 27  

    Proponuję podobne rozwiązanie, uwzględniające zasoby kasy - ile i jakie banknoty możemy wydać. Program wypisuje co wydaje i sprawdza, czy jest w stanie wydać.
    Nie używam w nim ułamków - wartości w złotówkach od razu zmieniam do wartości w groszach (razy sto)

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #6 02 Kwi 2013 00:05
    checumis
    Poziom 7  

    Dziękuję bardzo za odpowiedzi, ale chodzi mi bardziej o to, żeby ktoś podpowiedział mi' gdzie jest błąd w moim rozumowaniu oraz powiedział w jaki sposób można podliczać ilość wykonanego warunku. Dlafor wystarczy dodać jedną zmieną,która powiększa się o 1 po każdej pętli. Interesuje mnie, czy takie coś jest możliwe dla if ,a jeśli tak to jak to zrobić?

    0
  • Pomocny post
    #7 02 Kwi 2013 20:49
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    ad 1) Nie ma takiej potrzeby
    ad 2) tu już gorzej... Masz zdefiniowane dwie tablice różnych typów:
    int B[ ] ....
    double M[ ] ...
    oraz zmienną i, którą indeksujesz te tablice. Dopóki działasz na tablicy B, wszystko w porządku za każdym przebiegiem zmienna i zwieksza swoją zawartość o 1, ale zanim przejdziesz do tablicy M musisz zmienną "i" wyzerować albo (chyba prościej) w tablicy M przed jej pierwszą wartością wstawić tyle "lipnych" elementów np zer, ile zawiera tablica B.

    A teraz:
    Najlepiej, jak liczby double przekonwertuje się (w miarę możliwości) do typu long int. Wtedy ograniczysz błędy porównań w instrukcjach warunkowych wynikające z zaokrągleń.

    Oto przykładowy program:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #8 03 Kwi 2013 02:23
    checumis
    Poziom 7  

    Dziękuję Ci bardzo Towje wskazówki okazały się najbardziej opomocne, jednak dalej nie potrafię wymusić ,aby program pokazywał mi tylko ilość wykonanych operacji wenątrz if. Zatem stworzyłem coś takiego:

    Kod: cpp
    Zaloguj się, aby zobaczyć kod

    Wydawało mi się, że takie rozumowanie jest najprostsze,ale okazało się, że i w nim ukrywa się bład, ponieważ program nie wyświetla prawidłowych wyników. Przy kwotach z 1 groszem lub 9 zawsze brakuje monety. Ma ktoś pomysł ,jak temu zaradzić? Rozumiem, że spowodowane to jest błędem zaokrągleń.
    Pozdrawiam

    0
  • #9 04 Kwi 2013 21:08
    Krzysztof Gustaw
    Poziom 23  

    Witam!
    Spróbuj użyć funkcji round(x) która zaokrągla x do najbliższej liczby całkowitej zgodnie z regułami zaokrąglania, no i podtrzymuję swoją sugestię konwersji do liczb jakiegoś typu całkowitego: pomnóż przez ilość znaczących miejsc po przecinku, zaokraglij funkcją round() do najbliższej wartości całkowitej i zrzutuj do jakiegoś typu całkowitoliczbowego a Twoje problemy znikną. Nota bene, jest to problem również bardziej doświadczonych programistów:).Przesyłam Ci Twój program z tymi czternastoma pętlami while rozszerzony o funkcję zaokrąglij(), który u mnie jakoś działa ale z wiadomych względów nie jestem w stanie sprawdzić wszystkich przypadków.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0