CäsarChiffrierung
-
Hallo zusammen. Es geht um ein Programm, dass die Cäsar-Chiffrierung anwendet (Verschiebung um 3 Stellen nach rechts), dies jedoch nur bei Großbuchstaben tut und Kleinbuchstaben, sowie Sonderzeichen einfach durchlässt.
Ich habe schon in der ascii-Tabelle nachgesehen und festgestellt, dass die Großbuchstaben dort von Platz 65-90 eingetragen sind.
Wie ich dies aber nun in das Programm einbinde weiß ich nicht. Bisher habe ich Hochkommata verwendet, womit jedoch alle Zeichen chiffriert werden.Ich habe folgendes Programm geschrieben (in xcode, also kein getch bzw conio..:
#include <stdio.h> int main() { int auswahl, x = 0; char normal[100], geheim[100]; for(x = 0; x <= 99; x++) { normal[x] = ' '; geheim[x] = ' '; } printf ("Caesar Verschiebung\n\n\n"); printf ("Bitte zu verschluesselnde Nachricht eingeben:\n"); gets (normal); for(x=0; normal[x] != '\0'; x++) { if(normal[x] == 'Z') { geheim[x] = 'C'; } else { geheim[x] = normal[x] + 3; } } printf("\nDie verschluesselte Nachricht lautet:\n%s", geheim); }
Würde mich wahnsinnig über Hilfe freuen, da ich ein wenig daran verzweifle. Jeder Tipp ist wertvoll für mich.
-
Wenn der Buchstabe größergleich 'A' und kleinergleich 'Z' ist, ist es ein Großbuchstabe.
Dafür gibt es aber auch die Funktionisupper
-
Schreibe dir eine Funktion, die die Aufgabe 'Test auf Grossbuchstabe' kapselt.
Diese Funktion rufst du dann in deinem Programm an passender Stelle auf, dein Programm wird damit übersichtlicher und ist leichter zu debuggen, also z.B.int istGrossbuchstabe(char c) { return isalpha( c ) && c>='A' && c<='Z'; }
dürfte für die allermeisten Anwendungsfälle funktionieren.
Gewöhne dir an, auch für andere Aufgaben Funktionen zu implementieren, wenn man Funktionalitäten sinnvoll kapseln kann.
-
Den Test auf isalpha würde ich sogar weglassen und auf einen "normalen" Zeichensatz vertrauen.
-
Leider verstehe ich nicht ganz, wie ich diese "Prüfung auf Großbuchstaben" sinnvoll in das Programm eingliedern kann.
-
Wenn du nicht weißt, wie man in C Funktionen aufrufst, dann bist du noch ganz am Anfang.
Ich erkläre dir hier jedenfalls diese Grundlagen nicht auch noch.
-
Lenndon schrieb:
Leider verstehe ich nicht ganz, wie ich diese "Prüfung auf Großbuchstaben" sinnvoll in das Programm eingliedern kann.
for(x=0; normal[x] != '\0'; x++) { if(normal[x] >= 'A' && normal[x] <= 'Z')//Ist Großbuchstabe { geheim[x] = normal[x] + 3; } …
-
Ok habs geschafft, danke vielmals
-
Jaja, mein … sollte meinen, da muss auch noch hin, was bei kleinbuchstaben passiert (das selbe) und was bei anderen zeichen passiert (einfach kopieren).
-
Lenndon schrieb:
Ok habs geschafft, danke vielmals
zeig trotzdem nochmal die endlösung. vielleicht ist was ungeschickt daran, kann ja sein.
-
Endlösung:
(Es wurde noch eingefügt, dass er aus XYZ --> ABC macht)#include <stdio.h> int main() { int auswahl, x = 0; char normal[100], geheim[100]; for(x = 0; x <= 99; x++) { normal[x] = ' '; geheim[x] = ' '; } printf ("Caesar Verschiebung\n\n\n"); printf ("Bitte zu verschluesselnde Nachricht eingeben:\n"); gets (normal); for(x=0; normal[x] != '\0'; x++) { if(normal[x] >= 'A' && normal[x] <= 'Z') / { geheim[x] = normal[x] + 3; } else { geheim[x] = normal[x] ; } if(normal[x] == 'Z') { geheim[x] = 'C'; } if(normal[x] == 'Y') { geheim[x] = 'B'; } if(normal[x] == 'X') { geheim[x] = 'A'; } } printf("\nDie verschluesselte Nachricht lautet:\n%s", geheim); }
-
Ein bisschen nachgedacht, dann brauchst du die Extrabehandlung der ersten Buchstaben nicht mehr, und du kannst die 3 durch jeden positiven Wert ersetzen
geheim[x] = (normal[x] - 'A' + 3 ) % ('Z' - 'A' + 1) + 'A' ; // Buchstaben ab 0 + Offset modulo 26 + 65