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

Szyfr Cezara. Działa z dużymi literami, nie działa z małymi.

Object Storage Arubacloud
0 głosów
327 wizyt
pytanie zadane 30 grudnia 2021 w C i C++ przez gaszalottii Nowicjusz (120 p.)

Poniższy program dot. szyfrowania Cezara z Książki Informatyka na czasie 3 podręcznik liceum str. 39 daje przykład szyfrowania dużych liter i wygląda, że działa prawidłowo.

*Myślałem, że prosta zamiana w linii nr 18 warunku z 'Z' na 'z' pozwoli, że program będzie działał podobnie z dla wpisywanych małych liter. Jednak dla wpisywanych liter "s, t, u, v, w, x, y, z" program daje wynik nieprawidłowy czyli spoza zakresy liter to jest Ç, ü, é, â, ä, ů, ć. Należy sądzić, że tylko dla tych liter nie działa działanie -26 w programie.

Nie rozumiem tego, dlaczego to się dzieje. 

Moje próby poszerzenia tego programu o dwie poniższe linijki  które mają zadanie wykryć duże i małe litery kończy się również niepowodzeniem

if (znak>='A' && znak<='Z') //sprawdzamy czy jest duża litera
if (znak>='a' && znak<='z') //sprawdzamy czy jest mała litera
        

Załączam kod programu, który opisuję tekście wyżej oznaczonym gwiazdką

Proszę o pomoc w zrozumieniu ww. problemu

#include <iostream>
#include <string>

using namespace std;

string Cezar (int klucz, string tekst)
{
    char kod;
    int dl = tekst.length();
    string szyfrogram = "";

    for (int i=0; i<dl; i++)
    {
       if (tekst[i] ==  ' ') kod = ' ';
       else
       {
            kod = tekst[i] + klucz;
            if (kod>'z') kod = kod - 26;
       }
       szyfrogram = szyfrogram + kod;
    }
    return szyfrogram;
}


int main ()
{
   string jawny;
   int klucz;

   cout << "Podaj tekst: ";
   getline(cin,jawny);

   cout << "Podaj klucz: ";
   cin >> klucz;
   cout << "Szyfrogram:  " << Cezar(klucz,jawny) << endl;


   return 0;
}

 

1 odpowiedź

+3 głosów
odpowiedź 30 grudnia 2021 przez Oscar Nałogowiec (29,290 p.)
Raczej nie działa warunek kod > 'z'.  Domyślnie typ char jest ze znakiem, przechowuje wartości od -128 do 127. Jeśli wcześniejsze dodawanie da wynik większy od 127 wystąpi przepełnienie i wyjdzie wartość ujemna. Warunek nie będzie spełniony. Znaki jakie wychodzą są właśnie z zakresu 'ponad 127'. Oznacz zmienne jako unsigned lub użyj odpowiedniej opcji kompilacji.

Podobne pytania

0 głosów
0 odpowiedzi 185 wizyt
pytanie zadane 25 listopada 2019 w C i C++ przez juske00 Początkujący (370 p.)
0 głosów
1 odpowiedź 746 wizyt
pytanie zadane 24 marca 2019 w C i C++ przez inc0gnito Początkujący (260 p.)
+1 głos
1 odpowiedź 391 wizyt
pytanie zadane 1 marca 2022 w Java przez ptomeccc Użytkownik (800 p.)

92,567 zapytań

141,420 odpowiedzi

319,615 komentarzy

61,952 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...