Bubblesort Algorithmus



  • Hallo an alle.
    Ich habe da ein kleines Problem, aber erstmal der Code:

    #include "stdafx.h"
    
    int main()
    {
    	SetConsoleTitle(TEXT("Der Bubblesort-Algorithmus"));
    
    	int liste[50]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    	int elemente;
    
    	printf("Bitte geben Sie die Menge der Elemente an: ");
    	scanf_s("%i", &elemente);
    
    	for(int stelle=0; stelle<=(elemente-1); stelle++)
    	{
    		printf("Bitte geben Sie den Wert f%cr die %i. Stelle an: ", ue, stelle);
    		scanf_s("%i", &liste[stelle]);
    	}
    
    	int i, j;
    
    	for(i=0; i < elemente -1; ++i)
    	{
    		for(j=0; j < elemente -i -1; ++j)
    		{
    			if(liste[j] > liste[j+1])
    			{
    				int tmp = liste[j];
    				liste[j]=liste[j+1];
    				liste[j+1]=tmp;
    			}
    		}
    	}
    
    	for(int stelle=0; stelle<=elemente; stelle++)
    	{
    		printf("%i", liste[stelle]);
    		if(stelle<elemente)
    		{
    			printf("; ");
    		}
    
    		if(stelle==elemente)
    		{
    			printf("\n");
    		}
    	}
    
    	system("PAUSE");
    	return 0;
    }
    

    Am Ende wird nach den Zahlen immer noch eine 0 hingeschrieben.
    Also Bsp: 1; 2; 3; 4; 0

    Wie bekomme ich die wieder weg?

    und btw: macht

    ++i
    

    und

    i++
    

    nen unterschied?



  • OK. hat sich erledigt. Fehler gefunden.



  • 3P!CF41L schrieb:

    OK. hat sich erledigt. Fehler gefunden.

    Zu schnell für mich.
    Aber sollte die Sig nicht

    /*************************************************
     Genie und Wahnsinn liegen oft dicht beieinander. 
    *************************************************/
    

    sein?



  • der war gut;)
    hast recht



  • Sorry, aber du hast immernoch typographische Anführungszeichen drin.
    " und " wäre na nix. Aber die da unten? Und die anderen?



  • Also 1. von deinem letzten Post habe ich nichts verstanden!
    und 2. ich habe doch noch ein problem:

    ich wollte die geordnete Reihe in der MessageBox ausgeben lassen und habe deswegen erstmal ein Übungsprogramm gemacht:

    #include "stdafx.h"
    
    int main()
    {
    	int zahl;
    	char string[500]="";
    
    	printf("Bitte geben Sie eine Zahl ein: ");
    	scanf_s("%i", &zahl);
    
    	sprintf(string, "%i", zahl);
    	strcat("Die Zahl hat den Wert: ", string);
    
    	MessageBox(NULL, string, "Variablen in der MessageBox", MB_OK|MB_ICONINFORMATION|MB_DEFBUTTON1);
    
    	return 0;
    }
    

    jetzt ist das problem, das er das programm zwar kompiliert, aber nicht richtig ausführt. ich bekomme immer eine Fehlermeldung, und dann lässt sich das Programm nicht mehr beenden.

    Fällt da wem was ein?



  • Bei strcat() ist das erste Argument das Ziel und das zweit die Quelle (wie bei strcpy()).
    Da dein erstes Argument aber ein Stringliteral ist, funktioniert das bei dir nicht. Stringliterale sind konstant und haben auch keine variable Länge.

    Warum nutzt du nicht einfach gleich das sprintf für deine Stringverküpfung.

    sprintf(string, "Die Zahl hat den Wert: %i", zahl);
    // oder wenn du es später variabel haben willst
        sprintf(string, "%s%i", "Die Zahl hat den Wert: ", zahl);
    


  • Das erste beispiel verstehe ich, das zweite leider nicht. was ist denn daran variabel?



  • Du kannst später mal das Stringliteral ("Die Zahl hat den Wert: ") durch eine Variable ersetzen. Der Satz muss nicht im Formatstrings stehen.



  • 3P!CF41L schrieb:

    und btw: macht

    ++i
    

    und

    i++
    

    nen unterschied?

    jain, in deinem fall nicht. und auch sonst wenn diese anweisungen separat in einer zeile stehen nicht. aber wenn du einen etwas komplexeren ausdruck hast, dann ist das sehr wohl ein unterschied.

    der punkt ist:
    ++i -> hier wird der wert von i erst erhöht und dann guckt man was denn nun der wert ist(z.b. wenn man das ausgeben will)
    i++ -> hier wird erst geguckt was der wert ist und danach wird i erhöht

    bsp:

    int i = 0;
    cout << i << endl; // 0
    i++;
    cout << i << endl; // 1
    ++i;
    cout << i << endl; // 2
    cout << i++ << endl; // 2, aber i ist gleich 3 nach dieser zeile
    cout << ++i << endl; // 4 und i ist auch gleich 4
    

Anmelden zum Antworten