1.Algorytm
- sposób postępowania, który prowadzi do rozwiązania problemu lub
osiągnięcia jakiegoś celu. Ilość kroków algorytmu zależy od tego, jak
złożony jest
problem, którego on dotyczy. Liczba tych kroków zawsze będzie
skończona.
2. Problem kasjera
- często gdy robimy zakupy w sklepie możemy zaobserwować, że kasjer nie
ma jak wydać nam reszty. Najczęściej wynika to z tego, że nieumiejętnie
zużył pieniądze o małych nominałach kiedy miał możliwość posłużyć się
tymi o większej wartości. Aby uniknąć takiej sytuacji kasjer powinien
operować algorytmem wydawania reszty. Algorytm ten polega po prostu na
tym, aby przy wydawaniu reszty użyć jak najmniejszej możliwej liczby
banknotów/monet. Takie rozwiązania są zastosowane np. w bankomatach.
-Metody rozwiązania:
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
- Za pomocą schematów blokowych
1. Program
wydawanie_reszty; uses crt; var reszta : longint;
begin
clrscr;
writeln('podaj kwote: ');readln(reszta); writeln;
writeln(reszta div 200,'banknotow 200zl');
reszta:=reszta mod 200;
writeln(reszta div 100,'banknotow 100zl');
reszta:=reszta mod 100;
writeln(reszta div 50,'banknotow 50zl');
reszta:=reszta mod 50;
writeln(reszta div 20,'banknotow 20zl');
reszta:=reszta mod 20;
writeln(reszta div 10,'banknotow 10zl');
reszta:=reszta mod 10;
writeln(reszta div 5,'monet 5zl');
reszta:=reszta mod 5;
writeln(reszta div 2,'monet 2 zl');
reszta:=reszta mod 2;
writeln(reszta, ' monet 1 zl';
repeat until keypressed;
end.
2. 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.
Programem C++
//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;
}