Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.76/21: Рейтинг темы: голосов - 21, средняя оценка - 4.76
75 / 22 / 12
Регистрация: 01.06.2019
Сообщений: 568
1

Реализовать функцию, которая принимает массив, а также число n, и возвращает индекс

19.08.2019, 23:27. Показов 4213. Ответов 8
Метки нет (Все метки)

Реализовать функцию, которая принимает массив (плюс его длину) , а также число n, и возвращает индекс числа в массиве или -1, если такого числа нет. Прототип: int Search (int a [], const int n, int key); Функция должна также работать с типами short, float, double.

Не работает, помогите исправить и я хоть то делаю?

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
#include<iostream>
#include<ctime>
#include <iomanip>
using namespace std;
 
int Search(int a[], const int n, int kеу)
{
    for(int i = 0; i < n; ++i) 
        if (a[i] == kеу) 
        return i; 
       return - 1;
}
 
int main() {
 
    setlocale(LC_ALL, "rus");
    srand(time(NULL));
    const int n = 20;
    float ki = rand() % 10, ai[n];
    double kd = rand() % 10, ad[n];
    short ks = rand() % 10, as[n];
    for (int i = 0; i < n; ai[i] = rand() % 10, cout << setw(2) << ai[i], i++) {
        cout << endl << "Индекс: " << ki << " = " << Search(ai, n, ki) << endl;
    }
    for (int i = 0; i < n; ad[i] = rand() % 10, cout << setw(2) << ad[i], i++) {
        cout << endl << "Индекс: " << kd << " = " << Search(ad, n, kd) << endl;
    }
    for (int i = 0; i < n; as[i] = rand() % 10, cout << setw(2) << as[i], i++) {
        cout << endl << "Индекс: " << ks << " = " << Search(as, n, ks) << endl;
    }
    return 0;
    system("pause");
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.08.2019, 23:27
Ответы с готовыми решениями:

Напишите функцию, которая принимает массив и индекс i и возвращает произведение всех элементов массива
Напишите функцию, которая принимает массив и индекс i и возвращает произведение всех элементов...

Реализовать функцию, которая принимает массив и возвращает количество простых чисел в нем
Ребят , есть задачи , а в частности нужно с помощью функций и деления по остатку (%) написать...

Как реализовать функцию, которая принимает и возвращает в массив уникальные значения из исходного массива
Объясните пожалуйста, как реализовать функцию uniq, которая принимает, как аргумент, массив, и...

Создайте функцию, которая принимает число в виде строки, а возвращает само число
Может для кого то это очень просто, но у меня возникло непонимание. Задание выглядит так: 1....

8
812 / 500 / 210
Регистрация: 19.01.2019
Сообщений: 1,196
20.08.2019, 00:26 2
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 <iostream>
#include <algorithm>
 
template <typename T>
int Search(T* arr, size_t size, T n) {
    if (!size) {
        return -1;
    }
    if (*arr == n) {
        return 0;
    }
    int res = 1 + Search(arr + 1, size - 1, n);
    return res ? res : -1;
}
 
int main()
{
    size_t size = 20;
    double* arr = new double[size];
    std::generate(arr, arr + size, []() { return rand() % 100; });
    std::cout << Search(arr, size, 99.99) << '\n';      //-1
    std::cout << Search(arr, size, arr[17]) << '\n';    //probably 17
    return 0;
}
2
6280 / 4263 / 2455
Регистрация: 18.12.2017
Сообщений: 13,295
20.08.2019, 03:33 3
Лучший ответ Сообщение было отмечено Rudman132 как решение

Решение

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
39
40
41
42
43
#include <iostream>
using namespace std;
 
template <typename T>
void Print (T a[], const int size)
{
    for (int i = 0; i < size; i++)      
    cout << a[i] << " ";
    cout << "\n";
}
 
template <typename T>
int Search(T a[], const int size, T n) 
{
    for(int i = 0; i < size; i++) 
        if (a[i]==n) return i; 
    return -1;
}
 
int main()
{    
    const int size=3;
    short A[size]={1, 2, 5}, n1;
    cout << "Array A: ";
    Print(A,size);
    cout << "Search n="; cin >> n1;
    cout << "result: " << Search(A,size,n1) << "\n";
    
    float B[size]={ 0.1f, 0.5f, 2.5f}, n2;
    cout << "Array B: ";
    Print(B,size);
    cout << "Search n="; cin >> n2;
    cout << "result: " << Search(B,size,n2) << "\n";
    
    double C[size]={ 0.3, 1.5, 10.1}, n3;
    cout << "Array C: ";
    Print(C,size);
    cout << "Search n="; cin >> n3;
    cout << "result: " << Search(C,size,n3) << "\n";
    
system("pause");
return 0;
}
если в массиве несколько таких чисел, вернёт индекс первого из них.
1
75 / 22 / 12
Регистрация: 01.06.2019
Сообщений: 568
20.08.2019, 10:04  [ТС] 4
Цитата Сообщение от Yetty Посмотреть сообщение
C++
Спасибо, а тут можно как то без шаблона сделать?
C++
1
template <typename T>
0
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,043
20.08.2019, 10:04 5
Rudman132, привет!
Кликните здесь для просмотра всего текста

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <random>
#include <algorithm>
#include <iomanip>
#define eps 1e-5
 
template<typename T, size_t N>
int search(T(&arr)[N], T key)
{
    for (size_t idx = 0u; idx < N; ++idx)
        if (std::abs(arr[idx] - key) < eps)
            return idx;
    return -1;
}
 
template<typename T, size_t N>
void print(T (&arr)[N])
{
    for (auto it = std::begin(arr); it != std::end(arr); ++it)
        std::cout << std::setw(10u) << *it << (it + 1 != std::end(arr) ? ", " : "");
}
 
int main()
{
    setlocale(LC_ALL, "Rus");
    std::random_device rd;
    std::mt19937 g{ rd() };
    std::uniform_int_distribution<> dist_int(-10, 10);
    auto gen_int = [&g, &dist_int]() { return dist_int(g); };
    std::uniform_real_distribution<> dist_real(-10, 10);
    auto gen_real = [&g, &dist_real]() { return dist_real(g); };
    const size_t len = 10u;
 
    short s[len], s_find;
    float f[len], f_find;
    double d[len], d_find;
    std::generate(std::begin(s), std::end(s), gen_int);
    std::generate(std::begin(f), std::end(f), gen_real);
    std::generate(std::begin(d), std::end(d), gen_real);
    std::cout << "Массив short элементов\n";
    print(s);
    std::cout << "\nМассив float элементов\n";
    print(f);
    std::cout << "\nМассив double элементов\n";
    print(d);
 
    std::cout << "\n\nУкажите значение для поиска в массиве short ";
    std::cin >> s_find;
    std::cout << "index = " << search(s, s_find) << "\n";
    std::cout << "\nУкажите значение для поиска в массиве float ";
    std::cin >> f_find;
    std::cout << "index = " << search(f, f_find) << "\n";
    std::cout << "\nУкажите значение для поиска в массиве double ";
    std::cin >> d_find;
    std::cout << "index = " << search(d, d_find) << "\n";
 
    return 0;
}
1
Миниатюры
Реализовать функцию, которая принимает массив, а также число n, и возвращает индекс  
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,043
20.08.2019, 10:06 6
Цитата Сообщение от Rudman132 Посмотреть сообщение
Спасибо, а тут можно как то без шаблона сделать?
Читай про перегрузки функции, но это менее предпочтительно чем шаблон.

Добавлено через 1 минуту
Цитата Сообщение от Yetty Посмотреть сообщение
a[i]==n
А если a[i] и n имеют тип double (или float)? Там точно не всегда попадёшь. Предлагаю задействовать eps.
1
75 / 22 / 12
Регистрация: 01.06.2019
Сообщений: 568
20.08.2019, 10:09  [ТС] 7
Цитата Сообщение от SomniPhobia Посмотреть сообщение
перегрузки функции
Ну у меня как раз и идет тема перезагрузка функции, по этому спрашиваю
0
567 / 406 / 132
Регистрация: 22.11.2017
Сообщений: 1,043
20.08.2019, 10:14 8
Rudman132, вот решение с перегрузкой функции.
Кликните здесь для просмотра всего текста

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <iostream>
#include <random>
#include <algorithm>
#include <iomanip>
#define eps 1e-5
 
int search(short* arr, size_t n, short key);
int search(float* arr, size_t n, float key);
int search(double* arr, size_t n, double key);
 
template<typename T, size_t N>
void print(T(&arr)[N]);
 
int main()
{
    setlocale(LC_ALL, "Rus");
    std::random_device rd;
    std::mt19937 g{ rd() };
    std::uniform_int_distribution<> dist_int(-10, 10);
    auto gen_int = [&g, &dist_int]() { return dist_int(g); };
    std::uniform_real_distribution<> dist_real(-10, 10);
    auto gen_real = [&g, &dist_real]() { return dist_real(g); };
    const size_t len = 10u;
 
    short s[len], s_find;
    float f[len], f_find;
    double d[len], d_find;
    std::generate(std::begin(s), std::end(s), gen_int);
    std::generate(std::begin(f), std::end(f), gen_real);
    std::generate(std::begin(d), std::end(d), gen_real);
    std::cout << "Массив short элементов\n";
    print(s);
    std::cout << "\nМассив float элементов\n";
    print(f);
    std::cout << "\nМассив double элементов\n";
    print(d);
 
    std::cout << "\n\nУкажите значение для поиска в массиве short ";
    std::cin >> s_find;
    std::cout << "index = " << search(s, len, s_find) << "\n";
    std::cout << "\nУкажите значение для поиска в массиве float ";
    std::cin >> f_find;
    std::cout << "index = " << search(f, len, f_find) << "\n";
    std::cout << "\nУкажите значение для поиска в массиве double ";
    std::cin >> d_find;
    std::cout << "index = " << search(d, len, d_find) << "\n";
 
    return 0;
}
 
int search(short* arr, size_t n, short key)
{
    for (size_t idx = 0u; idx < n; ++idx)
        if (arr[idx] == key)
            return idx;
    return -1;
}
 
int search(float* arr, size_t n, float key)
{
    for (size_t idx = 0u; idx < n; ++idx)
        if (std::abs(arr[idx] - key) < eps)
            return idx;
    return -1;
}
 
int search(double* arr, size_t n, double key)
{
    for (size_t idx = 0u; idx < n; ++idx)
        if (std::abs(arr[idx] - key) < eps)
            return idx;
    return -1;
}
 
template<typename T, size_t N>
void print(T(&arr)[N])
{
    for (auto it = std::begin(arr); it != std::end(arr); ++it)
        std::cout << std::setw(10u) << *it << (it + 1 != std::end(arr) ? ", " : "");
}
2
6280 / 4263 / 2455
Регистрация: 18.12.2017
Сообщений: 13,295
20.08.2019, 12:36 9
Цитата Сообщение от SomniPhobia Посмотреть сообщение
А если a[i] и n имеют тип double (или float)? Там точно не всегда попадёшь. Предлагаю задействовать eps.
в данном случае это лишнее - числа не вычисляются, а заданы или вводятся с клавиатуры, см.
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{    
    const int size=3;     
    double a[size]={ 0.3, 1.5, 10.1}, n;
    cout << "Array:\n";
    for (int i = 0; i < size; i++)
    cout << setprecision(20) << a[i] << "\n";
    
    cout << "Search n="; cin >> n;
    cout << setprecision(20) << n << "\n";
    
system("pause");
return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2019, 12:36

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Напишите функцию которая принимает целое беззнаковое число и возвращает true, если число четное и false
2. Напишите функцию которая принимает целое беззнаковое число и возвращает true, если число четное...

Создайте функцию, которая принимает в качестве аргумента целое число и возвращает число Люка с таким номером
1. Создайте функцию, которая принимает в качестве аргумента целое число и возвращает число Люка с...

Написать функцию, которая принимает число, а возвращает его факториал
Написать функцию, в которую передают число х, а возвращает х! (факториал этого числа)(Консольное...

Создать функцию которая принимает число и диапазона потом возвращает информацию о том лежит ли число в этом диапазоне
Здравствуйте,помогите пожалуйста с задачей - функция принимает число А и диапазон X Y, возвращает...


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

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

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