dejmien Temat założony przez niniejszego użytkownika |
Program szyfrujący. » 2013-11-24 18:33:21 Witam. Postanowiłem napisać ten post w nowym temacie tak aby nie robić bałaganów w postach, że w jednym poście kilka pytań. Potrzebuję napisać program szyfrujący, który będzie miał takie działanie: Użytkownik wpisze jakieś zdanie np: ,, Ala ma kota'' a program wylosuje tyle znaków ile znaków ma ten tekst. Te znaki będą losowane z zakresu od a do z i od 0 do 9. Następnie program przypisze odpowiednie znaki do znaków tego tekstu tym samym go kodując. Na chwile obecną jestem na tym etapie. Proszę nie zwracać na ogólny rozpierdo* kodu ale dopiero będę pracował nad jego estetyką. #include <iostream> #include <string> #include <ctime> #include <cstdlib>
int main() { using namespace std; srand( time( 0 ) ); string tekst; int ilosc_znakow; char tablica[ 31 ] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'w', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '\0}' }; cout << "\tWitam w programie ENIGMA" << std::endl; cout << "\n\a\anWprowadz tekst do zaszyfrowania: "; cin >> tekst; ilosc_znakow = tekst.length(); int wylosowane[ ilosc_znakow ]; for( int i = 0; i < ilosc_znakow; i++ ) wylosowane[ i ] = rand() % 32; }
Tylko teraz nie wiem co dalej. mam funkcje, która losuje mi tyle liczb liczb ile znaków ma tekst. Liczby losowane są z zakresu od 0 - 31 gdyż tyle elementów ma tablica która zawiera znaki kodujące. Problem polega dokładnie na tym że nie wiem jak zrobić aby te wylosowane liczby, które przechowuje tablica wylosowane przypisać do znaków z tablicy zawierającej znaki. np. jeśli wylosowano 3 to żeby ją przypisać do c gdyż ,,c'' jest trzecia w tablicy. |
|
docentpp |
» 2013-11-24 18:40:39 Dlaczego ma tylko 31 elementów ? Jeśli wykluczymy używanie polskich liter,to minimalny rozmiar =2*24+10. |
|
kynol |
» 2013-11-24 18:59:36 Napisz sobie najzwyklejsza funkcje zamieniajaca znaki char :P |
|
dejmien Temat założony przez niniejszego użytkownika |
» 2013-11-24 19:53:20 Ok już mam rozwiązanie tylko mam problem z tablicą.. o to nowy kod: #include <iostream> #include <string> #include <ctime> #include <cstdlib>
int main() { using namespace std; srand( time( 0 ) ); string tekst; int ilosc_znakow; char tablica[ 31 ] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'r', 's', 't', 'w', 'z', '1', '2', '3', '4', '5', '6', '7', '8', '9', '\0}' }; static int i; static int tab[ 20 ]; cout << "\tWitam w programie ENIGMA" << std::endl; cout << "\n\nWprowadz tekst do zaszyfrowania: "; cin >> tekst; std::cout << "\nGeneruje losowe liczby...."; std::cout << "\a\a\a" << std::endl; ilosc_znakow = tekst.length(); static int wylosowane[ 30 ]; for( i = 0; i < ilosc_znakow; i++ ) { wylosowane[ ilosc_znakow ] =( rand() % 32 ); std::cout << wylosowane[ ilosc_znakow ] << " "; tab[ ilosc_znakow ] = wylosowane[ ilosc_znakow ]; } int stala = 0; while( stala <= ilosc_znakow ) { stala++; std::cout << tablica[ tab[ ilosc_znakow ] ]; } }
Jak widać na końcu funkcji main udało mi się znaleźć sposób jak wygenerować ten przeklęty kod z tablicy o nazwie ,,tablica''. Problem tkwi w tym, że jeśli wpisuje wyraz ,,raz'' to progam losuje mi 3 liczby np: 8, 5, 3. Postanowiłem jak widać podstawić do tablicy: tablica [ tab [ilosc_znakow]] w nadziei że te liczby które wylosowano wcześniej będą pełniły role numeru elementu w tablicy. I zgadza się działa to.. problem w tym że jeśli wylosowano te liczby: 8, 5, 3 to program wyświetla d,d,d czyli wybiera elementy z tablicy tylko o numerze 3 ale już nie wybiera pozostałych elementów o numerach 8 i 5. Ktoś wie jak temu zaradzić?? |
|
docentpp |
» 2013-11-24 20:25:44 Może to ;-) wylosowane[ ilosc_znakow ] =( rand() % 32 );
.................. To nie jedyny błąd. Jak wyglądałaby funkcja odszyfrowująca ? |
|
dejmien Temat założony przez niniejszego użytkownika |
» 2013-11-24 20:37:29 A możesz powiedzieć dokładniej w czym problem? Bo ja nie mogę tam zauważyć gafy :-P
Co do odszyfrowywania... hehe no to jeszcze nad tym nie myślałem :-P |
|
Buby |
» 2013-11-24 20:40:38 Hmm...Podałeś, że są 32 liczby w zakresie, a nie podałeś liczby startowej? Poza tym deklarujesz wartość statyczną, a potem ją modyfikujesz. |
|
docentpp |
» 2013-11-24 20:46:29 No właśnie. Skąd wiadomo,że szyfrowanie działa dobrze,jeśli nie można przeprowadzić operacji odwrotnej ? Jak zachowa się Twoja Enigma,jesli trzeba zaszyfrować tekst: "abcdefghijklmnopqrstuwyxzaABCDEFGHIJKLMNOPQRSTW 0123456789" ????? |
|
« 1 » 2 |