#include <iostream>
#include <cmath>
using namespace std;
template<typename T>
class Matrix
{
public:
class wrong_size {};
class wrong_mult {};
void get_size(int h, int w)//размер массива
{
height = h;
width = w;
}
int give_h()//высот массива
{
return height;
}
int give_w()//выдать массив
{
return width;
}
void creation()//создать массив
{
a = new T*[height];
for (int i = 0; i < height; i++)
a[i] = new T[width];
}
void get_val(int i, int j, T val)//присвоение эл-ту массива значениe
{
a[i][j] = val;
}
friend istream& operator>>(istream& os, Matrix& z)
{
for (int i = 0; i < z.height; i++)
for (int j = 0; j < z.width; j++)
os >> z.a[i][j];
return os;
}
friend ostream& operator<<(ostream& os, Matrix& z)
{
for (int i = 0; i < z.height; i++)
{
for (int j = 0; j < z.width; j++)
os << z[i][j] << " ";
os << endl;
}
return os;
}
T* operator[](int i)
{
return a[i];
}
Matrix operator+(Matrix sl)
{
if (height == sl.height && width == sl.width)
{
Matrix i;
i.get_size(height, width);
i.creation();
for (int k = 0; k < height; k++)
for (int j = 0; j < width; j++)
i.get_val(k, j, (a[k][j] + sl[k][j]));
return i;
}
else throw wrong_size();
}
Matrix operator-(Matrix sl)
{
Matrix i;
if (height == sl.height && width == sl.width)
{
i.get_size(height, width);
i.creation();
for (int k = 0; k < height; k++)
for (int j = 0; j < width; j++)
i.get_val(k, j, (a[k][j] - sl[k][j]));
return i;
}
else throw wrong_size();
}
Matrix operator*(Matrix sl)
{
Matrix i;
T sum = 0;
if (sl.height == width)
{
i.get_size(height, sl.width);
i.creation();
for (int k = 0; k < height; k++)
for (int j = 0; j < sl.width; j++)
{
for (int z = 0; z < height; z++)
sum += a[k][z] * sl[j][z];[![введите сюда описание изображения][1]][1]
i.get_val(k, j, sum);
sum = 0;
}
return i;
}
else throw wrong_mult();
}
private:
T **a;
int width, height;
};
template <typename T>
void LOG(Matrix<T> &c)//функция заменяющая все эл-ты массива на их
абсолютные величины
{
for (int i = 0; i < c.give_h(); i++)
for (int j = 0; j < c.give_w(); j++)
if (c[i][j] > 0)
{
c.get_val(i, j, log(c[i][j]));
cout << c[i][j];
cout << endl;
};
}
template<typename T>
void Min(Matrix<T>&d)
{
T min = d[0][0];
for (int i = 0; i < d.give_h(); i++)
for (int j = 0; j < d.give_w(); j++)
if (d[i][j] <= min)
min = d[i][j];
cout << min<<endl;
}
template<typename T>
void main()
{
try
{
Matrix<int> a1, b1, c;
int h, w;
cout << "Enter m";
cin >> h;
cout << "Enter n";
cin >> w;
a1.get_size(h, w);
a1.creation();
cout << "Mas1:" << endl;
cin >> a1;
cout << "Enter k";
cin >> h;
cout << "Enter l";
cin >> w;
b1.get_size(h, w);
b1.creation();
cout << "Mas2:" << endl;
cin >> b1;
c = a1 + b1;
cout << "Sum " << endl;
cout << c << endl;
c = a1 - b1;
cout << "Dif " << endl;
cout << c << endl;
c = a1 * b1;
cout << "Prod " << endl;
cout << c;
cout << "\n=====================\nLog:\n";
LOG(a1);
cout << "======================\nMin mas1:\n";
Min(a1);
cout << "======================\nMin mas2:\n";
Min(b1);
cout << "======================\n";
}
catch (Matrix<T>::wrong_mult)
{
cout << "ERROR" << endl;
}
catch (Matrix<T>::wrong_size)
{
cout << "The matrix does not fit in size" << endl;
}
system("pause");
} }
Во-первых, необходимо оформить вопрос как положено.
А так, на первый взгляд, в
int give_w()//выдать массив
{
return width;
}
вы выдаете не массив, а переменную width
. И еще, вы правда считаете, что void get_val(int i, int j, T val)//присвоение эл-ту массива значениe
- действительно удачное название для функции, которая присваивает значение? Названия должны быть осмысленными, а так вы себя сами путаете.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Добрый день! Подскажие как получить float значения? Код для чтения регистров
Есть два сервера с идентичным ПО, железом и рабочим окружениемОС старый добрый 6 дебиан
на вход дается положительное целое число, нужно найти последующее четное число, причем программа должна быть БЕЗ использования условного...