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

Перегрузка и шаблоны функции(массив) Исправить код

21.09.2018, 11:21. Показов 1213. Ответов 1

Author24 — интернет-сервис помощи студентам
Нужно сделать программу, с использованием шаблонов этих типов данных- int,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
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
81
82
83
84
85
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstdlib>
using namespace std;
 
template<typename T>
void minimal(T * arr, int n)
{
    int min = 0;
    for (int i = 0; i < n; i++)
    {
        if (abs(arr[i]) < min)
        {
            min = arr[i];
        }
    }
    cout<<min<<endl;
}
 
template<typename T>
void sort(T * arr, int n)
{
    int k = 0, i = 0;
    for (int i = 1; i <= n / 2; i++)
    {
        for (int j = i; j <= n - i; j += 2)
        {
            k = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = k;
        }
    }
    cout << arr[i] << " ";
}
 
 template<typename T>
 void summa(T*arr, int n)
 {
     int one = 0, sum = 0, i = 0;
     for (i = 0; i < n; i++)
     {
         if (arr[i] == 0)
         {
             one = i;
             break;
         }
     }
     for (i = 0 + one; i < n; i++)
     {
         sum += abs(arr[i]);
     }
     cout << sum << endl;
 }
 
 
 int main()
 {
     setlocale(LC_ALL, "ru");
     int i, n;
     cin >> n;
     int *arr = new int[n];
     float *mass = new float[n];
     double *massiv = new double[n];
 
     for (i = 0; i < n; i++) cin >> arr[i];
     cout << endl;
     for (i = 0; i < n; i++) cin >> mass[i];
     cout << endl;
     for (i = 0; i < n; i++) cin >> massiv[i];
     cout << endl;
 
     minimal(arr, n);
     summa(arr, n);
     sort(arr, n);
 
     minimal(mass, n);
     summa(mass, n);
     sort(mass, n);
 
     minimal(massiv, n);
     summa(massiv, n);
     sort(massiv, n);
 
     system("pause");
     return 0;
 }
ПРИМЕР ВЫХОДНЫХ ДАННЫХ
0 19

-4 0 4 5 1 8 3 -7 2 0

0.00 5.87

4.00 2.11 -3.33 0.86 1.00 -0.25 10.50 3.00 0.00 4.01

0.0000 9.5800

0.5555 0.5679 2.0210 -5.8000 9.5800 1.0101 -6.1230 1.2300 -10.0110 0.0000
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2018, 11:21
Ответы с готовыми решениями:

Шаблоны функций как исправить код?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; template &lt;typename X&gt; X...

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

Исправить ошибку в коде. Дружественные функции и классы, перегрузка операторов
В коде программы есть ошибки, помогите, пожалуйста, их исправить #include &quot;pch.h&quot; #include...

Двумерный Массив.Шаблоны функции(отладить).
Помогите пожалуйста, я что-то запутался как делать. Одномерный сам сделал, всё работает, а тут не...

1
2 / 3 / 0
Регистрация: 24.07.2018
Сообщений: 8
21.09.2018, 15:45 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
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include<iostream>
#include<cmath>
#include<iomanip>
#include<cstdlib>
 
using namespace std;
 
template<typename T> void minimal(T * arr, int n)
{
    T min = arr[0];
        
    for (int i = 1; i < n; i++)
    {
        if (abs(arr[i]) < min)
        {
            min = arr[i];
        
        }
    }
    cout << "\nМинимальный по модулю элемент: "<<min << endl;
}
 
template<typename T> void sort(T * arr, int n)
{
    for (int i = 1; i < n / 2; ++i)
        for (int j = i; j < n - i; j += 2)
            swap(arr[j], arr[j + 1]);
 
    cout << "\nМассив отсортирован: ";
    for (int i = 0; i < n; i++)cout << arr[i] << " ";
    cout << "\n";
}
 
template<typename T> void summa(T*arr, int n)
{
    int one = n;//если нуля не будет, в сумму ничего не запишется
    T sum = 0;
    for (int i = 0; i < n; i++)
    {
        if (arr[i] == 0)
        {
            one = i;
            break;
        }
    }
    for (int i = one; i < n; i++)
    {
        sum += abs(arr[i]);
    }
 
    cout << "\nСумма модулей после первого нуля равна: " << sum << endl;
}
 
int main()
{
    setlocale(LC_ALL, "ru");
 
    int i, n;
 
    do {
        cout << "Введите размер массива(четное число):";
        cin >> n;
 
    } while (n % 2 != 0);
 
    int *arr = new int[n];
    float *mass = new float[n];
    double *massiv = new double[n];
 
    cout << "\nВведите массивы через пробел:\n";
    cout << "\n______int______\n";
    for (i = 0; i < n; i++) cin >> arr[i];
    cout << endl;
 
    cout << "\n______float______\n";
    for (i = 0; i < n; i++) cin >> mass[i];
    cout << endl;
 
    cout << "\n______double______\n";
    for (i = 0; i < n; i++) cin >> massiv[i];
    cout << endl;
 
    cout << "\n______Решение:______\n\n";
 
    cout << "\n______int______\n";
    minimal(arr, n);
    summa(arr, n);
    sort(arr, n);
 
    cout << "\n______float______\n";
    minimal(mass, n);
    summa(mass, n);
    sort(mass, n);
 
    cout << "\n______double______\n";
    minimal(massiv, n);
    summa(massiv, n);
    sort(massiv, n);
 
 
    system("pause");
    return 0;
}
Вот как-то так. Вообще хорошо бы было сделать функции для ввода/вывод массивов, а то три раза писать одно и то же, это не комильфо. Да и делать вывод в той же функции, где считаешь, не очень хорошо.
1
21.09.2018, 15:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.09.2018, 15:45
Помогаю со студенческими работами здесь

Массив. Макс и мин элемент.Шаблоны и функции.
Само задание вот: Найти max(a2,a4,...a(2k)+min(a1,a3,...a(2k+1). Короче, вроде бы найти макс и...

как исправить код на динамический массив-код уже написан только на статическом
#include &lt;iostream&gt; #include &lt;iostream&gt; #include &quot;string.h&quot; using namespace std; const...

Перегрузка оператора "-", исправить код
есть такой код: -//-//-//- public static Rational operator -(Rational x, Rational y) ...

Перегрузка и шаблоны
Для каждого пункта задания создать: 1. Перегружаемые функции для типов int и double 2. Шаблоны...


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

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