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

НОД - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Faul969
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 28
10.11.2010, 21:27     НОД #1
Написать программу которая из двух чисел x и y ищет наибольший общий делитель
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roberto_Tolas
1 / 1 / 0
Регистрация: 02.11.2010
Сообщений: 22
10.11.2010, 22:19     НОД #2
C++
1
2
3
4
5
while (x!=y)
{
    if (x>y) x = x - y;
    else y = y - x;
}
quazee
14 / 14 / 0
Регистрация: 15.10.2010
Сообщений: 49
10.11.2010, 22:43     НОД #3
аахаха роберто

Добавлено через 16 минут
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 <stdio.h>;
#include<iostream>;
int Nod(int,int);
int main()
{
    int a,b;
    scanf_s("%d%d",&a,&b);
    printf("NOD=%d",Nod(a,b));
    system("pause");
}
int Nod(int a,int b)
{
    int n,m,nod;
    nod=0;
    if(a>b)
        n=a;
    else
        n=b;
    for(;n>0;n--)
    {
        if((!(a%n))&&(!(b%n)))
        {
            if(n>nod)
                nod=n;              
        }
    }
    return nod;
}
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
11.11.2010, 01:54     НОД #4
quazee, ты б хоть компилировал перед тем, как постить. У тебя там ошибка и три предупреждения. Кроме того, алгоритм фиговый.
Вот как можно сделать проще:
C++
1
2
3
4
5
6
7
8
//!     Наибольший общий делитель (greatest common divisor).
int gcd (int first, int second) {
    if (second == 0) std::swap(first, second);
 
    while (second != 0 && (first %= second)) std::swap(first, second);
    
    return abs(second);
}
quazee
14 / 14 / 0
Регистрация: 15.10.2010
Сообщений: 49
11.11.2010, 02:00     НОД #5
у меня в 2010 вижле все работает и не 1 варнинга если не в силах перекастить код не мои траблы

Добавлено через 1 минуту
человек который попросил написать прогу НОД поймет твой код?
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
11.11.2010, 02:10     НОД #6
Мой ему будет понять сложно, а твой невозможно. Даже я не понимаю.
Roberto_Tolas
1 / 1 / 0
Регистрация: 02.11.2010
Сообщений: 22
11.11.2010, 17:55     НОД #7
ну вы смешные...
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 18:04     НОД #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
 
int nod(int a, int b)
{
     return (b==0) ? a: nod(b, a%b);
}
 
int main()
{
    std::cout<<nod(15,5)<<'\n';
    return 0;
}
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
11.11.2010, 18:13     НОД #9
ForEveR, только надо модуль возвращать, т.к. НОД отрицательным не бывает.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 19:51     НОД #10
volovzi, Тут может получиться отрицательным? Это ж алгоритм Евклида. Он не может получиться отрицательным никак оО
Irradiator
2 / 2 / 0
Регистрация: 08.11.2010
Сообщений: 27
11.11.2010, 20:51     НОД #11
Цитата Сообщение от ForEveR Посмотреть сообщение
volovzi, Тут может получиться отрицательным? Это ж алгоритм Евклида. Он не может получиться отрицательным никак оО
Твой говнокод к Эвклиду отношения не имеет, он дебилистический остаток от деления не стал бы использовать (особенно если вспомнить те годы). И введение лишней операции (даже двух) действует на алгоритм в худшую сторону (занимательный факт: дрючить байты плюсами и не знать, что деление с остатком в разы неэффективней простой разности).
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 20:56     НОД #12
Irradiator, М... Что ж.Читаем, ага?
Irradiator
2 / 2 / 0
Регистрация: 08.11.2010
Сообщений: 27
11.11.2010, 20:58     НОД #13
Да ты не суй ссылки на рюсскую педовикию, в ней каждый индивид насрать может.

Во времена Эвклида позиционной записи не было, но в ваших рюсских деревнях такому не обучают.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 21:00     НОД #14
Irradiator, Полазь по тындексу. Это оптимальный вариант реализации рекурсивной функции нахождения НОДа. Можешь заодно алгоритм Евклида перечитать, на всякий случай.
Вычитанием тоже реализуется, но я же не писал мегоэффективный алгоритм, ага?
Во времена Эвклида не было, да) И?
Irradiator
2 / 2 / 0
Регистрация: 08.11.2010
Сообщений: 27
11.11.2010, 21:03     НОД #15
Цитата Сообщение от ForEveR Посмотреть сообщение
Вычитанием тоже реализуется, но я же не писал мегоэффективный алгоритм, ага?
Точнее вообще его не писал. Скопипастить - не написать.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 21:03     НОД #16
Читаем, читаем.

Не по теме:

Irradiator, Да нет, я его не копипастил) Смысл копипастить простенькую рекурсию?)
П.С. стоит прекратить флудить в теме, хочешь обсудить пиши в ЛС

volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
11.11.2010, 21:07     НОД #17
Цитата Сообщение от ForEveR Посмотреть сообщение
volovzi, Тут может получиться отрицательным? Это ж алгоритм Евклида. Он не может получиться отрицательным никак оО
Как это? Вот если "a" отрицательно, а "b" равно нулю, то получаем отрицательный НОД.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
11.11.2010, 21:08     НОД #18
volovzi, Согласен. Хотя эта частность мало где фикситься.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.11.2010, 21:22     НОД
Еще ссылки по теме:

Рекурсия (НОД) C++
найти НОД C++
C++ НОД 3-х чисел

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

Или воспользуйтесь поиском по форуму:
silent_1991
11.11.2010, 21:22     НОД
  #19

Не по теме:

ForEveR, меня поражает ваша выдержка. Я бы не выдержал, хотя на такой толстый троллинг отвечать негоже, но не выдержал бы, ей-богу)))

Yandex
Объявления
11.11.2010, 21:22     НОД
Ответ Создать тему
Опции темы

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