[Pascal] bankomat, zadanie !

Odpowiedz Nowy wątek
2006-09-28 21:01
Kjupa
0

Witam. Mam problem z zadaniem z informatyki, otoz mam napisac program w Pascalu. Prosze o wyrozumialosc, poniewaz dopiero mialem jedan lekcje o tym jezyku i nie wiem dokladnie jak to obliczyc.

Tresc zadania:
Bankomat wypłacając gotówkę operuje banknotami o nominałach 100, 50, 20 i 10 oraz monetami 5, 2 i 1 zł. Wyznacz namniejszą możliwą ilość banknotów i monet potrzebną do wypłacenia określonej kwoty gotówki.
Wejście:
Pierwszy i jedyny wiersz wejścia zakończony znakiem nowej linii zawiera jedną liczbę całkowitą n z zakresu 1..65535.
Wyjście:
Pierwszy i jedyny wiersz wyjścia zakończony znakiem nowej linii powinien zawierać dwie liczby całkowite oddzielone pojedynczą spacją: minimalną ilość banknotów i monet potrzebnych do wypłacenia kwoty n złotych.

Napisalem taki program:

Program bankomat;
Var
  n: Integer;
  s,p,d,k,x,y,z,banknoty,monety: Real;

Begin
  ReadLn(n);
  s:=n/100;
  p:=(n-s*100)/50;
  d:=(n-s*100-p*50)/20;
  k:=(n-s*100-p*50-d*20)/10;
  x:=(n-s*100-p*50-d*20-k*10)/5;
  y:=(n-s*100-p*50-d*20-k*10-x*5)/2;
  z:=(n-s*100-p*50-d*20-k*10-x*5-y*2)/1;
  banknoty:=s+p+d+k;
  monety:=x+y+z;
  WriteLn(banknoty:0:0,' ',monety:0:0);
  Readln;
End.

Wszystko jest ok przy wieszych kwotach, natomiast gdy wpisze np. 13 zl to juz wyskakuje 0 banknotow i 0 monet.. Co mam zrobic?

Pozostało 580 znaków

2006-09-28 21:20
0

ja bym użył diva zamiast dzielenia.

  s:=n div 100;
  p:=(n-s*100) div 50;
  d:=(n-s*100-p*50) div 20;

Piszę programy w językach: C, C++, Java, Python, Bash, PHP, SQL.
Przyjmuję zlecenia

Pozostało 580 znaków

2006-09-28 21:34
Kjupa
0
Program bankomat;
Var
  n: Integer;
  s,p,d,k,x,y,z,banknoty,monety: Real;

Begin
  ReadLn(n);
  s:=n div 100;
  p:=(n-s*100) div 50;
  d:=(n-s*100-p*50) div 20;
  k:=(n-s*100-p*50-d*20) div 10;
  x:=(n-s*100-p*50-d*20-k*10) div 5;
  y:=(n-s*100-p*50-d*20-k*10-x*5) div 2;
  z:=(n-s*100-p*50-d*20-k*10-x*5-y*2) div 1;
  banknoty:=s+p+d+k;
  monety:=x+y+z;
  WriteLn(banknoty:0:0,' ',monety:0:0);
  Readln;
End.

Takie cos w ogole nie dziala;/ pelno bledow... Prosze o pomoc

Pozostało 580 znaków

2006-09-28 21:35
ŁF
0

w ogóle użyj liczb całkowitych. ponieważ zakres to 2^16, to możesz użyć po prostu word.


Pozostało 580 znaków

2006-09-28 21:43
Kjupa
0

Niestety nie przyjelo mi programu.... dla liczby np. 61020 program nie obliczyl nic.. tzn podal jakies liczby ujemne... Co mam robic?

Pozostało 580 znaków

2006-09-28 21:47
0

teraz będze ok (Integer był za mały LongInt wystarczył)
Masz gotowe :

program bankomat;
var Nominaly : array [1..7] of byte ;
i:byte;
wszystkieBanknoty,WszystkieMonety,Ilosc,Kwota:LongInt;

begin
Nominaly[1]:=100;
Nominaly[2]:=50;
Nominaly[3]:=20;
Nominaly[4]:=10;
Nominaly[5]:=5;
Nominaly[6]:=2;
Nominaly[7]:=1;
WszystkieBanknoty:=0;
WszystkieMonety:=0;
Write('Podaj Kwote :');
Readln(Kwota);

for I:=1 to 7 do
begin
ilosc:=Kwota div Nominaly[i];
Kwota:=Kwota-Nominaly[i]*Ilosc;

if Nominaly[i]>5 then WszystkieBanknoty:=WszystkieBanknoty+ilosc else   
WszystkieMonety:=WszystkieMonety+Ilosc;
end;
Writeln(WszystkieBanknoty,' banknoty');
Writeln(WszystkieMonety,' Monet');

readln;
end.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0