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

Вывести пять больших значений массива не изменяя порядка следования элементов в массиве

20.11.2020, 10:49. Показов 485. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите исправить программу. Что здесь не так? Дан одномерный массив не менее 10 элементов. Вывести пять больших его значений на экран, не изменяя порядка следования элементов в массиве. Построить шаблон, позволяющий при помощи единой функции работать с массивами разного типа.
Код
#include <iostream>

using namespace std;

template < class T>
void inpt(T* a)
{
    {
       cout<<"Введите количество элементов"<<endl;break
       cin >> k;
       if (k <= 10)
       {
         cout <<"Error"<< endl;
       }
       else
      {
         a = new T[k];
         for (int i = 0; i < k; i++)
      {
        cout<<"Введите элемент"<<i<<endl;
        cin>>a[i];
      }
      }
   }
}
template < class T>
T max(T* a)
{
    T max1 = a[0];
    for (int i = 0; i < k; i++)
    if (max1 <= a[i])
    {
        max1 = a[i];
    }
    T max2 = a[0];
    for (int i = 0; i < k; i++)
    if ((max2 <= a[i]) & (max1 != max2))
    {
        max2 = a[i];
    }
    T max3 = a[0];
    for (int i = 0; i < k; i++)
    if ((max3 <= a[i]) & (max2 != max3) & (max1 != max3))
    {
        max3 = a[i];
    }
    T max4 = a[0];
    for (int i = 0; i < k; i++)
    if ((max4 <= a[i]) & (max1 != max4) & (max2 != max4) & (max3 != max4))
    {
        max4 = a[i];
    }
    T max5 = a[0];
    for (int i = 0; i < k; i++)
    if ((max5 <= a[i]) & (max1 != max5) & (max2 != max5) & (max3 != max5) & (max4 != max5))
    {
        max5 = a[i]
    }
    return max;
}
int main()
{
    char *b;
    float *c;
    int *d;
    cout << "Введите char" << i << endl;
    inpt(b);
    cout << "Введите float" << i << endl;
    inpt(c);
    cout << "Введите int" << i << endl;
    inpt(d);
    cout << "Результат шаблона на char " << endl;
    max(b)
    cout << "Результат шаблона на float " << endl;
    max(c)
    cout << "Результат шаблона на int " << endl;
    max(d)
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2020, 10:49
Ответы с готовыми решениями:

Поставьте максимальный элемент массива на последнее место, не изменяя порядка следования остальных элементов
С клавиатуры вводится натуральное число n-колтчество элементов последовательности, а хатем...

Изменения порядка следования элементов в массиве на противоположный
Дан одномерный массив, состоящий из n вещественных элементов. Составить программу для изменения...

Изменение порядка следования элементов в массиве через рекурсию
Помогите реализовать через рекурсию. без указателей.. Задача: изменить порядок следования...

Составить программу для изменения порядка следования элементов в массиве на противоположный
Помогите, пожалуйста, дорогие форумчане. Дан одномерный массив, состоящий из n вещественных...

7
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2020, 11:20 2
Цитата Сообщение от Prin Посмотреть сообщение
Помогите исправить программу. Что здесь не так? Дан одномерный массив не менее 10 элементов. Вывести пять больших его значений на экран, не изменяя порядка следования элементов в массиве. Построить шаблон, позволяющий при помощи единой функции работать с массивами разного типа.
Ошики компиляции. Для начала исправь их. Например
Цитата Сообщение от Prin Посмотреть сообщение
template < class T>
void inpt(T* a)
{
{
cout<<"Введите количество элементов"<<endl;break
cin >> k;
Что это за break, и где у тебя объявлена переменная k?
И т.д.
0
0 / 0 / 0
Регистрация: 19.11.2020
Сообщений: 3
20.11.2020, 11:41  [ТС] 3
Код
#include <iostream>

using namespace std;
int k = 0;
template < class T>
void inpt(T* a)
{
cout<<"Vvedite kol elem"<<endl;
cin >> k;
if (k <= 10)
{
    cout <<"Error"<< endl;
}
else
{
    a = new T[k];
    for (int i = 0; i < k; i++)
    {
        cout<<"Vvedite element"<<i<<endl;
        cin>>a[i];
    }
}
}
template < class T>
T max(T* a)
{
    T max1 = a[0];
    for (int i = 0; i < k; i++)
    if (max1 <= a[i])
    {
        max1 = a[i];
    }
    T max2 = a[0];
    for (int i = 0; i < k; i++)
    if ((max2 <= a[i]) & (max1 != max2))
    {
        max2 = a[i];
    }
    T max3 = a[0];
    for (int i = 0; i < k; i++)
    if ((max3 <= a[i]) & (max2 != max3) & (max1 != max3))
    {
        max3 = a[i];
    }
    T max4 = a[0];
    for (int i = 0; i < k; i++)
    if ((max4 <= a[i]) & (max1 != max4) & (max2 != max4) & (max3 != max4))
    {
        max4 = a[i];
    }
    T max5 = a[0];
    for (int i = 0; i < k; i++)
    if ((max5 <= a[i]) & (max1 != max5) & (max2 != max5) & (max3 != max5) & (max4 != max5))
    {
        max5 = a[i]
    }
    return max;
}
int main()
{
    char *b;
    float *c;
    int *d;
    cout << "Vvedite char" << i << endl;
    inpt(b);
    cout << "Vvedite float" << i << endl;
    inpt(c);
    cout << "Vvedite int" << i << endl;
    inpt(d);
    cout << "Rezultat shablona na char " << endl;
    max(b);
    cout << "Rezultat shablona na float " << endl;
    max(c);
    cout << "Rezultat shablona na int " << endl;
    max(d);
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2020, 11:48 4
А остальные ошибки решил не исправлять?
0
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
20.11.2020, 12:09 5
Не знаю что делать со значением INT_MIN в функции getMaxValues. Т.к. в шаблон может быть передан пользовательский тип, то от чего-то нужно отталкиваться. Можно ограничить шаблон только арифметическими типами конечно.

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
#include <iostream>
 
#include <climits>
#include <ctime>
 
template<class T>
T* getMaxValues(T* arr, std::size_t size, std::size_t number);
 
 
 
int main() {
 
    std::srand(std::time(nullptr));
 
    int arr[10];
 
    std::cout << "Initial array: ";
    for (std::size_t i = 0; i < std::size(arr); ++i) {
 
        arr[i] = -50 + std::rand() % 101;
        std::cout << arr[i] << ' ';
 
    }
    std::cout << '\n';
    
    int* maxes = getMaxValues(arr, std::size(arr), 5);
 
    for (std::size_t i = 0; i < 5; ++i)
        std::cout << maxes[i] << ' ';
    std::cout << '\n';
 
    delete[] maxes;
 
    return 0;
 
}
 
template<class T>
T* getMaxValues(T* arr, std::size_t size, std::size_t number) {
 
    if (size < number)
        return nullptr;
 
    T* maxes = new T[number];
    T max = INT_MIN;
    std::size_t index = 0;
 
    bool* checkin = new bool[number];
    for (std::size_t i = 0; i < number; ++i)
        checkin[i] = false;
 
    for (std::size_t i = 0; i < number; ++i) {
 
        for (std::size_t j = 0; j < size; ++j) {
 
            if (arr[j] > max && !checkin[j]) {
 
                index = j;
                max = arr[j];
 
            }
 
        }
 
        maxes[i] = max;
        checkin[index] = true;
        max = INT_MIN;
 
    }
 
    delete[] checkin;
 
    return maxes;
 
}
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2020, 12:14 6
Цитата Сообщение от Nishen Посмотреть сообщение
Не знаю что делать со значением INT_MIN в функции getMaxValues. Т.к. в шаблон может быть передан пользовательский тип, то от чего-то нужно отталкиваться. Можно ограничить шаблон только арифметическими типами конечно.
Цитата Сообщение от Nishen Посмотреть сообщение
T max = INT_MIN;
C++
1
T max = arr[0];
C++
1
T max = std::numeric_limits<T>::min();
1
1352 / 851 / 365
Регистрация: 26.02.2015
Сообщений: 3,799
20.11.2020, 16:22 7
Забыл про std::numeric_limits.
0
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
20.11.2020, 16:24 8
Цитата Сообщение от Nishen Посмотреть сообщение
Забыл про std::numeric_limits.
На самом деле здесь лучше всё-таки работать со значениями массива T max = arr[0]
Там могут быть вообще не числа, а строки например, или std::tuple
0
20.11.2020, 16:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2020, 16:24
Помогаю со студенческими работами здесь

В массиве найти и вывести на экран произведение элементов массива, больших заданного числа B
В массиве найти и вывести на экран произведение элементов массива, больших заданного числа B.

Смена порядка следования элементов массива
Есть данные о том как выводить адрес и из каких ключей эти данные брать$arAddrTemplate = array(...

Вывести через пробел заданные числа, не изменяя порядок их следования
Написать программу, выводящую на экран два заданных целых числа. Входные данные: Во входном...

Вывести через пробел заданные числа, не изменяя порядок их следования
Написать программу, выводящую на экран два заданных целых числа. Входные данные: Во входном...

Изменение порядка следования элементов в массиве так, чтобы сначала располагались все отрицательные элементы,
Дан одномерный массив, состоящий из n элементов (для нечетных вариантов массив состоит из...

В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец с сохранением порядка следования
В одномерном массиве все отрицательные элементы переместить в начало массива, а остальные – в конец...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru