С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/211: Рейтинг темы: голосов - 211, средняя оценка - 4.62
4 / 4 / 0
Регистрация: 27.12.2010
Сообщений: 56
1

функция типа bool

24.08.2011, 11:49. Показов 40411. Ответов 19
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет! Подскажите пожалуйста как написать функцию типа bool. Есть вектор целых чисел, в котором надо найти заданное число. Если оно есть функция возвращает true, если такова числа в векторе нет - выдаёт false. Подскажите как исправить ошибку?

C++
1
2
3
4
5
6
7
8
9
10
11
12
bool gcd (int *v1, int *v2, int v3)
{
  if (find(v1, v2, v3)) 
  {
  return true;
 
  }else{
  
  return false;
  }
   
}
 Комментарий модератора 
Используйте теги форматирования кода!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2011, 11:49
Ответы с готовыми решениями:

Функция типа bool
Сумма первой и последней цифры в введенном четырехзначном числе является нечетным значением. Если...

Сформировать массив типа bool из массива типа char
Доброго времени суток! После ввода элементов массива вылазит ошибка "Необработанное исключение:...

Возвращение типа bool
Написать встроенную функцию, которая возвращает значение типа bool в зависимости от истинности...

Переменная типа bool
Что значит данная строчка? for (int i = 0; i < n - 1 && uvelichenie; i++) #include <iostream.h>...

19
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 11:55 2
Если я правильно понял что это std::find тогда.

C++
1
2
3
4
5
6
7
8
9
10
11
12
bool gcd (int *v1, int *v2, int v3)
{
if (find(v1, v2, v3) != v2)
{
return true;
 
}else{
 
return false;
}
 
}
1
4 / 4 / 0
Регистрация: 27.12.2010
Сообщений: 56
24.08.2011, 12:07  [ТС] 3
Не работает

Вот основной код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include "localMath.h"
#include <iostream>
#include <vector>
using namespace std;
 
int main()
{
    vector<int> ivec;
    int k, x=7;
    vector<int>::iterator i=ivec.begin();
    vector<int>::iterator j=ivec.end();
 
    cout << "Enter values: \n";
        while(cin>>k)
        ivec.push_back(k);
 
       cout << "gcd: " << gcd(i, j, x) << endl;
 
    system("pause");
    return 0;
}

а вот код самой функции


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef LOCALMATH_H
#define LOCALMATH_H
 
bool gcd (int *v1, int *v2, int v3)
{
  if (find(v1, v2, v3)==v3) 
  {
  return true;
 
  }else{
  
  return false;
  }  
  
}
#endif

Не компилируеться. Почему догадываюсь, а как исправить не знаю.

Ошибка:

error C2065: 'find' : undeclared identifier

 Комментарий модератора 
ОК, второе замечание о тегах. В следующий раз будет карточка.
0
Эксперт С++
5057 / 3117 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
24.08.2011, 12:09 4
ForEveR, или, если сократить (с учётом того, что всё остальное правильно):
C++
1
2
3
4
bool gcd (int *v1, int *v2, int v3)
{
    return find(v1, v2, v3) != v2;
}
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 12:56 5
Romiys, Не v3, а v2. Во вторых #include <algorithm> в файле.
В третьих std::find.
1
4 / 4 / 0
Регистрация: 27.12.2010
Сообщений: 56
24.08.2011, 13:21  [ТС] 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
#include "localMath.h"
 
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 std::find();
 
int main()
{
    vector<int> ivec;
    int k, x=7;
    vector<int>::iterator i=ivec.begin();
    vector<int>::iterator j=ivec.end();
 
    cout << "Enter values: \n";
        while(cin>>k)
        ivec.push_back(k);
 
    cout << "gcd: " << gcd(i, j, x) << endl;
    system("pause");
    return 0;
}
Функция:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef LOCALMATH_H
#define LOCALMATH_H
 
 
bool gcd (int *v1, int *v2, int v3)
{
  
  return find(v1, v2, v3)!=v3;
 
   
}
 
#endif
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 13:28 7
Romiys, Мда.

В h файле подключите хедер algorithm. Код будет такой.

C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef LOCALMATH_H
#define LOCALMATH_H
 
#include <algorithm>
 
bool gcd (int *v1, int *v2, int v3)
{
  
  return std::find(v1, v2, v3) != v2;
}
 
#endif
в cpp файле уберите нафиг эту строчку:

C++
1
std::find();
algorithm тоже подключать в cpp не надо.

А теперь главный вопрос. Кто давал гарантию, что итератор вектора - typedef на указатель?
0
101 / 101 / 27
Регистрация: 10.09.2010
Сообщений: 267
24.08.2011, 13:32 8
Цитата Сообщение от Romiys Посмотреть сообщение
#ifndef LOCALMATH_H
#define LOCALMATH_H
bool gcd (int *v1, int *v2, int v3)
{
return find(v1, v2, v3)!=v3;
}
#endif
Стандартный алгоритм find возвращает итератор указывающий на элемент эквивалентный третьему аргументу или итератор за последний элемент(то есть второй аргумент).

C++
1
2
3
4
bool gcd (int *v1, int *v2, int v3)
{
return find(v1, v2, v3)!=v2;
}
1
4 / 4 / 0
Регистрация: 27.12.2010
Сообщений: 56
24.08.2011, 13:44  [ТС] 9
Да, спасибо откомпелировалось, но не работает. Допустим, я ущу есть 7 в векторе или нет. х=7

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include "localMath.h"
 
#include <iostream>
#include <vector>
 
using namespace std;
 
 
int main()
{
    vector<int> ivec;
    int k, x=7;
    vector<int>::iterator i=ivec.begin();
    vector<int>::iterator j=ivec.end();
 
    cout << "Enter values: \n";
        while(cin>>k)
        ivec.push_back(k);
 
    cout << "gcd: " << gcd(i, j, x) << endl;
    system("pause");
    return 0;
}
Функция

C++
1
2
3
4
5
6
7
8
9
10
11
12
#ifndef LOCALMATH_H
#define LOCALMATH_H
#include <algorithm>
 
 
bool gcd (int *v1, int *v2, int v3)
{
  
  return std::find(v1, v2, v3)!=v2;
}
 
#endif
И не понимаю почему написано так:

C++
1
return std::find(v1, v2, v3)!=v2;
Зачем неравенство ... !=v2; И почему именно v2, а не v3 ???
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 13:47 10
Romiys, А вы уверены что 7 в векторе есть?
Патаму ша
0
4 / 4 / 0
Регистрация: 27.12.2010
Сообщений: 56
24.08.2011, 13:52  [ТС] 11
Спасибо! Зачем неравенство ...!=v2 , я понял, а вот почему заданое число в векторе так и не находит понять не могу
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 13:54 12
Romiys, У меня только два вопроса.

Что за компилятор?
Точно-ли вы вводите в вектор число 7?

Да и кстати. После push_back итераторы некорректны. Берите итератор после того как заполните вектор. Целее будете.

Подробнее

This effectively increases the vector size by one, which causes a reallocation of the internal allocated storage if the vector size was equal to the vector capacity before the call. Reallocations invalidate all previously obtained iterators, references and pointers.
1
4 / 4 / 0
Регистрация: 27.12.2010
Сообщений: 56
24.08.2011, 14:03  [ТС] 13
Да, уверен. Я проверял. Записывал в вектор числа и с 7 и без 7. Результат возвращает одинаковый - 0.
Компилятор VC ++. Сейчас попробую переделаю итераторы

Добавлено через 7 минут
Уррра! Работает! Спасибо!!! Точно проблема была в некорректности итераторов!

Спасибо за ссылку на описание функции find(). Всё описание на английском, буду переводить, въезжать как-то.

Такая простая прога и так сложно для меня было её писать. Вообще не понимаю как можно работать программистом, во всём этом разбираться и какие мозги надо иметь!!! :-)
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 14:07 14
Romiys, Было бы желание, остальное приходит.
1
101 / 101 / 27
Регистрация: 10.09.2010
Сообщений: 267
24.08.2011, 14:48 15
Вот рабочий код:
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
#include <iostream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
template<class InIter,class T>
bool gcd (InIter First, InIter Last, T Value)
{
 
    return find(First, Last, Value)!=Last;
}
 
int main()
{
    vector<int> ivec;
    int k, x=7;
 
    cout << "Enter values: \n";
    while(cin>>k,k != 0)
        ivec.push_back(k);
 
    cout << "gcd: " << boolalpha << gcd(ivec.begin(), ivec.end(), x) << endl;
    system("pause");
    return 0;
}
Во первых у вас неправильно:
vector<int>::iterator i=ivec.begin();
vector<int>::iterator j=ivec.end();
Сначала вы сохранили начало и конец вектора но после этого вы изменяете последовательность(добавляете элементы) и нет не какой гарантии что итератор конца сохранится.

Во вторых у вас неправильные параметры функции int* , а должно быть vector<int>::iterator либо шаблонные как у меня.

А в третих я не понимаю как это работает:
C++
1
2
 while(cin>>k)
                ivec.push_back(k);
То есть вы добавляете элементы в вектор до тех пор пока не конец потока(файла) cin, а это оооооочень долго.
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
24.08.2011, 15:14 16
Overmind024, Это пока мы не пошлем EOF или не введем нечто, что не будет числом.
1
4 / 4 / 0
Регистрация: 27.12.2010
Сообщений: 56
24.08.2011, 16:15  [ТС] 17
Всем большое спасибо за то, что помогли мне найти ошибки! :-) Я понял и теперь всё правильно работает.



А в третих я не понимаю как это работает:
C++
1
2
 while(cin>>k)
                ivec.push_back(k);
То есть вы добавляете элементы в вектор до тех пор пока не конец потока(файла) cin, а это оооооочень долго.
Отвечаю на Ваш вопрос. Я ввожу числа через Enter. Потом нажимал CTRL+Z, что обозначало конец ввода.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
24.08.2011, 16:22 18
Цитата Сообщение от Overmind024 Посмотреть сообщение
А в третих я не понимаю как это работает:

C++
1
2
while(cin>>k)
    ivec.push_back(k);
То есть вы добавляете элементы в вектор до тех пор пока не конец потока(файла) cin, а это оооооочень долго.
Для fstream перегружен оператор void*(), который возвращает нулевое значение, если стоят флаги failbit или badbit. Любое ненулевое число, соответственно, если не стоят. Как только вводиться EOF или другой недопустимый символ устанавливается соответствующий флаг, выражение cin >> k становиться ложью и цикл прерывается. Как-то так.
0
Заблокирован
24.08.2011, 20:54 19
Цитата Сообщение от Romiys Посмотреть сообщение
Привет! Подскажите пожалуйста как написать функцию типа bool. Есть вектор целых чисел, в котором надо найти заданное число. Если оно есть функция возвращает true, если такова числа в векторе нет - выдаёт false. Подскажите как исправить ошибку?

C++
1
2
3
4
5
6
7
8
9
10
11
12
bool gcd (int *v1, int *v2, int v3)
{
  if (find(v1, v2, v3)) 
  {
  return true;
 
  }else{
  
  return false;
  }
   
}
Используйте теги форматирования кода!
Во-первых, у вас неправильно задано объявление функции. Если вы имеете дело с вектором, то следует пользоваться его итератором, а не указателями на int.

Поэтому объявление функции должно выглядеть так

C++
1
bool gcd ( std::vector<int>::iterator it1, std::vector<int>::iterator it2, int value );
Определение этой функции следующее

C++
1
2
3
4
bool gcd ( std::vector<int>::iterator it1, std::vector<int>::iterator it2, int value )
{
   return ( std::find( it1, it2, value ) != it2 );
}
То есть совсем не обязательно, что итератор в вектор реализован в виде обычного указателя. Поэтому параметры вашей функции должны иметь тип итераторв вектора, а не указателей на int.
0
diagon
24.08.2011, 20:58     функция типа bool
  #20

Не по теме:

А при чем тут gcd? Это же НОД, только на инглише.

0
24.08.2011, 20:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.08.2011, 20:58
Помогаю со студенческими работами здесь

размер типа bool
сколько занимает в памяти bool?

Переменные типа bool
Сколько переменных типа bool здесь определено: bool &amp;l1, &amp;p2, **t3, b4, *n5, w6;

Цикл и переменная типа bool
У меня есть переменная типа bool, которая при bool == true выводит звездочку, а при bool == false...

Не сохранение значения переменной типа bool
Добрый день, По учебе, решаю задачу. Не очень понимаю, как ее решить, но стараемся. Есть...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Блоги программистов
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­хро­н­н­ы­й счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru