Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ZayacV
2 / 2 / 2
Регистрация: 27.10.2013
Сообщений: 72
#1

Шаблоны функций обработки одномерного массива - C++

01.05.2014, 13:48. Просмотров 602. Ответов 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
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
// Задание:
// В одномерном массиве, состоящем из n вещественных элементов, вычислить:
// 1. сумму отрицательных элементов массива;
// 2. произведение элементов массива, расположенных между максимальным и минимальным элементами.
// 3. Упорядочить элементы массива по возрастанию.
 
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
 
template<typename T> T sum(T arr[], int n)//шаблон функции для нахождения суммы отр элементов
{
    T sum = 0;
 
    for(int i = 0; i < n; i++)
        if(arr[i] < 0)
            sum += arr[i];
 
    return sum;
}
 
template<typename T> T mult(int arr[], int n)
{
    T index_min = 0;
    T index_max = 0;
    T mult = 1;
 
    for(int i = 0; i < n; i++) {
        if(arr[i] < arr[index_min])
            index_min = i;
        if(arr[i] > arr[index_max])
            index_max = i;
    }
 
    if(index_min > index_max) {
        int temp_index = index_min;
        index_min = index_max;
        index_max = temp_index;
    }
 
    for(int i = index_min+1; i < index_max; i++)
        mult *= arr[i];
 
    return mult;
}
 
template<typename T> T sort(int arr[], int n)
{
    for(int i = 0; i < n-1; i++)
        for(int j = i+1; j < n; j++)
            if(arr[i] > arr[j]) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
 
    return;
}
 
int main()
{
    int arr[10];
 
    srand(time(0));
    for(int i = 0; i < 10; i++) {
        arr[i] = rand()%50 - 25;
        cout << setw(5) << arr[i];
    }
    cout << endl;
    cout << endl << "1) Suma otricatelnyh: " << sum<int>(arr, 10) << endl;
    cout << endl << "2) Proizvedenie mejdu min i max: " << mult<int>(arr, 10) << endl;
    cout << "  (Podschet nachinaetsya s 0)..." << endl;
    cout << endl;
    sort<void>(arr, 10);
 
    std::cout << "Otsortirovannyj massiv:" << endl;
    for(int i = 0; i < 10; i++)
        cout << setw(5) << arr[i];
    cout << endl;
    cin.get();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.05.2014, 13:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблоны функций обработки одномерного массива (C++):

Функции-шаблоны для обработки массива - C++
Разработать шаблон ввода и вывода массива, а так же шаблон для решение задачи : Все элементы заданного числа увеличить в два раза. ...

Написать код обработки одномерного массива - C++
Написать код обработки одномерного массива,(задание вложено ниже)

Написать функцию для обработки одномерного массива - C++
Написать функцию для обработки одномерного массива: нахождение количества вхождений, заданного пользователем числа в массив целых...

Написать библиотеку для обработки одномерного динамического массива - C++
Написать библиотеку для обработки одномерного динамического массива (инициализация, ввод/вывод, поиск, сортировка, удаление и добавление...

Разработать алгоритм решения задачи обработки одномерного массива. - C++
Помогите пожалуйста с написанием кода: Лабораторная работа № 4 Разработать алгоритм решения задачи обработки...

Программная реализация класса обработки одномерного массива с использованием шаблона - C++
Описать класс Array обработки одномерных массивов произвольного размера и типа. Использовать шаблон для типа &lt;template&gt;. Память выделяется...

6
Jupiter
Каратель
Эксперт С++
6556 / 3977 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
01.05.2014, 13:53 #2
Цитата Сообщение от ZayacV Посмотреть сообщение
T sum = 0;
почему 0?
C++
1
T sum = T();
Добавлено через 1 минуту
Цитата Сообщение от ZayacV Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
template<typename T> T sort(int arr[], int n)
{
    for(int i = 0; i < n-1; i++)
        for(int j = i+1; j < n; j++)
            if(arr[i] > arr[j]) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
    return;
}
что возвращает эта функция? и зачем? почему в 6-й строке int ?
0
ZayacV
2 / 2 / 2
Регистрация: 27.10.2013
Сообщений: 72
01.05.2014, 14:06  [ТС] #3
ничего не возвращает
0
Rifle
26 / 26 / 5
Регистрация: 15.11.2012
Сообщений: 93
Завершенные тесты: 4
01.05.2014, 14:15 #4
Тогда укажите void в качестве возвращаемого типа; у вас стоит тип Т.
Так же int не только в 6-ой строке, но и в первой: функция принимает в качестве аргумента массив целых, а по идее должна принимать массив типа Т. То же самое и в функции произведения.
0
ZayacV
2 / 2 / 2
Регистрация: 27.10.2013
Сообщений: 72
01.05.2014, 14:22  [ТС] #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
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
// Задание:
// В одномерном массиве, состоящем из n вещественных элементов, вычислить:
// 1. сумму отрицательных элементов массива;
// 2. произведение элементов массива, расположенных между максимальным и минимальным элементами.
// 3. Упорядочить элементы массива по возрастанию.
 
#include <stdio.h>
#include <iostream>
#include <time.h>
#include <iomanip>
using namespace std;
 
template<typename T> T sum(T arr[], int n)//шаблон функции для нахождения суммы отр элементов
{
    T sum = T();
 
    for(int i = 0; i < n; i++)
        if(arr[i] < 0)
            sum += arr[i];
 
    return sum;
}
 
template<typename T> T mult(T arr[], int n)
{
    T index_min = 0;
    T index_max = 0;
    T mult = 1;
 
    for(int i = 0; i < n; i++) {
        if(arr[i] < arr[index_min])
            index_min = i;
        if(arr[i] > arr[index_max])
            index_max = i;
    }
 
    if(index_min > index_max) {
        int temp_index = index_min;
        index_min = index_max;
        index_max = temp_index;
    }
 
    for(int i = index_min+1; i < index_max; i++)
        mult *= arr[i];
 
    return mult;
}
 
template<typename T> void sort(int arr[], int n)
{
    for(int i = 0; i < n-1; i++)
        for(int j = i+1; j < n; j++)
            if(arr[i] > arr[j]) {
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
}
 
int main()
{
    int arr[10];
 
    srand(time(0));
    for(int i = 0; i < 10; i++) {
        arr[i] = rand()%50 - 25;
        cout << setw(5) << arr[i];
    }
    cout << endl;
    cout << endl << "1) Suma otricatelnyh: " << sum<int>(arr, 10) << endl;
    cout << endl << "2) Proizvedenie mejdu min i max: " << mult<int>(arr, 10) << endl;
    cout << endl;
    sort<void>(arr, 10);
 
    std::cout << "Otsortirovannyj massiv:" << endl;
    for(int i = 0; i < 10; i++)
        cout << setw(5) << arr[i];
    cout << endl;
    cin.get();
    return 0;
}
0
Rifle
26 / 26 / 5
Регистрация: 15.11.2012
Сообщений: 93
Завершенные тесты: 4
01.05.2014, 14:24 #6
Верно. Но и в функции sort нужно поменять массив типа int на массив типа T.
1
ZayacV
2 / 2 / 2
Регистрация: 27.10.2013
Сообщений: 72
01.05.2014, 14:34  [ТС] #7
спасибо
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2014, 14:34
Привет! Вот еще темы с ответами:

Программная реализация класса обработки одномерного массива с использованием шаблона - C++
Описать класс Array обработки одномерных массивов произвольного размера и типа. Использовать шаблон для типа &lt;template&gt;. Память выделяется...

Шаблоны функций. В одномерном массиве, состоящем из n вещественных элементов, вычислить номер максимального по модулю элемента массива - C++
Задание 1: Работа с одномерными массивами. В одномерном массиве, состоящем из n вещественных элементов, вычислить: 1. Номер...

Создание функций для обработки массива: поиск, перестановка элементов - C++
Не могу написать,помогите пжлст!Что то вертел,так и недодумал. Условие: Выполнить следующие задания, оформив каждый пункт в виде функции....

шаблоны функций на С++ - C++
помогите с задачей условие таково. Дан одна мерный массив состоящий из целых чисел нужно найти произвидение всех отрицательных элементов и...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
01.05.2014, 14:34
Ответ Создать тему
Опции темы

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