Root /ArchiveAbout
()

Сложные проценты в паскале

Сложные проценты в паскале

While15. Начальный вклад в банке равен 1000 руб. В конце каждого месяца размер вклада увеличивается на P процентов от имеющейся суммы (P — вещественное число, 0 < P < 25). По данному P определить, через сколько месяцев размер вклада превысит 1100 руб., и вывести найденное количество месяцев K (целое число) и итоговый размер вклада S (вещественное число).

Допустим, мы поставили в банк 1000 рублей под 5% месячных. Тогда за первый месяц наша сумма увеличится на 5·1000/100 = 50 (рублей), и в конце месяца мы будем иметь 1000+50=1050 (рублей). В следующем месяце последняя сумма денег увеличится тоже на 5%, то есть на 5·1050/100 = 52,5 (рублей), и в конце месяца итоговая сумма составит 1050+52,5 = 1102,5 (рублей).

Таким образом, уже через 2 месяца при процентной ставке 5% размер вклада превысит 1100 рублей. Это только пример, как решается задача в общем случае, смотрите ниже с комментариями.

var
  K: word;
  S, P: real;

begin
  write('P = ');
  readln(P); { <-- Вводим проценты }
  K := 0; { <== Начальное количество месяцев }
  S := 1000; { <== Начальная сумма денег }
  { Выполняем цикл до тех пор, пока количество 
  денег на счету не превосходит 1100 рублей: }
  while S <= 1100 do
  begin
    { Увеличиваем прежнюю сумму на число денег, 
    выросшее за последний месяц: }
    S := S + S * P / 100;
    inc(K) { <== Увеличиваем месяц на 1 }
  end;
  writeln;
  writeln(' количество месяцев: ', K);
  writeln(' итоговый размер вклада: ', S:0:2);
  readln
end.

**type** word;: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **procedure** Inc(**var** i: integer);: Увеличивает значение переменной i на 1 С использованием repeat - until:

var 
  K: word; { Месяцы }
  S, P: real; { S - сумма денег, P - проценты }

begin
  writeln('Введите количество процентов (0 < P < 25):');
  write(' P = ');
  readln(P); { <-- Вводим проценты }
  K := 0; { <== Начальное количество месяцев }
  S := 1000; { <== Начальный размер вклада }
  { Вычисления производим в цикле с ПОСЛЕУСЛОВИЕМ, то есть 
  сначала делаем вычисления, а потом проверяем требуемое 
  нам условие (S>1100) на истинность: }
  repeat
    inc(K); { <== Увеличиваем месяц на 1 }
    { Увеличиваем сумму S денег за предыдущий месяц на 
    число денег, выросшее по процентам (S·P/100): }
    S := S + S * P / 100
  until S > 1100; { <-- Выходим из цикла после того, как 
    количество денег на счету превзойдет 1100 рублей }
  writeln;
  writeln(' Количество месяцев: ', K);
  writeln(' Итоговый размер вклада: ', S:0:2);
  readln
end.

**type** word;: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **procedure** Inc(**var** i: integer);: Увеличивает значение переменной i на 1 While16. Спортсмен-лыжник начал тренировки, пробежав в первый день 10 км. Каждый следующий день он увеличивал длину пробега на P процентов от пробега предыдущего дня (P — вещественное, 0 < P < 50). По данному P определить, после какого дня суммарный пробег лыжника за все дни превысит 200 км, и вывести найденное количество дней K (целое) и суммарный пробег S (вещественное число).

var
  K: word;
  P, S, L: real;

begin
  writeln('Введите количество процентов (0 < P < 50):');
  write(' P = ');
  readln(P); { <-- Вводим проценты }
  K := 1; { <== Первый день }
  L := 10; { <== Длина пробега за 1-й день }
  S := 10; { <== Начальная общая длина пробега }
  { Выполняем цикл до тех пор, пока общая длина
  пробега не превосходит 200км: }
  while S <= 200 do
  begin
    inc(K); { <== Увеличиваем день на 1 }
    { Увеличиваем длину пробега за предыдущий 
    день на длину, выросшую за последний день: }
    L := L + L * P / 100;
    { Увеличиваем общую длину пробега на длину, 
    выросшую за последний день: }
    S := S + L
  end;
  writeln;
  writeln(' Количество дней: ', K);
  writeln(' Суммарный пробег: ', S:0:3);
  readln
end.

**type** word;: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **procedure** Inc(**var** i: integer);: Увеличивает значение переменной i на 1 С использованием repeat - until:

var
  K: word;
  S, P, L: real;

begin 
  write('P = ');
  readln(P);  
  K := 1; { <== Первый день }
  L := 10; { <== Пробег за 1-й день }
  S := 10; { <== Общая длина пробега }
  repeat
    inc(K); { <== Увеличиваем день на 1 }
    L := L + L * P / 100; { <== Пробег за K-й день }
    S := S + L { <== Пробег за первые K дней }
  until S > 200; { <-- Выходим из цикла, если общая 
    длина пробега превзойдет 200км }
  writeln;
  writeln(' Количество дней: ', K);
  writeln(' Суммарный пробег: ', S:0:3);
  readln
end.

**type** word;: Представляет 16-битовое целое число без знака.Диапазон значений: 0 .. 65 535 **type** real;: Представляет число двойной точности с плавающей запятой.Размер: 8 байт Количество значащих цифр: 15 - 16 Диапазон значений: -1.8∙10308 .. 1.8∙10308 **procedure** Inc(**var** i: integer);: Увеличивает значение переменной i на 1 Ещё прочитать о процентах вы можете на странице Проценты в банке.