• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Szyfr Cezara

VPS Starter Arubacloud
0 głosów
415 wizyt
pytanie zadane 7 grudnia 2015 w C i C++ przez Armando Obywatel (1,870 p.)
edycja 7 grudnia 2015 przez Armando

Witajcie,

Mam problem z programem szyfrującym algorytmem cezara.
Program ogólnie działa poprawnie lecz dla wprowadzonych liter takich jak UVWXYZ niestety nie.
Nie mogę jakoś odnaleźć błedu w kodzie. Zapewne błąd tkwi gdzieś przy warunkach w funkcjach. Byłbym bardzo wdzięczny za wskazanie gdzie on się znajduje.

Z góry dziękuję :)

 

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

void wczytaj(string &zdanie)
{
    system("cls");
    getline(cin,zdanie);
}

void wyswietl(string zdanie)
{
    system("cls");
    cout<<zdanie<<endl;
    system("pause");
}

int wczyt_kl(int &kl)
{
    system("cls");
    cout<<"Wpisz klucz: "; cin>>kl;
}

string szyfruj(int klucz, string &zdanie )
{
    int i = 0;
    int ilosc_liter = 'z' - 'a' + 1;
    klucz = klucz % ilosc_liter;
    for(i=0;zdanie[ i ] != '\0';i++)
    {

        if(zdanie[i]!=32)
        zdanie[ i ] += klucz;
        else
            continue;

        if( zdanie[ i ] > 'z') zdanie[ i ] -= ilosc_liter;

        if( zdanie[ i ] < 'a' && zdanie[ i ] > 'Z') zdanie[ i ] += ilosc_liter;

        if( zdanie[ i ] > 'Z' && zdanie[ i ] < 'a') zdanie[ i ] -= ilosc_liter;

        if( zdanie[ i ] < 'A' && zdanie[ i ] > 'Z') zdanie[ i ] += ilosc_liter;
    }
    return zdanie;
}

string deszyfruj(int klucz, string &zdanie)
{
    int i = 0;
    int ilosc_liter = 'z' - 'a' + 1;
    klucz = klucz % ilosc_liter;
    for(i=0;zdanie[ i ] != '\0';i++)
    {
        if(zdanie[i]!=32)
        zdanie[ i ] -= klucz;
        else
            continue;

        if( zdanie[ i ] > 'z' ) zdanie[ i ] -= ilosc_liter;

        if( zdanie[ i ] < 'a' && zdanie[ i ] > 'Z') zdanie[ i ] += ilosc_liter;

        if( zdanie[ i ] > 'z' && zdanie[ i ] > 'Z') zdanie[ i ] -= ilosc_liter;

        if( zdanie[ i ] < 'a' && zdanie[ i ] > 'Z') zdanie[ i ] += ilosc_liter;
    }
    return zdanie;
}

int main()
{
    char w;
    string zdanie;
    int kl;

    do
    {   system("cls");
        cout<<"             MENU            "<<endl;
        cout<<"-----------------------------"<<endl;
        cout<<"1. Wczytaj zdanie"<<endl;
        cout<<"2. Wyswietl zdanie"<<endl;
        cout<<"3. Wybierz klucz"<<endl;
        cout<<"4. Szyfruj"<<endl;
        cout<<"5. Deszyfruj"<<endl;
        cout<<"6. Zakoncz program"<<endl;
        cin>>w;
        cin.ignore();
        switch(w)
        {
        case '1': wczytaj(zdanie); break;
        case '2': wyswietl(zdanie); break;
        case '3': wczyt_kl(kl); break;
        case '4': szyfruj(kl,zdanie); break;
        case '5': deszyfruj(kl,zdanie); break;
        }
    } while(w!='6');
    return 0;
}

 

1 odpowiedź

0 głosów
odpowiedź 7 grudnia 2015 przez jegor377 Stary wyjadacz (13,230 p.)
wczyt_kl(); - nic nie zwraca i nic nie zmienia, bo wysylasz jej kopie zmiennej. :)
komentarz 7 grudnia 2015 przez Armando Obywatel (1,870 p.)
Rzeczywiście, nie zauważyłem tego. Dziękuję. Teraz program zmienia wyżej wymienione przeze mnie litery ale przy deszyfrowywaniu dalej zwraca nieprawidłowe.
komentarz 7 grudnia 2015 przez jegor377 Stary wyjadacz (13,230 p.)
Spk, spk. :D
komentarz 7 grudnia 2015 przez Armando Obywatel (1,870 p.)
Błąd dalej gdzieś musi tkwić przy warunkach w funkcji szyfrującej lub deszyfrującej.

Podobne pytania

0 głosów
1 odpowiedź 1,542 wizyt
pytanie zadane 5 maja 2016 w C i C++ przez Linker Bywalec (2,690 p.)
0 głosów
2 odpowiedzi 905 wizyt
pytanie zadane 26 lutego 2016 w C i C++ przez rafalmagician Obywatel (1,320 p.)
0 głosów
0 odpowiedzi 477 wizyt

92,977 zapytań

141,939 odpowiedzi

321,182 komentarzy

62,303 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...