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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.88
MoSanya
6 / 6 / 0
Регистрация: 16.10.2011
Сообщений: 226
#1

Вычисление НОД двух натуральных чисел (рекурсия) - C++

03.05.2012, 12:28. Просмотров 3478. Ответов 21
Метки нет (Все метки)

День добрый, помогите пожалуйста поправить данную прогу, надо бы избавиться от меток, короче говоря, сократить строки.

Вот сама задачка.

Составить программу нахождения НОД двух натуральных чисел
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
    #include <conio.h>
    #include <math.h>
    void main()
    {
 
     int b, m, n, r, k, k1;
     clrscr();
     printf("\n Vvedite 1-oe chislo: -->   "); scanf("%i",&m);
     printf("\n Vvedite 2-oe chislo: -->   "); scanf("%i",&n);
     m=abs(m);
     n=abs(n);
     if(m==0 && n==0)
     {
    printf("NEVERNYI VVOD \n\n");
//======================================
     goto v2;     }
 
     if(n>m)
     {
     b=n;
     n=m;
     m=b;
     }
 
     r=n%m;
     if(r==0)
     {
     printf("\n NOD(m,n)= %i", r);
     goto v2;
     }
    v1: k=m%r;
     if (k>0)
     {
     k1=r%k;
     r=k;
     k=k1;
    goto v1;
     }
     printf("\nNOD(m,n)= %i", r);
 
    v2: printf("\nNazhmite lubuyu klavishu");
 
     getch();
     }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.05.2012, 12:28     Вычисление НОД двух натуральных чисел (рекурсия)
Посмотрите здесь:
Вычисление НОД ряда натуральных чисел C++
Вычисление нок и нод переменных натуральных чисел C++
Последовательность натуральных чисел, вычисление их НОД методом Евклида C++
C++ Подправить код. НОД двух натуральных чисел
Нод для двух натуральных чисел с циклом for C++
C++ Вычислить НОД (наибольший общий делитель) двух натуральных чисел A и B
Используя функцию нахождения НОД двух натуральных чисел, сократить обычную дробь C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 17:12     Вычисление НОД двух натуральных чисел (рекурсия) #16
C
1
2
3
long int gcd( const long int x, const long int y ) {
   return ( y == 0 ? x : gcd( y, x % y ));
}
MoSanya
6 / 6 / 0
Регистрация: 16.10.2011
Сообщений: 226
03.05.2012, 17:12  [ТС]     Вычисление НОД двух натуральных чисел (рекурсия) #17
\ сам запутался=)
Toshkarik, щас.... вот эта программа с использованием функции...
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include<stdio.h>
#include<conio.h>
int nod(int A, int B);
void main()
{ clrscr();
int a;
int b;
int c;
printf("Vichislenie NOD 2-x natural`nyh chisel \n" );
printf("\n Vvedite 1-oe chislo: -->   "); scanf("%i",&a);
printf("\n Vvedite 2-oe chislo: -->   "); scanf("%i",&b);
c=nod(a,b);
printf("\ n NOD(%i , %i) = %i", a,b,c);
getch();
}
int nod(int A, int B)
{
while (A!=B) {
         if (A>B) A-=B; else B-=A;
         }
return(A);
}
а вот теперь мне эта же программа нужна с использованием рекурсии. теперь вроде понятно должно стать нам всем
amfisat
67 / 67 / 1
Регистрация: 16.06.2009
Сообщений: 240
03.05.2012, 17:14     Вычисление НОД двух натуральных чисел (рекурсия) #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <cstdio>
 
int nod(int A, int B);
 
void main()
{clrscr();
int a;
int b;
int c;
printf("Vichislenie NOD 2-x natural`nyh chisel \n" );
printf("\n Vvedite 1-oe chislo: -->   "); scanf("%i",&a);
printf("\n Vvedite 2-oe chislo: -->   "); scanf("%i",&b);
 c = nod(a,b);
printf("\ n NOD(%i , %i) = %i", a, b, c);
getch();
}
 
int nod(int A, int B)
{ 
if (B == 0) 
return A; 
return nod(B, A % B);
}
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 17:14     Вычисление НОД двух натуральных чисел (рекурсия) #19
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<conio.h>
long int gcd( const long int x, const long int y ) {
   return ( y == 0 ? x : gcd( y, x % y ));
}
void main()
{ clrscr();
int a;
int b;
int c;
printf("Vichislenie NOD 2-x natural`nyh chisel \n" );
printf("\n Vvedite 1-oe chislo: -->   "); scanf("%i",&a);
printf("\n Vvedite 2-oe chislo: -->   "); scanf("%i",&b);
c=gcd(a,b);
printf("\ n NOD(%i , %i) = %i", a,b,c);
getch();
}
MoSanya
6 / 6 / 0
Регистрация: 16.10.2011
Сообщений: 226
03.05.2012, 17:16  [ТС]     Вычисление НОД двух натуральных чисел (рекурсия) #20
Цитата Сообщение от Toshkarik Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<stdio.h>
#include<conio.h>
long int gcd( const long int x, const long int y ) {
 return ( y == 0 ? x : gcd( y, x % y ));
}
void main()
{ clrscr();
int a;
int b;
int c;
printf("Vichislenie NOD 2-x natural`nyh chisel \n" );
printf("\n Vvedite 1-oe chislo: --> "); scanf("%i",&a);
printf("\n Vvedite 2-oe chislo: --> "); scanf("%i",&b);
c=gcd(a,b);
printf("\ n NOD(%i , %i) = %i", a,b,c);
getch();
}
так я сделал, но это разве рекурсия?
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
03.05.2012, 17:20     Вычисление НОД двух натуральных чисел (рекурсия) #21
Да, как Вы видите, в функции при определенном условии ( в данном случае если y != 0 ) вызывается сама функция.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.05.2012, 17:24     Вычисление НОД двух натуральных чисел (рекурсия)
Еще ссылки по теме:
C++ Найти наибольший общий делитель (НОД) двух введенных натуральных чисел, используя алгоритм Евклида
C++ Рекурсия: вычисление НОД
C++ Написать функции рекурсивной и не рекурсивной реализации алгоритма Евклида нахождения наибольшего общего делителя (НОД) двух натуральных чисел
Рекурсия: сложение, вычитание, деление и вычисление остатка от деления двух целых чисел C++
Найти НОД четырех натуральных чисел C++

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

Или воспользуйтесь поиском по форуму:
MoSanya
6 / 6 / 0
Регистрация: 16.10.2011
Сообщений: 226
03.05.2012, 17:24  [ТС]     Вычисление НОД двух натуральных чисел (рекурсия) #22
Toshkarik, а, ну значит я все нормлаьно сделал, не без вашей помощи. Спасибо тогда всем большое. Взрыв мозга закончен
Yandex
Объявления
03.05.2012, 17:24     Вычисление НОД двух натуральных чисел (рекурсия)
Ответ Создать тему
Опции темы

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