C Bubblesort

Du weisst was Variablen sind?

Code:
int vertauscht;
int wahr;
int falsch;
(...)
vertauscht=falsch;

"falsch" ist eine Integer-Variable ohne Wert. Du versuchst "vertauscht" den Wert von "falsch" zuzuweisen.
 
Hi, ohne jetzt zu überlegen, ob da ein denkfehler im Code steckt, fällt mir als erstes ins Auge, dass für wahr und falsch keine Werte vorgegeben werden. Prinzipiell würde ich für vertauscht eher ein bool verwenden und mit true und false arbeiten
 
Ich fange erstmal im kleinen an:

Code:
    void f3(){ //Funktion 3
     
    int array[]={8,4,1,100,3,9,6,5,200,2};
    int n=11;
     
    int vertauscht;
    int wahr;
    int falsch;
    int i;
    int t;
    int x;
     
    do{
        vertauscht=falsch;
        i=0;
        do{
            if(array[i]>array[i+1]){
                                    t=array[i];
                                    array[i]=array[i+1];
                                    array[i+1]=t;
                                    vertauscht=wahr;}
            i++;
            }while(i<=n-1);
    n--;
    }while(vertauscht=wahr && n>=1);
     
    printf("\n");
    for(x=0;x<n;x++){
                     printf("%d ", array[x]);}
                     }

Da ich keine Zeit habe das ganze ausführlich zu analysieren hier mal ein erster Hinweis:
Eine Variable vom Typ "int" muss erstmal einen Wert haben, bevor du damit irgendwas anfangen kannst. Du hast zwei Variablen "wahr" und "falsch", die allerdings keinerlei Wert zugewiesen bekommen, und mit diesem nichtvorhandenen Wert vergleichst du dann deine Variable "vertauscht".
Mache doch einfach die Variable "vertauscht" zu einem boolean und setze sie auf true für wahr und false für falsch. Damit sparst du dir die beiden int Variablen (wahr und falsch).
 
ok danke! danke euren hinweisen klappts jetzt
 
Zuletzt bearbeitet:
guck dir das doch erstmal richtig an.
1. Klammerung (in der for-schleife passt was nicht).
2. Vergleiche werden mit "==" gemacht.
 
ja das mit den == hat der compiler mir wohl verziehen :)
 
Benutzen schon, nur nach Anwendungsfall - wie bei dir gerade - erzielt es nicht das gewünschte Ergebnis.
 
Zuletzt bearbeitet von einem Moderator:
Anscheinend störts dich nicht aber ist der Datentyp "bool" nicht eine Eigenschaft von C++?

Zumindest habens wir beim Programmieren mit C nie benutzt...
 
Ja ok, mein Fehler. Habe selbst nie wirklich C programmiert (wenn dann nur C++) und war davon ausgegangen, dass C auch bool hat. Ändert aber nichts daran, dass er die Werte von nicht initialisierten Variablen vergleicht und zuweist, also quasi irgendeinen müll aus dem Speicher benutzt.
 
In C99 gibt es einen entsprechenden Datentyp, in früherem nicht. Eigentlich auch relativ sinnlos, weil 0 als falsch und jeder andere Wert als wahr interpretiert wird. So kann man einfach sowas machen:

Code:
#define TRUE 1
#define FALSE 0

[...]
int asdfman_ist_der_coolste = 0==1?TRUE:FALSE;
(Dieses statement enthält übrigens einen richtigen boolschen Ausdruck, den es früher auch schon gab)
Und man kann sehen, dass auch Computer zu falschen Ergebnissen kommen können :3
 
Wollte blos drauf hinweisen für denn Fall, das "reines" C verlangt ist.

Wir haben in der C-Vorlesung auch nicht reines C programmiert. Haben der Bequemlichkeit halber Dinge wie cin oder cout benutzt.
 
Zurück
Oben