Написал процедуру сокращения А и Б до взаимно простых, надо найти ошибку - PascalABC.NET

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

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

В рамках проекта написал процедуру:
Процедура ужасно портачит мои числа; выдаёт разные результаты в парах "10 100" и "1 10". Без этой процедуры программа выдаёт правильные числа, но в виде несокращённой дроби (что есть мой косяк). Нужна помощь, найдите ошибку.

Решение задачи: «Написал процедуру сокращения А и Б до взаимно простых, надо найти ошибку»

textual
Листинг программы
procedure Shorten(var a: biginteger; var b: biginteger);
 
var
  zero: biginteger := 0;
  
  function GCD(vA: biginteger; vB: biginteger): biginteger;
  begin
    while (va <> zero) and (vb <> zero) do
      if va >= vb then
        va := va mod vb
      else
        vb := vb mod va;
    result := va + vb;
  end;
 
begin
  var divisor: biginteger := GCD(a, b);
  a := a div divisor; b := b div divisor;
end;

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

В данном коде реализована процедура сокращения двух чисел до взаимно простых. Она принимает два аргумента типа biginteger (а и b) и использует дополнительную переменную типа biginteger — zero, инициализированную значением 0. Сначала в функции GCD происходит нахождение НОД (наибольшего общего делителя) двух чисел vA и vB. Функция использует цикл while, который выполняется до тех пор, пока оба числа не станут равными нулю. Если число vA больше или равно числу vB, то оно уменьшается на величину остатка от деления на vB (т.е. vA = vA mod vB). Если же число vB больше или равно числу vA, то оно уменьшается на величину остатка от деления на vA (т.е. vB = vB mod vA). После выхода из цикла, результатом функции является сумма чисел vA и vB. Затем в основной процедуре Shorten, вызывается функция GCD с аргументами a и b для нахождения НОД, результат сохраняется в переменной divisor. Затем, с помощью оператора деления (div), значения a и b сокращаются на величину НОД. Код работает корректно, если не учитывать возможные ошибки при выполнении операций над большими числами (переполнение), а также ошибку деления на ноль, возникающую при попытке сокращения двух чисел, одно из которых равно нулю.

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


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

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

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