Начисление пенсии для Буратино - Free Pascal

Узнай цену своей работы

Формулировка задачи:

1. Буратино весь свой трудовой стаж провел в литейном цехе. Про-работал он там 20 лет. За это время светлое полено, из которого он был сделан, местами потемнело от окалины, местами выгорело. Потерял, короче, Буратино на работе всё своё деревянное здоровье. Пришел он в отдел социального обеспечения, чтобы, значит, ему там пенсию начислили. А там уже давно обосновались лиса Алиса и кот Базилио. Вот они разложили перед Буратино все его годовые заработки за 20 лет . Нам, говорят, всё о твоих заработках известно. Только учти, что на каждый год государство свой коэффициент наложило . Эти коэффициенты надо на твои заработки умножать. Выбирай любые пять лет так, чтобы сумма произведений заработков на коэффициенты была максимальной. Такая твоя пенсия и будет. Буратино в арифметике не силен был. Выбрал он первые пять лет и получил пенсию 6500 рублей в месяц. Теперь ходит по свалкам, железные пивные банки собирает и сдает. А как бы вы поступили на его месте? Напишите программу, которая из всего массива заработков с учетом коэффициентов выбирает пять лет так, чтобы сумма была наибольшей. Программа, конечно, должна не только сумму запоминать. Еще и номера годов.

Решение задачи: «Начисление пенсии для Буратино»

textual
Листинг программы
program Poleno;
 
const
  Years = 20;
 
var
  Payment : array [1..Years] of real;
  Rate : array [1..Years] of real;
  
  FirstYear, tmpFYear : Byte;  
  i : Byte;
  
  Sum, MaxSum : Real;
 
begin
  //формируем массивы случайным образом
  randomize;
  writeln('Year Payment  Rate');
  for i := 1 to Years do
    begin
      Payment[i] := random()*10000;
      Rate[i] := random()*10;
      writeln(i:2, '  ', Payment[i]:7:2, '  ', Rate[i]:2:2);
    end;
  
  FirstYear := 1;
  MaxSum := 0;
  for tmpFYear := 1 to 16 do
    begin
      //рассчитываем сумму за 5 лет от каждой возможной начальной точки
      Sum := 0;
      for i := tmpFYear to tmpFYear+4 do
        Sum := Sum + Payment[i]*Rate[i];
      
      //сравниваем каждую полученную сумму с максимальной
      if (Sum > MaxSum)
      then
        begin
          MaxSum := Sum;
          FirstYear := tmpFYear;
        end;
    end;
    
  //выводим результаты
  write('Максимальный результат дают последовательные годы: ');
  for i := FirstYear to FirstYear+4 do
    write(i:2, ', ');
  writeln;
  
  writeln('Максимальный результат: ', MaxSum:8:2);
  
  
end.

Объяснение кода листинга программы

  1. Объявление переменных и массивов — Payment : массив для хранения значений платежей — Rate : массив для хранения значений процентных ставок — FirstYear, tmpFYear : переменные для хранения индексов первого года и текущего года — i : переменная для хранения индекса текущего элемента — Sum, MaxSum : переменные для хранения суммы платежей и максимальной суммы
  2. Заполнение массивов случайными значениями — Использование функции randomize для инициализации генератора случайных чисел — Цикл for для перебора элементов массива — Payment[i] присваивается случайное значение в диапазоне от 0 до 10000 — Rate[i] присваивается случайное значение в диапазоне от 0 до 10 — Вывод на экран значений Payment и Rate с заданным форматированием
  3. Поиск максимальной суммы платежей — Установка начального значения MaxSum равным 0 — Цикл for для перебора возможных начальных годов (tmpFYear от 1 до 16) — Рассчет суммы платежей за 5 лет с текущей начальной точки (цикл for от tmpFYear до tmpFYear+4) — Сравнение полученной суммы с текущей максимальной суммой (MaxSum) — Если новая сумма больше текущей максимальной, обновление значений MaxSum и FirstYear
  4. Вывод результатов — Вывод на экран максимальной суммы платежей за 5 лет с заданным форматированием — Вывод на экран последовательности годов, дающих максимальную сумму (цикл for от FirstYear до FirstYear+4) — Вывод на экран сообщения с максимальной суммой платежей

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.929 из 5
Похожие ответы