Array sortieren von niedrig nach hoch



  • Hallo, ich soll ein Programm schreiben, dass 10 Zahlen von niedrig nach hoch sortiert;

    Sieht bisher so aus:

    int main()
    {
        int i, j, k;
        float temp[10];
    
        printf("Bitte geben Sie nun 10 Temperaturen ein, dass Programm sortiert diese von niedrig nach hoch:\n");
            for(i=0;i<10;i++)                   //Schleife zum Eingeben der Temperaturen
            {
            printf("Temperatur %d:", i+1);
            scanf("%f", &temp[i]);
            }
    
            for(j=0;j<10;j++)                   // Schleife für die Durchgänge des Sortierens
            {
                    for (i=0;i<10;i++)          // Schleife für den Sortiervorgang
                    {
                    if (temp[i]>temp[i+1]){
                        temp[i+1]==temp[i] && temp[i]==temp[i+1];}
                    }
            }
    
            for(i=0;i<10;i++)                                   //Schleife zur Ausgabe der Temperaturen
                printf("%d. Temperatur: %f\n", i+1, temp[i]);
    
        return 0;
    }
    

    Irgendwie sortiert er aber nicht, sondern er gibt die Zahlen genau so aus, wie ich sie eingebe?
    D.h. in der Schleife für den Sortiergvorgang nimmt er irgendwas nicht auf. Ich will da die Temp[i] mit der temp[i+1] vertauschen. Wieso geht das so nicht?



  • #include <stdio.h>
    
    int main()
    {
    	int i, j, k; // wofür ist k?
    	float temp[10];
    	float tmp;
    
    	printf("Bitte geben Sie nun 10 Temperaturen ein, dass Programm sortiert diese von niedrig nach hoch:\n");
    	for(i=0;i<10;i++)
    	{
    		printf("Temperatur %i:", i+1);
    		scanf("%f", &temp[i]);
    	}
    
    	for(j=0;j<10;j++)
    	{
    		for (i=0;i<10;i++) // läuft um 1 zu weit.
    		{
    			if (temp[i]>temp[i+1])
    			{
    				temp[i+1]==temp[i] && temp[i]==temp[i+1]; // tut nicht was du denkst.
    			}
    		}
    	}
    
    	for(i=0;i<10;i++)
    		printf("%d. Temperatur: %f\n", i+1, temp[i]);
    
    	return 0;
    }
    

    Guckst du: Dreieckstausch



  • vfbf4n1893 schrieb:

    Hallo,
    ...
    D.h. in der Schleife für den Sortiergvorgang nimmt er irgendwas nicht auf. Ich will da die Temp[i] mit der temp[i+1] vertauschen. Wieso geht das so nicht?

    Das hat mehrere Gründe.
    Zum einen ist == ein Vergleichsoperator, für eine Zuweisung musst du = nehmen.
    Zum anderen brauchst du eine Hilfsvariable, wenn du Werte zweier Zahlen tauschen willst:

    int main ( void )
    {
    	int a = 4, b = 5, // Die Werte der Variablen sollen getauscht werden.
    	c = 0; // Hilfsvariable
    	printf ( "a = %d b = %d\n", a, b );
    	c = a; // Wert von a zwischenspeichern
    	a = b; // a bekommt den Wert von b
    	b = c; // b bekommt den Wert von a
    	printf ( "a = %d b = %d\n", a, b );
    	return 0;   
    }
    


  • CJosef schrieb:

    Zum anderen brauchst du eine Hilfsvariable, wenn du Werte zweier Zahlen tauschen willst:

    Lustigerweise geht das sogar ohne dritte Variable, zum Beispiel so (kann man noch kompakter schreiben wenn man moechte):

    void swap(int *x, int *y)
    {
      if ( *x == *y )
        return;
      *x = *x ^ *y;
      *y = *x ^ *y;
      *x = *x ^ *y;
    }
    

    Ist sicher nicht effizienter als Swap mit einer dritten Variable. Aber ich fands ziemlich cool als ich es das erste Mal gesehen habe 🙂



  • int i, j;
        int temp[10], k;
    
        printf("Bitte geben Sie nun 10 Temperaturen ein, dass Programm sortiert diese von niedrig nach hoch:\n");
            for(i=0;i<10;i++)                   //Schleife zum Eingeben der Temperaturen
            {
            printf("Temperatur %d:", i+1);
            scanf("%d", &temp[i]);
            }
    
            for(j=0;j<10;j++)                   // Schleife für die Durchgänge des Sortierens
            {
                    for (i=0;i<10;i++)          // Schleife für den Sortiervorgang
                    {
                    if (temp[i]>temp[i+1]){
                        k = temp[i];
                        temp[i] = temp[i+1];
                        temp[i+1] = k;
                        }
                    }
            }
    
            for(i=0;i<10;i++)                                   //Schleife zur Ausgabe der Temperaturen
                printf("%d. Temperatur: %d\n", i+1, temp[i]);
    
        return 0;
    }
    

    hab das nun mal so gemacht, jetzt sortiert er mir die zahlen zwar, allerdings nur bis 9? Sobald ich höhere zahlen wie 9 eingebe, gibt er trotzdem nur noch 9er aus? Wieso das?



  • in zeile 18 und 19 schreibst du über array grenzen hinaus.
    das ist ein memory error und ist pfui!



  • zeh proviech schrieb:

    in zeile 18 und 19 schreibst du über array grenzen hinaus.
    das ist ein memory error und ist pfui!

    achja, der zugriff in zeile 16 ist auch verboten,
    ich fasse zusammen:

    vfbf4n1893 schrieb:

    if (temp[i]>temp[i+1]){ // <--- PFUI !!!
                        k = temp[i];
                        temp[i] = temp[i+1]; // <--- PFUI !!!
                        temp[i+1] = k; // <--- PFUI !!!
                        }
                    }
    


  • for(j=0;j<10;j++)                   // Schleife für die Durchgänge des Sortierens 
            { 
                    for (i=0;i<10;i++)          // Schleife für den Sortiervorgang 
                    { 
                    if (temp[i]>temp[i+1]){ 
                        k = temp[i]; 
                        temp[i] = temp[i+1]; 
                        temp[i+1] = k; 
                        } 
                    } 
            }
    

    Diese Schleife ist auf jeden Fall so nicht OK!

    Das Array temp geht von Index 0 bis 9.
    In der Schleife zählt die Ariable i von 0 bis 9.
    Es wird aber z.B. mit temp[i+1] auch auf das Arrayelement 9+1 also das 10 zugegriffen, welches nicht existiert.

    Versuche es selbst zu korrigieren. Wenn du es nicht schaffst melde dich wieder.



  • Korrektur des Textes: Ariable = Variable



  • Swordfish schrieb:

    for (i=0;i<10;i++) // läuft um 1 zu weit.
    

    old news.



  • LOL hatte ich nicht mal gesehen, als ich helfen wollte. Ich bin davon ausgegangen, dass man sich bemüht alle schon angegebenen Fehler zu beheben bevor man seinen Code wieder einstellt.



  • MisterX schrieb:

    [...] Ich bin davon ausgegangen, dass man sich bemüht alle schon angegebenen Fehler zu beheben bevor man seinen Code wieder einstellt.

    ROFLMAO, YMMD!! 😃


Anmelden zum Antworten