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

Вызов функции (шаблона) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Вычислить сопротивление по рисунку http://www.cyberforum.ru/cpp-beginners/thread896694.html
Используя функцию, которая вычисляет супротивлення электрической цепи, который состоит из двух резисторов, вычислить общее сопротивление четырех проводников с электрическими супротивлення, соединенных между собой по схеме, показанной на рисунке: Параметрами функции являются величины супротивлень и тип соединения (последовательное или параллельное). Функция проверяет корректность параметров: если...
C++ Вычислить интеграл Помоги пожалуйста)) http://www.cyberforum.ru/cpp-beginners/thread896685.html
C++ Наибольшее количество одинаковых элементов
Составить программу для подсчета наибольшего количества одинаковых элементов, расположенных последовательно, в массиве для каждого из одномерных массивов Х и Y . Инициализацию, вывод элементов массива, их обработку организовать в отдельных функциях.
Подсчет нечетных элементов C++
Сформировать динамический массив В размера m × n из случайных целых чисел. Составить программу для подсчета произведения нечетных элементов двумерной матрицы В, используя функцию для обработки массива.
C++ Определить количество слов в тексте http://www.cyberforum.ru/cpp-beginners/thread896676.html
Разработать алгоритм и программу для определения количества слов в тексте
C++ работа с системами счисления У меня в файле число: 0x00000000 Мне нужно его прочиатать да ещё и занести в переменную. Пожно с помошью char или std::string, а как ещё? Кто знает пишите) подробнее

Показать сообщение отдельно
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
09.06.2013, 22:46     Вызов функции (шаблона)
Вот вам пример работы с шаблонными функциями:
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
104
105
106
107
108
109
110
111
112
113
// Сумму   элементов массива  и максимальное значение произведений
#include <iostream>
#include <cstddef>
#include <conio.h>
 
using namespace std;
 
// <<<<<<<<<<<<<<<---------------прототипы функций--------------->>>>>>>>>>>>>>>
// вывод массива на экран
template <typename T>
void print(const T* , const size_t);
 
// сумма элементов
template <typename T>
T sum(const T* , const size_t);
 
// максимальное произведение соседних элементов
template <typename T>
T maxMult(const T* , const size_t);
 
// сумма и максимальное произведение
template <typename T>
void sumAndMaxMult(const T* , const size_t, T &, T &);
 
// <<<<<<<<<<<<<<<----------------главная функция---------------->>>>>>>>>>>>>>>
int main()
{
    int arr[] = {1, 6, 2, 4, 7};
    const size_t N = sizeof(arr) / sizeof(arr[0]);   // узнаем кол-во элементов
    int res1, res2; // переменные для хранения результата вычислений
    double arr2[] = {1.1, 2.3, 0.0, 7.5};
    const size_t M = sizeof(arr2) / sizeof(arr2[0]); // узнаем кол-во элементов
    double res3, res4; // переменные для хранения результата вычислений
 
    // обрабатываем массив типа int
    print(arr, N);
    sumAndMaxMult(arr, N, res1, res2);
    cout << "Sum: " << sum(arr, N)
         << "\nMax mult: " << maxMult(arr, N)
         << "\nSame by one function:"
         << "\nSum: " << res1
         << "\nMax mult: " << res2 << endl << endl;
 
    // обрабатываем массив типа double
    print(arr2, M);
    sumAndMaxMult(arr2, M, res3, res4);
    cout << "Sum: " << sum(arr2, M)
         << "\nMax mult: " << maxMult(arr2, M)
         << "\nSame by one function:"
         << "\nSum: " << res3
         << "\nMax mult: " << res4 << endl << endl;
 
    _getch(); // пауза чтобы посмотреть результаты работы программы
    return 0;
}
 
template <typename T>
void print(const T* arr, const size_t size)
{
    for (size_t i=0; i < size; i++)
        cout << arr[i] << ' ';
    cout << endl;
}
 
template <typename T>
T sum(const T* arr, const size_t size)
{
    T s = 0; // сумма элементов
    for (size_t i=0; i < size; i++)
        s += arr[i];
 
    return s;
}
 
template <typename T>
T maxMult(const T* arr, const size_t size)
{
    if (size == 1) // если размер равен 1 (на всякий случай)
        return arr[0];
 
    T max = arr[0] * arr[1]; // устанавливаем начальное макс. произведение
    for (size_t i=2; i < size; i++)
    {
        T mult = arr[i] * arr[i-1]; // перемножаем соседние элементы
        if (max < mult)             // если текущее произведение больше,
            max = mult;             // то макс. значение равно ему
    }
 
    return max;
}
 
// сумма и максимальное произведение
template <typename T>
void sumAndMaxMult(const T* arr, const size_t size, T& res1, T& res2)
{
    if (size == 1) // если размер равен 1 (на всякий случай)
    {
        res1 = arr[0];
        res2 = arr[0];
        return;
    }
    // задаем начальные значения результатам
    res1 = arr[0] + arr[1];
    res2 = arr[0] * arr[1];
 
    for (size_t i=2; i < size; i++)
    {
        res1 += arr[i];             // суммируем элементы
        T mult = arr[i] * arr[i-1]; // перемножаем соседние элементы
        if (res2 < mult)            // если текущее произведение больше,
            res2 = mult;            // то макс. значение равно ему
    }
}
 
Текущее время: 10:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru