Скажите, пожалуйста, почему программа не компилируется?
Необходимо найти максимум в матрице.
// T02(01).cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <math.h>
class MASS
{private:
int a[50][50];
public:
int n;int m;
int i,j;
MASS();
void getdata()
{cin >> n;
cin >> m;
};
void getmatrix()
{for (i=1;i<=n;i++)
{for (j=1;j<=m;j++)
{cin >> a[i][j];};};
};
void sort(int max, int i,int j,int n1,int m1)
{max=a[1][1];n1=n;m1=m;
for (i=1;i<=n1;i++)
{for (j=1;j<=m1;j++)
{if (a[i][j]>max){max=a[i][j];};
};
};
};
void putdata()
{cout << max;}
};
int _tmain(int argc, _TCHAR* argv[])
{MASS a;
MASS n;MASS m;MASS max;
cout << "Enter n,m" << "\n";
n.getdata();
m.getdata();
cout << "Enter matrix" << "\n";
a.getmatrix();
max.putdata();
return 0;
}
надо создать свой класс "матрица", в котором найти максимум
Вообще у меня задание: дать определение класса, определить все необходимые методы и получить решение задачи(поиск максимума в матрице) в соответствии с принципом инкапсуляции
Ну, вот ... А теперь посмотри, что ты делаешь... Вроде бы описан класс MASS, который и должен представлять эту самую матрицу, но почему-то m и n (которые уже есть внутри класса, и вроде бы задают размеры матрицы), в основной программе объявлены опять же как MASS... Не надо этого делать...
Ты уже определила их внутри класса, на этом и основан принцип инкапсуляции - класс MASS должен скрыть от пользователя детали реализации. В идеале - все, что пользователь должен сделать - это:
...
int main() {
MASS mx(3, 3); // <--- Ну, или ввести размерность с клавиатуры
cin >> mx;
cout << "Максимум = " << mx.get_max() << endl;
return 0;
}
Спасибо большое!
Я ещё только начала изучать ООП, так что мне пока не всё понятно. Постараюсь переделать программу...
Ещё раз спасибо.
Я переделала, но что-то всё равно не так:
// T02(01).cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <math.h>
class MASS
{private:
int a[50][50];
public:
int i,j,max;
MASS();
void getmatrix()
{for (i=0;i<=3;i++)
{for (j=0;j<=3;j++)
{cin >> a[i][j];};};
};
void get_max()
{max=a[0][0];
for (i=0;i<=3;i++)
{for (j=0;j<=3;j++)
{if (a[i][j]>max){max=a[i][j];};
};
};
cout << max;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
MASS mx(3, 3);
cin >> mx.getmatrix();
cout << "Максимум = " << mx.get_max() << endl;
return 0;
}
Вот так определяем сам класс:
class Matrix {
friend istream& operator >> (istream&, Matrix&);
private:
int a[50][50];
int m, n;
public:
Matrix(int size_m, int size_n): m(size_m), n(size_n) {
}
int get_max() {
int max_val = a[0][0];
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(max_val < a[i][j]) max_val = a[i][j];
}
}
return max_val;
}
};
// Это - чтобы ввод осуществлялся, как и для любого встроенного типа, через >>
istream& operator >> (istream &is, Matrix &mx) {
for(int i = 0; i < mx.n; i++) {
for(int j = 0; j < mx.m; j++) {
cin >> mx.a[i][j];
}
}
return is;
}
...(MSVC не держу, проверял на другом компиляторе, поэтому не привожу код полностью...)
Matrix mx(3, 3);
cin >> mx;
cout << "max = " << mx.get_max() << endl;
return 0;
...
Большое спасибо!
А если надо построить иерархию классов и показать простое наследование для этой же задачи, то второй класс - это класс чего?
У меня получилось вот так(т.е. я хотела показать иерархию классов и простое наследование) Я хоть в правильном направлении двигаюсь или это совсем бред написан?
//9_4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdlib.h>
#include <math.h>
class Matrix {
friend istream& operator >> (istream&, Matrix&);
public:
int a[50][50];
int m, n;
Matrix(int size_m, int size_n): m(size_m), n(size_n) {
}
int get_max() {
int max_val = a[0][0];
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(max_val < a[i][j]) max_val = a[i][j];
}
}
return max_val;
}
};
class Matrix01:public Matrix
{int b[3][3];int m, n;
Matrix01(int size_m, int size_n): m(size_m), n(size_n) {}
istream& operator >> (istream &is, Matrix01 &mx) {
for(int i = 0; i < mx.n; i++) {
for(int j = 0; j < mx.m; j++) {
cin >> mx.a[i][j];}}
return is;
};
Matrix::get_max();
};
int _tmain(int argc, _TCHAR* argv[])
{
Matrix01 mx(3, 3);
cin >> mx;
cout << "max = " << mx.get_max() << endl;
return 0;
}
...
class Matrix01: public Matrix {
public:
Matrix01(int size_m, int size_n): Matrix(size_m, size_n) {
}
};
...
Спасибо большое!
Мне ещё учиться и учиться...