Napok óta ezen a programon gondolkozom, mi lehet a hiba? Ha van 100 Ft-om a bankban és 10% a kamat és 12 hónapra van lekötve, akkor a tizedik hónap végén lesz otthon 100 Ft-om (a kamatokból), amit berakok, így már 20Ft/hó lenne a kamat.
A feladatról:
A kerek százasokon felül maradó részt a bank havonta kifizeti, amit otthon őrzünk. Ha az otthon őrzött pénz eléri vagy meghaladja a 100 forintot, akkor abból 100-at beteszünk a bankba. Írj programot, amely megadja, hogy X betett összeg esetén H hónapon keresztül mennyi pénzünk lesz a bankban és mennyi lesz otthon!
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, Math;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
toke,kamat,pkamat,ido,i: integer;
osszeg: integer;
f,g: textfile;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.Button1Click(Sender: TObject);
begin
assignfile(f, 'Bemenet.txt');
try
reset(f);
read(f, toke);
read(f, kamat);
read(f, pkamat);
read(f, ido);
except
ShowMessage('Error');
end;
if (toke<99) or (toke>100000) then
ShowMessage('Ennyi pénzt nem tehetsz be! A program most leáll!');
if (kamat<1) or (kamat>10) then
ShowMessage('Ennyi nem lehet a kamat! A program most leáll!');
if (pkamat<0) or (pkamat>kamat) then
ShowMessage('Ennyi nem lehet a prémiumkakmat! A program most leáll!');
if (ido<1) or (ido>48) then
ShowMessage('Ennyi időre nem kötheted le a pénzed! A program most leáll!');
if (toke<99) or (toke>100000) then
close;
if (kamat<1) or (kamat>10) then
close;
if (pkamat<0) or (pkamat>kamat) then
close;
if (ido<1) or (ido>48) then
close;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
assignfile(g, 'Kimenet.txt');
rewrite(g);
closefile(g);
if pkamat=0 then
For i:=1 to ido do begin
assignfile(g, 'Kimenet.txt');
append(g);
osszeg:=toke;
osszeg:=Trunc(osszeg+(osszeg*kamat*(100*floor(osszeg/100)/toke)*i/100));
writeln(g, 100*floor(osszeg/100),' ',osszeg mod 100);
ShowMessage(IntToStr(osszeg));
closefile(g);
end;
end;
end.
...
toke:=100; (* bankban lévő összeg *)
osszeg:=0; (* otthon lévő összeg *)
kamat:=10;
ido:=42;
for i:=1 to ido do begin
toke:=toke+trunc(toke*kamat/100); (* kamattal növeljük a bankban lévő összeget *)
apro:=toke mod 100; (* kiszámolják a 100 alatti aprópénzt *)
toke:=toke-apro; (* bank kifizeti az aprópénzt *)
osszeg:=osszeg+apro; (* ezt hozzátesszük az otthoni összeghez *)
nagyja:=osszeg-(osszeg mod 100); (* otthon egyből kiszámoljuk az otthoni összeg 100 feletti részét *)
osszeg:=osszeg-nagyja; (* a 100 feletti részt kivesszük az otthoni összegből *)
toke:=toke+nagyja; (* majd betesszük a bankba *)
writeln(toke,' ',osszeg);
end;
...
#3 Köszönöm, ha lesz lehetőségem, kipróbálom. :)
#4 Jelen esetben van egy példa be- és kimenet és nem ilyen összetetten kell kamatot számolni.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!