Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
 
matador333
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 11
#1

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

21.09.2012, 21:11. Просмотров 825. Ответов 20
Метки нет (Все метки)

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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2012, 21:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ошибка.должена выйти из функции, но что-то не то (C++):

Подскажите пожалуйста если что нибудь наподобе break но что бы не из функции выйти а полностью из программы - Java SE
Подскажите пожалуйста если что нибудь наподобе break но что бы не из функции выйти а полностью из программы например после if если...

А почему ошибка, что функции print и read не определены в функции main()? - C++
Что-то не понимаю. Они определены в заголовочном файле. А подчеркивается красным что нет.... #include &lt;iostream&gt; #include...

Не получается выйти из функции - Matlab
Доброго времени суток. Только недавно начали в вузе изучать матлаб, дали задачку с роботом. Он умеет перемещаться по полю 12x12 (ну или...

Как выйти из функции - C++
Прошу прощения. Произошел сбой при записи. Напишите еще раз суть задачи. То получилось что-то вроде рекурсии, постоянно вызывается этот...

Как выйти из функции в отладчике? - Программирование Android
как выйти из функции в отладчике? т.е. я поставил в одном из обработчиков точку останова, по ней остановился, отладил функцию с помощью...

Как выйти из функции GetQueuedCompletionStatus? - C++ WinAPI
Я использую вот такую функцию: result = GetQueuedCompletionStatus( context_.completion, &amp;outSize, &amp;key, &amp;pOvlp, ...

20
veverix
39 / 39 / 2
Регистрация: 14.09.2012
Сообщений: 85
21.09.2012, 21:45 #2
У меня прекрасно пошло без изменений. Какая ошибка?
0
matador333
0 / 0 / 0
Регистрация: 21.09.2012
Сообщений: 11
21.09.2012, 21:49  [ТС] #3
ответ должен быть 5..а у меня 20 выводит(
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
21.09.2012, 21:55 #4
5 правильный ответ после 1 итерации числа 20 25 после второй 5 20 а потом уменьшение 20 до 5
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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);
  }
}
0
Nixy
ComfyMobile
400 / 281 / 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);
  }
}
не сишком ли круто для новичка будет? )
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 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).
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.09.2012, 22:10 #8
C++
1
else return a;
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
21.09.2012, 22:12 #9
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Как вариант.
C++
1
// или return a | b; чтоб быть воще крутым
а можете прокоментировать коменнтарий как там работает он, я правильно понимаю ,что если ,что то не 0 то его и вернет?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
21.09.2012, 22:14 #10
Фишка в том, что если a или b равно нулю, то a | b вернёт то, что не равно нулю. Если оба равны нулю, то НОД не определён вернёт ноль. Побитовое ИЛИ с нулём не изменяет число, вот и используется эта особенность.
0
alsav22
5426 / 4821 / 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;
}
0
Nixy
ComfyMobile
400 / 281 / 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;
}
ты же просто скопировал код ТСа который четко дал понять , что он не рабочий в следствии того , что в нем нет рекурсии. Пролистай тему там есть замечания и методы решения
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2012, 11:10 #13
Цитата Сообщение от Nixy Посмотреть сообщение
ты же просто скопировал код ТСа
Пержде чем писать, внимательно посмотри. Этот код выдаёт 5, а не 20 как у ТС.
0
Nixy
ComfyMobile
400 / 281 / 8
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 11:20 #14
Цитата Сообщение от alsav22 Посмотреть сообщение
Пержде чем писать, внимательно посмотри. Этот код выдаёт 5, а не 20 как у ТС.
я его не тестил , но раз уж код как то отличается , покажи ту строку где есть отличие , я хоть убей не вижу ее, два идентичных кода
0
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.09.2012, 11:28 #15
Цитата Сообщение от Nixy Посмотреть сообщение
я его не тестил , но раз уж код как то отличается , покажи ту строку где есть отличие , я хоть убей не вижу ее, два идентичных кода
8 пост. ошибка.должена выйти из функции, но что-то не то
0
22.09.2012, 11:28
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.09.2012, 11:28
Привет! Вот еще темы с ответами:

Может ли что то выйти из такой комплектации? - Ремонт ноутбуков
Парни, всем привет. Есть вопрос. Сын уронил ноут и матрица треснула, постепенно чернеет. Ноут нормально работал, жалко его, легкий он, да и...

что могло выйти из строя на метеринке при кз на блоке питания? - Материнские платы
Здравствуйте. Вобщем собрал себе новый комп, а старый отдал отцу. Он частенько модернизировался, из за чего некоторые провода разрезались,...

Что будет с солнечными лучами, которые попадают в сферу и выйти не смогут? - Оптика
Привет. Допустим, есть некая полая сфера. Со внешней стороны она прозрачна, со внутренней — покрыта абсолютно зеркальной поверхностью. ...

В чем причина того, что при помощи клавиатуры невозможно выйти из спящего режима? - Windows 7
при помощи клавиатуры не возможно выйти из спящего режима в чем может быть причина ?


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

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

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