Witam.
Mam program w Pascalu wyglądający tak:
program wydawaniereszty;
‹$APPTYPE CONSOLE›
var k,zl,gr:integer;
begin
writeln('podaj ilosc zl: ');
readln(zl);
writeln('podaj ilosc groszy: ');
readln(gr);
k:=zl*100+gr;
writeln('Banknotow 200zl:',k div 20000);
k:=k mod 20000;
writeln('Banknotow 100zl:',k div 10000);
k:=k mod 10000;
writeln('Banknotow 50zl:',k div 5000);
k:=k mod 5000;
writeln('Banknotow 20zl:',k div 2000);
k:=k mod 2000;
writeln('Banknotow 10zl:',k div 1000);
k:=k mod 1000;
writeln('Monet 5zl:',k div 500);
k:=k mod 500;
writeln('Monet 2zl:',k div 200);
k:=k mod 200;
writeln('Monet 1zl:',k div 100);
k:=k mod 100;
writeln('Monet 50gr:',k div 50);
k:=k mod 50;
writeln('Monet 20gr:',k div 20);
k:=k mod 20;
writeln('Monet 10gr:',k div 10);
k:=k mod 10;
writeln('Monet 5gr:',k div 5);
k:=k mod 5;
writeln('Monet 2gr:',k div 2);
k:=k mod 2;
writeln('Monet 1gr:',k div 1);
k:=k mod 1;
readln;
end.
I muszę go tak zmodyfikować, aby wyświetlał tylko te banknoty i monety, które są potrzebne do wydania reszty, jednak nie mam na to pomysłu. Jeśli ktoś pomoże to będę bardzo wdzięczny :)
Każdy algorytm powstaje w taki sam sposób. Zapisujesz na kartce wszystkie czynności krok po kroku, które będziesz wykonywał aby spełnić założenia.
Przy wydawaniu reszty zaczyna się od największych nominałów, stopniowo dochodząc do najdrobniejszej końcówki.
Przykładowo masz do wydania 37 zł.
37 to mniej niż 200 zł, więc ten banknot nie jest potrzebny. To samo z banknotami 100 i 50 zł. Ale 20 zł już jest mniejsze.
Wyciągasz więc z szuflady na pieniądze 20 zł i odejmujesz od pozostałej reszty. Czyli musisz znaleźć jeszcze 17 zł (37 - 20 = 17). Możesz sobie ustawić znacznik jakiś, żeby nie porównywać znowu od 200 zł, tylko zacząć od 20. I porównujesz tak w kółko, aż do wydania zostanie 0 zł.
ad. Narmo:
ale ten program tak właśnie działa :) sęk w tym, że w wyniku powinien wyświetlać tylko potrzebne nominały, a reszty nie. I tego nie umiem zrobić :)
To w czym problem? Tworzysz tablicę składającą się z 14 komórek integerów. Jeżeli banknot lub moneta są potrzebne do wydania reszty, to do konkretnej komórki tablicy dodajesz 1. Potem przy pętli wyświetlającej ifami sprawdzasz, czy w danej komórce jest wartość większa od zera. Jeżeli tak, to wyświetla jej zawartość w stylu writeln('Banknotów 200 zł: 'x[j]), a jeżeli nie, to nic nie wyświetla.
Dobra, spytam inaczej - jeśli ktoś mi po prostu napisze ten fragment kodu w Pascalu to będę wdzięczny :)
modyfikacja szkolna ale powinna działać, oczywiście zakładam, ze ten twój program działa bo z pascalem nie miałem już wspólnego nic od jakichś 10-15 lat.
Przed każdym writeln dodajesz warunek - dokładnie nie pamiętam składni, wiec możliwe, że coś tam będziesz musiał zmodyfikować.
if k > 0 writeln (i tu dalej z twojego programu). Podmieniasz w ten sposób każdą linijką z writeln. Powinno wystarczyć.
Niestety nie działa ;/
spróbowałem tak:
if k > 0 then writeln('Banknotow 200zl:',k div 20000);
k:=k mod 20000;
if k>0 then writeln('Banknotow 100zl:',k div 10000);
k:=k mod 10000;
(...)
I dalej wyświetla niepotrzebne nominały.
EDIT:
dobra, mam.
f k > 20000 then writeln('Banknotow 200zl:',k div 20000);
k:=k mod 20000;
teraz działa :)
Bardzo dziękuję za pomoc :)
Pozdrawiam.