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.