Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
4 / 4 / 3
Регистрация: 30.09.2012
Сообщений: 63
1

Найти НОД только циклами и if

30.09.2012, 14:29. Показов 1616. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно найти НОД двух чисел, используя только циклы и оператор if. Помогите пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.09.2012, 14:29
Ответы с готовыми решениями:

Задание с циклами. Найти НОД
Здравствуйте. Помогите с задачей, пожалуйста =) А то не хочу что бы отчислили >_< :C Даны...

Найти НОД трёх чисел. Примечание. НОД(a,b,c)=НОД(НОД(a,b),c).
Кто может решить данную задачку (составить программу с помощью циклов)))) заранее спасибо)) Найти...

Даны n натуральных чисел. Найти их наибольший общий делитель, учитывая что НОД(а,б,с)=НОД(НОД(а,б)с)
даны n натуральных чисел. Найти их наибольший общий делитель, учитывая, что НОД(a,b,c) = НОД...

Найти наибольший общий делитель чисел M и N. Используйте теорему Эйлера: Если M делится на N, то НОД (N, M)=N, иначе НОД (N, M)= =НОД (M mod N, N).
Найти наибольший общий делитель чисел M и N. Используйте теорему Эйлера: Если M делится на N, то...

11
2525 / 1751 / 152
Регистрация: 11.08.2012
Сообщений: 3,349
30.09.2012, 14:40 2
C++
1
2
3
4
5
6
7
8
9
10
11
int EVCLID(int a, int b)
{
    while ((a != 0) && (b != 0))
    {
        (a > b) ? (a %= b) : (b %= a);
    }
    if (a != 0)
        return a;
    else
        return b;
}
P.S. из моей программы. Код сов. рабочий. Программу тестил много раз.
1
4 / 4 / 3
Регистрация: 30.09.2012
Сообщений: 63
30.09.2012, 16:35  [ТС] 3
A иначе никак? Без return'a?
0
15 / 15 / 4
Регистрация: 07.07.2011
Сообщений: 38
30.09.2012, 16:44 4
Если без функций, то можно так:

C++
1
2
3
for (int GCD = (x < y) ? x : y; GCD > 0; GCD--)  //greatest common divisor
if ((x % GCD == 0) && (y % GCD == 0))
{printf("\nGreatest Common Divisor of %d and %d is %d\n",x,y,GCD); break;
0
2525 / 1751 / 152
Регистрация: 11.08.2012
Сообщений: 3,349
30.09.2012, 17:39 5
Цитата Сообщение от sashadereh Посмотреть сообщение
A иначе никак? Без return'a?
ё-моё... А вы не можете код проанализировать, или это за вас сделать? Там модифицировать-то не много надо.
C++
1
2
3
4
5
6
7
8
9
10
int a, b;
int NOD;
while ((a != 0) && (b != 0))
{
        (a > b) ? (a %= b) : (b %= a);
}
    if (a != 0)
        NOD=a;    
    else
        NOD=b;
0
4 / 4 / 3
Регистрация: 30.09.2012
Сообщений: 63
30.09.2012, 18:22  [ТС] 6
Спасибо большое, я понял Ваше решение. А как думаете, такое решение пройдет?
C++
1
2
3
4
int a, b, NOD;
NOD=(a>b)?b:a;
while ( (a%NOD!=0) && (b%NOD!=0) )
NOD--;
0
15 / 15 / 4
Регистрация: 07.07.2011
Сообщений: 38
30.09.2012, 18:36 7
Решение пройдет, но считать правильно не будет.
0
2525 / 1751 / 152
Регистрация: 11.08.2012
Сообщений: 3,349
30.09.2012, 18:36 8
Цитата Сообщение от sashadereh Посмотреть сообщение
А как думаете, такое решение пройдет?
Нет. У вас в цикле происходит только понижение NOD на единицу, а параметры цикла не меняются. Программа зациклится у вас. Можете сами проверить.
1
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.09.2012, 18:47 9
программа не зациклится и при a>0, b>0 будет правильной, если && на || заменить. По крайней мере, на 1 всегда остановится при взаимно простых a и b.

Hydrogen, если минимум из a и b не равен нулю, то в том варианте цикл сразу остановится, так как одно из условий (a%NOD != 0) и (b%NOD != 0) не будет верным, а при нулевом минимуме программа просто вылетит
0
Модератор
Эксперт функциональных языков программированияЭксперт Python
36601 / 20330 / 4220
Регистрация: 12.02.2012
Сообщений: 33,644
Записей в блоге: 13
30.09.2012, 18:54 10
Цитата Сообщение от sashadereh Посмотреть сообщение
используя только циклы и оператор if
- очень сильное ограничение...
0
Kotte318
13.03.2013, 16:42 11
Цитата Сообщение от cmath Посмотреть сообщение
ё-моё... А вы не можете код проанализировать, или это за вас сделать? Там модифицировать-то не много надо.
C++
1
2
3
4
5
6
7
8
9
10
int a, b;
int NOD;
while ((a != 0) && (b != 0))
{
        (a > b) ? (a %= b) : (b %= a);
}
    if (a != 0)
        NOD=a;    
    else
        NOD=b;
а что обозначает %=?
13 / 13 / 2
Регистрация: 06.06.2012
Сообщений: 136
13.03.2013, 19:36 12
Цитата Сообщение от Kotte318 Посмотреть сообщение
а что обозначает %=?
Это означает присвоить делимому остаток от деления. допустим в коде :
C++
1
2
int a = 5; int b = 7;
b %= a;
b получится равным двум.
1
13.03.2013, 19:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2013, 19:36
Помогаю со студенческими работами здесь

Найти все пятизначные числа, в которых ровно две одинаковые цифры (только циклами !)
Помогите пожалуйста. Никак не получается решить задачу. Необходимо вывести на экран все пятизначные...

Заданы натуральные числа m и n. Найти НОД(m,n) Составить программу которая будет содержать рекурсивную функцию вычисления НОД......
Заданы натуральные числа m и n. Найти НОД(m,n) Составить программу которая будет содержать...

Найти НОД трёх чисел, используя рекурсивную функцию нахождения НОД двух чисел
Помогите решить. 8. Найти НОД трёх чисел, используя рекурсивную функцию нахождения НОД двух...

Построить пирамиду заданного вида, пользуясь только циклами
Здравствуйте. Помогите пожалуйста построить пирамиду вида F F E F E D F E D C F E D C B F E D...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru