Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68

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

16.11.2015, 16:15. Показов 1144. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В рамках проекта написал процедуру:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
procedure Shorten(var a: biginteger; var b: biginteger);
var
  IsShort: boolean := False;
  i: biginteger := 2;
  zero: biginteger :=0;
begin
  while i<b do
  begin
    if (a mod i = zero) and (b mod i = zero) then
    begin
      a:=a div i;
      b:=a div i;
      IsShort:=True;
      break;
    end;
  i+=1;
  end;
  if IsShort then Shorten(a,b);
end;
Процедура ужасно портачит мои числа; выдаёт разные результаты в парах "10 100" и "1 10".
Без этой процедуры программа выдаёт правильные числа, но в виде несокращённой дроби (что есть мой косяк).
Нужна помощь, найдите ошибку.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.11.2015, 16:15
Ответы с готовыми решениями:

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

Найти количество чисел в интервале от 1 до N, взаимно простых с N
Дано число N. Найти количество чисел в интервале от 1 до N,взаимно простых с N.

Найти количество натуральных чисел, взаимно простых с данным
Найти количество натуральных чисел\leq 770 и взаимно простых с 770? Разложить два числа на множители и найти общий множитель? Спасибо.

3
6 / 6 / 3
Регистрация: 14.11.2015
Сообщений: 21
16.11.2015, 17:14
Вот, в процедуре внутри repeat ... until - нахождение наибольшего общего делителя. У тебя как-то по-другому. Наверное, в этом ошибка.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
program ShortenNumbers;
 
var
  a1, b1: real; 
 
procedure Shorten(a, b: integer);
var   
  c: integer;
begin
  repeat
    if a > b then
      a := a mod b
    else
      b := b mod a;
  until (a = 0) or (b = 0);
  c := a + b;       // с - наибольший общий делитель a и b
  
  a1 := a1 / c;
  b1 := b1 / c;
end;
 
begin
Write('Введите 1 число: '); ReadLn (a1);
Write('Введите 2 число: '); ReadLn (b1);
  Shorten(round(a1), round(b1));
  Write(a1, ' ', b1);
end.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33405 / 21515 / 8236
Регистрация: 22.10.2011
Сообщений: 36,916
Записей в блоге: 12
16.11.2015, 17:38
Лучший ответ Сообщение было отмечено MrEventual как решение

Решение

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
1
20 / 19 / 14
Регистрация: 25.03.2015
Сообщений: 68
16.11.2015, 18:05  [ТС]
Первая процедура не пойдёт, надо именно в biginteger.
Проверил вторую, работает, спасибо
(после четырёх вопросов наконец вся программа работает ^^)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.11.2015, 18:05
Помогаю со студенческими работами здесь

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

Пишу программу которая меняет в тексте ( Panel) цвет,шрифт,размер написал все как надо выдает ошибку
Как исправить эту ошибку нужно ввести что то в var? Incompatible types Tcolor and strings Incompatible types integer and strings ...

На натуральном отрезке [a,b] найти все пары взаимно простых чисел
На натуральном отрезке найти все пары взаимно простых чисел. Числа называются взаимно простыми, когда они не имеют общих делителей кроме 1

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

Найти все пары взаимно простых чисел, сумма которых равна x
Вариант №11 Ввести натуральное число x. Найти все пары взаимно простых чисел, сумма которых равна x.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru