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

ошибка.должена выйти из функции, но что-то не то - C++

Восстановить пароль Регистрация
 
 
matador333
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 11
21.09.2012, 21:11     ошибка.должена выйти из функции, но что-то не то #1
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
#include <iostream>
#include <conio.h>
using namespace std;
int nod(int a,int b)
{
    int tmp;
    if(a!=b)
        { 
            if(a>b)
            {
                a=a-b;
                b=b;
            }
            else
            {
                tmp=a;
                a=b;
                b=tmp;
                a=a-b;
                b=b;
            }
 
            nod(a,b);
    }
    
    return a;
}
void main()
{
    int z,x=45,y=25;
    z=nod(x,y);
    cout<<z;
    getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2012, 21:11     ошибка.должена выйти из функции, но что-то не то
Посмотрите здесь:

Выйти из goto. C++
C++ do while - как выйти из цикла?
C++ как выйти из циклов
ошибка с полиморфизмом: программа не понимает, что нужно обращаться к наследуемой функции C++
C++ как выйти из программы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
21.09.2012, 21:45     ошибка.должена выйти из функции, но что-то не то #2
У меня прекрасно пошло без изменений. Какая ошибка?
matador333
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 11
21.09.2012, 21:49  [ТС]     ошибка.должена выйти из функции, но что-то не то #3
ответ должен быть 5..а у меня 20 выводит(
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
21.09.2012, 21:55     ошибка.должена выйти из функции, но что-то не то #4
5 правильный ответ после 1 итерации числа 20 25 после второй 5 20 а потом уменьшение 20 до 5
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.09.2012, 21:55     ошибка.должена выйти из функции, но что-то не то #5
Пишите НОД как белый человек, а то он у вас не рекурсивный (строка 24, где сохранение/возврат значения?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int gcd(int a, int b)
{
  // я знаю про return a | b;
  if (a == 0) {
    return b;
  }
  else if (b == 0) {
    return a;
  }
  else if (a < b) {
    return gcd(a, b - a);
  }
  else {
    return gcd(a - b, b);
  }
}
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
21.09.2012, 22:01     ошибка.должена выйти из функции, но что-то не то #6
добавлю еще по коду пару замечаний
1
C++
1
b=b;
зачем так делать не понятно , вы не меняете значение переменной ,не трогайте ее, без этой строки все прекрасно будет работать
2
C++
1
a=a-b;
на будущее так как вы используете язык с++ ,то стоит пользоватся всеми его преимуществами, в данном случае эта строка кода идентична
C++
1
a-=b;
так короче, грамотнее и в любой книге такой пример есть

Добавлено через 2 минуты
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Пишите НОД как белый человек, а то он у вас не рекурсивный (строка 24, где сохранение/возврат значения?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int gcd(int a, int b)
{
  // я знаю про return a | b;
  if (a == 0) {
    return b;
  }
  else if (b == 0) {
    return a;
  }
  else if (a < b) {
    return gcd(a, b - a);
  }
  else {
    return gcd(a - b, b);
  }
}
не сишком ли круто для новичка будет? )
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.09.2012, 22:07     ошибка.должена выйти из функции, но что-то не то #7
Как вариант.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int gcd(int a, int b)
{
  while (a != 0 && b != 0) {
    if (a < b) {
      b = b - a;
    }
    else {
      a = a - b;
    }
  }
  return (a == 0) ? b : a; // или return a | b; чтоб быть воще крутым
}
Лучше, конечно, через остатки от деления. У вычитания плохо получается считать НОД(131232132131231, 3).
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.09.2012, 22:10     ошибка.должена выйти из функции, но что-то не то #8
C++
1
else return a;
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
21.09.2012, 22:12     ошибка.должена выйти из функции, но что-то не то #9
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Как вариант.
C++
1
// или return a | b; чтоб быть воще крутым
а можете прокоментировать коменнтарий как там работает он, я правильно понимаю ,что если ,что то не 0 то его и вернет?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.09.2012, 22:14     ошибка.должена выйти из функции, но что-то не то #10
Фишка в том, что если a или b равно нулю, то a | b вернёт то, что не равно нулю. Если оба равны нулю, то НОД не определён вернёт ноль. Побитовое ИЛИ с нулём не изменяет число, вот и используется эта особенность.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2012, 09:14     ошибка.должена выйти из функции, но что-то не то #11
Такой код неправильно работает?
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
#include <iostream>
using namespace std;
 
int nod(int a, int b)
{
    int tmp;
    if(a != b)
    { 
        if(a > b)
        {
           a = a - b;
           b = b;
        }
        else
        {
            tmp = a;
            a = b;
            b = tmp;
            a = a - b;
            b = b;
         }
 
         nod(a, b);
     }
     else return a;
}
 
int main()
{
    int z, x = 45, y = 25;
    z = nod(x, y);
    cout << z;
  
system ("pause");
return 0;
}
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 11:06     ошибка.должена выйти из функции, но что-то не то #12
Цитата Сообщение от alsav22 Посмотреть сообщение
Такой код неправильно работает?
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
#include <iostream>
using namespace std;
 
int nod(int a, int b)
{
    int tmp;
    if(a != b)
    { 
        if(a > b)
        {
           a = a - b;
           b = b;
        }
        else
        {
            tmp = a;
            a = b;
            b = tmp;
            a = a - b;
            b = b;
         }
 
         nod(a, b);
     }
     else return a;
}
 
int main()
{
    int z, x = 45, y = 25;
    z = nod(x, y);
    cout << z;
  
system ("pause");
return 0;
}
ты же просто скопировал код ТСа который четко дал понять , что он не рабочий в следствии того , что в нем нет рекурсии. Пролистай тему там есть замечания и методы решения
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2012, 11:10     ошибка.должена выйти из функции, но что-то не то #13
Цитата Сообщение от Nixy Посмотреть сообщение
ты же просто скопировал код ТСа
Пержде чем писать, внимательно посмотри. Этот код выдаёт 5, а не 20 как у ТС.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 11:20     ошибка.должена выйти из функции, но что-то не то #14
Цитата Сообщение от alsav22 Посмотреть сообщение
Пержде чем писать, внимательно посмотри. Этот код выдаёт 5, а не 20 как у ТС.
я его не тестил , но раз уж код как то отличается , покажи ту строку где есть отличие , я хоть убей не вижу ее, два идентичных кода
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2012, 11:28     ошибка.должена выйти из функции, но что-то не то #15
Цитата Сообщение от Nixy Посмотреть сообщение
я его не тестил , но раз уж код как то отличается , покажи ту строку где есть отличие , я хоть убей не вижу ее, два идентичных кода
8 пост. ошибка.должена выйти из функции, но что-то не то
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 11:31     ошибка.должена выйти из функции, но что-то не то #16
о точно) твой код будет правильно работать , так как выйдет из рекурсии только если а==b а у ТС а вернул первое действие
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2012, 11:36     ошибка.должена выйти из функции, но что-то не то #17
Цитата Сообщение от Nixy Посмотреть сообщение
о точно) твой код будет правильно работать , так как выйдет из рекурсии только если а==b а у ТС а вернул первое действие
Я почему и вопрос задал. Может он в чём другом неправильный? Результаты, вроде бы, правильные выдаёт.
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 11:43     ошибка.должена выйти из функции, но что-то не то #18
Цитата Сообщение от alsav22 Посмотреть сообщение
Я почему и вопрос задал. Может он в чём другом неправильный? Результаты, вроде бы, правильные выдаёт.
У тебя работает повторюсь из - за того что корректно задано условие выхода , а у ТС а не задано вообще , итог результат кода ТС а первая иттерация, твоего иттерация в которой а равно b
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2012, 11:47     ошибка.должена выйти из функции, но что-то не то #19
Цитата Сообщение от Nixy Посмотреть сообщение
У тебя работает повторюсь из - за того что корректно задано условие выхода , а у ТС а не задано вообще , итог результат кода ТС а первая иттерация, твоего иттерация в которой а равно b
Что работает я вижу. Вопрос в другом. Код правильный? Или есть изъян, которого я не вижу? Если есть, то в чём?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2012, 11:49     ошибка.должена выйти из функции, но что-то не то
Еще ссылки по теме:

C++ Выйти из нескольких функций
C++ Как выйти из функции
C++ Как выйти из оператора if

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

Или воспользуйтесь поиском по форуму:
Nixy
ComfyMobile
 Аватар для Nixy
399 / 280 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 11:49     ошибка.должена выйти из функции, но что-то не то #20
Цитата Сообщение от alsav22 Посмотреть сообщение
Что работает я вижу. Вопрос в другом. Код правильный? Или есть изъян, которого я не вижу? Если есть, то в чём?
Раз дает верные результаты, значит код правильный единственное я не понимаю вот этой строки
C++
1
b = b;//зачем ее делать вообще
Yandex
Объявления
22.09.2012, 11:49     ошибка.должена выйти из функции, но что-то не то
Ответ Создать тему
Опции темы

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