• 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.

VPS Starter Arubacloud
0 głosów
363 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,340 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 202 wizyt
pytanie zadane 25 listopada 2019 w C i C++ przez juske00 Początkujący (370 p.)
0 głosów
1 odpowiedź 848 wizyt
pytanie zadane 24 marca 2019 w C i C++ przez inc0gnito Początkujący (260 p.)
+1 głos
1 odpowiedź 546 wizyt
pytanie zadane 1 marca 2022 w Java przez ptomeccc Użytkownik (800 p.)

93,025 zapytań

141,990 odpowiedzi

321,293 komentarzy

62,374 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!

...