Задать вопрос
NeoLogic
@NeoLogic

С++ Проблема с наследником, не работают методы. Задача по Матрице?

Описать тип-объект MATRIX (матрица произвольной размерности M*N) и его методы: ввод матрицы; вывод матрицы; определение минимального элемента среди отрицательных элементов матрицы. Описать тип и методы его потомка MATR (методы: определение наибольшего общего делителя элементов матрицы; определение максимального среди неповторяющихся элементов матрицы ).

#include "stdafx.h"
//#include <stdlib.h>
//#include <iomanip>
//#include <cstdlib>
#include <iostream>
using namespace std;

class Matrix {
public:
int m,n;
int a[100][100];
Matrix ( );// конструктор
~Matrix ( );// деструктор
void Enter ();
void Display ();
void Min();
};

Matrix:: Matrix ( )
{
cout << "Vvod v matrix \n";
cout << "Vvedite kolvo strok: ";
cin >> m;
cout << "Vvedite kolvo stolbcov: ";
cin >> n;
}

Matrix:: ~Matrix()
{

cout << "Deleted...\n";
}
void Matrix :: Enter ( )
{
  int i;
  int j;
  for (i=0; i<m; i++) 
  {
    for (j=0; j<n;j++) 
	{
	   cout << "Vvod chisel v matricu: " << "a["<<i<<"]["<<j<<"]:" ;
	   cin >> a[i][j];
	}
  }
   cout <<"\n";
};

void Matrix :: Display ()
{
  int i;
  int j;
  int l=0;
  for (i=0; i<m; i++)
  {
	for (j=0; j<n; j++)
	{
	   cout << a[i][j] << " ";
	}
	cout << "\n";
  }
  cout << "\n";
  cin >> l;
};

void Matrix :: Min () 
{
	int i;
	int j;
	int min = a[0][0];
	for (i=0;i<m;i++)
	{
		for (j=0;j<n;j++)
		{
			if (a[i][j]<0)
			{
				if (a[i][j]<min)
				{
					min = a[i][j];
				}
			}
		}
	}
	if (min > 0)
	{cout << " Net otricatelbnblx 4isel";
	}
	else
	{
	cout << "Minimum= " << min;
	}
	cout << "\n";
}
int nod (int a, int b)  //нахождение НОД по алгоритму Евклида
{
    while (a && b)
        if (a >= b)
           a %= b;
        else
           b %= a;
    return a | b;
}

class Matr : public Matrix 
{
public:
void NOD ();
void Max ();
};


void Matr :: NOD()
{
	int i;
	int j;
	int q=a[0][0];
	for(i = 0; i<m; i++)
    {
	  for(j=0; j<n; j++)
	  {
        q=nod(q, a[i][j]);
	  }
    }
	cout << q;
	cout << "\n";
}
void Matr :: Max()
{
	int i;
	int j;
	int max = a[0][0];
	for (i=0;i<m;i++)
	{
		for (j=0;j<n;j++)
		{
			if (a[i][j]>max)
			{
				max = a[i][j]; // Нахождение максимального элемента матрицы
			}
		}
	}
	cout << max;
	cout << "\n";
}


int main ()
{
	Matrix ob;
	Matr ob2;
    ob.Enter ();
	ob.Display();
	ob.Min();
	ob2.NOD();
	ob2.Max();
	system("pause");
	return 0;
};


Ошибка возникает при выводе ответа ob2.NOD() и ob2.Max(). Не могу разобраться, помогите. Убираю наследника все работает, создаю обратно, все перестает работать.
  • Вопрос задан
  • 2506 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
ManWithBear
@ManWithBear
Swift Adept, Prague
Значения задаются только для ob, а ob2 остается не инициализированым.
Измените main на
int main () {
    Matr ob2;
    ob2.Enter ();
    ob2.Display();
    ob2.Min();
    ob2.NOD();
    ob2.Max();
    system("pause");
    return 0;
};
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NeoLogic
@NeoLogic Автор вопроса
Спасибо) Все заработало)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы