В чем ошибка ?Помогите, пожалуйста

Игорь Лю

#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");
</t></t></int></endl;></t></typename></t></typename></typename></cmath></iostream>

} }

1 ответ

Игорь Лю

Во-первых, необходимо оформить вопрос как положено.

А так, на первый взгляд, в

int give_w()//выдать массив
{
    return width;
}

вы выдаете не массив, а переменную width. И еще, вы правда считаете, что void get_val(int i, int j, T val)//присвоение эл-ту массива значениe - действительно удачное название для функции, которая присваивает значение? Названия должны быть осмысленными, а так вы себя сами путаете.

licensed under cc by-sa 3.0 with attribution.