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

Функции-шаблоны для обработки массива

26.04.2017, 23:48. Показов 1436. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Разработать шаблон ввода и вывода массива, а так же шаблон для решение задачи : Все элементы заданного числа увеличить в два раза.

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 X>
void printArray(char *name , X **a,int m, int n)
{
cout <<name;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++){
cout<<"a["<<i<<"]["<<j<<"]"<<" ";
cin>>a[i][j];
}
cout<<endl;
}
 
 template <typename X>
X minArray(X **a,int m, int n)
{
    X min=10;
for (int i=0; i<n; i++)
   for (int j=0; j<m; j++)
    if (a[i][j]< min)
     a[i][j]*=2;
     for (int i=0; i<n; i++)
     for (int j=0; j<m; j++)
     return a[i][j];
}
 
int main()
{
int n; int m;
cin>>n;
cin>>m;
int**a = new int*[n];
for(int i=0; i<m; ++i)
 a[i] = new int[m];
for(int i=0; i<m; ++i)
 for(int j=0; j<n; ++j)
    int minA=minArray(a,n,m);
     printArray(a,n,m);
cout<<endl;
return 0;
}
что то похожее на программу , но не работает если делаю одномерный массив статический, то работает, а если таким образом, то не работает.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.04.2017, 23:48
Ответы с готовыми решениями:

Шаблоны функций обработки одномерного массива
всем привет! недавно начал изучать шаблоны функций. вот написал программу, посмотрите пожалуйста,...

Функции для обработки двумерного массива
#include &lt;iostream&gt; #include &lt;windows.h&gt; #include &lt;ctime&gt; using namespace std; void FillArray...

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

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

7
4240 / 2937 / 687
Регистрация: 08.06.2007
Сообщений: 9,817
Записей в блоге: 4
26.04.2017, 23:59 2
Цитата Сообщение от bibrothers Посмотреть сообщение
C++
1
2
3
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
return a[i][j];
C++
1
 
Что-то тут у вас не то, или я просто не понял.
Входите в двойной цикл и сразу же возвращаетесь из функции. А тогда смысл, городить циклы?
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.04.2017, 08:27 3
11 строка:
Цитата Сообщение от bibrothers Посмотреть сообщение
C++
1
cin>>a[i][j];
- почему здесь ввод с консоли, я не понял. Если написано слово "Print" в заголовке функции, то значит должен быть вывод в консоль. Замените здесь на:
C++
1
cout << a[i][j] << " ";
Добавлено через 1 минуту
Цитата Сообщение от bibrothers Посмотреть сообщение
C++
1
X min=10;
- здесь наверное будет более логично и правильно min приравнивать к первому элементу массива, а не 10. И потом искать минимум начиная со 2 элемента массива.

Добавлено через 8 минут
Цитата Сообщение от bibrothers Посмотреть сообщение
C++
1
2
if(a[i][j]< min)
* * *a[i][j]*=2;
- не понял, а что такое? Все намешали в функцию, а в итоге ничего не получилось.
Если тут искать минимум, то умножение на 2 здесь должно отсутствовать в корне.
C++
1
2
3
4
5
6
7
8
9
10
template <typename X>
X minArray(X **a,int m, int n)
{
X min=a[0][0];
for(int i=0; i<n; i++)
    for(int j=1; j<m; j++)
        if(a[i][j]< min)
            min = a[i][j];
return min;
}
Добавлено через 10 минут
Цитата Сообщение от bibrothers Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename X>
void printArray(char *name , X **a,int m, int n)
{
cout <<name;
for (int i=0; i<n; i++)
for (int j=0; j<m; j++){
cout<<"a["<<i<<"]["<<j<<"]"<<" ";
cin>>a[i][j];
}
cout<<endl;
}
- один такой шаблон будет для ввода массива, другой для вывода(я уже писал об этом выше).
Тот который для ввода нужно переписать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
template <typename X>
void InputArray(X **a, int vn, int vm)
{
for(int i=0; i<vn; i++)
    for(int j=0; j<vm; j++)
    {
        cout << "Vvedite << "a["<<i<<"]["<<j<<"]"<<" element massiva:";
        cin >> a[i][j];
        cout << "\n";
    }
}
0
Любитель чаепитий
3742 / 1798 / 566
Регистрация: 24.08.2014
Сообщений: 6,016
Записей в блоге: 1
27.04.2017, 09:04 4
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 <cstddef>
 
namespace tools
{
    using std::size_t;
    
    template<typename T>
    struct RangeCreateImpl
    {
        using IterType = T;
        constexpr RangeCreateImpl(IterType it, size_t t) noexcept :
            iter_(it),
            off_(t)
        {}
        
        constexpr IterType begin()
        {
            return iter_;
        }
        
        constexpr IterType end()
        {
            return iter_ + off_;
        }
        
    private:
        IterType iter_;
        size_t off_;
    };
        
    template<typename T>
    constexpr RangeCreateImpl<T> createRange(T iter, size_t off)
    {
        return RangeCreateImpl<T>(iter, off);
    }
    
} //namespace tools
 
//------------------------------------------------------------------
//------------------------------------------------------------------
//------------------------------------------------------------------
 
#include <iostream>
 
template<typename T>
void printArrayImpl(T arr, size_t n, size_t m)
{
    for (const auto & row : tools::createRange(arr, n))
    {
        for (const auto & col : tools::createRange(row, m))
        {
            std::cout << col << " ";
        }
        std::cout << "\n";
    }
    
    std::cout << "\n";
}
 
template<typename T, size_t N, size_t M>
void printArray(T (&arr)[N][M])
{
    printArrayImpl<T(*)[M]>(arr, N, M);
}
 
template<typename T>
void printArray(T ** arr, size_t n, size_t m)
{
    printArrayImpl<T**>(arr, n, m);
}
 
template<typename T>
void enterArrayImpl(T arr, size_t n, size_t m)
{
    for (auto & row : tools::createRange(arr, n))
    {
        for (auto & col : tools::createRange(row, m))
        {
            std::cin >> col;
        }
    }
}
 
template<typename T, size_t N, size_t M>
void enterArray(T (&arr)[N][M])
{
    enterArrayImpl<T(*)[M]>(arr, N, M);
}
 
template<typename T>
void enterArray(T ** arr, size_t n, size_t m)
{
    enterArrayImpl<T**>(arr, n, m);
}
 
int main()
{
    std::cout << "Hello, world!\n";
    
    int ** arr = new int*[2] { new int[2]{ 1, 2 }, new int[2]{ 3, 4 } };
    int arr2[][2] { { 5, 6 }, { 7, 8 } };
    int arr3[2][2] { { 9, 10 }, { 11, 12 } };
    
    enterArray(arr3);
    
    printArray(arr, 2, 2);
    printArray(arr2);
    printArray(arr3);
    
    delete [] arr[0];
    delete [] arr[1];
    delete [] arr;
}
0
132 / 158 / 87
Регистрация: 06.04.2016
Сообщений: 992
27.04.2017, 09:45 5
Ему еще нужно все элементы заданного числа увеличить в 2 раза. Сделаете?
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.04.2017, 12:52 6
Лучший ответ Сообщение было отмечено GbaLog- как решение

Решение

Сделал для обработки одномерных и двумерных статических и динамических массивов.
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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <iostream>
 
template <typename T>
void InputArr(T *arr, const size_t size)
{
    for (size_t i = 0; i < size; i++)
        std::cin >> arr[i];
}
 
template <typename T>
void InputArr(T **arr, const size_t M, const size_t N)
{
    for (size_t i = 0; i < M; i++)
        InputArr(arr[i], N);
}
 
template <typename T, size_t size>
void InputArr(T (&arr)[size])
{
    InputArr(arr, size);
}
 
template <typename T, size_t M, size_t N>
void InputArr(T (&arr)[M][N])
{
    for (auto &l : arr)
        InputArr(l);
}
 
template <typename T>
void OutputArr(const T *arr, const size_t size)
{
    for (size_t i = 0; i < size; i++)
        std::cout << arr[i] << " ";
    std::cout << std::endl;
}
 
template <typename T>
void OutputArr(T **arr, const size_t M, const size_t N)
{
    for (size_t i = 0; i < M; i++)
        OutputArr(arr[i], N);
    std::cout << std::endl;
}
 
template <typename T, size_t size>
void OutputArr(const T (&arr)[size])
{
    OutputArr(arr, size);
}
 
template <typename T, size_t M, size_t N>
void OutputArr(const T (&arr)[M][N])
{
    for (const auto &l : arr)
        OutputArr(l);
    std::cout << std::endl;
}
 
template <typename T, typename Fn>
void ProcessArr(T *arr, const size_t size, const Fn &fn)
{
    for (size_t i = 0; i < size; i++)
        fn(arr[i]);
}
 
template <typename T, typename Fn>
void ProcessArr(T **arr, const size_t M, const size_t N, const Fn &fn)
{
    for (size_t i = 0; i < M; i++)
        ProcessArr(arr[i], N, fn);
}
 
template <typename T, size_t size, typename Fn>
void ProcessArr(T (&arr)[size], const Fn &fn)
{
    ProcessArr(arr, size, fn);
}
 
template <typename T, size_t M, size_t N, typename Fn>
void ProcessArr(T (&arr)[M][N], const Fn &fn)
{
    for (auto &l : arr)
        ProcessArr(l, fn);
}
 
template <typename T>
class Functor
{
public:
    constexpr Functor(const T &val) : m_val(val) {}
    constexpr void operator()(T &x) const
    {
        if (x == m_val)
            x *= 2;
    }
 
private:
    const T m_val;
};
 
int main()
{
    constexpr size_t M = 3, N = 2;
    constexpr Functor<int> fn(2);
 
    int *dynArr = new int[M];
    InputArr(dynArr, M);
    ProcessArr(dynArr, M, fn);
    OutputArr(dynArr, M);
    delete[] dynArr;
 
    int statArr[M];
    InputArr(statArr);
    ProcessArr(statArr, fn);
    OutputArr(statArr);
 
    int **dyn2Arr = new int*[M];
    for (size_t i = 0; i < M; i++)
        dyn2Arr[i] = new int[N];
    InputArr(dyn2Arr, M, N);
    ProcessArr(dyn2Arr, M, N, fn);
    OutputArr(dyn2Arr, M, N);
    for (size_t i = 0; i < M; i++)
        delete[] dyn2Arr[i];
    delete[] dyn2Arr;
 
    int stat2Arr[M][N];
    InputArr(stat2Arr);
    ProcessArr(stat2Arr, fn);
    OutputArr(stat2Arr);
}
0
42 / 42 / 17
Регистрация: 25.04.2014
Сообщений: 499
27.04.2017, 14:24 7
MrGluck, а зачем constexpr везде? код и без них такой же генерируется
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
27.04.2017, 15:02 8
Цитата Сообщение от tapochka Посмотреть сообщение
MrGluck, а зачем constexpr везде? код и без них такой же генерируется
Там где объявление размеров он просто необходим.
А в других местах - почему бы и нет, оно же не мешает. Хоть в конкретно данном примере вычисления всё равно будут в рантайм, ничто не мешает этот функтор потом использовать для constexpr данных.
0
27.04.2017, 15:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2017, 15:02
Помогаю со студенческими работами здесь

Прототип функции для обработки массива
Вопрос по учебнику Стивена Прата. Имеется объявление массива: short clops; Напишите прототип и...

Простые функции для обработки массива
Учил Python. с++ никогда не занимался. Сейчас выхожу с больничного, выясняется что на завтра нужно...

Пользовательские функции для обработки массива
Помогите пожалуйста! Задание было такое: Напишите код создания массива, индексами которого будут...

Написать функцию (или функции) для обработки одномерного массива
Дан целочисленный вектор A размерности n. Найти номер последнего минимального элемента среди четных...


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

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