Minimum aus Array bestimmen



  • Folgendes:

    void statistik (double gehalt[], int *mitarbeiterzahl) {
    double min=0;
    double index2=0;
    
    min=gehalt[i];	
    	for(i=0; i>*mitarbeiterzahl; i++){
    	if ( gehalt[i] <= min ) 
    	min =gehalt[i];
    	index = i;
    
    		}
    printf("Minimalgehalt :  %lf \n",min);
    printf("Mitarbeiter mit dem minimalen Gehalt: %lf \n", index+1);
    }
    

    soll den kleinsten Wert aus gehalt[i] ausgeben, tut es aber nicht, wieso?

    Der Maximalwert wird mit gleicher Formel und umgedrehten größer/kleiner Zeichen problemlos ausgegeben.



  • Ist diese Zeile:

    for(i=0; i>*mitarbeiterzahl; i++)
    

    nur ein Abtippfehler, oder hast du wirklich das >'-Zeichen gesetzt? Es sollte nämlich<' heissen.
    Ausserdem fehlt bei deinem if die Klammer.
    Besser (da schneller):

    double *d=gehalt+1, *index;
    for(i=*mitarbeiterzahl-1; i>0; --i, ++d) {
      if (*d <= min) {
        min = *d;
        index = d;
      }
    }
    
    printf("Minimalgehalt :  %lf \n", min);
    printf("Mitarbeiter mit dem minimalen Gehalt: %lf \n", index-gehalt+1);
    

    Prinzipiell sollte deine Implementierung nämlich funktionieren.



  • snoeky schrieb:

    Folgendes:

    void statistik (double gehalt[], int *mitarbeiterzahl) {
    double min=0;
    double index2=0;
    
    min=gehalt[i];	
    	for(i=0; i>*mitarbeiterzahl; i++){
    	if ( gehalt[i] <= min ) 
    	min =gehalt[i];
    	index = i;
    	
    		}
    printf("Minimalgehalt :  %lf \n",min);
    printf("Mitarbeiter mit dem minimalen Gehalt: %lf \n", index+1);
    }
    

    soll den kleinsten Wert aus gehalt[i] ausgeben, tut es aber nicht, wieso?

    Der Maximalwert wird mit gleicher Formel und umgedrehten größer/kleiner Zeichen problemlos ausgegeben.

    Du lieferst uncompilierbaren Code:
    Wo ist i definiert?
    Wo ist index definiert?
    %lf als Formatstring für double in printf ist undefiniert.
    Warum verwendest du <mitarbeiterzahl> als Zeiger?
    Wo wird index2 benutzt?
    Bisschen viel für die paar Zeilen Code, zumal du bei deiner vorigen Frage schon viele Antworten und Hinweise bekommen hast, die du ignorierst.



  • @mitarbeiter

    besten Dank, das hat mir schon weitergeholfen.
    hatte ">" falschrum, die Klammer vergessen und index hätte in index2 umbenannt werden müssen, das kommt wenn man seinen eigenen code kopiert und nicht anständig ändert 😉
    ausserdem musst ich vor der schleife i auf 0 setzen, danach liefs ohne Probleme 🙂

    so siehts richtig aus 🙂

    i=0;
    	min=gehalt[i];	
    	for(i=0; i<*mitarbeiterzahl; i++){
    	if ( gehalt[i] <= min ) {
    		min =gehalt[i];
    	index2 = i;
    	}
    		}
    	printf("Minimalgehalt :  %lf \n",min);
    	printf("Mitarbeiter mit dem minimalen Gehalt: %lf \n", index2+1);
    

Log in to reply