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

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

Войти
Регистрация
Восстановить пароль
 
FatSlowpoke
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 16
#1

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

30.06.2013, 14:54. Просмотров 786. Ответов 6
Метки нет (Все метки)

Задание следующее: программа работает с двумерным массивом, получает размерность и элементы, выводит матрицу на экран. Далее подсчитывает количество столбцов, не содержащих ни одного нулевого элемента. А затем сортирует матрицу по сумме положительных четных элементов строки.
Надобно сделать через шаблоны функций.
Трижды получаем размерность и элементы и трижды осуществляем всю эту процедуру с матрицей, ибо int, float и double.
Работала с примерной программой для одномерного массива, все сделала по такой же схеме, все прекрасно работает. Здесь же 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
104
105
106
107
108
109
110
111
112
113
114
#include<conio.h>
#include<iostream>
#include<stdio.h>
#include<math.h>
#include<cmath>
 
using namespace std;
template <class A> A nul(A** a, int col, int row);
template <class B> void sort(B** a, int col, int row);
 
int main()
{setlocale(LC_ALL,"Russian");
int row,col;
cout<<"Массив типа int.\n\n";
cout<<"Введите количество строк: \n";
cin>>row;
cout<<"Введите количество столбцов: \n";
cin>>col;
int i,j;
int **a=new int *[row];
for(i=0; i<row; i++) a[i]=new int [col];
cout<<"Введите элементы матрицы: \n";
for(i=0; i<row; i++)
for(j=0; j<col; j++)
cin>>a[i][j];
cout<<"Введенная матрица: \n";
for (int i=0; i<row; i++)
{for (int j=0; j<col; j++)
cout<<a[i][j] << " ";
cout<<endl;}
cout<<"Кол-во столбцов, не содержащих ни одного нулевого элемента: ";
cout<<nul(a,col,row);
cout<<"\nСортировка массива\n";
sort(a,col,row);
 
 
cout<<"Массив типа float.\n\n";
cout<<"Введите количество строк: \n";
cin>>row;
cout<<"Введите количество столбцов: \n";
cin>>col;
float **b=new float *[row];
for(i=0; i<row; i++) b[i]=new float [col];
cout<<"Введите элементы матрицы: \n";
for(i=0; i<row; i++)
for(j=0; j<col; j++)
cin>>b[i][j];
cout<<"Введенная матрица: \n";
for (int i=0; i<row; i++)
{for (int j=0; j<col; j++)
cout<<b[i][j] << " ";
cout<<endl;}
cout<<"Кол-во столбцов, не содержащих ни одного нулевого элемента: ";
cout<<nul(b,col,row);
cout<<"\nСортировка массива\n";
sort(b,col,row);
 
 
cout<<"Массив типа double.\n\n";
cout<<"Введите количество строк: \n";
cin>>row;
cout<<"Введите количество столбцов: \n";
cin>>col;
double **c=new double *[row];
for(i=0; i<row; i++) c[i]=new double [col];
cout<<"Введите элементы матрицы: \n";
for(i=0; i<row; i++)
for(j=0; j<col; j++)
cin>>c[i][j];
cout<<"Введенная матрица: \n";
for (int i=0; i<row; i++)
{for (int j=0; j<col; j++)
cout<<c[i][j] << " ";
cout<<endl;}
cout<<"Кол-во столбцов, не содержащих ни одного нулевого элемента: ";
cout<<nul(c,col,row);
cout<<"\nСортировка массива\n";
sort(c,col,row);
getch();}
 
 
template <class A> A nul(A** a, int col, int row)//функция по столбцам без нулей
{int count,t,i,j;
count = 0;
for(j=0; j<col; j++)//прогоняем столбцы
{t=0;
for(i=0; i<row; i++)if(a[i][j]==0)t++;//прогоняем строки и ищем в них элементы равные нулю
if(!t)count++;}//если попадается строка, в которой нет нуля, то плюсуем счетчик
return count;}//выводим количесвто столбцов без нулей
 
template <class B> void sort(B** a, int col, int row)//функция по сортировке массива по сумме положительных четных элементов строки
{B *mus = new B [row];//создаем динамический массив
{for (int i=0; i<row; i++)//прогоняем строки
{mus[i] = 0;
for (int j=0; j<col; j++)//прогоняем столбцы
if (a[i][j] > 0 && !(a[i][j]%2))//если находим четный положительный элемент, 
mus[i] += a[i][j];}//то в ячейку массива записываем этот элемент
 
for(int i = 0; i<row-1; i++)//сортирем матрицу
{int b = i;
for(int j=i+1; j<row; j++)
if (mus[j] < mus[b])
b = j;
int buf_mus = mus[i];
mus[i] = mus[b];
mus[b] = buf_mus;
for(int j = 0; j<col; j++)
{int buf_a = a[i][j];
a[i][j] = a[b][j];
a[b][j] = buf_a;}}}
for (int i=0; i<row; i++)//выводим отсортированную матрицу матрицу
{for (int j=0; j<col; j++)
cout<<a[i][j] << " ";
cout<<endl;}}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.06.2013, 14:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шаблоны функций и двумерный массив (C++):

Двумерный динамический массив. Шаблоны - C++
Всем привет нужно создать функцию которая создаёт двумерный массив заданной размерности (+использовать шаблоны). Делаю следующим образом ...

Одномерные массив (Шаблоны функций) - C++
Задание. Вот задание из одномерных массивов Вот решенное задание из одномерных массивов #include &lt;vcl.h&gt; #pragma...

Шаблоны функций и массив указателей - C++
Задание! Создайте шаблонную функцию maxn(), которая принимает в качестве аргумента массив элементов типа Т и целое число, представляющее...

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

Возожно ли создать массив указателей на шаблоны функций? - C++
Можно ли создать массив указателей на шаблоны функций, если да, то как? Пробовал вот так template &lt;class my_type&gt; void my_func( my_type*...

Двумерный массив(в виде функций) - C++
#include &lt;iostream.h&gt; #include&lt;conio.h&gt; const int n=3, m=4; void InArray(int a); void Change(int a,int kol); void PrintArray (int...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
anmartex
...
1703 / 1196 / 496
Регистрация: 12.02.2013
Сообщений: 1,978
30.06.2013, 16:19 #2
В строке 96 вы используете операцию получения остатка от деления. Эта операция применима только для целочисленного типа данных.
FatSlowpoke
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 16
30.06.2013, 16:42  [ТС] #3
Ох, огромнейшее спасибо, сейчас исправлю.

Добавлено через 6 минут
По моему для дробных чисел вообще не существует понятие четности, или я не права?
Если так, то задание выполнить невозможно
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2013, 16:52 #4
Возвращаемое значение можно int сделать (раз в коде оно всегда int):
C++
1
template <class A> int nul(A** a, int col, int row);
Добавлено через 5 минут
И если уж шаблон, то чтобы типы совпадали (в sort()):
C++
1
2
3
4
5
...
B buf_mus = mus[i];
...
B buf_a = a[i][j];
...
FatSlowpoke
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 16
30.06.2013, 16:59  [ТС] #5
alsav22, Спасибо, исправила
Только бессмысленно, наверно, раз задание невозможно выполнить
alsav22
5417 / 4813 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.06.2013, 17:04 #6
Цитата Сообщение от FatSlowpoke Посмотреть сообщение
Только бессмысленно, наверно, раз задание невозможно выполнить
Сделайте проверку на чётность без использования % и будет работать.
FatSlowpoke
0 / 0 / 0
Регистрация: 11.06.2013
Сообщений: 16
30.06.2013, 17:17  [ТС] #7
alsav22, Дробные числе ведь не обладают четностью/нечетностью
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2013, 17:17
Привет! Вот еще темы с ответами:

Шаблоны функций - C++
Используя шаблоны функций, определите есть ли в данном двумерном массиве число A среди элементов массива. Код программы есть, но он без...

Шаблоны функций - C++
Пытаюсь разобраться в шаблонах функций. Написал такой код, не работает: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace...

Шаблоны функций - C++
Надо в этом задании добавить &quot;шаблоны ф-ций&quot;, помогите пжл Задачи надо переписывать в текст сообщения!!! Одно сообщение - одна...

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


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

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

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