Advertisement
Guest User

Untitled

a guest
Dec 16th, 2018
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.21 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <string>
  3. #include <iostream>
  4. #include <array>
  5. #include <tuple>
  6. /*
  7. mozliwe ze program nie zadziala bez
  8. c++11
  9. */
  10. using namespace std;
  11. void bez_powtorzen(string &slowo) // usuwanie powtorzen liter w kluczu
  12. {
  13. for (int q = 0; q <= slowo.size(); q++)
  14. for (int w = q - 1; w >= 0; w--)
  15. if (slowo[q] == slowo[w])
  16. {
  17. slowo.erase(w);
  18. break;
  19. }
  20. }
  21. void usun_z_alf(string klucz, string &alfabet) // usuwanie klucza z alfabetu
  22. {
  23. for (int e = 0; e != klucz.size(); e++)
  24. for (int r = 0; r != alfabet.size(); r++)
  25. if (klucz[e] == alfabet[r])
  26. alfabet.erase(alfabet.begin() + r);
  27. }
  28. void wstaw(array<array<char, 5>, 5> &tabela, string a, string kluczyk) // wstawianie klucza i reszty alfabetu do tablicy
  29. {
  30. string calete = kluczyk + a;
  31. int n = 0;
  32. for (int i = 0; i != 5; i++)
  33. for (int j = 0; j != 5; j++)
  34. {
  35. tabela[i][j] = calete[n];
  36. n++;
  37. }
  38. }
  39. string spr_podzial(string jawniutki) // jesli sa takie same znaki albo 1 znak na ostatniej dwojce, wstawia x
  40. {
  41. string sprawdzony = "";
  42. for (int i = 0; i < jawniutki.length(); i += 2)
  43. {
  44. sprawdzony += jawniutki[i];
  45. if (jawniutki[i] == jawniutki[i + 1]) {
  46. sprawdzony += 'x';
  47. i--;
  48. }
  49. else sprawdzony += jawniutki[i + 1];
  50.  
  51. }
  52. if (sprawdzony.length() % 2 == 1)
  53. sprawdzony += 'x';
  54. return sprawdzony;
  55. }
  56. tuple<int, int> pozycja(char x, array<array<char, 5>, 5> tabelka) // znalezienie pozycji znaku
  57. {
  58. int poz_x = 0, poz_y = 0;
  59. for (int i = 0; i != 5; ++i)
  60. {
  61. for (int j = 0; j != 5; ++j)
  62. if (tabelka[i][j] == x)
  63. {
  64. poz_x = j;
  65. poz_y = i;
  66. break;
  67. }
  68. if (poz_x != 0)
  69. break;
  70. }
  71. return make_tuple(poz_x, poz_y);
  72. }
  73. string szyfrowanie(string wyraz_jawny, array<array<char, 5>, 5> tabelunia)
  74. {
  75. string szyfrogram;
  76. int pozx_1, pozy_1, pozx_2, pozy_2;
  77. for (int f = 0; f != wyraz_jawny.size() - 2; f += 2)
  78. {
  79. tie(pozx_1, pozy_1) = pozycja(wyraz_jawny[f], tabelunia);
  80. tie(pozx_2, pozy_2) = pozycja(wyraz_jawny[f + 1], tabelunia);
  81. if (pozx_1 == pozx_2)
  82. {
  83. if (pozx_1 + 1 > 4)
  84. szyfrogram[f] = tabelunia[0][pozy_1];
  85. else
  86. szyfrogram[f] = tabelunia[pozx_1 + 1][pozy_1];
  87. if (pozx_2 + 1 > 4)
  88. szyfrogram[f + 1] = tabelunia[0][pozy_1];
  89. else
  90. szyfrogram[f + 1] = tabelunia[pozx_2 + 1][pozy_1];
  91. }
  92. if (pozy_1 == pozy_2)
  93. {
  94. if (pozy_1 + 1 > 4)
  95. szyfrogram[f] = tabelunia[pozx_1][0];
  96. else
  97. szyfrogram[f] = tabelunia[pozx_1][pozy_1 + 1];
  98. if (pozy_2 + 1 > 4)
  99. szyfrogram[f + 1] = tabelunia[pozx_1][0];
  100. else
  101. szyfrogram[f + 1] = tabelunia[pozx_1][pozy_2 + 1];
  102. }
  103. if (pozx_1 != pozx_2 && pozy_1 != pozy_2)
  104. {
  105. szyfrogram[f] = tabelunia[pozx_2][pozy_1];
  106. szyfrogram[f + 1] = tabelunia[pozx_1][pozy_2];
  107. }
  108. }
  109. return szyfrogram;
  110. }
  111. int main()
  112. {
  113. string alfabecik = "abcdefghijklmnopqrstuwxyz";
  114. string w_jawny, klucz, w_jawny_podzielony, szyfrogramik = "";
  115. array<array<char, 5>, 5> tab;
  116. cout << "wyraz jawny: ";
  117. cin >> w_jawny;
  118. cout << "\nklucz: ";
  119. cin >> klucz;
  120. bez_powtorzen(klucz);
  121. usun_z_alf(klucz, alfabecik);
  122. wstaw(tab, alfabecik, klucz);
  123. w_jawny_podzielony = spr_podzial(w_jawny);
  124. szyfrogramik = szyfrowanie(w_jawny_podzielony, tab);
  125. cout << "\nszyfrogram: " << szyfrogramik;
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement