Форум программистов, компьютерный форум CyberForum.ru

Наибольшее общее кратное - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
10.07.2011, 13:31     Наибольшее общее кратное #1
Поясните пожалуйста как работает данная программа.

C++
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
28
#include<iostream>
using namespace std;
int main ( )
{setlocale(LC_ALL,"Rus");
int a,b,c;
bool g=true;
cout<<"Ввведите первое число --> ";
cin>>a;
cout<<"Ввведите второе число --> ";
cin>>b; 
 
do{
   a = a % b;
  if (a == 0)
  {c=b;
break;}
b = b % a;
if (b == 0)
{c=a;
break;}
 }while (true);
 
 
 cout<<"Результат "<<c;
 cin.get();
  cin.get();
  return 0;
}
Например пользователь вводит в a 125 в b 10.
После этого выполняется


C++
1
2
3
 a = a % b;
  if (a == 0)
  {c=b;
остаток от деления 5 это записывается в а.

Дальше идет выполнение

C++
1
2
3
4
b = b % a;
if (b == 0)
{c=a;
break;}
теперь уже 10 делится на 5 остатка нет. Следовательно это число является искомым, то есть наибольшим общим делителем.

эту программу я понимаю, но вот эту нет, хотя она в результате дает тот же результат.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void fraction::lowterms()   
{
long tnum/*первое число*/, tden/*второе число*/, temp, gcd;
tnum = labs(num);      //с эти сталкиваюсь впервые      
tden = labs(den);           
 
 
while(tnum !=0)
{
  if( tnum < tden )         
    { temp=tnum; tnum=tden; tden=temp; }
  tnum = tnum - tden;  
}
gcd = tden;                  
num = num / gcd;          
den = den / gcd;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2011, 13:31     Наибольшее общее кратное
Посмотрите здесь:

Наименьшее общее кратное C++
Наименьшее общее кратное C++
[C++ ] Найти наименьшее общее кратное трех чисел C++
найменшее общее кратное C++
C++ Наименьшее общее кратное трёх чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
10.07.2011, 13:34     Наибольшее общее кратное #2
тут по ходу пузырьковый метод пытались сделать
temp=tnum; tnum=tden; tden=temp;
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
10.07.2011, 13:35  [ТС]     Наибольшее общее кратное #3
Цитата Сообщение от Mr. Pyatachok Посмотреть сообщение
тут по ходу пузырьковый метод пытались сделать
temp=tnum; tnum=tden; tden=temp;
Я вижу что пузырьковый, но сама концепция мне не понятна. И что в конце программы нужно выводить чтоб результат получить ?
Mr. Pyatachok
 Аватар для Mr. Pyatachok
8 / 8 / 0
Регистрация: 30.06.2011
Сообщений: 250
10.07.2011, 13:38     Наибольшее общее кратное #4
если английским владеешь в help залезь, а так только гугл
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
10.07.2011, 23:20     Наибольшее общее кратное #5
не понятно, откуда функция берет num и den. из глобальных переменных что ли? ну и что возвращает тоже)

ну а так, по идее, это тот же обыкновенный алгоритм Евклида, только несколько странный - тут вместо операции взятия остатка от деления применяется множественное вычитание в цикле while. предположу, что это не особо эффективно. последние две строчки тоже не совсем понятны, точнее их значение для возможных дальнейших действий - на коэффициенты, получаемые из обобщенного алгоритма Евклида не похоже.

вообще, почитай Кнута "Искусство программирования. Том 2.". У него все разновидности этого алгоритма расписаны очень хорошо и более-менее доступно.

p.s. пузырьковая сортировка тут вообще не при чем.
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
10.07.2011, 23:28     Наибольшее общее кратное #6
Цитата Сообщение от Paporotnik Посмотреть сообщение
не понятно, откуда функция берет num и den. из глобальных переменных что ли? ну и что возвращает тоже)
Цитата Сообщение от Paporotnik Посмотреть сообщение
последние две строчки тоже не совсем понятны, точнее их значение для возможных дальнейших действий - на коэффициенты, получаемые из обобщенного алгоритма Евклида не похоже.
num и den это числитель и знаменатель дроби. Скорее всего fraction это класс, реализующий операции с дробями. А последние две строчки — сокращение дроби, когда числитель и знаменатель делятся на их НОД.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
10.07.2011, 23:29     Наибольшее общее кратное #7
а, тогда да, похоже на правду.
и проглядел, что это, видимо, метод класса. тогда ясно почему ни входных, ни выходных значений нет.
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
11.07.2011, 10:27  [ТС]     Наибольшее общее кратное #8
А что вот это такое ?

C++
1
2
tnum = labs(num);          
tden = labs(den);
grizlik78
Эксперт C++
 Аватар для grizlik78
1882 / 1414 / 101
Регистрация: 29.05.2011
Сообщений: 2,958
11.07.2011, 10:45     Наибольшее общее кратное #9
labs(x) это функция нахождения абсолютного значения (модуля) числа x с типом long.
То есть НОД ищется для числителя и знаменателя без учёта знака.
Daemon025
 Аватар для Daemon025
380 / 329 / 67
Регистрация: 06.12.2010
Сообщений: 900
11.07.2011, 11:18     Наибольшее общее кратное #10
НОК:
C++
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
#include <iostream>
#include <fstream>
using namespace std;
 
int gcd(int a, int b);
 
int main()
{
    int x,y;
 
    ifstream input("input.txt");
    input >> x >> y;
 
    ofstream output("output.txt");
    output << (x / gcd(x,y) * y);
 
    output.close();
    input.close();
    return 0;
}
 
int gcd(int a, int b)
{
    if (b == 0) return a;
    return gcd(b, a % b);
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2011, 16:11     Наибольшее общее кратное
Еще ссылки по теме:

Найти наименьшее общее кратное используя рекурсию C++
C++ Даны натуральные числа X и Y. Вычислить их наименьшее общее кратное.
C++ Найти наибольший общий делитель и наименьшее общее кратное

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

Или воспользуйтесь поиском по форуму:
parkito
 Аватар для parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 685
11.07.2011, 16:11  [ТС]     Наибольшее общее кратное #11
Цитата Сообщение от grizlik78 Посмотреть сообщение
labs(x) это функция нахождения абсолютного значения (модуля) числа x с типом long.
То есть НОД ищется для числителя и знаменателя без учёта знака.
Все понял я этот код все разложилось по полочкам. Спасибо всем.
Yandex
Объявления
11.07.2011, 16:11     Наибольшее общее кратное
Ответ Создать тему
Опции темы

Текущее время: 04:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru