Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.75
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 693
#1

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

10.07.2011, 13:31. Просмотров 1545. Ответов 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
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.07.2011, 13:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Наибольшее общее кратное (C++):

Наименьшее общее кратное - C++
Определить наименьшее общее кратное для двух чисел A и B. Числа A и B вводятся пользователем с клавиатуры. Для тех, кто здесь сидят,...

Наименьшее общее кратное - C++
есть одномерный массив, содержащий целые числы. нужно найти наименьшее общее кратное, которое бы удовлетворяло всем эти числам. не знаю как...

Наименьшее общее кратное - C++
Не особо понятная мне задача попалась...поясните и помогите: используя функцию нахождения наименьшего общего кратного двух чисел,найти...

найменшее общее кратное - C++
Ниже приведена программа на языке С. Перепишите ее в соответствии со стилем ввода/вывода C++. /* Преобразуйте эту программу на С в...

Наименьшее общее кратное трёх чисел - C++
Нужно найти НОК трёх чисел, используя функции Добавлено через 6 минут Вот мой код для нахождения НОК(а,в) через НОД(а,в). Теперь,...

Найти наименьшее общее кратное трех чисел - C++
заданы 3 числа найти их наименьшее общее кратное Теги выделения кода предназначены для выделения кода, а не задания. Если Вам...

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

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

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

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

C++
1
2
tnum = labs(num);          
tden = labs(den);
0
grizlik78
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
11.07.2011, 10:45 #9
labs(x) это функция нахождения абсолютного значения (модуля) числа x с типом long.
То есть НОД ищется для числителя и знаменателя без учёта знака.
1
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);
}
0
parkito
11 / 11 / 2
Регистрация: 22.03.2010
Сообщений: 693
11.07.2011, 16:11  [ТС] #11
Цитата Сообщение от grizlik78 Посмотреть сообщение
labs(x) это функция нахождения абсолютного значения (модуля) числа x с типом long.
То есть НОД ищется для числителя и знаменателя без учёта знака.
Все понял я этот код все разложилось по полочкам. Спасибо всем.
0
11.07.2011, 16:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2011, 16:11
Привет! Вот еще темы с ответами:

Найти наименьшее общее кратное используя рекурсию - C++
Дан массив.Найти наименьшее общее кратное используя рекурсию

Найти наименьшее общее кратное заданных N чисел - C++
Ребят, привет. Выручайте, чем можете, нужно составить код для нахождения наименьшего общего кратного заданных N чисел. Облазил весь...

Найти наименьшее общее кратное (НОК) n натуральных чисел - C++
Есть задача: НОК Найти наименьшее общее кратное (НОК) n натуральных чисел. Технические условия Вход В первой...

Найти наименьшее общее кратное (НОК) натуральных чисел С++ - C++
Вот мой исходник : #include &lt;iostream.h&gt; int NSD (int a, int b) { while (a!=0 &amp;&amp; b!=0) { if (a&gt;b) { ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.