Einfache Zeichenweise verschlüsselung in Code Blocks ?



  • Hallo alle zusammen,

    ich bin neu hier im forum. Ich studiere gerade im 2 Semster Robotik und Automation. Doch des Fach Praktische informatik bringt mich zu verzweifelung. Also erlich ich habe zum ersten mal c++ bin ein Anfänger , doch irgendwie muss ich es ja lernen, lese auch unser Skript dazu durch aber naja.

    Also was ich fragen wollte ist wir habe hier so ein Programm " Eine einfache zeichenweise verschlüsselung ".

    Programm :

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        char instring[100];
        int pos;
    
        cout << "Bitte Text eingeben (maximal 100 Zeichen) : " ;
        cin.get(instring, 100);
    
        pos = 0;
    
        while ( instring[pos] != '\0' )
    
             {
                 instring[pos] = tolower(instring[pos]);
    
        if ( 'a' <= instring[pos] && instring[pos] <= 'z' )
    
            {
                instring[pos] = instring[pos] ; // Hier muss ich es verändern an der rechten seite so viel weiß ich doch ich komm nicht drauf 
    =( was ich weiß ist das die differnz von a nach z 25 ist und 
    dan b nach y 23  usw immer -2 doch ich bekomm des nicht hin 
    
            }
            pos = pos +1 ;
             }
    
        cout << "Verschluesselt : " << instring << endl <<endl;
    
        return 0;
    }
    

    Die Fragen dazu :

    a ) Die buchstaben a,b,c,d ... werden durch das kleine Alphabet un umgekehrter Rehienfolge Verschlüsselt .

    b) Jeder kleinbuchstabe wird durch seinen Nachfolger im Alphabet verschlüsselt der Buchstabe z allerdings durch a .

    c ) Die Verschlüsselung erfolgt abhängig von der Position : Das erste Zeichen (pos==0) wird nach prinzip b) verschlüsselt , das zweite nach dem Prinzip a ) dann wieder abwechselt nach b) , a)... .

    Momentan gibt des Programm das aus was man eingibt nur das die Großbuchstaben zu klein buchstaben ersetzt werden. Also ich erwarte von euch nicht gleich die Lösung ich will auch selber was machen vllt eine Hilfe bzw eine erklärung warum und so ? Und dies ist wie gesagt keine hausaufgabe ich versuch mich auf unsere Prüfungen vorzubereiten . Ich hoffe das mir jemand helfen kann 🙂 Ich danke euch jz schonmal im vorraus 🙂

    MFG Iso89



  • Wenn du sowieso nur einen Schubs in die richtige Richtung willst: mit char kannst du auch rechnen (dabei entspricht der Wert dem dahinterliegenden ASCII-Code). Also mußt du dir nur überlegen, wie du die Verschlüsselungsvorschriften umsetzen würdest.



  • hi,

    danke erstmal ich weiß das a den wert 97 besitz und z 122 die differnz wäre ja 25 doch von b nach y ist sie nur noch 23. muss ich mit der differnz rechnen oder ? da brauche ich ein schubs 🙂 also den ersten schritt 🙂



  • Erster Schubs - rechne die Buchstaben um in den Bereich von 0 bis 25, führe damit deine Verschlüsselungen durch und verschiebe die Werte anschließend wieder in den Bereich 'a' bis 'z'.



  • Meinst du mit dem umrechnen das der wert 0 a enspricht und 1 b usw? Damit das alphabet zwisch 0 und 25 ist , tut mir leid wenn ich zu viel frag, und echt ein danke an dich, bin echt neuling in diesem thema 🙄



  • Ja, das meinte ich. Im Endeffekt sieht das dann etwa so aus:

    int wert=zeichen-'a';
    ...//hier verschlüsseln
    zeichen=wert+'a';
    


  • Hmm,

    Ich probiers morgen mal aus dann meld ich mich dann wieder wie weit ich gekommen bin danke, muss morgen früh noch arbeiten

    Mfg



  • Hallo,

    Also gestern bin ich nicht mehr dazugekommen aber jz habe ich es hinbekommen. Dein schubser alles zwischen 0 und 25 zubbringen hat mir viel geholfen danke, ich habe es so gelöst.

    Instring[pos] = 122 - ( instring[pos] - 'a' )

    Somit habe ich immer von z den wert abgezogen und siehe da es klappt 🙂
    So jz mach ich mich an die zweite aufgabe schubser sind erlaubt 😃

    DANKE



  • Hi,

    So jz bin ich bei er b.

    Ich kann das mit dem z zu a nicht einbinden 😡
    Kann mir jemand ein tipp geben wie ich die aufgabe zu lösen hab?
    Bzw. Kann ich einezweite if abfrage in der if abfrage nur für z machen würde dies gehen ?

    Mfg


  • Mod

    Zu b:
    Lernt man im Studium nicht mehr, was modulo ist?

    Zu deinem Programm: Was ist 122? Falls das 'z' sein sollte (bin zu faul nachzuschauen), dann schreib doch auch 'z'. Dann versteht es wenigstens jeder und du hast dich nicht an eine bestimmte Zeichencodierung gebunden.



  • Also,

    Erstens ich weiß das 122 'z' ist hätte ich auch schreiben können hastrecht, doch man kann das auch im neteten ton schreiben , und nicht bin zu faul es nachzulesen odr so bitte, wenn es dich stören sollte das hier um hilfe und tipps frage weil ich nicht so viel ahnung habe wie du dann musst du nicht antworten es hat dich keiner gezwungen 😉

    Doch du hast ja auch bischen mit dem modulo geholfen und für des bedanke ich mich aber zum lernt man das im studium nicht , muss ich sagen das ich es vllt nicht weiß oder das ich nicht auf den gedanken gekommem bin es so zu versuchen , trotzdessen nur modulo alleine hat mir jz auch nicht viel gebracht . Wenn du oben schauen würdest wie andere mir helfen oder mir versuchen zu helfen dann würdest du sicher mich auch verstehen.


  • Mod

    Ich mag's aber lieber, wenn die Leute versuchen, selber zu denken. Vielleicht gewöhnen sie es sich dann an.

    Ok, noch ein Tipp: Das mit dem modulo war ein guter Tipp :p . Von da aus ist es nur ein minimaler Gedankensprung zu einer Lösung.



  • hallo,

    ich probier die ganze zeit des mit dem modulo aus doch ich bekomm es nicht kannst du mir nicht noch einbischen weiterhelfen bitte

    MFG



  • hallo,

    ich probier die ganze zeit des mit dem modulo aus doch ich bekomm es nicht kannst du mir nicht noch einbischen weiterhelfen bitte

    MFG


  • Mod

    char encrypted = ((original - 'a' + 1) % 25) + 'a';
    


  • Hallo,

    dein code funtionert nicht ganz er verschlüsselt y zu a und z zu z hmm da stimmt es nicht. könnte man des z nicht extra verschlüsseln ?



  • Du müsstest schon prüfen, ob das Zeichen 'z' ist:

    char encrypted = original=='z'?'a':((s[i]-'a')%('z'-'a')+'a'+1);
    

    Aber das kann man natürlich auch viel einfacher schreiben (überlasse ich dir).


  • Mod

    iso89 schrieb:

    Hallo,

    dein code funtionert nicht ganz er verschlüsselt y zu a und z zu z hmm da stimmt es nicht. könnte man des z nicht extra verschlüsseln ?

    Kleine Fehler dienen dazu zu testen, ob der Leser auch aufmerksam ist. Du bist durchgefallen 😞 . Das Alphabet hat natürlich 26 Buchstaben:

    char encrypted = ((original - 'a' + 1) % 26) + 'a';
    

    So, nun sind deine Hausaufgaben für dich gemacht. Du hast nichts gelernt, nichts kapiert, und stehst bei der nächsten Aufgabe wieder hier auf der Matte. Zufrieden?



  • Hallo,

    Ganz ehrlich dann bin ich durchgefallen ob wohl ich es oftmals versucht hab. Aber trotzdem danke.

    @ Seppy

    Aber nochwas wenn ich solche antworten bekomm wie du hast nichts gelernt und etc. Dann habe ich echt angst hier was zu fragen 😞 Weil immer der gedanke kommt hey ich kanns nicht und wenn man die was fragt bekommt man eine auf die klatsche. Schade eigentlich, weil könnte ich c++ dan würde ich hier auch nicht fragen. Und du musst echt nicht hier mit so einem test oder wie du des nennen willst mich zur sau machen.



  • #include <iostream>
    #include <algorithm>
    #include <cctype>
    #include <string>
    
    std::string Verschluesseln(std::string input);
    
    char PrinzipA(char c);
    char PrinzipB(char c);
    
    int main()
    {
    	std::string input;
    
    	std::getline(std::cin, input);
    
    	std::cout << Verschluesseln(input) << std::endl;
    
    	return 0;
    }
    
    std::string Verschluesseln(std::string input)
    {
    	std::transform(input.begin(), input.end(), input.begin(), std::tolower);
    
    	for (std::size_t i = 0; i < input.length(); ++i)
    	{
    		if (!std::isalpha(input[i]))
    		{
    			continue;
    		}
    
    		input[i] = i % 2 ? PrinzipA(input[i]) : PrinzipB(input[i]);
    	}
    
    	return input;
    }
    
    char PrinzipA(char c) // Umgekehrt
    {
    	return ('z' - c) + 'a';
    }
    
    char PrinzipB(char c) // Nachfolger
    {
    	return c >= 'z' ? 'a' : c + 1;
    }
    

Anmelden zum Antworten