programs_lab.PAS

{* Cовершенные числа *}

Unit PROGRAMS_LAB;
Interface
Implementation
Begin
 writeln('

Задание

Для заданного целого числа N получить все совершенные числа меньше N.

Теоретическая часть

Функции используются тогда, когда результат – одно значение. Говорят, что функция возвращает одно значение.
Function имя – Функции (список формальных параллельних типов возвращаемого значения) Var;
Begin
|
End
Вычисления функции
Имя функции (список фактических параметров)
Список фактических и формальных параметров должен отвечать:
1. По количества
2. За порядком
3. По типу

Function f (px:byte) : byte;
Begin
Px:=inc(px);
End; {f}
Begin
Write (f(45));
End
Procedure имя (a:ta; var I, k=read)
Begin
End;

Выбор алгоритма решения задачи

Совершенные числа - это числа, сумма которых равна сумме чисел, которые делятся на это число. Для решения данной задачи, необходимо сделать цикл от 1 до внесенного целого числа, и в этом цикле сделать цикл, в котором будем проверять условие деления чисел и в нем же находить сумму этих чисел.

Описание решения задачи

Для данной задачи необходимо переменные типа word для целого простого числа, которое мы вводим после чего делаем цикл в цикле. В первому цикле проходим числа от 1 до y (то есть внесено целое число). И каждое из этих чисел делимо от 1 до у/2 и проверяем это число совершенное или нет. Если сумма чисел, которые делятся на это число равняется этому числу, тогда оно действительно является совершенным.

Схема алгоритма решения задачи

1. Схема главной программы

2. Схема подпрограммы

'
);
End.

Program lab;

Uses programs_lab.pas; {* Эту строку можно удалить *}
Uses crt; {* Подключаем внешние файлы *}
Type {* Используемые типы *}
  N = word;
Var {* Объявление переменных *}
  x                  : word;
Procedure prost (y : N);
Var {* В работе нам потребуются переменные: *}
  i : word;
  j : word;
  s : word;
Begin
  For i := 1 To y - 1 Do {* Переменная i увеличивается с 1 до y *}
  Begin
    s := 0;
    For j := 1 To trunc(i / 2 + 1) Do {* j => [1 .. trunc(i] *}
      If i Mod j = 0 Then
        s := s + j;
    If s = i Then
      writeln('sovershennie chisla = ', i);
  End;
  
End;
Begin
  clrscr; {* Очистка экрана *}
  writeln('vvedite celoe chislo');
  readln(x);
  prost(x);
  Repeat
    Until keypressed; {* Цикл, пока не нажата клавиша *}
End.