Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program szyfrujący.

Ostatnio zmodyfikowano 2013-11-25 22:45
Autor Wiadomość
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ą.

C/C++
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>




int main()
{
    using namespace std;
    srand( time( 0 ) );
   
    // zmienne porzebne do do funkcionowania programu
    //=========================================================================================================================================================
    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.
P-97366
docentpp
» 2013-11-24 18:40:39
Dlaczego
C/C++
char tablica[ 31 ]
ma tylko 31 elementów ?

Jeśli wykluczymy używanie polskich liter,to minimalny
rozmiar =2*24+10.
P-97371
kynol
» 2013-11-24 18:59:36
Napisz sobie najzwyklejsza funkcje zamieniajaca znaki char :P
P-97380
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:

C/C++
#include <iostream>
#include <string>
#include <ctime>
#include <cstdlib>




int main()
{
    using namespace std;
    srand( time( 0 ) );
   
    // zmienne porzebne do do funkcionowania programu
    //=========================================================================================================================================================
    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ć??
P-97386
docentpp
» 2013-11-24 20:25:44
Może to ;-)
C/C++
wylosowane[ ilosc_znakow ] =( rand() % 32 );

..................
To nie jedyny błąd.


Jak wyglądałaby funkcja odszyfrowująca ?
P-97393
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
P-97394
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.
P-97397
docentpp
» 2013-11-24 20:46:29

Co do odszyfrowania....


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"   ?????

P-97399
« 1 » 2
  Strona 1 z 2 Następna strona