Minimum eines Arrays wird nicht ausgegeben



  • Hallo zusammen,

    ich habe die Aufgabe, ein gegebes Array aus float Zahlen
    mittels variablen Zeiger zu untersuchen, welches Element aus dem
    Array das Kleinste ist und dieses auszugeben.

    Dazu habe ich das folgende Programm erstellt:

    #include <stdio.h>
    #include <stdlib.h>
    
    #define ANZ 10 
    
    float minimum (float feld[]);
    float maximum (float feld[]);
    float mittelwert (float feld[]);
    void ausgabe_vektor(float feld[]);
    
    float minimum (float feld[])
    {
      float *zeig;
      float min;
      zeig=&feld[0];
    
      do
      {
        if (*(zeig+1) < *(zeig))
        {
          min=*(zeig+1);
          zeig++;
        }  
      } while (*(zeig+1));
      return(min);    
    }
    
    void ausgabe_vektor(float feld[])
    {
      int i=0;
      for (i=0; i<ANZ; i++)
        printf("%.3f\n",feld[i]);
    }
    
    int main(int argc, char *argv[])
    {
      float vektor[ANZ]={1,5,2,3,7,66,123,44,5,66.6};
      system("cls");
      printf("Vektor: ");
      ausgabe_vektor(vektor);
      printf("\nMinimum: %.3f",minimum(vektor));
      printf("\n\n");
      system("PAUSE");	
      return 0;
    }
    

    Der Compiler meldet keinen Fehler aber das Programm gibt
    nur das Array und nicht den Minimalwert aus und hängt sich auf.

    Hat jenmand ne Ahnung warum?

    Grüße
    Bimbambino



  • hi!
    das liegt an deiner abbruchbedingung, die keine ist:

    while (*(zeig+1));
    

    aber auch wenn du deine zeig-variable inkremeniterst, wird es zu
    undefiniertem verhalten führen, weil ein float feld nicht null-terminiert ist.
    es findet auch keine überprüfung des compilers auf überschreitung der index-grenzen statt.

    es ist also erforderlich, das deine minimum-funktion irgendwie über die anzahl
    der übergebenen float-elemente informiert wird.
    z.b. so:

    float minimum ( float* feld, unsigned n )
    {
      float min = *feld; int i;
    
      for ( i=1; i<n; i++ )
    	if( feld[i]<min ) min = feld[i];
    
      return min;    
    }
    
    int main(int argc, char *argv[])
    {
      float vektor[] = { 1,5,2,3,7,66,-1,123,44,5,66.6};
      printf("Minimum: %.3f", minimum(vektor, sizeof(vektor)/sizeof(float) ));
      return 0;
    }
    

    🙂



  • Super besten Dank auch fuer den Tipp:

    sizeof(vektor)/sizeof(float)

    Grüße
    Bimbambino



  • Besser wäre sizeof(vector)/sizeof(*vektor) . Denn wenn du vector mal von float auf double änderst, hättest du entweder einen Bug, oder unnötigen Aufwand.


Anmelden zum Antworten