• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Не работает задачка в Pascale (Vladimiru S)

  • Автор темы Автор темы tatca
  • Дата начала Дата начала

tatca

Новые
Регистрация
19 Май 2011
Сообщения
11
Реакции
0
Баллы
0
Не работает задачка в Pascale (Vladimiru S)

Даны натуральные числа a и b, обозначающие соответственно числитель и знаменатель дроби. Сократить дробь.

program upr6;
var
a,b,c,i:integer;
bu:boolean;
begin
Write('a= ');
ReadLn(a);
Write('b= ');
ReadLn(b);
if a<b then c:=a else c:=b;
repeat
bu:=true;
i:=1;
repeat
inc(i);
if ((a mod i)=0) and ((b mod i)=0) then
begin
bu:=false;
a:=a div i;
b:=b div i;
c:=c div i;
end;
until i>c;
until bu;
WriteLn('New a= ',a);
WriteLn('New b= ',b);
ReadLn;
end.

Заранее спасибо!
 
Ну и как сие прикажете понимать? Что именно "не работает"? В каком смысле "не работает"? Вот Вы выложили мою программу, естественно отлаженную, оттестированную - и чего Вы от меня хотите? Сейчас я ее скопировал прямо из Вашего поста, запустил - работает безупречно. Как и следовало ожидать. Так в чем дело?
 
Я наверно не так выразилась. Извините! Не то,что не работает, я просто не понимаю где в решении сокращается дробь (как сказано в условии).Подскажите мне пожалуйста! Прошу прощения если обидела!!!
 
Я наверно не так выразилась. Извините! Не то,что не работает, я просто не понимаю где в решении сокращается дробь (как сказано в условии).Подскажите мне пожалуйста! Прошу прощения если обидела!!!
А, понятно.
Тут так:
1. Из двух чисел a и b находится меньшее. Это число с.
2. Прогоняется цикл по i от 2 до с. Если остатки от деления обоих чисел на текущее значение i (оба!) равны 0, то это означает, что и a, и b делятся на это i, что мы и проделываем - делим оба (и заодно число c) на это самое i.
Рассмотрим на примере.
Пусть a=10, b=15. Находим c=10 (меньшее из двух). Начинаем перебирать значения i от 2 и выше. Пока не дошли до i=5, общих множителей не обнаруживаем. При i=5 условие равенства нулю обоих остатков выполняется, значит делим все три числа на 5 и получаем новые значения: a=2, b=3, c=2. Поскольку после этого выполнилось условие i>c, цикл по i на этом завершается.
Возникает вопрос, а зачем нужен булевский флажок bu и внешний цикл по нему? А вот зачем. Допустим, a=4, b=8. Пройдя первый раз по i, мы получим 2/4, т.е. всё еще сократимую дробь! Поэтому нужно прогнать цикл по i еще раз, и так повторять, пока общих делителей не останется. Вот - как-то так.
 
Спасибо болльшое за помощь!

Вот теперь до меня дошло! Я поняла! Благодарю за помошь!

Я сейчас разбираюсь с массивами. Если у меня в программе возникнут ошибки Вы поможете их исправить?
 
Назад
Сверху