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

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

Восстановить пароль Регистрация
 
sashadereh
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 63
30.09.2012, 14:29     Найти НОД только циклами и if #1
Нужно найти НОД двух чисел, используя только циклы и оператор if. Помогите пожалуйста
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
30.09.2012, 14:40     Найти НОД только циклами и if #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. из моей программы. Код сов. рабочий. Программу тестил много раз.
sashadereh
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 63
30.09.2012, 16:35  [ТС]     Найти НОД только циклами и if #3
A иначе никак? Без return'a?
makShot
15 / 15 / 1
Регистрация: 07.07.2011
Сообщений: 38
30.09.2012, 16:44     Найти НОД только циклами и if #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;
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
30.09.2012, 17:39     Найти НОД только циклами и if #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;
sashadereh
3 / 3 / 1
Регистрация: 30.09.2012
Сообщений: 63
30.09.2012, 18:22  [ТС]     Найти НОД только циклами и if #6
Спасибо большое, я понял Ваше решение. А как думаете, такое решение пройдет?
C++
1
2
3
4
int a, b, NOD;
NOD=(a>b)?b:a;
while ( (a%NOD!=0) && (b%NOD!=0) )
NOD--;
makShot
15 / 15 / 1
Регистрация: 07.07.2011
Сообщений: 38
30.09.2012, 18:36     Найти НОД только циклами и if #7
Решение пройдет, но считать правильно не будет.
cmath
Модератор
 Аватар для cmath
2415 / 1634 / 132
Регистрация: 11.08.2012
Сообщений: 3,252
Завершенные тесты: 5
30.09.2012, 18:36     Найти НОД только циклами и if #8
Цитата Сообщение от sashadereh Посмотреть сообщение
А как думаете, такое решение пройдет?
Нет. У вас в цикле происходит только понижение NOD на единицу, а параметры цикла не меняются. Программа зациклится у вас. Можете сами проверить.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
30.09.2012, 18:47     Найти НОД только циклами и if #9
программа не зациклится и при a>0, b>0 будет правильной, если && на || заменить. По крайней мере, на 1 всегда остановится при взаимно простых a и b.

Hydrogen, если минимум из a и b не равен нулю, то в том варианте цикл сразу остановится, так как одно из условий (a%NOD != 0) и (b%NOD != 0) не будет верным, а при нулевом минимуме программа просто вылетит
Catstail
Модератор
 Аватар для Catstail
21500 / 10253 / 1669
Регистрация: 12.02.2012
Сообщений: 17,139
30.09.2012, 18:54     Найти НОД только циклами и if #10
Цитата Сообщение от sashadereh Посмотреть сообщение
используя только циклы и оператор if
- очень сильное ограничение...
Kotte318
Сообщений: n/a
13.03.2013, 16:42     Найти НОД только циклами и if #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;
а что обозначает %=?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2013, 19:36     Найти НОД только циклами и if
Еще ссылки по теме:

Определить в последовательности число соседств двух чисел с разным знаком. Только с циклами! без массивов C++
Найти все пятизначные числа, в которых ровно две одинаковые цифры (только циклами !) C++
Найти НОД двух чисел C++

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

Или воспользуйтесь поиском по форуму:
Quantity
 Аватар для Quantity
12 / 12 / 1
Регистрация: 06.06.2012
Сообщений: 136
13.03.2013, 19:36     Найти НОД только циклами и if #12
Цитата Сообщение от Kotte318 Посмотреть сообщение
а что обозначает %=?
Это означает присвоить делимому остаток от деления. допустим в коде :
C++
1
2
int a = 5; int b = 7;
b %= a;
b получится равным двум.
Yandex
Объявления
13.03.2013, 19:36     Найти НОД только циклами и if
Ответ Создать тему
Опции темы

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