Program bankomat.

AD
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 11 lat
  • Postów:5
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

edytowany 2x, ostatnio: olesio
_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

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


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
AD
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 11 lat
  • Postów:5
0
_13th_Dragon napisał(a):

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

O co ci chodzi?

_13th_Dragon
  • Rejestracja:prawie 20 lat
  • Ostatnio:8 dni
0

O twój kod.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
AD
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 11 lat
  • Postów:5
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ł

_13th_Dragon
Pomoc polega na nakierowaniu i podpowiedziach, jeżeli chcesz gotowca to zamów w dziale praca.
ŁF
Moderator
  • Rejestracja:ponad 22 lata
  • Ostatnio:3 dni
0
Kopiuj
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

edytowany 2x, ostatnio: ŁF
AN
WTF? - czytaj niżej.
ŁF
część posta napisałem wcześniej, a część później i tak wyszło. już poprawiłem niespójność. dzięki!
AN
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:36
0
ŁF napisał(a):
Kopiuj
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.

edytowany 1x, ostatnio: antimonium
AN
  • Rejestracja:około 12 lat
  • Ostatnio:około 12 lat
  • Postów:36
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,:

Kopiuj
    {$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

edytowany 2x, ostatnio: antimonium
0

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

_13th_Dragon
Po kiego algorytm genetyczny kiedy istnieje dokładny algorytm o złożoności wielomianowej. Aczkolwiek widziałem próby rozwiązywania algorytmem genetycznym niemal że problemu ile wynosi 2+2.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.