#include <stdlib.h>         /* Funktionen und expl. Zeiger   -   min & max */

/* 2. Implementieren Sie ein Programm für die Arbeit mit Matrizen
    (Elemente vom Typ float), das folgende Funktionen enthält und testet: 
* matinit, um die Elemente einer Matrix vom Format (z,s) mit nicht
  ganzzahligen Zufallszahlen zu belegen, 
* mataus, um die Elemente einer Matrix vom Format (z,s) auszugeben,
* mini, um die Indizes des kleinsten Elements einer Matrix zu
  ermitteln und zu liefern.
------------------------------------------------------------------------------
geg.: Matrix, max Anzahl Zeile + Spalten vorgeben als Konstante
ges.: Min und Max m.H. einer Fkt., d.h. mit Adressen für min und max arbeiten
Lsg.:  matinit: <- Anz. Zei+Spal. , Adr. der Matrix m. Zei-Länge
                -> Elemente der Matrix über Adresse m. Zei-Länge
       mataus:  <- Anz. Zei+Spal + Elemente der Matrix über deren Adresse
       minimax: <- Anz. Zei+ Sp, Adr der Matrix, 2 Adressen für zei-Min + sp-Min
                -> Werte von zei-Min + sp-Min, dazu 2 Adressen nötig
----------------------------------------------------------------------------- */

void matinit( int z, int s, float x[][20])   
                /* call by reference, Anfangsadresse des Feldes wird kopiert.*/                  
{  int i, j;
   srand(time(0));                      /* initialisiert den Zufallsgenerator */
   for( i=0; i<z; i++)
    for( j=0; j<s; j++) x[i][j]= rand()/3276.7;
}

void mataus( int z, int s, float x[][20] )
{  int i, j;
   for( i=0; i<z; i++)
   { for( j=0; j<s; j++) printf("%8.4f", x[i][j]);
     printf("\n");  
   }
}

void mini( int z, int s, float x[][20], int * zmin, int * smin )
{  int i, j;
   *zmin= *smin= 0;
   
   for( i=0; i<z; i++)
     for( j=0; j<s; j++) 
       if( x[i][j]< x[*zmin][*smin]) { *zmin=i; *smin= j; }

}

int main()
{  float a[20][20];  int zm, sm;

   matinit( 5, 10, a);    mataus( 5, 10, a);
   
   mini( 5, 10, a, &zm, &sm);
   
   printf("\n minimum= %8.4f, bei a[%i,%i]\n\n", a[zm][sm],zm, sm);
   
   system("Pause");   return 0;
}/*---------------------------------------------------------------------------*/
