Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Prośba do programistów

23.10.2011 21:10
😊
1
Gotman
107
Senator

Prośba do programistów

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 :)

23.10.2011 21:22
2
odpowiedz
zanonimizowany3972
87
Legend

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ł.

23.10.2011 21:27
3
odpowiedz
Gotman
107
Senator

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ć :)

23.10.2011 21:32
4
odpowiedz
zanonimizowany3972
87
Legend

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.

23.10.2011 21:33
domin12
👍
5
odpowiedz
domin12
101
Run
23.10.2011 21:38
6
odpowiedz
Gotman
107
Senator

Dobra, spytam inaczej - jeśli ktoś mi po prostu napisze ten fragment kodu w Pascalu to będę wdzięczny :)

23.10.2011 21:44
7
odpowiedz
Mark24
11
Legend

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ć.

23.10.2011 21:51
8
odpowiedz
Gotman
107
Senator

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.

23.10.2011 22:04
9
odpowiedz
Mark24
11
Legend

o, bardzo sprytnie :)

Forum: Prośba do programistów