Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2009, 08:47   #1
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
Восклицание Банковские проценты (Delphi)

Всем привет!

Задача: Пользователь вводит с клавиатуры: вклад и проценты. Программа должна подсчитать за какое время увеличится вклад в три раза и вывести конечную сумму денег.

Вот что я сделал, но не получается правильно организовать цикл ((
Подскажите, пожалуйста как правильно должно быть.
Заранее спасибо!
Код:
var
year:integer;
vklad, dohod, procents:real;
kd: real;  //коэффициент дохода

procedure TForm1.Button1Click(Sender: TObject);


begin
vklad    :=StrToFloat(Edit1.Text);
procents :=StrToFloat(Edit2.Text);
year     :=0;
kd:=1;

begin
  while kd<3  do
  begin
  year := year+1;
  dohod:= vklad+(vklad*(procents/100));
  kd   := dohod/vklad;
  end;
end;
Label3.Caption:='доход'+FloatToStr(dohod)+#13+'Количество лет'+FloatToStr(year);

end;
KARUSHEV вне форума Ответить с цитированием
Старый 25.09.2009, 08:54   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

У тебя доход не растет от года в год.
Код:
dohod:= vklad+(vklad*(procents/100));
Я так понял считается только за 1 год всегда. А за три сколько будет? Наверное надо так попробовать:
Цитата:
dohod:= dohod+(vklad*(procents/100));
И тогда dochod нужно сначала равным нулю сделать.
Попробуй копать в этом направлении.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.09.2009, 08:54   #3
Consol
Пользователь
 
Регистрация: 19.08.2009
Сообщений: 89
По умолчанию

Цитата:
begin
year := year+1;
dohod:= vklad+(vklad*(procents/100));
kd := dohod/vklad;
end;
что то мне подсказывает что надо сделать так
Код:
  
dohod:=0;
 while (kd+dohod)<3*kd  do
  begin
  year := year+1;
  dohod:=(kd+dohod)*(procents/100);
  end;

Последний раз редактировалось Consol; 25.09.2009 в 08:59.
Consol вне форума Ответить с цитированием
Старый 25.09.2009, 09:38   #4
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
По умолчанию

Спасибо, Utkin! Вроде то, что нужно!
Consol, при твоем коде все зацикливается, как и при моем.

Цитата:
Сообщение от Utkin Посмотреть сообщение
У тебя доход не растет от года в год.
Код:
dohod:= vklad+(vklad*(procents/100));
Я так понял считается только за 1 год всегда. А за три сколько будет? Наверное надо так попробовать:
dohod:= dohod+(vklad*(procents/100));
И тогда dochod нужно сначала равным нулю сделать.
Попробуй копать в этом направлении.
В таком случае доход будет равен только процентам от суммы и получается в итоге что считает не правильно.
И как я понимаю он при первом цикле должен добавлять к этим процентам вклад. Но так тоже не правильно считает, что-то я совсем запутался...



Код:
begin
vklad    :=StrToFloat(Edit1.Text);
procents :=StrToFloat(Edit2.Text);
year     :=0;
kd:=1;

dohod:=0;
begin
  while kd<3  do
  begin
  year := year+1;
  //dohod:= vklad+(vklad*(procents/100));
  dohod:= dohod+(vklad*(procents/100));
  kd   := dohod/vklad;

if dohod<vklad then
  dohod:= dohod+vklad
else
   dohod:=dohod;
end;
end;
Label3.Caption:='Доход'+FloatToStr(dohod)+#13+'Количество лет'+FloatToStr(year);

end;
Сделал так, вроде примерно так считает, но не совсем, если сравнивать с результатами в Excel'e (там сделал для проверки результатов), не сходится конечная сумма, года считает правильно

Код:
var
year:integer;
vklad, dohod, procents:real;
kd: real;  //êîýôôèöèåíò äîõîäà

procedure TForm1.Button1Click(Sender: TObject);


begin
vklad    :=StrToFloat(Edit1.Text);
procents :=StrToFloat(Edit2.Text);
year     :=0;
kd:=1;

//äîáàâèë ýòó ñòðîêó
dohod:=0;
begin
  while kd<3  do
  begin
  year := year+1;
  //dohod:= vklad+(vklad*(procents/100));
  dohod:= dohod+(vklad*(procents/100));
  //kd   := dohod/vklad;

if dohod>vklad then
  begin
  dohod:= dohod+vklad;
  kd   := dohod/vklad;
  end
else
  begin
   dohod:=dohod;
   kd   := dohod/vklad;
  end;

end;

end;
Label3.Caption:='äîõîä'+FloatToStr(dohod)+#13+'Êîëè÷åñòâî ëåò'+FloatToStr(year);

end;

Последний раз редактировалось Stilet; 25.09.2009 в 11:21.
KARUSHEV вне форума Ответить с цитированием
Старый 25.09.2009, 11:33   #5
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Скорее всего ты уже получал правильно решение. Проблема в округлении. Допустим твое условие достигается за 3 года и 10 месяцев. Твой вариант даст 4 года. Когда будешь считать проценты за 4 года, то конечно не срастется . Сделай без циклов.
1. Переведи проценты в рубли. Ну допустим 1000 рублей под 10%. Значит ежегодно будет добавляться по 100 рублей. Верно?. Тебе сколько надо - 3000? Из них 1000 уже есть, так? Тогда просто 3000-1000 и делить все это хозяйство на 100 рублей. Вот и получишь года. Только для этого над использовать не деление нацело.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.09.2009, 11:44   #6
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
По умолчанию

Нет, я так понимаю допустим вклад 100 руб., проценты 12, соответственно за первый год будет 112 руб., за второй год уже будет браться 112 руб. и на конец года будет 125.44 и т.д. по нарастающей. В общем получается:
vklad % dohod
1 100.00 12.00 112.00
2 112.00 12.00 125.44
3 125.44 12.00 140.49
4 140.49 12.00 157.35
5 157.35 12.00 176.23
6 176.23 12.00 197.38
7 197.38 12.00 221.07
8 221.07 12.00 247.60
9 247.60 12.00 277.31
10 277.31 12.00 310.58

По моей программе получается: доход 320, количество лет 10
А должно быть:
10 277.31 12.00 310.58
KARUSHEV вне форума Ответить с цитированием
Старый 25.09.2009, 11:49   #7
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Тогда сначала уточните как правильно. Здесь дело совсем не в программе, а в незнании того как правильно делать (обычное не понимание условия задачи).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 25.09.2009, 11:52   #8
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
По умолчанию

Ну если, считать как Вы предложили, что каждый год увеличивается на равное количество, тогда все понятно и цикл не нужен. А как решить если исходить из выше изложенного?
KARUSHEV вне форума Ответить с цитированием
Старый 25.09.2009, 12:38   #9
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Процедура подсчета с днями:
Код:
procedure TForm1.Button4Click(Sender: TObject);
var
  Vklad, Pribil, NeedSum: real;
  Percent,i: byte;
  Days: smallint;
begin
  Vklad:=strtoint(Edit1.Text);
  Percent:=strtoint(Edit2.Text);
  NeedSum:=Vklad*3;
  i:=0;

  while (Vklad+(Vklad*Percent/100))<NeedSum do
  begin
    Vklad:=Vklad+(Vklad*Percent/100);
    inc(i);
  end;

  NeedSum:=NeedSum-Vklad;

  Days:=trunc(NeedSum/(Vklad*Percent/100/365)+1);

  ShowMessage('Для накопления суммы вам понадобится '+inttostr(i)+
    ' лет и '+inttostr(Days)+' дней');
end;
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 25.09.2009, 12:56   #10
KARUSHEV
Форумчанин
 
Аватар для KARUSHEV
 
Регистрация: 11.01.2009
Сообщений: 102
По умолчанию

Спасибо Всем! Последнее решение, похоже самое верное.
KARUSHEV вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как к числу прибавить проценты 90 + 10% и получить 100. а не 99. il_il Microsoft Office Excel 30 21.07.2012 02:42
проценты в паскале... Рамик Помощь студентам 2 28.05.2009 10:12
Проценты в Excel OKS Microsoft Office Excel 3 02.03.2009 15:04
Проценты... Siver Microsoft Office Excel 2 20.12.2008 08:57
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43