В матрице найти дружественные числа - Turbo Pascal

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

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

Составить программу с использованием подпрограммы поиска дружественных элементов матрицы. Вывести их индексы.

Решение задачи: «В матрице найти дружественные числа»

textual
Листинг программы
const
  m = 5; {ранг матрицы}
 
type
  arr = array[1..m, 1..m] of longint; {тип для матрицы}
 
{процедура генерации и печати исходной матрицы}
procedure gen_prn(var x: arr);
var
  i, j: longint;
begin
  randomize;
  writeln('Исходная матрица:');
  for i := 1 to m do
    begin
      for j := 1 to m do
        begin
          x[i, j] := 1 + random(9999); {генерируется натуральное число!}
          write(x[i, j]:5)
        end;
      writeln
    end
end;
 
{функция нахождения суммы собственных делителей натурального числа}
function sd(x: longint): longint;
var
  i, sum: longint;
begin
  sum := 1;
  for i := 2 to x div 2 do
    if x mod i = 0
      then sum := sum + i;
  sd := sum
end;
 
{процедура поиска и печати дружественных элементов матрицы}
procedure friend(var x: arr);
var
  i, j, p, q: longint; {индексы}
  found: boolean; {факт нахождения хотя бы одной пары дружественных элементов}
begin
  found := false; {дружественные элементы пока не найдены}
  writeln('Дружественные элементы матрицы:');
  for i := 1 to m do {сканируем матрицу, x[i, j] - элемент, для которого ищем пару}
    for j := 1 to m do {}
      for p := 1 to m do {сканируем матрицу, x[p, q] - предполагаемая пара для x[i, j]}
        for q := 1 to m do {}
          if (i * m + j < p * m + q) and {если x[p, q] находится "после" x[i, j] И}
             (x[i, j] <> x[p, q]) and {x[i, j] не равно x[p, q] И}
             (sd(x[i, j]) = sd(x[p, q])) {сумма собственных делителей x[i, j] равна сумме собственных делителей x[p, q]}
            then begin {то}
              write('(', i, ', ', j, '), (', p, ', ', q, '); '); {печатаем найденные индексы}
              found := true {хотя бы одну пару нашли, запоминаем этот факт}
            end;
  if not found then write('Не найдены'); {если дружественных элементов не найдено, печатаем соответствующее сообщение}
  writeln
end;
 
{основная программа}
var
  a: arr;
 
begin
  gen_prn(a); {генерируем и печатаем матрицу}
  friend(a); {находим и печатаем дружественные элементы матрицы}
  readln {программа завершится после нажатия <Enter>}
end.

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

В этом коде решается задача поиска дружественных чисел в матрице. Список функций и процедур в коде:

  1. gen_prn - генерация и печать исходной матрицы
  2. sd - функция нахождения суммы собственных делителей натурального числа
  3. friend - процедура поиска и печати дружественных элементов матрицы Пояснение к коду:
    • В процедуре gen_prn генерируется случайная матрица размером 5х5 и выводится на экран.
    • Функция sd вычисляет сумму собственных делителей числа.
    • В процедуре friend происходит поиск дружественных элементов в матрице. Она перебирает все возможные пары элементов и проверяет, являются ли они дружественными (равны по модулю, но не равны друг другу, и сумма их собственных делителей равна). Если такая пара найдена, индексы этой пары выводятся на экран. Если в матрице не найдено ни одной пары дружественных элементов, выводится сообщение Не найдены. В основной программе сначала генерируется и выводится на экран случайная матрица, затем ищутся и выводятся на экран дружественные элементы этой матрицы.

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


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

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

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