C - Programmierung: Zweitgrößte Zahl eines Feldes zurückgeben

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C - Programmierung: Zweitgrößte Zahl eines Feldes zurückgeben

    Hallo!!

    hier ist noch so ne verflixte aufgabe... Den größten Wert eines Feldes kann man zwar leicht bestimmen, aber wie mache ich das, wenn ich den zweitgrößten Wert suche?

    Aufgabe: Schreiben Sie eine Funktion max2(). Der Funktion max2() wird ein Feld data vom Datentyp int und die Größe size des felds übergeben.
    Ist size > 2, dann soll max2() den zweitgrößten Wert aller Elemente des übergebenen Felds data zurückgeben; andernfalls soll max2() den Wert 0 zurückgeben. Gehen Sie davon aus, dass alle Elemente im Feld unterschiedliche Werte haben und positiv sind. Das Feld data soll nicht verändert werden.

    Vielen Dank im Voraus für Eure Antworten.

    Gruß,
    belomor
  • Hier ist z.B. eine Lösung, bei der das Feld sortiert wird und dann der vorletzte (und zweitgrößte) Wert ausgegeben wird.
    Allerdings steht ja in der Aufgabe, man solle das Feld nicht verändern...

    Hat jemand einen Tipp???

    Quellcode

    1. #include <stdio.h>
    2. #define FELD_SIZE 100
    3. int leseInteger(char* string);
    4. int data[FELD_SIZE];
    5. void max2(int *data, int n);
    6. int main(void)
    7. {
    8. int n = leseInteger("Feldgröße eingeben: ");
    9. int i;
    10. if(n > FELD_SIZE){
    11. printf("ERROR!!! Feldgröße ist limitiert auf %d!\n\n", FELD_SIZE);
    12. return 1;
    13. }
    14. for(i=0; i < n; i++){
    15. data[i] = leseInteger("Wert eingeben:");
    16. if(data[i] < 0){
    17. return 1;
    18. }
    19. }
    20. max2(&data[0], n);
    21. for(i=0; i < n; i++) {
    22. printf(" %d", data[i]);
    23. }
    24. printf("\n\nZweitgrößte Zahl ist: %d\n\n", data[n-2]);
    25. return 0;
    26. }
    27. void max2(int *data, int n)
    28. {
    29. int i, j, min, tmp;
    30. for(i=0; i < n-1; i++) {
    31. min = i;
    32. for(j=i+1; j < n; j++) {
    33. if(data[j] < data[min]) min = j;
    34. }
    35. tmp = data[min];
    36. data[min] = data[i];
    37. data[i] = tmp;
    38. }
    39. }
    Alles anzeigen
  • Ist doch doppelte Arbeit. Wenn du eine Schleife über das gesamte Array gemacht hast, kennst du das größte und auch das zweitgrößte Element.

    Quellcode

    1. int max2(int *data, int n)
    2. {
    3. int i, j, max, max_2;
    4. //Initialisierung
    5. max= INT_MIN;
    6. max_2 = INT_MIN;
    7. for(i=0; i < n-1; i++) {
    8. if (max < data[i]) {
    9. max_2 = max;
    10. max=data[i];
    11. } else if (max_2 < data[i]) {
    12. max_2 = data[i];
    13. }
    14. }
    15. return max_2;
    16. }
    Alles anzeigen


    Achja, es dürfen keine doppelten Zahlen in dem Feld corkommen, sonst ist das Ergebniss unter Umständen falsch - das kriegste aber selbst hin.
    ~ mfg SeBa

    Ich beantworte keine PMs zu Computer-/Programmierproblemen. Bitte wendet euch an das entsprechende Forum.

    [Blockierte Grafik: http://i.creativecommons.org/l/by-sa/3.0/80x15.png]