Zahlen aus Array sortieren



  • Bis du dir sicher, daß dein Code so aussieht?

    #include <stdio.h> 
    #include <string.h> 
    #include <math.h> 
    
    int main() 
    { 
        int zahlen[10]; 
        int i; 
        int max=0; 
        int w=0; 
        int z; 
    
        for(i=0; i<5; i++) 
        { 
            scanf("%i",&zahlen[i]); 
        } 
    
        for( z=0; z<5; z++) 
        { 
            for( i=0; i<5; i++) 
            { 
                if(zahlen[i]>zahlen[i+1]) 
                { 
                    w=zahlen[i]; 
                    zahlen[i]=zahlen[i+1]; 
                    zahlen[i+1]=w;        
                } 
            } 
    
        } 
        for (i=0; i<5; i++) printf("%i", zahlen[i]); 
    
    }
    

    Wenn nicht, dann schreibe ihn so, denn das ist DEIN Code, nur mit der äußeren Schleife mit z.

    Gruß,
    DC



  • Hat noch wer einen Tipp? 😞



  • Ja, gib deinen Code so ein, wie ich es in meinem vorherigen Post bereits sagte und schau was er macht.

    #include <stdio.h> 
    #include <string.h> 
    #include <math.h> 
    
    int main() 
    { 
        int zahlen[10]; 
        int i; 
        int max=0; 
        int w=0; 
        int z; 
    
        for(i=0; i<5; i++) 
        { 
            scanf("%i",&zahlen[i]); 
        } 
    
        for( z=0; z<5; z++) 
        { 
            for( i=0; i<5; i++) 
            { 
                if(zahlen[i]>zahlen[i+1]) 
                { 
                    w=zahlen[i]; 
                    zahlen[i]=zahlen[i+1]; 
                    zahlen[i+1]=w;         
                } 
            } 
    
        } 
        for (i=0; i<5; i++) printf("%i", zahlen[i]); 
    
    }
    

    ^^ Diesen dort.. Exakt diesen Code. Nur mit der äußeren Schleife unter Verwendung von z.
    Um es nochmals zu wiederhloen:

    for( z=0; z<5; z++)
    

    Das ist die äußere Schleife, und die ist nun mit z.

    Gruß,
    DC



  • Ja das habe ich getan. Es funktioniert nicht. Ich habe genau deinen Code eingefügt. Unten ein Link, wo ich einen Screenshot hochgeladen habe...
    Ich wieß leider auch nicht wo der Fehler ist

    http://img10.imageshack.us/img10/5314/unbenanntro.png



  • int zahlen[10]; 
    
    // wenn man 5 Werte eingibt, wenn das Array 10 beinhalten kann ...
    for(i=0; i<5; i++)
    {
        scanf("%i",&zahlen[i]);
    }
    
    // ... was kann dann bei Wert i+1 im letzten Durchlauf wohl drin stehen:
    if(zahlen[i]>zahlen[i+1])
    {
    

    //Edit deine Ausgabe mal mit Zeilenumbrüchen getrennt
    -858993460
    3
    4
    5
    6

    > 9 fällt weg, weil du nur 5 Werte ausgibst und 9 der Größte ist



  • BasicMan01 schrieb:

    int zahlen[10]; 
    
    // wenn man 5 Werte eingibt, wenn das Array 10 beinhalten kann ...
    for(i=0; i<5; i++)
    {
        scanf("%i",&zahlen[i]);
    }
    
    // ... was kann dann bei Wert i+1 im letzten Durchlauf wohl drin stehen:
    if(zahlen[i]>zahlen[i+1])
    {
    

    Okay das Erste macht sinn, war mein Fehler. Es hätte heißen müssen zahlen[5]. Aber das letzte kann ich dir nicht sagen. "was kann dann bei Wert i+1 im letzten Durchlauf drinnen stehen" Wieso die Frage? Im letzten Durchlauf müsste die letzte Zahl des Arrays am Ende stehen oder worauf möchtest du hinaus?

    Riesen dank nochmal an alle die fleißig helfen!
    Hier mein aktueller Code:

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    int main()
    {
        int zahlen[5];
        int i;
        int max=0;
        int w=0;
        int z;
    
        for(i=0; i<5; i++)
        {
            scanf("%i",&zahlen[i]);
        }
    
        for( z=0; z<5; z++)
        {
            for( i=0; i<5; i++)
            {
                if(zahlen[i]>zahlen[i+1])
                {
                    w=zahlen[i];
                    zahlen[i]=zahlen[i+1];
                    zahlen[i+1]=w;        
                }
            }
    
        }
        for (i=0; i<5; i++) printf("%i", zahlen[i]);
    
    }
    

    EDIT:

    Korrekt. Wenn ich bei der Ausgabe 6 zahlen ausgeben lasse kommt die 9 mit raus, aber wieso komtm sie nur wenn ich 6 zahlen ausgeben lasse bwohl nur 5 im array sind und woher kommt die Sehr kleine Zahl davor?



  • Dein Array nach der Eingabe

    0 > 9
    1 > 5
    2 > 4
    3 > 3
    4 > 8
    5 > irgendwelcher Speicher mit irgendwelchen Werten oder sonst was

    i < 5 bedeutet, i wird maximal Wert 4 erreichen (in deinem Array der letzte Wert)
    i+1 wäre 5 und der zeigt nach Lampukistan



  • i läuft in der inneren Schleife zu weit. Wenn du zahlen[i] und zahlen[i + 1] bearbeitest, kommt dabei Blödsinn raus, sobald zahlen[i] der letzte verfügbare Wert ist.



  • BasicMan01 will damit sagen, daß, wenn du ein Array mit 10 Werten hast dann kannes passieren, je nach Compiler, daß wenn du nur 5 initialisierst im 6.Araay irgendwelcher Mist drin steht.

    Ist eigentlich auch keinb Problem.
    Das problem liegt hier:

    for( i=0; i<5; i++)
            {
                if(zahlen[i]>zahlen[i+1])
    

    wenn i von 0 bis 4 geht, dann zeigt zahlen[i+1] im letzten Durchlauf auf Array Nr.5. Das ist aber wenn man Pech aht, mit Mist gefüllt und wird aber mit in die Abfrage einbezogen und somit mitsortiert.

    Nun könnte man die Schleife dahingehen verändern indem man einfach nur bis Araay 3 zählt und damit nicht aufs 5.Array-Feld zeigt.

    for( i=0; i<4; i++)
    

    -edit-- Ohh da waren aber die andreren wieder fix. Dann spare ich mir hier auch die Rechtschreibkorrektur und lasse den Post so.

    Gruß,
    DC



  • Habe den Fehler gefunden. Habe ihn mit einem Kommentar mackiert. Ist auch ganz logisch im nachhinein. Die Schleife baut den Array nur 4 mal um und nicht 5 mal.

    Ich danke euch allen wirklich RIESIG !!!

    Ihr habt mir noch einmal deutlich gezeigt wo meine schwächen in C liegen. Falls noch einmal irgendwo Fragen auftreten weiß ich ja wo ich mich melden kann. Ist echt ein super Forum hier! 🙂

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    
    int main()
    {
        int zahlen[5];
        int i;
        int max=0;
        int w=0;
        int z;
    
        for(i=0; i<5; i++)
        {
            scanf("%i",&zahlen[i]);
        }
    
        for( z=0; z<5; z++)
        {
            for( i=0; i<4; i++) // Hier war der Fehler. Der Wert darf nur bis 4 laufen.
            {
                if(zahlen[i]>zahlen[i+1])
                {
                    w=zahlen[i];
                    zahlen[i]=zahlen[i+1];
                    zahlen[i+1]=w;        
                }
            }
    
        }
        for (i=0; i<5; i++) printf("%i", zahlen[i]);
    
    }
    


  • Und das Schöne ist, daß du dir das Ganze ziemlich selbst erarbeitet hast.
    Dann sind auch die Erfolgserlebnisse viel größer und es macht viel mehr Spaß..

    Mach weiter so..

    Gruß,
    DC



  • Don Carsto schrieb:

    Und das Schöne ist, daß du dir das Ganze ziemlich selbst erarbeitet hast.
    Dann sind auch die Erfolgserlebnisse viel größer und es macht viel mehr Spaß..

    Mach weiter so..

    Gruß,
    DC

    Korrekt!

    Ich hatte vorher auch schon die Variable Z genutzt. Da ich aber den Fehler mit dem einen durchlauf zu viel hatte, habe ich es wieder in i umgewandelt. Ich hatte die Lösung also quasi schon 🙂


Anmelden zum Antworten