Anfängerfrage - Minimum in Array



  • int minimum = a[0];
    int maximum = a[0];

    Hier sollten Anfangswerte für das Minimum und Maximum gesetzt werden, die dann jeweils mit dem nächsten erzeugten Wert verglichen werden:

    if ( a[n] < minimum ) minimum = a[n];
    if ( a[n] > maximum ) maximum = a[n];

    Beim Maximum klappt das, aber das Minimum wird falsch ausgegeben ( 1 statt 3):

    007 406 105 487 113 052 490 057 498 388
    050 439 080 421 131 253 129 309 208 028
    341 260 339 411 194 425 029 226 283 100
    299 036 006 150 269 366 202 259 169 199
    393 219 384 473 386 262 473 014 317 180
    290 157 187 128 068 381 299 344 106 328
    444 405 365 450 302 380 061 003 385 230
    450 024 195 333 497 081 341 215 342 158
    142 378 315 329 005 129 456 305 473 061
    132 417 212 243 112 013 370 174 264 254

    Arithmetisches Mittel aller Feldelemente: 250.48
    Kleinster Wert der Feldelemente: 1
    Größter Wert der Feldelemente: 498



  • Mugglschoaß schrieb:

    int minimum = a[0];
    int maximum = a[0];

    Hier sollten Anfangswerte für das Minimum und Maximum gesetzt werden, die dann jeweils mit dem nächsten erzeugten Wert verglichen werden:

    Und welchen Wert haben minimum und maximum dann?



  • Mugglschoaß schrieb:

    Hier sollten Anfangswerte für das Minimum und Maximum gesetzt werden, die dann jeweils mit dem nächsten erzeugten Wert verglichen werden

    Die Idee ist ja gut, aber das solltest du erst machen, nachdem du das Array befüllt hast. Sonst steht wer weiß was in a[0].



  • Danke, hab jetzt zwei Schleifen gebaut, die erste befüllt die Felder, die zweite kümmert sich um min und max, wobei min = a[0] und max = a[0] erst vor der zweiten Schleif initialisiert werden --> klappt 🙂



  • int n = 100;
    int a[n];
    

    naja ...



  • Anfängerfehler 😃 Muss natürlich n=99 heißen und die Schleife bis <=n laufen.



  • Mugglschoaß schrieb:

    Anfängerfehler 😃 Muss natürlich n=99 heißen.

    Nein, muss es nicht.

    Edit:
    Auch nach deinem Edit ist das falsch, da du beim definieren vom Array die Anzahl der Element angibst.

    Aber du bist hier bei C++ und da gibt es (wie schon gesagt) std::vector



  • Ich dachte, wenn ich a[100] schreibe, erzeugt das a[0]...a[100}, also 101 Felder statt 100, deswegen a[99] und Schleife soll 100 mal durchlaufen, sprich i=0 bis i<=99.

    std::vector kenne ich "offiziell" noch nicht, deswegen will ich die Aufgabe ohne lösen.



  • Nein.

    Bei der Definition wird die Anzahl der Element angegeben.
    Da der Index immer bei 0 anfängt, hat das letzte Element einen Index, der Eins niedriger als die Anzahl ist.

    Darum läuft die Schleife auch von 0 bis < Anzahl, damit dort Anzahl steht.



  • OK, danke.



  • Es ist natürlich auch sehr sinnvoll, immer den Ausgangspost zu verändern. Da passen die Antworten so schön ...



  • Mugglschoaß schrieb:

    Anfängerfehler 😃 Muss natürlich n=99 heißen und die Schleife bis <=n laufen.

    ich meinte eher die variable Größe des Arrays in

    int n = 100;
    int a[n];
    

    Obwohl es Compiler gibt, die das akzeptieren, kann man damit gewaltig auf die Nase fallen, wenn die Array-Größe in die Nähe der Stackgröße kommt. In meinem System wäre das, wenn n in die Nähe von 2048*1024 kommt (8 MB = 2048*1024 ints). Sollte man sich vielleicht besser gar nicht erst angewöhnen.

    PS. Dieses Unterforum heißt "alle ISO-Standards" ...



  • Auch wenn du

    int a[100];
    

    schreibst, wird das Array auf dem Stack angelegt (sofern es nicht global oder static ist und das System einen Stack hat)



  • gegen int a[100] ist ja auch wenig einzuwenden


Anmelden zum Antworten