Programowanie C++ / HTML & CSS / Arduino - ProximalBots

C++

Szyfr harcerski

Rozwiązanie za pomocą pętli for

Program szyfrujący podany tekst szyfrem harcerskim

Przykładowy klucz: PO-LS-KA

Jeżeli litera w słowie, które chcemy zaszyfrować występuje także w naszym kluczu np. litera "P", to wtedy zamieniamy ją z literą sąsiadującą w parze, w naszym przypadku "P" zamieniamy na "O",

jeśli dana litera nie występuje w kluczu to przepisujemy ją bez zmian np. "R"

if (a[i] == klucz[j])

ta linia kodu porównuje litery słowa z literami klucza, i jeśli litera słowa znajduje się także w kluczu to program wykonuje zamianę liter. W tym miejscu musimy rozważyć dwie możliwości:

  • kiedy litera znajduje się na miejscu parzystym
  • kiedy litera znajduje się na miejscu nieparzystym

Należy pamiętać przy tym, że numerację zaczynamy od zera.

Przypadek 1.

Sprawdzamy czy litera jest na miejscu parzystym (czy reszta z dzielenia przez 2 = 0): if (j % 2 == 0) - "j" to pozycja litery w łańcuchu

jeśli jest parzysta np. tak jak w przypadku "P" (j = 0) to aby zamienić "P" na "O" musimy zwiększyć wartość pozycji (j) o 1
a[i] = klucz[j + 1]

Przypadek 2.

W przeciwnym razie, kiedy pozycja (j) jest nieparzysta np. tak jak w przypadku "A" (j = 5) musimy zmniejszyć wartość pozycji (j) o 1 (aby zamienić "A" na "K") else a[i] = klucz[j - 1];

#include "iostream"
using namespace std;
 
int main()
{
    char a[50], klucz[20];
 
    cout << "Podaj takst: ";
    cin >> a;
    cout << "Podaj klucz: ";
    cin >> klucz;
 
    for (int i = 0; a[i] != NULL; i++)
    {
        for (int j = 0; klucz[j] != NULL; j++)
        {
            if (a[i] == klucz[j])
            {
                if (j % 2 == 0) a[i] = klucz[j + 1];
 
                else a[i] = klucz[j - 1];
                break;
            }
        }
    }
    cout << "szyfr: " << a << endl;
 
    return 0;
}

Aktualności