31.05.2011, 18:35 | #1 (permalink) |
Member
Регистрация: 19.05.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Не работает задачка в Pascale (Vladimiru S)
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. Заранее спасибо! |
31.05.2011, 18:35 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Дабы не тратить время на поиски, скину вам аналогичные темы Задачка. Задачка по Паскалю Помощь в Pascale |
31.05.2011, 20:30 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Ну и как сие прикажете понимать? Что именно "не работает"? В каком смысле "не работает"? Вот Вы выложили мою программу, естественно отлаженную, оттестированную - и чего Вы от меня хотите? Сейчас я ее скопировал прямо из Вашего поста, запустил - работает безупречно. Как и следовало ожидать. Так в чем дело?
|
31.05.2011, 20:59 | #3 (permalink) |
Member
Регистрация: 19.05.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Я наверно не так выразилась. Извините! Не то,что не работает, я просто не понимаю где в решении сокращается дробь (как сказано в условии).Подскажите мне пожалуйста! Прошу прощения если обидела!!!
|
31.05.2011, 21:24 | #4 (permalink) | |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Цитата:
Тут так: 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 еще раз, и так повторять, пока общих делителей не останется. Вот - как-то так. |
|
31.05.2011, 21:57 | #5 (permalink) |
Member
Регистрация: 19.05.2011
Сообщений: 11
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Спасибо болльшое за помощь!
Вот теперь до меня дошло! Я поняла! Благодарю за помошь!
Я сейчас разбираюсь с массивами. Если у меня в программе возникнут ошибки Вы поможете их исправить? |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
31.05.2011, 22:01 | #6 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|