Verfasst: 12.11.2006, 18:48
Ok bevor ich das hier poste soll halt jedem klar sein der sich das reinzieht das es nur zur hilf gedacht ist und nicht zum kopieren da es da schon einige probleme gegeben hat und ich sicher nicht draufzahlen will nur weil ich hilfsbereit bin:)
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);