Zahlenkette spiegeln mit einer Nebenfunktion ohne rückgabewert



  • #include <iostream>
    using namespace std;
    
    void spiegeln(int *zeigerAnfang){
        int speicher;
        int *zeigerEnde;
        *zeigerEnde=*zeigerAnfang; // zweiter Zeigt jetzt auch auf Array[0]
        for(int i=6;i>3;i--){
            speicher=*zeigerAnfang; // forderen Wert zwischen gespeichert
            *zeigerAnfang=*(zeigerEnde+i); // hinteren Wert auf den den vorderen
            *(zeigerEnde+i)=speicher; // vorderen Wert
            *zeigerAnfang++; // auf das nächste Element zeigen
        }
        return;
    }
    int main(){
    void spiegeln(int*); // Prototyp
    
    int array[]={1,2,3,4,5,6}; // zu spiegelnde Kette
    
    for(int i=0; i<6; i++){
        cout << array[i];
    }
    spiegeln(&array[0]); 
    
    for(int i=0; i<6; i++){
        cout << array[i];
    }
    
    }
    

    Aus 123456 soll 654321 werden.

    Wollte mit einem Zeiger auf das vordere Element zeigen und mit einem anderem Zeiger auf das hintere Element zeigen. Diese sollen dann ganz normal getauscht werden. Der vordere Zeiger wird hochgezählt, der hintere Zeiger runter.

    Mein Code will es aber nicht 😡 Die Logik vom Tauschen stimmt doch?

    greets



  • Was haben ich bei dem zweiten Zeiger im oberen Code falsch gemacht?

    Hab einfach den zweiten Zeiger im funktionskopf schon dabei und jetzt gehts auch..

    #include <iostream>
    using namespace std;
    
    void spiegeln(int *zeigerAnfang, int *zeigerEnde){
        int speicher;
    
        for(int i=2;i>=0;i--){
            speicher=*zeigerAnfang; // forderen Wert zwischen gespeichert
            *zeigerAnfang=*(zeigerEnde); // hinteren Wert auf den den vorderen
            *zeigerEnde=speicher; // vorderen Wert
            *zeigerAnfang++;// auf das nächste Element zeigen
            *zeigerEnde--;
        }
        return;
    }
    int main(){
    void spiegeln(int*,int*); // Prototyp
    int array[]={1,2,3,4,5,6};
    for(int i=0; i<6; i++){
        cout << array[i];
    }
    spiegeln(&array[0],&array[5]);
    
    for(int i=0; i<6; i++){
        cout << array[i];
    }
    
    }
    


  • void spiegeln(int *zeigerAnfang, int *zeigerEnde){
        int speicher;
    
        while (zeigerAnfang < zeigerEnde)
        {
            speicher=*zeigerAnfang; // forderen Wert zwischen gespeichert
            *zeigerAnfang++=*zeigerEnde; // hinteren Wert auf den den vorderen
            *zeigerEnde--=speicher; // vorderen Wert
        }
        return;
    }
    

    Zu deinem ersten Problem:

    for(int i=6;i>3;i--){
    ...
            *zeigerAnfang=*(zeigerEnde+i); // im ersten Durchlauf greifst du auf zeigerEnde[6] zu. Das existiert nicht
    

Anmelden zum Antworten