#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>

class matrice {
		float **p;
		int r,c;
		public:
		matrice (int righe, int colonne);
		void riempi (float,int,int);
		void show ();
		void densitamax (int,int);
		};

matrice::matrice (int righe, int colonne) {
				  int i, j;
				  r=righe;
				  c=colonne;
				  p=new float* [r];
				  for (i=1;i<=r;i++)
				  {
					p[i]=new float [c];
					for(j=1;j<=c;j++)
					p[i][j]=0;
					};
				  };

void matrice::riempi (float n,int k,int l){
					if ((!n)||(!k)||(!l)) exit (1);
					p[k][l]=n;
				  };

void matrice::show () {
				  int i,j;
				  for (i=1;i<=r;i++) {
				  cout<<"\n";
					for (j=1;j<=c;j++)
					cout<<p[i][j]<<" ";
					}
					cout<<endl<<endl;
				  };

void matrice::densitamax (int d, int e) {
				  float somma;
				  float dmedia;
				  float max=0;
				  int rmax,cmax;
				  int l,k;
					for (int i=1; i<=(r-d+1); i++)
					 for (int j=1; j<=(c-e+1); j++) {
						 somma=0;
					  for (k=i; k<=(i+d-1); k++)
						for (l=j; l<=(j+e-1); l++) {
					 somma +=p[k][l];
					 };
					dmedia = somma/(d*e);
					if (dmedia>max) {
					max=dmedia;
					rmax=(k-d-1); //"l'angolo" è dato dal punto a cui è arrivato
					cmax=(l-e-1);}//il contatore - la dim della matrice - 1
					};            //(dato ke voglio lo spigolo superiore)
					cout<<"La media + alta è: "<<max<<endl;
					cout<<"Ottenuta nelle coordinate: "<<rmax<<" "<<cmax<<endl;
				  };


int main(int argc, char *argv[]) {
	  if (argc!=2) {cout<<"Hai dimenticato di inserire il parametro nomefile da dos."<<endl;
	  }
	  int rig, col;
	  FILE* f;
	  if (!(f=fopen(argv[1], "r"))) {exit(1);}
	  fscanf (f, "%d %d" , &rig, &col);
	  cout <<"Dimensioni matrice: "<<rig<<"x"<<col<<endl; 
	  matrice m(rig,col);                                 
	  float buf;
	  while (!feof(f)){
	  for (int k=1; k<=rig; k++)
			 for (int l=1; l<=col; l++) {
		 fscanf (f, "%f", &buf);
		  m.riempi(buf,k,l);
		 };
		 };
		cout<<"La matrice contenuta nel file è: "<< endl;
		m.show();
		cout <<"Inserisci le dimensioni delle sottomatrici di cui calcolare la media"<<endl;
		cout<<"(righe,colonne): "<<endl;
		int a,b;
		cin >>a>>b;
		cout<<"Analisi sottomatrici "<<a<<"x"<<b<<" :"<<endl;
		m.densitamax (a,b);
		cout<<endl<<"Fine programma."<<endl;
		return 0;
		};