Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <string>
- #include <iostream>
- #include <array>
- #include <tuple>
- /*
- mozliwe ze program nie zadziala bez
- c++11
- */
- using namespace std;
- void bez_powtorzen(string &slowo) // usuwanie powtorzen liter w kluczu
- {
- for (int q = 0; q <= slowo.size(); q++)
- for (int w = q - 1; w >= 0; w--)
- if (slowo[q] == slowo[w])
- {
- slowo.erase(w);
- break;
- }
- }
- void usun_z_alf(string klucz, string &alfabet) // usuwanie klucza z alfabetu
- {
- for (int e = 0; e != klucz.size(); e++)
- for (int r = 0; r != alfabet.size(); r++)
- if (klucz[e] == alfabet[r])
- alfabet.erase(alfabet.begin() + r);
- }
- void wstaw(array<array<char, 5>, 5> &tabela, string a, string kluczyk) // wstawianie klucza i reszty alfabetu do tablicy
- {
- string calete = kluczyk + a;
- int n = 0;
- for (int i = 0; i != 5; i++)
- for (int j = 0; j != 5; j++)
- {
- tabela[i][j] = calete[n];
- n++;
- }
- }
- string spr_podzial(string jawniutki) // jesli sa takie same znaki albo 1 znak na ostatniej dwojce, wstawia x
- {
- string sprawdzony = "";
- for (int i = 0; i < jawniutki.length(); i += 2)
- {
- sprawdzony += jawniutki[i];
- if (jawniutki[i] == jawniutki[i + 1]) {
- sprawdzony += 'x';
- i--;
- }
- else sprawdzony += jawniutki[i + 1];
- }
- if (sprawdzony.length() % 2 == 1)
- sprawdzony += 'x';
- return sprawdzony;
- }
- tuple<int, int> pozycja(char x, array<array<char, 5>, 5> tabelka) // znalezienie pozycji znaku
- {
- int poz_x = 0, poz_y = 0;
- for (int i = 0; i != 5; ++i)
- {
- for (int j = 0; j != 5; ++j)
- if (tabelka[i][j] == x)
- {
- poz_x = j;
- poz_y = i;
- break;
- }
- if (poz_x != 0)
- break;
- }
- return make_tuple(poz_x, poz_y);
- }
- string szyfrowanie(string wyraz_jawny, array<array<char, 5>, 5> tabelunia)
- {
- string szyfrogram;
- int pozx_1, pozy_1, pozx_2, pozy_2;
- for (int f = 0; f != wyraz_jawny.size() - 2; f += 2)
- {
- tie(pozx_1, pozy_1) = pozycja(wyraz_jawny[f], tabelunia);
- tie(pozx_2, pozy_2) = pozycja(wyraz_jawny[f + 1], tabelunia);
- if (pozx_1 == pozx_2)
- {
- if (pozx_1 + 1 > 4)
- szyfrogram[f] = tabelunia[0][pozy_1];
- else
- szyfrogram[f] = tabelunia[pozx_1 + 1][pozy_1];
- if (pozx_2 + 1 > 4)
- szyfrogram[f + 1] = tabelunia[0][pozy_1];
- else
- szyfrogram[f + 1] = tabelunia[pozx_2 + 1][pozy_1];
- }
- if (pozy_1 == pozy_2)
- {
- if (pozy_1 + 1 > 4)
- szyfrogram[f] = tabelunia[pozx_1][0];
- else
- szyfrogram[f] = tabelunia[pozx_1][pozy_1 + 1];
- if (pozy_2 + 1 > 4)
- szyfrogram[f + 1] = tabelunia[pozx_1][0];
- else
- szyfrogram[f + 1] = tabelunia[pozx_1][pozy_2 + 1];
- }
- if (pozx_1 != pozx_2 && pozy_1 != pozy_2)
- {
- szyfrogram[f] = tabelunia[pozx_2][pozy_1];
- szyfrogram[f + 1] = tabelunia[pozx_1][pozy_2];
- }
- }
- return szyfrogram;
- }
- int main()
- {
- string alfabecik = "abcdefghijklmnopqrstuwxyz";
- string w_jawny, klucz, w_jawny_podzielony, szyfrogramik = "";
- array<array<char, 5>, 5> tab;
- cout << "wyraz jawny: ";
- cin >> w_jawny;
- cout << "\nklucz: ";
- cin >> klucz;
- bez_powtorzen(klucz);
- usun_z_alf(klucz, alfabecik);
- wstaw(tab, alfabecik, klucz);
- w_jawny_podzielony = spr_podzial(w_jawny);
- szyfrogramik = szyfrowanie(w_jawny_podzielony, tab);
- cout << "\nszyfrogram: " << szyfrogramik;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement