Algorytm – w matematyce oraz informatyce skończony ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego rodzaju zadań. Słowo "algorytm" pochodzi od starego angielskiego słowa algorism, oznaczającego wykonywanie działań przy pomocy liczb arabskich
Algorytm ma przeprowadzić system z pewnego stanu początkowego do pożądanego stanu końcowego. Badaniem algorytmów zajmuje się algorytmika. Algorytm może zostać zaimplementowany w postaci programu komputerowego.
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 problemu kasjera:
- za pomocą listy kroków
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
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
- programem VBA
- programem Turbo Pascal - listing
1.
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.
2.
2.
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.
- programem 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}
#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}
http://katmpbsoft.blogspot.com/2012/02/kolorowanie-skadni-kodu_12.html
OdpowiedzUsuńpolecam, pseudokody i kody algorytmów staną się dużo czytelniejsze :) Jako młoda adeptka sztuki informatycznej na pewno sobie z tym tutkiem poradzisz. Pzdr!
Algorytm wydawania reszty jest klasycznym przykładem algorytmu zachłannego - w każdym kroku wybierane jest działanie *lokalnie najlepsze* - bez patrzenia w przód - "weź teraz tyle ile się zmieści".
OdpowiedzUsuńAlgorytmy zachłanne rozwiązują wiele problemów - np. wyznaczanie minimalnego drzewa rozpinającego w grafie.
Ciekawym jest pytanie czy algorytm gry w szachy jest zachłanny? Szachiści oddają pole tracąc piona lub figurę, bo za N ruchów doprowadzą dzięki temu do szach-mata. Czy można nauczyć komputery tak grać w szachy?