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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Faul969
1 / 1 / 0
Регистрация: 08.10.2010
Сообщений: 28
#1

НОД - C++

10.11.2010, 21:27. Просмотров 1839. Ответов 18
Метки нет (Все метки)

Написать программу которая из двух чисел x и y ищет наибольший общий делитель
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2010, 21:27     НОД
Посмотрите здесь:

НОД - C++
Извиняюсь за вопрос, просмотрел все но не нашел того, что нужно Задание: Найти НОД 2 чисел # include <iostream> # include...

НОД - C++
Нужно доработать код, чтобы находить НОД трех чисел, пожалуйста) #include <iostream> #include <conio.h> #include <locale.h> using...

C++ НОД - C++
Создать функцию, вычисляющую НОД. Использую эту функцию, найти наибольший общий делитель элементов одномерного массива из 10-элементов. ...

вычисление нод - C++
int nod(int x, int y) { if ((y == 0) || (x==0)) return x; else return nod(y, x % y); ...

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

НОД 2-х чисел - C++
Всем привет. Вообще мне нужно написать программу на Прологе, которая с помощью рекурсии находит НОК 2-х чисел. Но я, честно, не совсем...

поиск НОД - C++
даны натуральные числа n и m; найти НОД (n;m). Составить рекурсивную функцию вычесления НОД, основанную на соотношении НОД(n,m)=НОД(m,r),...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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
267 / 169 / 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
267 / 169 / 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
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
267 / 169 / 8
Регистрация: 14.03.2010
Сообщений: 501
11.11.2010, 18:13     НОД #9
ForEveR, только надо модуль возвращать, т.к. НОД отрицательным не бывает.
ForEveR
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 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
В астрале
Эксперт С++
7967 / 4729 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
11.11.2010, 20:56     НОД #12
Irradiator, М... Что ж.Читаем, ага?
Irradiator
2 / 2 / 0
Регистрация: 08.11.2010
Сообщений: 27
11.11.2010, 20:58     НОД #13
Да ты не суй ссылки на рюсскую педовикию, в ней каждый индивид насрать может.

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

Не по теме:

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

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

Нахождение НОД - C++
Программа ищет наибольший общий делитель, проблема в том что если ввести ,допустим, числа 25 и 5 ,то она выведет не наибольший, а все...

Рекурсия (НОД) - C++
Погомите найдити НОД (наибольший общий делитель) двух натуральных чисел на языке Cи, используя рекурсию. Если не получится готовый код...

Вычисление НОД - C++
Составить программу для вычисления НОД двух натуральных чисел вот еще одна програмка.

Нахождение НОД - C++
Здравствуйте, мне надо найти НОД чисел. Как это реализовать на языке C++ ?

НОК и НОД - C++
Здоров Всем ! Вот условие : Определить функцию для нахождения наименьшего общего кратного (НОК) и наибольшего общего...


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

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

Не по теме:

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

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

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