3 / 3 / 0
Регистрация: 22.06.2009
Сообщений: 6
1

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

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

Author24 — интернет-сервис помощи студентам
Наименьший общий делитель. Алгоритм Евклида.

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.06.2009, 22:57
Ответы с готовыми решениями:

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

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

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

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

6
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
23.06.2009, 09:07 2
ты сам-то понял, что сделал?
у тебя n и m - агрументы _tmain.
они доступны только на чтение.
как ты ему значения присваиваешь??
естественно, в строке
C++
1
n=protect(INT_MAX, INT_MIN);
будет нарушение прав доступа.
0
3 / 3 / 0
Регистрация: 22.06.2009
Сообщений: 6
23.06.2009, 10:32  [ТС] 3
то есть если поменять _tmain на vvod_n_m все нормально буит?
1
Заблокирован
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
3 / 3 / 0
Регистрация: 22.06.2009
Сообщений: 6
23.06.2009, 13:36  [ТС] 5
все. я сделал.
1
92 / 88 / 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
3 / 3 / 0
Регистрация: 22.06.2009
Сообщений: 6
23.06.2009, 21:48  [ТС] 7
нет. спасибо но мне нада рекурсией
0
23.06.2009, 21:48
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.06.2009, 21:48
Помогаю со студенческими работами здесь

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

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru