Program bankomat.

0

Witam
Musze napisać program w Pascalu "bankomat" owy program musi:
-wydawać pieniądze w nominałach 20zl, 50zl, 100zl,
-podaje ilość banknotów do wypłacenia np. jak ma wypłacić 320zl to 100zl x3szt. i 20zl x1 szt.

Próbowałem go napisać ale mi nie wyszło.Jak podaje np.130 zl to nie powinien nic wydać bo nie obsługuje 10 zl żeby wydać pieniądze. I jeszcze jak daje np.60 zł powinien wydać 20zł x3szt.
W załączniku daje mój program .

Pilne proszę o pomoc

0

Nie wyświetlaj niczego dopóki się nie przekonasz że da rady wydać.

0
_13th_Dragon napisał(a):

Nie wyświetlaj niczego dopóki się nie przekonasz że da rady wydać.

O co ci chodzi?

0

O twój kod.

0

Nadal nie rozumiem....
może mi pomożesz mi napisał byś co mam dopisać lub zamienic zeby w moim kodzie jak podaje np.60 zl to zeby wdalo 3x20zł

0
if kwota = 10 lub 30
  nie mogę wydać kwoty, bo nie mam dziesiątek
else if kwota mod 10 <> 0
  nie mogę wydać kwoty, bo nie mam moniaczków
else 
  dwudziestki = kwota div 20
  jeśli kwota nie dzieli się przez 20
    dorzuć pięćdziesiątkę
    wyrzuć dwie dwudziestki
  setki to dwudziestki / 5 (każde pięć dwudziestek to jedna setka)
  zmniejsz ilość dwudziestek o ilość setek * 5;
  wypisz setki, pięćdziesiątki i dwudziestki
0
ŁF napisał(a):
if kwota mod 100 = 10 lub 30
  nie mogę wydać kwoty, bo nie mam dziesiątek

Co za głupi bankomat, proszę o:
130 zł a on zamiast wydać 50+20+20+20+20, chrzani o jakichś dziesiątkach
110 zł a on zamiast wydać 50+20+20+20, chrzani o jakichś dziesiątkach
itd.

0

Wklejam uniwersalne rozwiązanie, które będzie dobrze działac przy dowolnych nawet dziwnych nominałach banknotów np 11,13,17,23,:

    {$mode objfpc}
    const Multiply=10;
    const Banknots:array[0..2]of record Value,Count:Word end=
    (
      ( Value: 2; Count:0 ),
      ( Value: 5; Count:0 ),
      ( Value:10; Count:0 )
    );
    function Bankomat(Sum:DWord):Boolean;
    var Val:array of Integer;
    var I,K:Integer;
    var V:Word;
    begin
      for K:=High(Banknots) downto Low(Banknots) do Banknots[K].Count:=0;
      SetLength(Val,Sum+1);
      Val[0]:=0;
      for I:=1 to Sum do
      begin
        Val[I]:=-1;
        for K:=High(Banknots) downto Low(Banknots) do
        begin
          V:=Banknots[K].Value;
          if (I>=V)and(Val[I-V]>=0) then
          begin
            Val[I]:=K+1;
            Break;
          end;
        end;
      end;
      I:=Sum;
      K:=Val[I];
      Result:=(K>0);
      if Result then
      begin
        while K>0 do
        begin
          Dec(K);
          Inc(Banknots[K].Count);
          Dec(I,Banknots[K].Value);
          K:=Val[I];
        end;
      end;
    end;
    var Sum:Word;
    var K:Integer;
    var First:Boolean;
    begin
      for Sum:=0 to 100 do
      begin
        Write('Sume ',Sum*Multiply,' ');
        if Bankomat(Sum) then
        begin
          Write('wydajemy jako: ');
          First:=true;
          for K:=High(Banknots) downto Low(Banknots) do
          begin
            if Banknots[K].Count>0 then
            begin
              if not First then Write(' + ');
              if Banknots[K].Count>1 then Write(Banknots[K].Count,'x');
              Write(Banknots[K].Value*Multiply);
              First:=false;
            end;
          end;
          WriteLn;
        end
        else WriteLn('nie da sie wydac');
      end;
      ReadLn;
    end.

Pochodzi z http://komputery.katalogi.pl/pascal-t160461.html

0

Do takich problemów algorytmy genetyczne można zastosować ;)

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