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

4. Podejście zachłanne w rozwiązywaniu problemów


                 Specyfikacja                                                  Dobra rada
                                                                             Zawsze dokładnie czytaj
                 Dane: kwota reszty do wydania w postaci dwóch liczby całkowitych:   specyfikację problemu.
                 liczba złotych z przedziału [0; 9] i liczba groszy z przedziału [0; 99];   Często narzuca ona typ
                 tablica NOMINALY z informacją o dostępnych nominałach – liczby   danych, który należy
                                                                             zastosować w programie.
                 całko wite (wielokrotności 1 grosza) uporządkowane malejąco.
                 Wynik: kolejne wartości nominałów potrzebnych do wydania reszty
                 podane w złotówkach.

                 Oto fragment kodu źródłowego programu Wydawanie reszty 2:

                                                                             Fragment kodu
                 1.  const int N = 9;                                        źródłowego programu
                 2.  const int NOMINALY[N] = {500, 200, 100, 50, 20, 10, 5,  Wydawanie reszty 2
                 3.                          2, 1};
                 4.
                 5.  void WydajReszte(int reszta)                              Dobra rada
                 6.  {                                                       Zauważ, że po zmianie
                 7.      int i = 0;                                          typu danych w tablicy
                 8.      while (reszta>0)                                    NOMINALY zmienił się
                                                                             również nagłówek funkcji
                 9.      {                                                   WydajReszte.
                 10.         if (reszta >= NOMINALY[i])
                 11.         {
                 12.             cout << NOMINALY[i]/100.0 << endl;
                 13.             reszta = reszta - NOMINALY[i];
                 14.         }
                 15.         else i++;
                 16.     }
                 17. }
                 18.
                 19. int main()
                 20. {
                 21.     int reszta_zlote, reszta_grosze;
                 22.      cout << "Podaj liczbe zlotych reszty: ";
                 23.     cin >> reszta_zlote;
                 24.      cout << "Podaj liczbe groszy reszty: ";
                 25.     cin >> reszta_grosze;
                 26.     WydajReszte(reszta_zlote*100 + reszta_grosze);        Dobra rada
                 27.     return 0;                                           Zauważ, że warunek
                 28. }                                                       pętli while (wiersz 8)
                                                                             jest uproszczony. Nie
                                                                             musisz się martwić
                 W liniach 22–25 pobieramy wartość kwoty do wydania – oddzielnie   o przekroczenie indeksów
               złotówki i grosze. Takie rozwiązanie pozwala łatwo przeliczyć złotówki   w tablicy NOMINALY,
               na grosze. Funkcję WydajReszte wywołujemy dla parametru wyrażonego   ponieważ funkcja
                                                                             WydajReszte operuje tylko
               w groszach (linia 26) – w tym celu trzeba przeliczyć złotówki na grosze.   na liczbach całkowitych.

                                                                                              69
   4   5   6   7   8   9   10   11   12   13   14