Zerlegung in Funktionen
-
Servus,
habe da ein paar Probleme mit C++. Und zwar haben wir folgende Aufgabe:
"Nachrichten verschlüsseln"
Original: ABCDEF.....
Kodierung: XYZABC.....
Zur Kodierung wird um ein fester Wert (Schlüssel) verschobenes Alphabet verwendet. Alle anderen Zeichen bleiben unverändert.So wird aus: "Hello World" -> EBIIL TLOIA
Jeder Buchstabe des Alphabet bekommt also ein neuen Buchstaben zugeordnet.
Soweit so gut, dass Problem:
Jetzt sollen wir eine (zwei) Funktionen: encrypt und (decrypt) und ein Testprogramm, dass nach Abfrage des Schlüssels einen eingegebenen Text verschlüsselt (entschlüsselt) entwickeln.
Die Funktion encrypt soll dabei folgenden Prototypen haben:
int encrypt (const char Klartext[ ], char Geheimtext [ ], int key);
und dabei den klartext als char Array erhalten und den verschlüsselten Text als char Array zurückgeben.
Der Aufrufer soll dafür sorgen, dass Rückgabe-Array genügend Platz hat.Also das einfache "Kodierungsprogramm sieht so aus, aber mit den oben genannten Punkten komm ich irgendwie nicht klar. Wenn möglich mit einer Erklärung hinter den Zeilen. Danke
#include <iostream.h>
//
// Zur Verinfachung alles im Hauptprogramm
//
void main()
{
unsigned int key; // Schlüssel zur Verscheibung
cout <<"Bitte Key eingeben :";
cin >> key;key = key %26; // Normieren auf die 26 Buchstaben A-Z
unsigned char Klartext[256]; // Maximal 256 Buchstaben
cout << endl << "Bitte Klartext eingeben :";
cin >> Klartext; // cin setzt automatisch 0 als letzten Wert
// Kraltext[n] = 0
//
// Hierbegint die Hauptschleife
//
unsigned char c = Klartext[0]; // Ersten Buchstaben holen
int j = 0; // Index setztencout << "Hier ist der Geheimtext :";
while (c) // Bei letztem Feldwert == 0 (s.o.)
{
if ( c >= 'A' && c <= 'Z' ) // Grossbuchstaben
{
c = c +key;
if (c > 'Z') c = c - 26; // Überläufer abfangen
}if ( c >= 'a' && c <= 'z' ) // Kleibuchstaben
{
c = c +key;
if (c > 'z') c = c - 26; // Überläufer abfangen
}cout << c; // Ausgabe des Buchstabens
j++; // index erhöhen
c = Klartext[j]; // nächsten Buchstaben lesen
}cout << endl;
}
-
Hat niemand eine Idee?
-
Aemord schrieb:
Servus,
Die Funktion encrypt soll dabei folgenden Prototypen haben:
int encrypt (const char Klartext[ ], char Geheimtext [ ], int key);
}
WOW einen Prototypen
Also erstmal zum einlesen
bei cin wird bei einem " " Leerzeichen abgetrennt. nimm deshalt eine get line fkt
also
Schau dir ASCII an
http://www.asciitable.com/Da erkennst du das z.b.
65 = "A" ist
sprich dein char c = "A" hat den int wert 65
wenn du also
c++ machst muesstest du "B" erhaltenwenn Key also 5 ist, wird es um 5 verschoben ( die buchstaben )
Damit ist das "Rätsel" voll gelöst.
was aber
int encrypt (const char Klartext[ ], char Geheimtext [ ], int key);
sein soll ist mir ein Rätsel. warum nicht einfach
int encrypt (const char Klartext[ ], int key);
z.b. dann
encrypt( str, 5 ); // str wurde vorher natuerlich eingegeben mit get line fkt.
Warum sollst du auch gleich den Geheimtext mitübergeben????
Du kannst aber auch gleich ( wenn du beide nicht gleichzeitig brauchststr als referenz übergeben, dann wird dein feld gleich verändert. naja das nur noch als anmerkung am rande
-
Danke, für den prof. Rat.
Leider versteh ich von dem ganzen noch nicht wirklich viel.
Könntest du das alles bitte für einen Anfänger erklären, was du da geschrieben hast?
Danke
-
weiss jetzt nicht was so schwer war, an meinem text
aber schau hier mal
char c = 'A'; // hier sagst du ja c = A cout << c << endl; cout << int(c) << endl; // das ist ein cast( google hilft wenn du "casten c++" eingibst ;) c = c+1; // hier nimmst du den nächsten buchstaben sozusagen cout << endl; cout << c << endl; // ausgabe den "nächsten" buchstabe cout << int(c) << endl; // wieder ein cast
mit int(c) gibst du nicht den character wert aus sondern den int wert
man hat die buchstaben kodiert! z.b. für die 65 hat man gesagt, wenn ein char den zahlenwert 65 hat, wird ein "A" gedruckt.
ist zwar bissle lame meine erklärung, musst ja nicht den ganzen sachverhalt kenne.
wie du maybe weisst, kennt ein PC nur "0" und "1"
deswegen gibts es im speicher ( im ram oder auf der cpu ) keine "speicherzellen" welche buchstaben beinhalten, sondern nur zahlen ( binär )
deswegen einigt man sichschau echt nochmal GANZ GENAU die ascii tablelle an
mit meinen codespipsel sollten KEINE fragen mehr aufkommen, was das thema
65 = A
anbelangt.
wenn du dein programm schon fast hast, kannst du immer noch posten