Úloha č. 2


Název úlohy: Půjčka
Datum: 22.10.1997
Obtížnost: Z
Předpokládané znalosti: podmíněný příkaz, operátory div, mod, cyklus while, procedury pro V/V operace


Zadání
Možná, že některý z Vás se dostal do situace, kdy byl nucen si půjčit peníze. O tom bude tato úloha. Napište program pro řešení splácení půjčky.
Program nech vyzve uživatele, aby zadal výši půjčky a výši měsiční splátky, program ze zadaných hodnot spočítá a vypíše počet splátek a datum poslední splátky.

Bližší popis

  1. dnešní datum bude vyjádřeno jako konstanty mesic=10; rok=1997
  2. výše půjčky je neomezená
  3. minimální splátka je 100 Kč měsíčně

Diskuse k řešení
  1. Při řešení tohoto problému musíme na začátku zajistit korektní vstup výše půjčky a měsiční splátky. Lze řešit buď podmíněným příkazem (program bude pracovat jen pokud výše měsiční splátky splňuje zadanou podmínku), nebo příkazem cyklu repeat (tj. bude se čekat tak dlouho, dokud nebude zadána korektní hodnota měsiční splátky)
  2. Další fáze programu bude zjištění počtu splátek. K tomu lze využít operátory div (mod), nebo použít násobení pro reálná čísla a operaci trunc:
    a) pocet:=pujcka div splatka a pokud je zbytek po tomto dělení nenulový, zvýšíme počet o jedničku: inc(pocet)
    b) pocet:=pujcka/splatka;
    if pocet-trunc(pocet)>0 then pocet:=pocet+1

    pozn.: všimněte si, že v případě a) provádím zvýšení o jedničku příkazem inc(pocet), a v případě b) příkazem pocet:=pocet+1
  3. V závěrečné fázi bude výpočet data poslední splátky. K tomu lze použít cyklus while.

Řešení
Program Pujcka;
Const mesic=10;
      rok=1997;
var
pocet: integer; {pocet splatek}
pujcka: LongInt; {vyse pujcky}
splatka: LongInt; {mesicni splatka}
i: integer; {pomocna promenna}

BEGIN
writeln(' Zadejte vysi pujcky a mesicni splatky: ');
readln(pujcka, splatka);

if splatka>=100 then {kdyz je vyse splatky korektni}
begin
pocet:=pujcka div splatka;
if splatka*pocet<pujcka then inc(pocet);
writeln(' Pujcka bude splacena: ',pocet,' splatkami');

{vypocitani data}
i:=1;
while i<=pocet do
begin
if mesic=12 then begin mesic:=1; inc(rok); end else inc(mesic);

writeln(' Posledni splatka bude 1.',mesic,'.',rok);
end;
end
else writeln(' Mesicni splatka je prilis nizka');
END.



[Archív] [Změna kódování]