Ошибка при выделении памяти, как исправить?

Рейтинг: 0Ответов: 2Опубликовано: 07.07.2011

Подскажите, пожалуйста, как решить следующую задачу.

По заданной квадратной матрице размера n x n построить вектор длинной 2n-1, элементы которого - максимумы элементов диагоналей, параллельных главной, включающей главную диагональ. Оформить в виде класса с соответствующими методами.

Компилирую с codebloks, указывает на ошибку с выделением памяти под массив, в который пишем вектор... помогите исправить. )

Ошибки:

Line 20: error: windows.h: No such file or directory
t.cpp: In member function 'void matrix::max()':
Line 62: error: cannot convert 'int**' to 'int*' in assignment compilation terminated due to -Wfatal-errors.

Строка 62:

b=new int*[2*n1-1];

Код программы.

Ответы

▲ 1Принят

Честно говоря, разбираться поленился, просто чуть подправил. Разницу определяйте сами. Насчёт NOMINNAX -- "спасибо Биллу Гейтсу за наше счастливое детство". Что касается деструктора -- остаётся для самостоятельной проработки.

#define NOMINMAX
#include <windows.h>
#include <iostream>
using namespace std;

class matrix
{
int **a;
int *b;
int n;
public:
 matrix(int n);
 ~matrix();
 void input();
 void max();
 void output();
 };
 matrix::matrix(int n1)//Выделение памяти под массив-матрицу
 {
    int i;
n=n1;
    a=new int *[n];
for(i=0;i<n;i++)
    a[i]=new int [n];
}
matrix::~matrix()//деструктор - очистка
{
if(a)
 {
    delete []a;
 }
}

void matrix::input()//Ввод матрицы
{
   int i, j;
   for(i=0;i<n;i++)
   for(j=0;j<n;j++)
 {
    cout<<"a["<<i<<"]["<<j<<"]: ";
    cin>>a[i][j];
}
  }

  void matrix::output()//Печать матрицы для наглядности
  {
    int i, j;
cout<<endl;
cout<<"\n Исследуемая матрица:\n";
    for(i=0;i<n;i++) 
        for(j=0;j<n;j++) {
            cout.width(5);
            cout<< a[i][j];
        }
    cout<<endl;
}

void matrix::max()// составление матрицы вектора
{
    int diag;
b=new int[2*n-1];
    for(diag=0; diag < 2*n-1; diag++) {
        int i = diag >= n-1 ? 0 : n - diag - 1;
        int j = diag >= n-1 ? diag - (n - 1) : 0;
        b[diag] = a[i][j];
        for(int t=1; t < n; t++)
            if(i+t < n && j+t < n && a[i+t][j+t] > b[diag])
                b[diag] = a[i+t][j+t];
    }

cout<<"\nРезультатирующий вектор\n";
for (diag=0;diag<=((2*n)-1);diag++) cout<<b[diag]<<endl;
}
int main()
{
int n;
    SetConsoleOutputCP(1251);
cout<<"\nВведите размер матрицы: ";
    cin>>n;
    matrix obj(n);
    obj.input();
    obj.output();
    obj.max();
    return 0;
}
▲ 2

Это потому, что надо

b = new int[2 * n1 - 1];

И ещё вам совершенно ни к чему подключать windows.h.