Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Шаблон класса двухмерного массива


Автор: Recev 7.5.2011, 17:29
Создать шаблон класса двухмерного массива.
В массиве найти столбец который содержит минимальный элемент. Отсортировать этот столбец методом выбора. 
Код

#include <iostream.h>
#include <conio.h>

const int n = 4;
template <class T> class mass
{
public:
T mas [n][n];

void show()
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
cout << mas [i][j] << "   ";
cout << "\n";
}
}

mass()
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
mas [i][j] = (T) (rand()%9+1);
}

void variant ()
{
//поиск мин елемента
T min = mas [0][0];
T ns;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
if (min >= mas [i][j])
{
min = mas [i][j];
ns = j;
}
cout << "Min element massiva = " << min;
cout << ", nahoditsy v stolbce pod #" << ns + 1 << ";" << endl;
//подготовка к сортировке
T mas2 [n];
int m ,N;
for (int i = 0; i < n; i++)
mas2 [i] = mas [i][ns];
T Min, buf;
for(int i = 0; i < n; i++)
if (Min < mas2[i])
{Min = mas2[i];}
cout << "stage 1 \n";
//сортировка
for(int i = 0; i < n; i++)
{
for(int j = 0; j < n; j++)
{
if (Min > mas2[j])
{Min = mas2[j]; m = j;}
}
N++;
buf = mas2[i];
mas2[i] = mas2[m];
mas2[m] = buf;

for(i = 0; i < n; i++)
if (Min < mas2[i])
{Min = mas2[i];}

for (int i = 0; i < n; i++)
mas [i][ns] = mas2 [i];
}
}

};

void main()
{
mass <int> m1;
m1.show();
cout << endl;
m1.variant();
m1.show();
cout << endl;
mass <float> m2;
m2.show();
cout << endl;
m2.variant();
m2.show();
cout << endl;
getch();
}

С int значениями работает нормально, но с float не хочет, выбывает ошибку:
Цитата

Illegal use of floating point
  Full parser context
    File1.cpp(28): decision to instantiate: void mass<double>::variant()
    --- Resetting parser context for instantiation...
    File1.cpp(6): class mass<T>
    File1.cpp(28): parsing: void mass<double>::variant()

Помогите исправить.

Автор: borisbn 7.5.2011, 19:33
ns должен быть типа int, а не T

Автор: Recev 7.5.2011, 20:00
Спасибо, я то думал все время что она int. smile 

Автор: Recev 17.5.2011, 17:51
Как сделать так что-бы массив заполнялся рандомно если T=int то целочисленными значениями, а если T=float то значениями типа float?

Автор: xvr 18.5.2011, 12:02
Цитата(Recev @ 17.5.2011,  17:51)
Как сделать так что-бы массив заполнялся рандомно если T=int то целочисленными значениями, а если T=float то значениями типа float?

Строку mas [i][j] = (T) (rand()%9+1); заменить на mas [i][j] = random(T()); и описать функции
Код

float random(float);
int random(int);
Параметр в функции не использовать

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)