Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
Flame's
0 / 0 / 1
Регистрация: 21.01.2012
Сообщений: 20
#1

Проверить, существует ли число в массиве - C++

23.01.2012, 18:17. Просмотров 4194. Ответов 22
Метки нет (Все метки)

Программа проверяет существует ли число в массиве вводимое пользователем, если да, то выводит индекс этого числа в массиве, иначе выводит сообщение, что числа нету. Программа работает, но я уверен, что ее можно сделать легче ( по объему ) поэтому кому интересно) Жду варианты_)

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
#include <iostream>
#include <iomanip>
 
int main()
{
    int x;
    int t;
        const int arraySize = 10;
        int massiv[arraySize] = {34,23,1,54,32,0,45,76,29,12};
        bool ExitFlag = false;
 
 std:: cout << "Введите число, которое хотите найти: ";
 std:: cin >> t;
 
        while(!ExitFlag)
        {
                int count = 0;
 
                for(int i = 0; i < arraySize; i++) {
 
                    if(massiv[i] != t) {
                        if (i >= arraySize-1 ) { 
                            ExitFlag = true; std:: cout << "Извините вашего числа нету в массиве!";
                        }
                        count++;
                    }
                    else {
                      std:: cout << "Индекс вашего числа в массиве равен: ";
                      std:: cout << i;
                      ExitFlag = true;         
                    }
                }
        }
 
 
 std:: cin >> x;
        return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2012, 18:17
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Проверить, существует ли число в массиве (C++):

Проверить, существует ли строгое чередование 0 и 1 в массиве
Сформировать массив из N элементов (N&lt;50) , которыми могут быть только целые...

Проверить, существует ли четырехзначное натуральное число
Задание 11. Проверить, существует ли четырехзначное натуральное число, сумма...

Проверить, есть ли в массиве заданное число
Добрый день, мне задали в институте задачу по ссылкам и указателям по C++ ...

Массив: Проверить, присутствует ли в массиве введённое пользователем число
Проверить, присутствует ли в массиве введённое пользователем число x. Поиск...

Проверить, что в массиве ни одно четное число не расположено после нечетного
2.Дан массив целых чисел. Если в нем ни одно четное число не расположено после...

Проверить, имеется ли в массиве число, введенное пользователем. Если да – вывести его индекс
кто-нибудь может подсказать как сделать? Язык С++. только мне по самому...

22
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
23.01.2012, 18:26 #2
C++
1
2
3
4
5
6
7
template <typename Iter, typename T> Iter search(Iter firat, Iter last, T val)
{
    for ( ; first != last ; ++first )
        if ( *first == val )
            return first;
    return NULL;
}
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
23.01.2012, 18:43 #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
#include <iostream>
#include <iomanip>
using namespace std;
 int main()
{
 const int arraySize = 10;
 int t,i,massiv[arraySize] = {34,23,1,54,32,0,45,76,29,12};;
 bool ExitFlag;
 cout<<"Введите число, которое хотите найти: ";
 cin>>t;
 for(i=0; i<arraySize; i++)
  {
   if(massiv[i]!=t)
    ExitFlag=false;
    else
     {
      ExitFlag=true;
      cout << "Индекс вашего числа в массиве равен: ";
      cout<<i+1;
      break;
     }
  }
  if (ExitFlag==false)
   cout << "Извините, вашего числа нету в массиве!";
  return 0;
}
0
rangerx
1941 / 1550 / 478
Регистрация: 31.05.2009
Сообщений: 2,913
23.01.2012, 22:43 #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
int main()
{
    const int arraySize = 10;
    int massiv[arraySize] = { 34, 23, 1, 54, 32, 0, 45, 76, 29, 12 };
 
    int t;
    std::cout << "Введите число, которое хотите найти: ";
    std::cin >> t;
 
    for(int i = 0; i < arraySize; i++)
    {
        if(massiv[i] == t)
        {
            std::cout << "Индекс вашего числа в массиве равен: " << i;
            return 0;
        }
    }
 
    std::cout << "Извините вашего числа нету в массиве!";
}
0
R136a1
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
23.01.2012, 22:56 #5
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>
#include <iomanip>
 
int search(const int [], int, int);
 
int main()
{
    int mass[10] = {1,2,3,4,5,6,7,8,9,10};
    int num;
 
    for(int i = 0; i < 10; i++)
        std::cout << std::setw(4) << mass[i];
 
    std::cout << "\nВведите число, которое нужно найти: ";
    std::cin >> num;
 
    int index = search(mass,9,num);
 
    if(index != -1)
        std::cout << "Число " << num << " найдено в позиции "
              << index << std::endl;
    else
        std::cerr << "Число не найдено" << std::endl;
 
    return 0;
}
 
int search(const int mass[], int step, int num)
{
    if(mass[step] == num)
        return step;
    else if(!step)
        return -1;
 
    search(mass,step-1,num);
}
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
23.01.2012, 23:03 #6
R136a1, компилить пробовали? http://liveworkspace.org/code/7e851485ee30d897698c6c32babb4302
даже если заставить скомпилироваться, результат не верен
http://liveworkspace.org/code/aadd51c40707d70aa00fd5240e5d9f10
0
rinat_w
89 / 85 / 17
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
23.01.2012, 23:08 #7
хы вышло на 10 строк
C++
1
2
3
4
5
6
7
8
9
10
#include<iostream>
using namespace std;
int main(){
    int const asize=10;
    int a[asize]={1,2,3,4,5,6,7,8,9,10}, n;
    cout<<"your number ="; cin>>n;
    for(int i=0; i<asize; i++) if(a[i]==n) cout<<"a["<<i<<"]="<<n<<endl;
    system("pause");
    return 0;
}
0
R136a1
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
23.01.2012, 23:10 #8
go, ???
0
Миниатюры
Проверить, существует ли число в массиве  
rinat_w
89 / 85 / 17
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
23.01.2012, 23:15 #9
как и просил автор уменьшил объем максимально теперь на 9 строк!!
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
int main(){
    int const asize=10;
    int a[asize]={1,2,3,4,5,6,7,8,9,10}, n;
    std::cout<<"your number ="; std::cin>>n;
    for (int i=0; i<asize; i++) if (a[i]==n) std::cout<<"a["<<i<<"]="<<n<<std::endl;
    system("pause");
    return 0;
}
R136a1, а в чем go не прав?
0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
23.01.2012, 23:15 #10
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
 
int * findval(const int * arr, size_t size, const int val) { 
    return ( ! size ) ? NULL : ( *arr == val ) ? (int*)arr : findval(arr+1, size-1, val); 
}
 
int main(void){
    int arr[] = { 3, 5, 6, 7, 9 }, val;
    
    while ( printf("VALUE: ") && scanf("%d", &val) == 1 ){
        int * found = findval(arr, sizeof(arr) / sizeof(*arr), val);
        
        if ( found )
            printf("ARRAY[%d] = %d\n", found - arr, *found);
        else
            printf("NOT FOUND.\n");
    }
    
    return 0;
}
А чем, кстати, std::find() не угодил?
0
R136a1
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
23.01.2012, 23:21 #11
rinat_w, в первой ссылке мой косяк. Исправил
Цитата Сообщение от go Посмотреть сообщение
даже если заставить скомпилироваться, результат не верен
http://liveworkspace.org/code/aadd51...0fd5240e5d9f10
вот этой фразы я не понял
0
go
Эксперт С++
3636 / 1368 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
23.01.2012, 23:32 #12
Цитата Сообщение от R136a1 Посмотреть сообщение
вот этой фразы я не понял
Ну тут я немного, просто сравни
http://liveworkspace.org/code/aadd51c40707d70aa00fd5240e5d9f10
и
http://liveworkspace.org/code/a6be3a31c51de01c310334496562d78a
Код
Compilation output:
source.cpp: In function 'int search(const int*, int, int)':
source.cpp:36:1: warning: control reaches end of non-void function [-Wreturn-type]
Не надо return пропускать

Добавлено через 53 секунды
А вот codepad отработает, так как я и думал http://codepad.org/rHNhgKqA

Добавлено через 16 секунд
Код
cc1plus: warnings being treated as errors
In function 'int search(const int*, int, int)':
Line 36: warning: control reaches end of non-void function
1
R136a1
143 / 112 / 36
Регистрация: 14.04.2011
Сообщений: 261
23.01.2012, 23:37 #13
go, спасибо за замечание) странно что у меня gcc ворнинги не выдал
0
NoMasters
Псевдослучайный
1909 / 1120 / 90
Регистрация: 13.09.2011
Сообщений: 3,177
23.01.2012, 23:47 #14
-Wall ему в флаги(и -Wextra по желанию). Свежие версии по умолчанию ноль возвращают для функций с целым типом возвращаемого значения.
1
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
24.01.2012, 01:21 #15
Цитата Сообщение от rinat_w Посмотреть сообщение
как и просил автор уменьшил объем максимально теперь на 9 строк!!
C++
1
2
3
4
5
6
7
8
9
#include<iostream>
int main(){
    int const asize=10;
    int a[asize]={1,2,3,4,5,6,7,8,9,10}, n;
    std::cout<<"your number ="; std::cin>>n;
    for (int i=0; i<asize; i++) if (a[i]==n) std::cout<<"a["<<i<<"]="<<n<<std::endl;
    system("pause");
    return 0;
}
R136a1, а в чем go не прав?
Конечно если писать всё в одну строку, их будет меньше
0
rinat_w
89 / 85 / 17
Регистрация: 13.11.2011
Сообщений: 192
Завершенные тесты: 1
24.01.2012, 19:08 #16
BumerangSP, согласись и код тоже оптимальный
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
24.01.2012, 19:23 #17
Цитата Сообщение от rinat_w Посмотреть сообщение
BumerangSP, согласись и код тоже оптимальный

Не по теме:

Соглашусь)

0
easybudda
Модератор
Эксперт CЭксперт С++
10021 / 5944 / 1483
Регистрация: 25.07.2009
Сообщений: 11,230
24.01.2012, 21:03 #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <algorithm>
 
int main(){
    const int SIZE(5);
    int arr[SIZE] = { 1, 2, 3, 4, 5 }, val1 = 4, val2 = 6, * ptr;
 
    if ( ( ptr = (int*)std::find(arr, arr + SIZE, val1) ) == arr + SIZE )
        std::cout << "Value " << val1 << " not found." << std::endl;
    else
        std::cout << "Found value " << val1 << " at index " << ( ptr - arr ) << std::endl;
 
    if ( ( ptr = (int*)std::find(arr, arr + SIZE, val2) ) == arr + SIZE )
        std::cout << "Value " << val2 << " not found." << std::endl;
    else
        std::cout << "Found value " << val2 << " at index " << ( ptr - arr ) << std::endl;
 
    return 0;
}
http://codepad.org/ajpIs4Jf
1
Flame's
0 / 0 / 1
Регистрация: 21.01.2012
Сообщений: 20
24.01.2012, 21:31  [ТС] #19
Всем спасибо за участие) Очень рад, что так много людей проявили фантазию, в не большой работе) Были бы конфеты, дал бы каждому Если нужно, могу еще пару задач интересных выложить)
0
easybudda
24.01.2012, 21:34     Проверить, существует ли число в массиве
  #20

Не по теме:

Цитата Сообщение от Flame's Посмотреть сообщение
Если нужно, могу еще пару задач интересных выложить)
Том Соер таким макаром забор покрасил...

0
24.01.2012, 21:34
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2012, 21:34
Привет! Вот еще темы с ответами:

Проверить, одинаковое ли число открывающихся и закрывающихся квадратных скобок в данном массиве символов
Дан массив символов. Проверить, одинаковое ли число открывающихся и...

Функции. Проверить, простое число или нет. Увеличить его значение на натуральное число M. Проверить, осталось ли оно простым
Помогите пожалуйста 1. Дано натуральное число N, проверить, простое оно или...

Проверить существует ли диск
У меня есть массив не жестких дисков которые есть в системе( a,e,f,g,h...)...

Rapidjson проверить существует ли объект
Приветствую. Использую rapidjson и тут возникла следующая ситуация. Имеется...


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

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

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