transposition



  • hey leute kann mir einer mal erklären wie man ein transpositionsprogramm schreibt? wir sollen das in der schule machen aber hab kein schimmer wie... könntet ihr mir nicht eins schreiben? MfG The-BooN- 🕶



  • Hausaufgaben werden hier nicht für dich gelöst. Du mußt dich also zumindest grundlegend mit deinem Problem beschäftigen und versuchen, etwas auf die Beine zu stellen.

    Ausgehend von deinem konkreten Problem sind wir dann gerne bereit, dir weiterzuhelfen.



  • ich hab ja auch schon was nur irgendwie funzt es noch nicht ganz, es geht zwar aber nur teilweise...

    #include <iostream.h>
    
    int main()
    {
            parta[100], partb[10];
            int a = 0, b = 0;
    
            cout << "Geben Sie den String ein: ";
            cin.get(buffer, 10);
    
            for(int i = 0; i!= 100; i++)//char schreiben
            {
                    parta[a++] = buffer[i];
                    buffer[i] = '\0';        
            }
    
            for(int j = 0; j!= 10; j++)
            {
                    partb[b++] = buffer[j];        
                    buffer[j] = '\0';
            }
    
            cout << "Inhalt Teil 1: " << parta << endl;
    
            cout << "Inhalt Teil 2: " << partb << endl;
    
            return 0;
    } 
    }
    

    das hab ich ja soweit... von wegen hausaufgaben... :p kann mir nun jemand helfen?!?



  • Erstens: Was genau ist dein Problem mit diesem Programm?

    Zweitens: Wo (und wie) hast du die Variable 'buffer' definiert?

    Drittens: Du liest zehn Zeichen über get() ein und kopierst anschließend 100 Zeichen nach 'parta' - davon dürften mindestens 90 Datenmüll enthalten.

    Viertens: Die erste Schleife überschreibt freundlicherweise den Inhalt von 'buffer' mit Null-Werten, also dürfte partb auch nur mit Nullen gefüllt werden.

    Fünftens: Und eventuell solltest du dir mal klarmachen, was eine Transposition überhaupt machen soll.



  • also müsste der code folgendermaßen aussehen?

    #include <iostream.h>
    
    int main()
    {
            char buffer[10], parta[80], partb[80];
            int a = 0, b = 0;
    
            cout << "Geben Sie den String ein: ";
            cin.get(buffer, 10);
    
            for(int i = 0; i < 10; i += 2)
            {
                    parta[a++] = buffer[i];
                    buffer[i] = '\0';        
            }
    
            for(int j = 1; j < 10; j += 2)
            {
                    partb[b++] = buffer[j];        
                    buffer[j] = '\0';
            }
    
            cout << "Inhalt Teil 1: " << parta << endl;
    
            cout << "Inhalt Teil 2: " << partb << endl;
    
            cout << "Inhalt des Puffers: " << buffer << endl;
    
            return 0;
    

    MfG, The-BooN-



  • Probier's aus 😉
    Wobei, ich würde anstelle der char-Arrays lieber std::string verwenden.



  • The-BooN- schrieb:

    also müsste der code folgendermaßen aussehen?...

    ... um was zu tun ?
    Du bietest uns hier nur eine "42" an und fragst uns, ob das die richtige Antwort ist - ohne die Frage zu kennen.

    Gruß,

    Simon2.



  • also das programm läuft so jetzt als transposition, ich gebe nen string in der konsole ein und läuft alles prima... jetzt möcht ich gern noch den text nicht nur mit einer transposition chiffrieren, sondern auch gleichzeitig noch mit caesar... hat jemand einen gedankensblitz wie man das vollbringen könnte?



  • Pack jede einzelne Codierung in eine entsprechende Funktion und wende diese Funktionen nacheinander an:

    string input;
    getline(cin,input);
    cout<<"Doppelt verschlüsselt:"<<code_caesar(code_trans(input))<<endl;
    

    (code_caesar() und code_trans() mußt du selber schreiben, um die Eingabe nach dem entsprechenden Verfahren zu verschlüsseln)



  • so sieht mein prog jetzt aus, bei der ausführung in der konsole lief es ja, nur bei der eingabe des strings hab ich auch noch hinterher bei der transposition datenmüll hintergehabt... jetzt siehts wie folgt aus:

    #include <iostream.h>
    int main()
    {
            char buffer[10], parta[10+1], partb[10+1];
            int a = 0, b = 0, i = 0;
            cout << "Geben Sie den String ein: ";
            cin >> buffer;
            for(i=0; i <= 10;i++)
                    parta[i] = partb[i] = 0;
            i=0;
            a=0;
            b=0;
            while(buffer[i])  
            {
                    if(i & 0x1)
                    {
                            partb[b++] = buffer[i++];
                    }
                     else
                     {
                            parta[a++] = buffer[i++];
                     }
            }
            cout << "Inhalt Teil 1: " << parta << endl;
            cout << "Inhalt Teil 2: " << partb << endl;
            cout << "Inhalt des Puffers: " << buffer << endl;
            return 0;
    }
    

    soweit ganz gut... versuche mcih jetzt noch mit dem caesar einbauen... MfG, The-BooN-! 🕶



  • Da haben wir wieder einen Klassiker - deine Strings haben nach dem Zerlegen keine Null-Terminierung mehr (und das '\0' am Ende ist das Zeichen für C(++), daß hier der String zu Ende ist - wenn's fehlt, werden solange Mülldaten gelesen, bis du zufällig über eine 0 stolperst).

    PS: Ich wiederhole meinen Vorschlag von oben: nimm std::string anstelle der char-Arrays.


Anmelden zum Antworten