Дана матрица а[4][5],надо найти строку с максимальным средним арифметическим элементов и сформировать матрицу D,исключив из А найденную строку
матрица:
Цитата:
1.2 2.1 .3 -8.4 6
5.2 -1.6 7.2 11.2 3.4
4.2 15.1 6.8 -7.3 10.6
-5.9 18.4 9.2 -1.6 -2.1
|
Код:
#include "stdafx.h"
#include <iostream>
#include <cstdlib>
#include <cstddef>
#include <iomanip>
#include <cmath>
#include <fstream>
using namespace std;
class array1
{double* b;
int n;
public:
array1(int nn);
array1();
array1(const array1& ob);
~array1();
int getn();
double& getb(int n);
void set1(int i,double v);
};
class array2
{double** a;
int n,m;
public:
array2(int nn,int nm);
array2();
array2(const array2& ob);
~array2();
int getn();
int getm();
double& geta(int k,int l);
void set(int i,int j,double v);
void inputm();
void outputm();
double array2::func();
void outputv();
};
//конструктор array1
array1::array1(int nn)
{n=nn;
b=new double [n];
if (b==NULL){cout<<"\n нет оп ";
exit(1);
}
}
//конструктор по умолчанию array1
array1::array1()
{
}
//деструктор array1
array1::~array1()
{
}
//конструктор копий array1
array1::array1(const array1 &ob)
{n=ob.n;
b=new double[n];
if (b==NULL){cout<<"\n нет оп " ;
exit(1);
}
for (int i=0;i<n;i++)
b=ob.b;
}
//методы доступа array1
int array1::getn()
{return n;
}
double& array1::getb(int r)
{return b[r];
}
void array1::set1(int i,double v)
{b[i]=v;
}
//конструктор array2
array2::array2(int nn,int nm)
{ n=nn;
m=nm;
a=new double* [n];
if(a==NULL) {cout<<"\n НеТ ОП";exit(1); }
for(int i=0;i<n;i++)
{a[i]=new double [m];
if(a[i]==NULL) {cout<<"\n НеТ ОП";exit(1);}
}
}
//конструктор по умолчанию array2
array2::array2()
{
}
//конструктор копий array2
array2::array2(const array2 &ob)
{n=ob.n;
m=ob.m;
a=new double* [n];
if(a==NULL) {cout<<"\n НеТ ОП";
exit(1);
}
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
a[i][j]=ob.a[i][j];
}
//деструктор array2
array2::~array2()
{//delete[] a;
}
//методы доступа array2
int array2::getn()
{return n;
}
int array2::getm()
{return m;
}
double& array2::geta(int k,int l)
{return a[k][l];
}
void array2::set(int i,int j,double v)
{a[i][j]=v;
}
void array2::inputm()
{cout<<"\n Введите матрицу";
for (int i=0;i<n;i++)
{
cout<<"\n Введите "<<i+1<<"-ую строку: ";
for(int j=0;j<m;j++)
cin>>a[i][j];
}
}
void array2::outputm()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
cout<<setw(8)<<a[i][j];
}
}
double array2::func()
{
double SA;
int i,j,k;
double** b;
b=new double* [n];
if(b==NULL) {cout<<"\n Не хватает ОП";exit(1);}
for(i=0;i<n;i++)
{
b[i]=new double[m];
if(b[i]==NULL) {cout<<"\n Не хватает ОП";exit(1);}
}
double Sravn=0;
for(i=0;i<n;i++)
{
SA=0;
for(j=0;j<m;j++)
SA+=a[i][j]/m;
if(SA>Sravn) {Sravn=SA;k=i;}
}
cout<<"\n Макс. среднее арифметическое: "<<Sravn;
cout<<"\n Строка с макс. средним арифметическим: "<<k+1;
for(i=0;i<k;i++)
for(int j=0;j<m;j++)
b[i][j]=a[i][j];
for(i=k;i<n-1;i++)
for(j=0;j<m;j++)
b[i][j]=a[i+1][j];
}
// Функция для удаления строки
array2 udal (array2& x, int k)
{// Объявляем и инициализируем
int i,j;
array2 y(x.getn()-1, x.getm());
for (i=0; i<k; i++)
{for (j=0; j<x.getm(); j++)
{y.geta(i,j)=x.geta(i,j);
}
}
for (i=k; i<x.getn()-1; i++)
{for (j=0; j<x.getm(); j++)
{y.geta(i,j)=x.geta(i+1,j);
}
}
return y;
}
void main()
{setlocale(LC_ALL,"Russian");
int n,m;
cout<<"\n Введите кол-во строк матрицы: ";
cin>>n;
cout<<"\n Введите кол-во столбцов матрицы: ";
cin>>m;
array2 f(n,m);
f.inputm();
f.func();
cout<<"\n Изменённая матрица: \n";
f.outputm();
cout<<endl;
system("pause");
}
не удаляется строка,и конечная матрица выводится в строку...