Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.06.2012, 15:57   #1
ParkWay
 
Регистрация: 04.02.2012
Сообщений: 3
По умолчанию Привести дроби к общему знаменателю.

Здравствуйте, помогите пожалуйста составить прогу\процедуру, которая приводила бы n число совершенно рандомных дробей к наименьшему из возможных общему знаменателю.
ParkWay вне форума Ответить с цитированием
Старый 06.06.2012, 16:17   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Начни с этого http://programmersforum.ru/showthread.php?t=8324

И в поиск сходи http://programmersforum.ru/search.php, уже неоднократно обсуждались дроби.
eoln вне форума Ответить с цитированием
Старый 06.06.2012, 16:17   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

что не получается то?

наименьший общий знаменатель - это НОК (наименьшее общее кратное) для знаменателей дроби1 и дроби2.

если дробей больше двух, то можно пользоваться правилом
НОК(z1, z2, .. zN)= НОК( z1, НОК(z2, ... НОК(zN-1, zN))))...)))

всё!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 06.06.2012, 17:14   #4
Paleolit
Пользователь
 
Аватар для Paleolit
 
Регистрация: 27.05.2012
Сообщений: 14
По умолчанию

Вот мой оригинальный алгоритм:
1) Находим наибольшее из знаменателей (назовем его max)
2) Если max поделился нацело на все знаменатели мы нашли НОК переход к 4
3) Иначе последовательно умножаем max на i (i=1..бесконечность)пока он
нацело не будет делится на все знаменатели.
4) Возвращаем наименьшее общее кратное

Вот на C++
Алгоритм тот же но код слегка изменен:

Код:
int Nok(int* Znamenateli,int KolichestvoZnamenatelei){
 int max = Znamenateli[0];
 for(int i=0;i<KolichestvoZnamenatelei;i++){
   if (max<Znamenateli[i]) max = Znamenateli[i];
}

int Nok = max;
int mnojitel =1;
bool NokNaiden = true;
while(1){
 Nok*=mnojitel;
 for(int i=0;i<KolichestvoZnamenatelei;i++){
    if((Nok%Znamenateli[i])!=0) NokNaiden=false;
 }
 if(NokNaiden) return Nok; 
 mnojitel++;
 NokNaiden=true;
 }
}
Скажи мне на каком языке ты пишеш и я скажу тебе кто ты

Последний раз редактировалось Paleolit; 06.06.2012 в 17:32.
Paleolit вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Графы. Привести пример. MyLastHit Помощь студентам 6 23.09.2011 10:24
Ошибка в доступе к общему файлу Striam Microsoft Office Excel 4 03.09.2010 12:56
Как Сравнить данные на листах по одному общему параметру и при совпадении копировать mabru Microsoft Office Excel 18 12.03.2010 08:04
Привести в живность код student_63 Помощь студентам 1 29.11.2007 02:01