Maximum/Minimum/Mittelwert eines Arrays



  • Hallo,

    vielleicht könnt ihr mir bei einer Aufgabe behilflich sein:

    "
    Geben Sie ein Array int[10] mit 10 beliebigen natürlichen Zahlen "hardcoded" in ein Programm
    ein. Ermitteln Sie von diesen Zahlen:

    -den Mittelwert
    -die größte Zahl und deren Position im Array (Index)
    -die kleinste Zahl und deren Position im Array (Index)

    in einer einzigen Schleife."

    Der Mittelwert ist ja klar, aber da ich das alles in einer Schleife machen soll und dann noch die Indexe angeben soll, komm ich nicht wirklich weiter.

    Ich hätte das Array einfach per Quicksort oder Bubblesort sortiert und dann das erste bzw. letzte Element ausgegeben und schon hätte ich das größte und das kleinste Element.

    Wie die Schleife hier allerdings aussehen muss,da hab ich keinen Plan.

    Danke



  • Es doch kein Problem, sich einfach jedes Element in der Schleife anzuschaun:
    Ist es größer als alle bisherigen speicherst du den Wert und den Index.
    Ist es kleiner als alle bisherigen speicherst du den Wert und den Index.
    Für den Mittelwert summierst du alle Werte auf.

    Dann hast du nach der Schleife alles was du brauchst.



  • lagalopex schrieb:

    Es doch kein Problem, sich einfach jedes Element in der Schleife anzuschaun:
    Ist es größer als alle bisherigen speicherst du den Wert und den Index.
    Ist es kleiner als alle bisherigen speicherst du den Wert und den Index.

    Das ist mir auch klar, nur bekomm ich den dazugehörigen code nicht zu laufen.

    ich hab es mit zwei verschachtelten for-schleifer versucht, klappt aber nicht



  • hier mal mein Bsp.

    int arr[10]={25,15,2000,0,6,32,14,9,785,1};
       int i,j;
       int max;
    
       for(i=0; i<=9; i++)
       {
           for(j=0; j<=9; j++)
           {
               if(arr[j]>arr[i])
               {
                   max=arr[j];
               }
           }
       }
    

    als Maximalwert bekomme ich 785 und nicht 2000



  • Wenn du mit max vergleichst brauchst du nur eine Schleife.

    Der Initialwert von max sollte nur geschickt gewählt werden.



  • AAAAAAHH

    danke, da hab ich wohl um zu viel Ecken gedacht:

    so klappts:

    int arr[10]={25,15,2000,0,6999,32,14,9,7,1};
       int i,j;
       int max=-1;
    
        for(i=0; i<=9; i++)
        {
            if(arr[i]>max)
            {
                max=arr[i];
            }
        }
    


  • Der Initialwert für max ist aber nicht geschickt gewählt.

    Du könntest dir aus limits.h den Minimalwert für int holen: INT_MIN (siehe http://www.cplusplus.com/reference/climits/ )
    Da musst du aber jedesmal über den Datentyp von max nachdenken.

    Es gibt aber noch bessere Werte: Die, die schon im Array drin stehen.
    Z.B. arr[0]


Log in to reply