środa, 28 października 2015

Rozwiązywanie problemów-Problem kasjera-wydawanie reszty

Problem wydawania reszty – zagadnienie z dziedziny algorytmiki, problem polegający na wybraniu z danego zbioru monet o określonych nominałach takiej konfiguracji, by wydać żądaną kwotę przy użyciu minimalnej liczby monet. Jego rozwiązania są wykorzystywane w automatach z napojami, bankomatach itd.
Algorytm – skończony ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego rodzaju zadań. Słowo „algorytm” pochodzi od staroangielskiego słowa algorism.

Metody rozwiązywania problemu kasjera:

                                      1)Opis słowny algorytmu wydawania reszty:
Dane:Kwota pieniędzy do wydania ,nominały banknotów i bilonu uporządkowane malejąco
Wyniki:Ilość poszczególnych nominałów banknotów i bilonu
Krok 1:Ustalenie wartości początkowych
Krok 2:Sprawdzamy,ile razy najwyższy nominał mieści się w kwocie do wydania
Krok 3:Obliczamy resztę do wydania:poprzednia kwota-obliczona ilość*nominał
Krok  4:Przechodzimy do niższego nominału
Krok 5;Jeśli reszta do wydania =0 [stop] w przeciwnym razie powtarzamy kroki 2-4
                                     2)Schematy blokowe,ukazujące sposób wydawania reszty:




3)Rozwiązanie problemu za pomocą programu Excel:

                                       
                                                                                                                                                                                   4)Rozwiązywanie problemu za pomocą programu C++-LISTING:
 //Wydawanie reszty, C++

#include <iostream>
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{
  //tablica dostepnych nominalow
  int N[8]={200, 100, 50, 20, 10, 5, 2, 1};
  int R,P, i;

  cout << "Podaj reszte do wyplacenia: ";
  cin >> R;

  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
      cout << N[i] << " x " << P << endl; //wypisz wynik
    }
    i++;            //rozpatrz kolejny nominal
  }

  system("PAUSE");
  return 0;
}
                                                                                                                                                                    6)Rozwiązywanie problemów za pomocą programu VBA:

program Reszta; {obliczenia w petli WHILE} 
uses crt;
const N: Array [1..8] of integer = (200, 100, 50, 20, 10, 5, 2, 1);
var i,P,R: longint;
begin
clrscr;
Write('Podaj reszte do wyplacenia: ');
ReadLn(R);
i:=1;
while (R>0) do     {dopoki nie wydano calej reszty}
      begin
         if R>= N[i] then  {sprawdz czy mozna wydac danym nominalem}
             begin
                   P:= R div N[i];  {ile razy wydac dany nominal}
                   R:= R - (P*N[i]);{zmniejsz reszte o wydany nominal}
                   WriteLn(N[i], ' x ', P); {wypisz wynik}
              end;
              inc(i);         {rozpatrz kolejny nominal}
      end;
repeat until keypressed;
end.

Brak komentarzy:

Prześlij komentarz