Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Устранение повторений в программе нахождения дружественных чисел в Delphi и Pascal

Delphi , ОС и Железо , Windows

Дружественные числа – это пара различных чисел, сумма всех делителей одного числа равна другому числу пары. Например, для чисел 220 и 284 сумма всех их делителей равна друг другу (220 = 1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 24 + 44 + 55 + 110 = 284, и наоборот). Задача состоит в написании программы, которая находит первые два дюжины пар дружественных чисел.

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

program FriendlyNumbers;
type
  List = array of Integer;
var
  Num, Sum, Sum2, C, C2, C3, C4, CheckNum, LastNum: Integer;
  NumUsed: String;
  CheckedNum, CheckedSum: List;
begin
  Num := 200;
  while C3 <= 23 do
  begin
    // ... (код для нахождения делителей)
    if Num = Sum2 then
    begin
      // Проверка на уникальность
      if (C2 <> LastNum) and (NumUsed <> 'T') and (Num < C2) then
      begin
        // Вывод уникальной пары
        C3 := C3 + 1;
        Writeln(C3, ') ', Num:8, C2:8);
        LastNum := Num;
      end;
      // Добавление в список проверенных чисел
      if CheckNum < Length(CheckedNum) then
      begin
        CheckedNum[CheckNum + 1] := Num;
        CheckedSum[CheckNum + 1] := C2;
        Inc(CheckNum);
      end;
    end;
    // ... (остальная часть кода)
  end;
  // Проверка всех элементов списка
  for C4 := Low(CheckedNum) to High(CheckedNum) do
  begin
    NumUsed := 'F';
    if CheckedNum[C4] <> 0 then
    begin
      for C := Low(CheckedSum) to High(CheckedSum) do
      begin
        if CheckedSum[C] = CheckedNum[C4] then
          NumUsed := 'T';
        if CheckedSum[C] = CheckedNum[C4] then
          NumUsed := NumUsed + (CheckedSum[C] <> CheckedNum[C] ? 'T' : 'F');
      end;
      if (NumUsed = 'FF') then
      begin
        if CheckedNum[C4] < CheckedSum[C4] then
          Writeln('(', CheckedNum[C4]:8, ' ', CheckedSum[C4]:8, ')');
      end;
    end;
  end;
  Readln;
end.

Для исправления ошибки, необходимо увеличить размер массивов CheckedNum и CheckedSum, чтобы они могли вместить все необходимые элементы, и изменить логику проверки на уникальность, чтобы она учитывала все элементы массивов. Также следует исправить условие в цикле, который выводит пары, на Num < C2, чтобы сначала выводилась меньшая пара чисел.

В заключение, важно тщательно проверять логику программы и правильно обрабатывать данные, чтобы избежать повторений и других ошибок в выводе.

Создано по материалам из источника по ссылке.

Необходимо исправить программу нахождения дружественных чисел в Delphi и Pascal, устранив повторения пар чисел в выводе, путем увеличения размеров массивов и корректировки логики проверки уникальности.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Windows ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:57:14/0.0032069683074951/0