Code: Alles auswählen
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct point {int row,col;};
struct MMinMax{ struct point cr_min;
double vmin;
struct point cr_max;
double vmax;
};
double **Read(char *FileName,struct point *len_cr)
{
int i,j,r,c;
double **pointer;
FILE *infile;
infile=fopen(FileName,"r");
if(infile==NULL)
{
printf("Fehler");
perror("reason");
exit(1);
}
fscanf(infile,"%i,%i",&r,&c);
(*len_cr).row=r; /* len_cr->row=r;*/
len_cr->col=c; /* (*len_cr).col=c; */
pointer=(double**)malloc(r*sizeof(double*));
for(i=0;i<r;i++)
{
pointer[i]=(double*)malloc(c*sizeof(double));
}
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
{
fscanf(infile,"%lf",&(pointer[i][j]));
}
}
return pointer;
}
void Print(double ** pM, struct point len_cr)
{
int i,j;
double k=0,l=0;
k=len_cr.row;
l=len_cr.col;
for(i=0;i<k;i++)
{printf("\n\n");
for(j=0;j<l;j++)
{
printf("%13.lf",pM[i][j]);
}
}
printf("\n\n");
}
void SearchMinMax(double **pM, struct point len_cr, struct MMinMax *mm)
{
int i,j;
double k=0,l=0;
mm->vmax=pM[0][0];
mm->vmin=pM[0][0];
mm->cr_min.row=1;
mm->cr_min.col=1;
mm->cr_max.row=1;
mm->cr_max.col=1;
k=len_cr.row;
l=len_cr.col;
for(i=0;i<k;i++)
{
for(j=0;j<l;j++)
{
if(mm->vmax<pM[i][j])
{
mm->vmax=pM[i][j];
mm->cr_min.row=i+1;
mm->cr_min.col=j+1;
}
}
}
for(i=0;i<k;i++)
{
for(j=0;j<l;j++)
{
if(mm->vmin>pM[i][j])
{
mm->vmin=pM[i][j];
mm->cr_max.row=i+1;
mm->cr_max.col=j+1;
}
}
}
}
int main(int argc, char **argv)
{/* Groesse der Matrix */
struct point length;
/* Min und Max */
struct MMinMax mami;
/* Zeiger fuer Matrix */
double **m;
int z;
/* Pruefen der Anzahl derKommandozeilenparameter */
if (argc != 2)
{printf("Usage: %s filename\n",argv[0]);
exit(1);
}
/* Einlesen der Matrix
Filename ist 1. Kommandozeilenparameter
Speicher wird in Read reseviert */
m=Read(argv[1],&length);
/* Pruefen ob gueltiger Zeiger */
if (m==NULL)
{printf("Error reading %s",argv[1]);
exit(1);
}
/* Ausgeben der Groesse (durch Parameter length uebergeben)
der Matrix */
printf("%d lines, %d columns\n",length.row,length.col);
/* Ausgeben der Matrix */
Print(m,length);
/* Suche von Min und Max
Uebergabe des Ergebnisses durch struct MMinMAx mami */
SearchMinMax(m,length,&mami);
/* Ausgeben der Werte */
printf("Min: %f (%d,%d), Max: %f (%d,%d)\n",
mami.vmin,mami.cr_max.row,mami.cr_max.col,
mami.vmax,mami.cr_min.row,mami.cr_min.col );
/* Freigabe des zuvor in Read(..) reservierten Speichers */
for (z=0;z<length.row;z++)
free(m[z]);
free(m);
exit(0);