Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 31.05.2011, 18:35   #1 (permalink)
tatca
Member
 
Регистрация: 19.05.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Не работает задачка в 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.

Заранее спасибо!
tatca вне форума   Ответить с цитированием

Старый 31.05.2011, 18:35
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Дабы не тратить время на поиски, скину вам аналогичные темы

Задачка.
Задачка по Паскалю
Помощь в Pascale

Старый 31.05.2011, 20:30   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Ну и как сие прикажете понимать? Что именно "не работает"? В каком смысле "не работает"? Вот Вы выложили мою программу, естественно отлаженную, оттестированную - и чего Вы от меня хотите? Сейчас я ее скопировал прямо из Вашего поста, запустил - работает безупречно. Как и следовало ожидать. Так в чем дело?
Vladimir_S вне форума   Ответить с цитированием
Старый 31.05.2011, 20:59   #3 (permalink)
tatca
Member
 
Регистрация: 19.05.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Я наверно не так выразилась. Извините! Не то,что не работает, я просто не понимаю где в решении сокращается дробь (как сказано в условии).Подскажите мне пожалуйста! Прошу прощения если обидела!!!
tatca вне форума   Ответить с цитированием
Старый 31.05.2011, 21:24   #4 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от tatca Посмотреть сообщение
Я наверно не так выразилась. Извините! Не то,что не работает, я просто не понимаю где в решении сокращается дробь (как сказано в условии).Подскажите мне пожалуйста! Прошу прощения если обидела!!!
А, понятно.
Тут так:
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 еще раз, и так повторять, пока общих делителей не останется. Вот - как-то так.
Vladimir_S вне форума   Ответить с цитированием
Старый 31.05.2011, 21:57   #5 (permalink)
tatca
Member
 
Регистрация: 19.05.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Спасибо болльшое за помощь!

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

Я сейчас разбираюсь с массивами. Если у меня в программе возникнут ошибки Вы поможете их исправить?
tatca вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 31.05.2011, 22:01   #6 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от tatca Посмотреть сообщение
Я сейчас разбираюсь с массивами. Если у меня в программе возникнут ошибки Вы поможете их исправить?
Постараюсь.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 12:34.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.