for will nich... Ideen?



  • Hi ihr,

    habe vor Elemente eines Arrays zu reversen, benutze dazu ein 2.Array.
    Manuell klappt das, mit ner Schleife irgendwie nich.

    Manuell:

    dcf77zahl2[6] = dcf77zahl1[0];
    	dcf77zahl2[5] = dcf77zahl1[1]; 
    	dcf77zahl2[4] = dcf77zahl1[2];
    	dcf77zahl2[3] = dcf77zahl1[3];
    	dcf77zahl2[2] = dcf77zahl1[4];
    	dcf77zahl2[1] = dcf77zahl1[5];
    	dcf77zahl2[0] = dcf77zahl1[6];
    

    Schleife:

    for (int i=0; dcf77zahl1[i]!='\0'; i++)
    	{
    		for(int k=6; k=0; k--)
    		{
    			dcf77zahl2[k]=dcf77zahl1[i];
    		}
    	}
    

    Ideen warum nich?

    Danke, Stew



  • die bedingungen mal überdenken.

    k=0 ist keine bedingung, k==0 wäre schon eher eine, aber deine schleife läuft so nicht weiter.



  • Hallo,

    guck mal in deine zweite schleife, wie da deine Abbruchbedingung aussieht.



  • ...hmm, die Schleife soll 7x, von Element 6 bis Element 0 durchlaufen, also eigentlich bis k=0, könnte auch k<=0 schreiben (wäre ja Bedingung) das hat (logischerweise) aber den gleichen Effekt.
    Verstehe auch nicht, warum mit k==0 die Schleife nicht weiter laufen würde...

    Also ich als Compiler würds machen 😃

    Aber mal ernsthaft: andere als diese

    > größer

    = größer oder gleich

    == gleich

    != nicht gleich

    <= kleiner oder gleich

    < kleiner

    Ausdrücke gibts doch nich, und die Schleife soll doch von 6 bis einschliesslich(!!) 0 laufen *hrmpff*

    ..noch EIN Tip bitte?!

    Stew



  • StewDent84 schrieb:

    Verstehe auch nicht, warum mit k==0 die Schleife nicht weiter laufen würde...

    Schau nochmal genau hin, was du geschrieben hast. ich sehe da kein k==0

    mal davon abgesehen, dass die schleife solange läuft wie die bedingung true ist...



  • ...bin grad blockiert, ess erstmal Frühstück 😉
    vielleicht fällts mir dann ja ein...

    Danke...



  • ...die Schleife sieht jetzt so aus:

    for (int i=0; dcf77zahl1[i]!='\0'; i++)
    	{
    		for(int k=6,l=0; l<7; k--, l++)
    		{
    			dcf77zahl2[k]=dcf77zahl1[i];
    		}
    	}
    

    aber jetzt macht die nich das was sie soll 😞 und am Inhalt ist doch nichts falsch, oder?



  • Hmm, übersehe ich da gerade was, oder ließe sich das nicht auch mit einer Schleife bewerkstelligen?
    Dazu könnte man sich mal die folgende Abbildung ansehen:
    f:IN->IN f(n)=6-n oder so ähnlich 😕



  • ...oh maaaaaan, ick binn Hoschie!!!

    ..das mit Deiner Abbildung mal aussen vor gelassen, aber die (geniale 🕶 )Idee mit nur einer Schleife hats gebracht...
    Jetzt funzts nämlich 🙂
    Danke für die Anregung.

    Stew



  • Schön, dass es jetzt funktioniert 🙂
    Allerdings wundert es mich, dass deine manuelle Version geklappt hat, oder war das Array sowieso schon symmetrisch?
    Meiner Meinung wäre nämlich schon nach der ersten Zuweisung der alte inhalt von dcf77zahl2[6] nicht mehr vorhanden und dementsprechend würde bei der letzten Zuweisung im Prinzip gar nichts gemacht.

    zum Tauschen braucht man doch immer noch eine Hilfsvariable, oder irre ich mich da? 😕



  • es geht auch ohne hilfsvariable was aber den nachteil hat das man nen überlauf riskiert...



  • Deadlef: Sieh dir die Variablennamen noch mal genau an.



  • CME386 schrieb:

    Deadlef: Sieh dir die Variablennamen noch mal genau an.

    jo, ist mir hinterher natürlich auch aufgefallen. Dann wäre aber hier noch mein Vorschlag für das "Reversen" eines Strings:

    char quell[] = "abcdef";
    char *ziel;
    int i, laenge;
    laenge = strlen(quell);
    ziel = (char*)malloc(laenge + 1);
    for (i = laenge - 1;i >= 0;i--)
    {
    	ziel[laenge - i - 1] = quell[i];
    }
    ziel[laenge] = '\0';
    free(ziel);
    

    Vielleicht nicht das Eleganteste, aber funktioniert wohl.


Anmelden zum Antworten