kapier nicht was in dieser Schleife genau passiert...



  • Hallo,

    kann mir irgentjemand erklären was in der ersten(und einzigen) schleife genau passiert, das kapier ich net so ganz.

    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
          char text[100];
          long schluessel;
          char *ptr;
    
          printf("Die Nachricht :\n");
          scanf("%s", &text);
          printf("Der Schluessel :\n");
          scanf("%ld", &schluessel);
    
           for (ptr = text ; *ptr ; ptr++)
               *ptr = (*ptr - 'A' + schluessel) % 26 + 'A';
    
           printf("Das Ergebniss : %s", text);
          system("PAUSE");	
          return 0;
    }
    

    thx im vorraus



  • Caesar-Schlüssel.

    Vielleicht willst Du genauer beschreiben, was Du nicht verstehst. Oder besser noch: Versuch zu beschreiben, was da passiert.



  • Das ganze soll wohl versuchen einen ASCII Text via Caesar-Chiffre zu verschlüsseln.
    Da ist allerdings ein Fehler drin, es müsste text und nicht(!) &text heißen.

    for (ptr = text ; *ptr ; ptr++)
      *ptr = (*ptr - 'A' + schluessel) % 26 + 'A';
    

    Ich rate einfach mal dass du das nicht verstehst.

    ptr soll auf text zeigen - der Wert auf den ptr zeigt darf nicht 0 sein - ptr soll um 1 erhöht werden (auf das nächste Element zeigen)

    der Wert auf den ptr zeigt soll 'A'(0x41) plus ((Wert auf den prt zeigt minus 'A') modulo 26) sein.



  • SG1 schrieb:

    Caesar-Schlüssel.

    Vielleicht willst Du genauer beschreiben, was Du nicht verstehst. Oder besser noch: Versuch zu beschreiben, was da passiert.

    wie gesagt, so ziemlich alles was in der schleife passiert. z.b. *ptr ist doch als einzelnes keine schleifenbedinnung oder was soll das +/- 'A' und wofür wird Modulo 26 gerechnet. Meine vermutung ist ja das die Buchstaben in zahlen umgewandelt werden oder so 😕 .... bin noch ziemlicher Anfänger



  • Hast Du dir meinen Beitrag überhaupt mal ganz durchgelesen?

    *ptr ist dann "wahr" wenn ptr auf einen Wert != 0 zeigt. Deswegen ist es eine gültige Bedingung.

    Die Elemente in "text" (Buchstaben) sollen von dem ersten Element des Alphabets aus gesehen ('A') nicht weiter als 26 Elemente verschoben werden. Soll heißen wenn du jetzt den Buchstaben 'Z' hast und den Schlüssel 1 dann wird aus 'Z'->'A'.

    http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
    http://de.wikipedia.org/wiki/Caesar-Verschlüsselung

    Damit sollte man das ganze problemlos verstehen können.

    Edit:
    Ach ja - da C keinen Datentyp für Strings bietet werden hier char arrays genutzt. Damit man jetzt weiß wann der String zu ende ist muss das letzte Zeichen eines Textes '\0' (0x00) sein. (Stichwort: Nullterminierung).
    Deswegen die Schleifenbedingung *ptr. (Quasi "mache irgendwas bis zum Ende des Strings")



  • cooky451 schrieb:

    Hast Du dir meinen Beitrag überhaupt mal ganz durchgelesen?

    *ptr ist dann "wahr" wenn ptr auf einen Wert != 0 zeigt. Deswegen ist es eine gültige Bedingung.

    Die Elemente in "text" (Buchstaben) sollen von dem ersten Element des Alphabets aus gesehen ('A') nicht weiter als 26 Elemente verschoben werden. Soll heißen wenn du jetzt den Buchstaben 'Z' hast und den Schlüssel 1 dann wird aus 'Z'->'A'.

    http://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange
    http://de.wikipedia.org/wiki/Caesar-Verschlüsselung

    Damit sollte man das ganze problemlos verstehen können.

    AHA, jetzt kapier ich es.
    öhm , als ich das gepostet habe war dein Beitrag noch nicht da.


Anmelden zum Antworten