Root /ArchiveAbout
()

Проценты в банке

Проценты в банке

На предыдущей странице мы рассмотрели простейшую задачу нахождения суммы двух чисел. Давайте решим ещё такую задачу:

Задача 1. Вы положили в банк на депозит 25000 рублей с 5% годовых. Определить, какая сумма у вас на счету будет через один год.

Полученную сумму примем за 100%; тогда через 1 год будем иметь 105%. Таким образом, нам необходимо вычислить 105% от положенной суммы:

(105·25000)/100 – наш результат.

Программа на Паскале будет следующей:

program Bank;
begin
  writeln('Через 1 год у нас будет ', (105*25000)/100,
    ' рублей на счету.');
  readln
end.

Если запустим эту программу на PascalABC.Net, то увидим результат:

Через 1 год у нас будет 26250 рублей на счету.

Посмотрите на оператор write: последнее предложение записано со следующей строки. Если предложение для вывода на экран слишком большое и не помещается в одну строчку, его можно разделить на несколько строк. Здесь главное правило – не разделять предложение в кавычках, помещая части в разных строках. Приведем пример следующего кода:

begin
  write(' a = ', 89, ', b = ', 90, ', c = ', 675)
end.

Его можно записать ещё таким образом:

begin
  write(' a = ', 89, ', b = ',
    90, ', c = ', 675)
end.

Или так:

begin
  write(' a = ', 89,
    ', b = ', 90, ', c = ', 675)
end.

И другими способами. Все это приведет к одному результату на экране:

a = 89, b = 90, c = 675

А следующий код приведет к ошибке, так как при выводе символа с в коде открывающую и закрывающие скобки разделять нельзя:

begin
  write(' a = ', 89, ', b = ', 90, ',
    c = ', 675)
end.

Итак, как видно из программы, нам даже не понадобилось вводить описание ни констант, ни переменных. Теперь рассмотрим задачу, когда заранее не известно начальную сумму, положенную в банк под некоторое количество процентов. Это общая задача и сформулируем мы её так:

Задача 2. Вы положили в банк на депозит N рублей с p% годовых (N - целое, p – вещественное). Определить, какая сумма у вас на счету будет через один год.

Если положенную сумму N рублей принять за 100%, то через 1 год наш вклад вырастет на p% и составит (100 + p)%. Тогда (100 + p)% от суммы N составит

(100 + p)·N/100.

Поскольку заранее сумма вклада и количество процентов неизвестно, то числа N и p мы опишем как переменный тип var. Сделаем ещё одно замечание: часто в условиях задач говорится, что «дано числа N и p» и т.п. То, что числа «дано», всегда означает одно и то же: эти числа надо задать (ввести с клавиатуры) нам самим в процессе выполнения программы. А как вводить числа в Паскале? С помощью оператора ввода read или readln. Рассмотрим это на нашем примере задачи о процентах:

var
  N: integer; { N – целое число }
  p: real; { p - вещественное число }

begin
  writeln('Какую сумму Вы положили в банк?');
  readln(N); { <-- Вводим число N и переходим на следующую строку }
  writeln('Какие проценты в этом банке?');
  readln(p); { <-- Вводим число p и переходим на следующую строку }
  { Выводим результат: }
  writeln; { <-- Пропускаем одну строку }
  writeln('Через 1 год у Вас будет ', (100 + p)*N/100,
    ' рублей на счету.');
  readln { <-- Нажимаем Enter и выходим }
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 Мы сознательно после последнего оператора readln не поставили точку с запятой. Дело в следующем: если после оператора стоит end, то знак «;» можно не ставить.

Предложения, записанные в операторе write(ln), выводятся на экран и являются для нас подсказками, какие числа вводить. В среде программирования PacalABC.Net они всегда выделяются синим цветом, в отличие от комментариев, которые окрашиваются в зеленый.

Если в операторе write или read мы встречаем окончание ln (writeln или readln), то после их выполнения автоматически переходим на новую строку. Так, после вопроса «Какую сумму Вы положили в банк?» мы сразу переходим на новую строку. Далее стоит оператор readln(N) – программа нам предлагает ввести число N, и после его ввода курсор окажется строкой ниже. Аналогично нас запросят ввести проценты p, а в конце вывод результата.

Скопируйте данную программу в PascalABC.Net (а лучше перепечатайте – так запомнится лучше). При запросе ввести сумму N введите, например, 50000, а вместо процентов p поставте 3. В результате мы увидим ответ:

Какую сумму вы положили в банк?50000Какие проценты в этом банке?3Через 1 год у вас будет 51500 рублей на счету.

Наконец, чтобы завершить с простейшими задачами программирования в Паскале на проценты, нам надо знать очень полезную функцию в PascalABC.Net – возведение в степень:

Power(X, Y) – X в степени Y.

Если степень Y дробный, то основание X > 0; если степень Y целый, то X может быть любым. Но для чего нам возведение в степень в задаче о процентах, скажете вы? Сформулируем сначала условие:

Задача 3. Начальная сумма вклада в банк на депозит составляет N рублей. Определить, сколько денег на счету будет через t лет, если процентная ставка в этом банке составляет p%.

Итак, выше мы выяснили, что если в начале мы положили N рублей в банк, то через год сумма вырастет до N(100+p)/100 рублей. Перепишем данное число так:

N(1+p/100) – сумма денег на счету в банке через 1 год.

Но через год (на второй) сумма вырастет ещё на p% от имеющейся суммы. Поскольку в первый год нахождения денег в банке в конце мы получили N(1+p/100) рублей, то p% от этой суммы будет N(1+p/100)·p/100 (сумму множим на p и делим на 100). Таким образом,

N(1+p/100)·p/100 – проценты, которые нарастут за второй год.

Тогда общее количество денег во втором году равно сумме денег за 1-й год плюс проценты за второй:

N(1+p/100)+N(1+p/100)·p/100= N(1+p/100)(1+p/100)= N(1+p/100)2. Здесь мы вынесли на скобки общий множитель N(1+p/100). Следствие:

N(1+p/100)2 – сумма денег на счету в банке на второй год.

Идем далее. На третий год предыдущая сумма вырастет на p%, то есть на N(1+p/100)2·p/100 рублей (количество денег во втором году умножаем на p и делим на 100). Итак,

N(1+p/100)2·p/100 – проценты, которые нарастут за третий год.

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

N(1+p/100)2+ N(1+p/100)2·p/100= N(1+p/100)2(1+p/100)= N(1+p/100)3. Как видно, ми вынесли за скобки общий множитель N(1+p/100)2. Таким образом,

N(1+p/100)3 – сумма денег в банке за третий год.

Мы видим закономерность: для 1-го года пребывания денег в банке число (1+p/100) в первой степени (коеффициент числа N), за второй год коеффициент (1+p/100) во второй степени, за третий год – в третьей. Можно предположить, что за t лет сумма в банке вырастет до N(1+p/100)t рублей. Это предположение верно и оно доказывается методом математической индукции.

Таким образом, теперь написать программу на Паскале нам не составит никакого труда. В предыдущий код вместо N(100+p)/100 мы напишем N, умноженное на t-й степень числа (1+p/100), используя при этом функцию возведения в степень:

N*power(1+p/100, t) – программная запись числа N(1+p/100)t.

Итак, программа для решения задачи о процентах в банке будет следующей:

var
  N: integer; { N – целое }
  p, t: real; { p и t – действительные числа }

begin
  writeln('Введите начальную сумму вклада в банк:');
  readln(N); { <-- Вводим число N и переходим на следующую строку }
  writeln('Какие проценты в этом банке?');
  readln(p); { <-- Вводим число p и переходим на следующую строку }
  writeln('Сколько лет деньги находятся на депозите?');
  readln(t); { <-- Вводим число t и переходим на следующую строку }
  { Выводим результат: }
  writeln;
  writeln('Через ', t, ' лет сумма денег вырастет до ',
    N * power(1 + p / 100, t):0:2, ' рублей.');
  readln
end.

**type** integer;: Представляет 32-битовое целое число со знаком.Диапазон значений: -2 147 483 648 .. 2 147 483 647 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **function** Power(x: Real; y: Real): Real;: Возвращает x в степени y. Посмотрите внимательно на последний оператор вывода write: после функции возведения в степень стоит :0:2. Это т.н. форматирование и такая запись означает, что для числа, после которого ставится данное окончание, отводится 2 знака после запятой. А почему именно два? Да потому, что в 1 рубле 100 копеек, а поэтому 1 копейка – это 0.01 рубля, то есть рассматривать больше двух знаков после запятой нет смысла.

Перепешите эту программу в среду PascalABC.Net и запустите на выполнение (перепишите, а не скопируйте!). При запросе N введите 10000, при запросе p поставьте 3.5, а для t возьмите 8. В результате мы увидим:

Введите начальную сумму вклада в банк:10000Какие проценты в этом банке?3.5Сколько лет деньги находятся на депозите?8Через 8 лет сумма денег вырастет до 13168.09 рублей.

Если у Вас вышел такой же ответ, то поздравляю – всё получилось. Наконец, можно добавить, что эта последняя задача называется «задачей на сложные проценты» (потому, что там присутствует показатель степени). Это пока что все, но замечу вот ещё что: если бы вместо t мы ввели, скажем, 21, то фраза «21 лет» в ответе была бы несогласованной, ибо правильно было бы сказать «21 год». Но это уже другой тип задач, пример можете посмотреть в материале Выводим строку-описание.