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

Szyfrowanie znaków

Ostatnio zmodyfikowano 2012-02-19 23:51
Autor Wiadomość
sensey9
Temat założony przez niniejszego użytkownika
Szyfrowanie znaków
» 2012-02-19 18:45:47
Witam. Robię program do szkoły który ma za zadanie zaszyfrować podany przez użytkownika ciąg znaków przesuwając w wybraną stronę i ustaloną ilość miejsc. Program jako taki już jest ale mam pewne problemy:
1. Nie wiem jak zrobić aby program zapętlał się do czasu gdy użytkownik poda np. Q próbowałem pętlą do .. while ale po wciśnięciu Q program dalej się wykonywał.
2. Po zastosowaniu funkcji cin.ignore(1,'\n') program ucina mi pierwszy znak podanego ciągu znaków czy da się temu jakoś zaradzić.

Oto mój kod

C/C++
#include <iostream>

using namespace std;
void szyfruj_w_prawo( char tekst[], int przes, char kierunek );
void deszyfruj_w_prawo( char tekst[], int przes, char kierunek );
int main()
{
    char tekst[ 1000 ];
    char kierunek;
    int przes;
   
   
   
    do {
        cout << "Podaj ciag znakow do zaszyfrowania" << endl;
        cin.ignore( 1, '\n' ).getline( tekst, 1000 );
        cout << "Podaj kierunek szyfrowania" << endl;
        cout << "L - Lewo / P - Prawo" << endl;
        cin >> kierunek;
        cout << "Podaj przesuniecie" << endl;
        cin >> przes;
        szyfruj_w_prawo( tekst, przes, kierunek );
        cout << "Zaszyfrowany ciag znakow to: " << tekst << endl;
        deszyfruj_w_prawo( tekst, przes, kierunek );
        cout << "Odszyfrowany ciag znakow to: " << tekst << endl;
    } while( tekst[ 1000 ] != 'q' );
   
    return 0;
   
}
void szyfruj_w_prawo( char tekst[], int przes, char kierunek )
{
   
    if( kierunek == 'P' || kierunek == 'p' )
    {
        for( int i = 0; tekst[ i ] != '\0'; i++ )
        {
            tekst[ i ] =( tekst[ i ] + przes );
        }
       
    }
    if( kierunek == 'L' || kierunek == 'l' )
    {
        for( int i = 0; tekst[ i ] != '\0'; i++ )
        {
            tekst[ i ] =( tekst[ i ] - przes );
        }
    }
   
}
void deszyfruj_w_prawo( char tekst[], int przes, char kierunek )
{
    if( kierunek == 'P' || kierunek == 'p' )
    {
        for( int i = 0; tekst[ i ] != '\0'; i++ )
        {
            tekst[ i ] =( tekst[ i ] - przes );
        }
    }
    if( kierunek == 'L' || kierunek == 'l' )
    {
        for( int i = 0; tekst[ i ] != '\0'; i++ )
        {
            tekst[ i ] =( tekst[ i ] + przes );
        }
    }
}
P-51005
RazzorFlame
» 2012-02-19 18:55:50
Ja bym to spróbował napisać w allegro albo sdl.
P-51008
akwes
» 2012-02-19 18:58:22
Ja bym to spróbował napisać w allegro albo sdl.
@RazzorFlame, kurde, gość ma problem z algorytmem a Ty mu mówisz o bibliotekach 2D ?!


@autor tematu
C/C++
while( tekst[ 1000 ] != 'q' );

Jak to rozumiesz ;> ?

Tablica deklarowana tak
C/C++
tekst[ 10 ];
Nie ma elementu tekst[10], tylko elementy tekst[0],tekst[1] aż do tekst[9].

Ty porównujesz czy w tablicy tekst[1000] znak na miejscu 1000 jest równy 'q' :P

Na pewno o to Ci chodziło?
P-51010
sensey9
Temat założony przez niniejszego użytkownika
» 2012-02-19 19:05:37
nawet jeśli zmienię na tekst[0] to nic to nie zmieni program i tak się wykuję
P-51011
pekfos
» 2012-02-19 19:11:14
Przypisujesz znak do elementu n, sprawdzasz element 0,
przypisujesz znak do elementu n+1, sprawdzasz element 0,
przypisujesz znak do elementu n+2, sprawdzasz element 0.
Dalej nie widzisz błędu?

C/C++
while( true ) {
   
    //..
    if( current == 'q' ) break;
   
    tab[ it++ ] = current;
}
P-51012
sensey9
Temat założony przez niniejszego użytkownika
» 2012-02-19 19:24:32
Nie za bardzo to rozkminiam.
P-51014
akwes
» 2012-02-19 19:27:50
a rozumiesz linijkę

C/C++
cin.ignore( 1, '\n' ).getline( tekst, 1000 );
 
?
P-51015
sensey9
Temat założony przez niniejszego użytkownika
» 2012-02-19 19:35:32
tak pobieranie znaków z cin do getline usuwając znak końca linii ze strumienia
P-51017
« 1 » 2 3
  Strona 1 z 3 Następna strona