Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
YakobZ
0 / 0 / 0
Регистрация: 06.09.2015
Сообщений: 10
#1

Как правильно завершать булевую функцию?

27.05.2017, 14:03. Просмотров 120. Ответов 6
Метки нет (Все метки)

C
1
2
3
4
5
6
7
8
9
bool search(int value, int values[], int n)
{
 
  if (....) return true;
  else if (....) ... рекурсия
  else if (....) ... рекурсия
 
return false;
}
Как правильно передать true / false ? Когда первое иф истинное должно передавать true и заканчивать функцию, но по ходу оно идет дальше потому что на выходе постоянно false
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2017, 14:03
Ответы с готовыми решениями:

Как правильно вызвать функцию?
Вопрос как правильно сделать вызов из mainLoop функцию comlastLogin через...

Как правильно написать функцию
Доброго времени суток. Помогите разобраться. есть такая функция: void...

Как правильно вызвать функцию?
как вызвать функцию? int sum_last(list_ptr a) { list_ptr ptr; ...

Как правильно передать массив в функцию?
В этой задаче я ввожу двухмерный массив с 6 чисел, передаю его в функцию, потом...

Как правильно передавать двумерный массив в функцию
Компилятор Borland Builder C++ 6 Получил ошибку в основной программе, создал...

6
likehood
950 / 803 / 385
Регистрация: 25.12.2016
Сообщений: 2,658
Завершенные тесты: 3
27.05.2017, 14:26 #2
Цитата Сообщение от YakobZ Посмотреть сообщение
Когда первое иф истинное должно передавать true и заканчивать функцию
Всё верно.
Цитата Сообщение от YakobZ Посмотреть сообщение
но по ходу оно идет дальше потому что на выходе постоянно false
По приведённому вами коду трудно об этом судить. Покажите полный код.
0
YakobZ
0 / 0 / 0
Регистрация: 06.09.2015
Сообщений: 10
27.05.2017, 15:36  [ТС] #3
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
// Бинарный поиск список уже отсортированый
bool search(int value, int values[], int n) // искаемый элемент , список цыфр , его длина
{
 
int size = n / 2;
if (value == values[size]) return true;
else if (value < values[size])  // если искаемое число меньше
    {
    int newvalues[size];
    int newsize = 0;
    for (int i = 0; i < size; i++)
        {
        newvalues[i] = values[i];  // новый список
        newsize = newsize + 1;  // длина нового списка
        }
    search(value, newvalues, newsize);  // рукурсия
    }
else if (value > values[size])   // если искаемое число больше
    {
    int newvalues[size];
    int newsize = 0;
    for (int i = 0, j = size + 1; j <= n; i++, j++)
        {
        newvalues[i] = values[j];
        newsize = newsize + 1; 
        }
    search(value, newvalues, newsize);
    }
else if (n == 1) return false; // если число одно и ранее не подтвердилось то false
 
}
тут у меня уже другая проблема выплевывает:
error: control may reach end of non-void function [-Werror,-Wreturn-type]
0
likehood
950 / 803 / 385
Регистрация: 25.12.2016
Сообщений: 2,658
Завершенные тесты: 3
27.05.2017, 15:46 #4
Цитата Сообщение от YakobZ Посмотреть сообщение
error: control may reach end of non-void function
Это значит, что в процессе выполнения функции может не встретится ни одного оператора return. И что тогда возвращать компилятору? Вот он и не знает.

Проблема судя по всему в 16 (а так же в 27) строке: мы вызывали функцию search, она вернула какое-то значение, но мы его никак не используем. Скорее всего, нужно вернуть это значение из текущей функции с помощью return.
0
sk007
Life Builder
414 / 414 / 341
Регистрация: 12.01.2011
Сообщений: 1,517
Завершенные тесты: 6
28.05.2017, 10:42 #5
Добавьте еще else
вот так попробуйте
C
1
2
3
4
5
6
7
8
9
10
11
if (value == values[size]) return true;
else if (value < values[size])  // если искаемое число меньше
    {
        //...
    }
else if (value > values[size])   // если искаемое число больше
    {
        //...
    }
else if (n == 1) return false; // если число одно и ранее не подтвердилось то false
else false;
0
anapshy
187 / 191 / 172
Регистрация: 14.11.2016
Сообщений: 742
Завершенные тесты: 3
28.05.2017, 11:32 #6
sk007, YakobZ, можно наверно эту строку убрать else if (n == 1) return false;, а на её место else false;. По идее если выше описанные условия не пройдут проверку, то в любом случае будет false, нет смысла проверку добавлять.
0
sk007
Life Builder
414 / 414 / 341
Регистрация: 12.01.2011
Сообщений: 1,517
Завершенные тесты: 6
28.05.2017, 16:11 #7
anapshy, это понятно. Может ,я думаю, там было что-то, ее просто убрали, чтобы не показывать. А конструкцию оставили.
А так вы правы, если ничего такого там не было, то смысла нету от этой конструкции.
0
28.05.2017, 16:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2017, 16:11

Как правильно создать функцию используя макрос
Привет. Как правильно сделать функцию вида float function(float i){ return...

Как правильно передать два массива в функцию
Всем привет. Как правильно передать в функцию два массива? Один динамический,...

Как правильно вызвать функцию, в которую передаётся указатель на структуру?
#define _CRT_SECURE_NO_WARNINGS #include &lt;conio.h&gt; #include &lt;stdlib.h&gt;...


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

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

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