Page 6 - Informatyka na czasie. Podejście zachłanne w rozwiązywaniu problemów. Podręcznik klasa 3
P. 6

Rozdział 1. Algorytmika i programowanie w języku C++

                                  Ćwiczenie 3

                                  Wyobraź sobie, że korzystasz z automatu na dworcu kolejowym.
                                  Z jakich monet składa się reszta, jeśli automat wydaje ją najmniejszą
                                  możliwą liczbą monet, a ty płacisz banknotem 10 zł za zakup:
                                  a. wody za 2,70 zł,
                                  b. herbaty za 3,40 zł,
                                  c. przekąski za 4,19 zł?
                                  Zakładamy, że w automacie nie brakuje żadnych monet. 

                                  Napiszemy teraz program, który będzie wyznaczał nominały
                                potrzebne do wydania reszty. Przyjmijmy, że reszta jest kwotą mniej-
                                szą niż 10 zł. Będzie więc wydana wyłącznie z użyciem monet o nomi-
                                nałach: 5 zł, 2 zł, 1 zł, 0,50 zł, 0,20 zł, 0,10 zł, 0,05 zł, 0,02 zł i 0,01 zł.
                                Zapiszmy specyfi kację problemu.

                                 Specyfikacja
                                 Dane: kwota reszty do wydania – liczba z przedziału [0,01; 9,99];
                                 tablica NOMINALY zawierająca uporządkowane malejąco liczby od 5
                                 do 0,01, odpowiadające dostępnym nominałom.
                                 Wynik: kolejne wartości nominałów potrzebnych do wydania reszty.

           Algorytm wydawania reszty  Zauważ, że przedstawiony na s. 65 algorytm wydawania reszty
              Podejście zachłanne,   (zwany niekiedy algorytmem kasjera) realizuje podejście zachłanne.
                        s. 63   Wybieramy największy nominał, który jest mniejszy lub równy kwocie
                                reszty, i wydajemy go tyle razy, ile można, aby nie przekroczyć tej kwoty.
                                Następnie wybieramy kolejny nominał i powtarzamy proces. Pamięta-
                                my przy tym, aby za każdym razem zmniejszać kwotę reszty.
                                  Oto zapis algorytmu w postaci listy kroków:
                                1  Wczytaj kwotę reszty do wydania i zapisz ją w zmiennej reszta.
                                2   Ustaw  na  0  wartość  zmiennej  i  wskazującej  komórkę  tablicy
                                   NOMINALY.
                                3  Dopóki reszta>0, wykonuj kolejno kroki  4 – 7 .
                                    4  Jeśli reszta>=NOMINALY[i], to wykonaj kroki  5  i  6 .
                                       5  Wypisz na ekranie wartość NOMINALY[i].
                                       6  Pomniejsz wartość zmiennej reszta o wartość NOMINALY[i].
                                    7  W przeciwnym przypadku zwiększ i o 1.
                                  Zakładamy, że wartości groszowe będziemy wprowadzać do progra-
                                mu jako ułamki dziesiętne (stosujemy zapis z kropką zamiast przecin-
                                ka). Dlatego w kodzie źródłowym programu wykorzystamy typ zmien-
                       Typ float,   noprzecinkowy, a dokładniej użyjemy zmiennych typu float.
                       s. 245    Oto kluczowy fragment kodu źródłowego programu Wydawanie
                                reszty, zawierający definicje zmiennych oraz funkcji WydajReszte.


           66
   1   2   3   4   5   6   7   8   9   10   11