Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 86, средняя оценка - 4.99
Виталий Vi
3 / 3 / 0
Регистрация: 22.06.2009
Сообщений: 6
#1

Наименьший общий делитель. Алгоритм Евклида. - C++

22.06.2009, 22:57. Просмотров 11787. Ответов 6
Метки нет (Все метки)

Наименьший общий делитель. Алгоритм Евклида.

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
int protect(int maxnum,int minnum);
int _tmain(int &n, int &m);
 
int nod (int n, int m)
{
int d;
d = n%m;
//printf ("promeshutochnii resultat: nod = %d", d);
printf ("\n");
if (d==0) return q;
else d = nod (m,d);
return d;
}
 
int _tmain(int &n, int &m)
{
printf ("Naimenishii Obshii Delitel`. Algoritm Evklida.");
printf ("\n");
printf ("\n");
 
printf ("vvedite n= ");
n=protect(INT_MAX, INT_MIN);
printf ("vvedite m= ");
m=protect(INT_MAX, INT_MIN);
int k;
if (n>=m) k = nod(n,m);
else k = nod(m,n);
printf ("Resultat: \n");
printf ("NOD = %d \n", k);
int h = n*m/k;
printf ("NOK = %d", h);
getch();
return 0;
}
 
int protect(int maxnum,int minnum)
{
const int max=6;
int i=0,k=0; // счетчик знаков
char a[max]={0}, //числовой массив на 6 символов
x=0; // вводимое значение строки
int q=0; // переменная , отвечающая за выводимый результат
 
do {
x=_getch();
if (x>=48 && x<=57 && i<max) //если вводены числа
{
printf ("%c",x);
a[i]=x;
i++;
}
 
if (x==8 && i>0) // если нажата <BACKSPACE>
{
printf ("%c %c",8,8);
i--;
if (a[i]=='e') {k=0;i--;}
a[i]=0;
}
 
if (x==101 && i>0 && i<max-1 && k==0)//если нажата "е"
{
printf("%c",x);
a[i]=x;
i++; k=1;
}
 
if (x==45 && i==0) // если нажата клавиша "-"
{
printf ("%c",x);
a[i]=x;
++i;
}
}
 
while (x!=13 || i==0); // делать пока не нажата клавиша <ENTER>
q=atoi (a);//преобразуем массив строк в числовое значение
if(q<minnum || q>maxnum)
{
a[i]='\0';
for (int j=i;j>0;j--)
{
printf("\b \b");
}
return protect(maxnum,minnum);
}
else
return q;
}

эт рекурсия. работает правильно. но как поставил защиту вылетает на строках n=protect(INT_MAX, INT_MIN);
m=protect(INT_MAX, INT_MIN);
подобную защиту делал на других, а здесь без вариантов. в чем проблема??
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2009, 22:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Наименьший общий делитель. Алгоритм Евклида. (C++):

Рекурсия. Наименьший общий делитель по формулам Евклида
Подскажите как выполнить рекурсию. прога работает, но без рекурсии. задание...

Найти наибольший общий делитель (НОД), используя алгоритм Евклида
Даны целые положительные числа A и B. Найти их наибольший об-щий делитель...

Найти наибольший общий делитель двух чисел используя алгоритм Евклида
Найти наибольший общий делитель двух чисел используя алгоритм Евклида....

Найти наибольший общий делитель двух введенных чисел, используя алгоритм Евклида
Тема: Функции2. 6. Найти наибольший общий делитель (ндс) двух введенных чисел,...

Найти наибольший общий делитель n и m (наименьшее общее кратное n и m) используя алгоритм Евклида.
10.Даны натуральные числа n,m. Найти наибольший общий делитель n и m...

Найти наибольший общий делитель трех заданных натуральных чисел, используя алгоритм Евклида
1.Найти наибольший общий делитель трех заданных натуральных чисел, используя...

6
Patch
2336 / 492 / 22
Регистрация: 01.04.2009
Сообщений: 2,181
23.06.2009, 09:07 #2
ты сам-то понял, что сделал?
у тебя n и m - агрументы _tmain.
они доступны только на чтение.
как ты ему значения присваиваешь??
естественно, в строке
C++
1
n=protect(INT_MAX, INT_MIN);
будет нарушение прав доступа.
0
Виталий Vi
3 / 3 / 0
Регистрация: 22.06.2009
Сообщений: 6
23.06.2009, 10:32  [ТС] #3
то есть если поменять _tmain на vvod_n_m все нормально буит?
1
YurA_280784
Заблокирован
23.06.2009, 10:50 #4
Капец int _tmain(int argc, TCHAR* argv[])
основная фнкция если ты хочешь с ёе параметрами работать (типа юзать командную сторку то нуна обрабатывать argc и argv)

Объяви m и n внутри _tmain зачем так над компилятором издеваться, да и над собой тоже?

C++
1
int _tmain(int &n, int &m)
Что тебе это даёт???
0
Виталий Vi
3 / 3 / 0
Регистрация: 22.06.2009
Сообщений: 6
23.06.2009, 13:36  [ТС] #5
все. я сделал.
1
System.exe
90 / 86 / 58
Регистрация: 14.05.2009
Сообщений: 202
23.06.2009, 15:58 #6
Держи код C++ намного проще и работает 100%-но:
Код
#include <iostream.h>
int nod(int,int);
main()
{
int x,y,t;
cout<<"vvedite chisla\n";
cin>>x>>y;
t=nod(x,y);
cout<<"nod="<<t<<"\n";
return 0;
}
int nod(int a,int b)
{
while(a!=b)
{
if(a>b)
a=a-b;
else b=b-a;
}
return a;
}
Добавлено через 11 минут 31 секунду
Держи код C++ намного проще и работает 100%-но:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream.h>
int nod(int,int);
main()
{
int x,y,t;
cout<<"vvedite chisla\n";
cin>>x>>y;
t=nod(x,y);
cout<<"nod="<<t<<"\n";
return 0;
}
int nod(int a,int b)
{
while(a!=b)
{
if(a>b)
a=a-b;
else b=b-a;
}
return a;
}
Добавлено через 2 минуты 1 секунду
Держи код C++ намного проще и работает 100%-но:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream.h>
int nod(int,int);
main()
{
int x,y,t;
cout<<"vvedite chisla\n";
cin>>x>>y;
t=nod(x,y);
cout<<"nod="<<t<<"\n";
return 0;
}
int nod(int a,int b)
{
while(a!=b)
{
if(a>b)
a=a-b;
else b=b-a;
}
return a;
}
Добавлено через 2 минуты 33 секунды
Держи код C++ намного проще и работает 100%-но:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream.h>
int nod(int,int);
main()
{
int x,y,t;
cout<<"vvedite chisla\n";
cin>>x>>y;
t=nod(x,y);
cout<<"nod="<<t<<"\n";
return 0;
}
int nod(int a,int b)
{
while(a!=b)
{
if(a>b)
a=a-b;
else b=b-a;
}
return a;
}
0
Виталий Vi
3 / 3 / 0
Регистрация: 22.06.2009
Сообщений: 6
23.06.2009, 21:48  [ТС] #7
нет. спасибо но мне нада рекурсией
0
23.06.2009, 21:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.06.2009, 21:48
Привет! Вот еще темы с решениями:

Наибольший общий делитель (НОД) двух целых положительных чисел A и B, используя алгоритм Евклида
Описать функцию NOD2(A, B) целого типа, находящую наибольший общий делитель...

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

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

Описать функцию NOD2(A,B) целого типа,находящую наибольший общий делитель(НОД) двух целых положительных чисел А и В,используя алгоритм Евклида:....
Описать функцию NOD2(A,B) целого типа,находящую наибольший общий делитель(НОД)...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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