Neon_Falcon

10 laba шифр цезаря

Jun 13th, 2019
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. // 10 laba
  2. #include <stdio.h>
  3. #include <locale>
  4.  
  5. #define ENG 26
  6. #define RUS 32
  7.  
  8.  
  9. void encrypt(int n)
  10. {
  11. FILE* fp1, * fp2;
  12. fopen_s(&fp1, "C:\\Users\\1253140\\Desktop\\10 laba\\input.txt", "r");
  13. fopen_s(&fp2, "C:\\Users\\1253140\\Desktop\10 laba\\output.txt", "w");
  14. int flag;
  15. char c;
  16.  
  17. c = getc(fp1); // чтение одного байта
  18.  
  19. while (!feof(fp1)) // пока не конец файла
  20. {
  21. flag = 0; //обработан ли текущий символ
  22. if (c >= 65 && c <= 90) // алфавит от А-Z по таблице ASCII
  23. {
  24. c += (n % ENG);
  25. if (c > 90)
  26. {
  27. c = 65 + (c - 90) - 1;
  28. }
  29. fprintf(fp2, "%c", c);
  30. flag = 1;
  31. }
  32. if (c >= 97 && c <= 122) // алфавит от a-z по таблице ASCII
  33. {
  34. c += (n % ENG);
  35. if (c > 122)
  36. {
  37. c = 97 + (c - 122) - 1;
  38. }
  39. fprintf(fp2, "%c", c);
  40. flag = 1;
  41. }
  42. if (c >= -64 && c <= -33) // алфавит от А-Я по таблице ASCII
  43. {
  44. c += (n % RUS);
  45. if (c > -33)
  46. {
  47. c = (-64) + (c + 33) - 1;
  48. }
  49. fprintf(fp2, "%c", c);
  50. flag = 1;
  51. }
  52. if (c >= -32 && c <= -1) // алфавит от а-я по таблице ASCII
  53. {
  54. c += (n % RUS);
  55. if (c > -1)
  56. {
  57. c = (-32) + (c + 1) - 1;
  58. }
  59. fprintf(fp2, "%c", c);
  60. flag = 1;
  61. }
  62. if (flag == 0)
  63. {
  64. fprintf(fp2, "%c", c);
  65. }
  66. c = getc(fp1);
  67. }
  68. fclose(fp1);
  69. fclose(fp2);
  70. }
  71.  
  72. void decipher(int n)
  73. {
  74. FILE* fp1, * fp2;
  75. fopen_s(&fp1, "C:\\Users\\1253140\\Desktop\\10 laba\\input.txt", "r");
  76. fopen_s(&fp2, "C:\\Users\\1253140\\Desktop\\10 laba\\output.txt", "w");
  77. int flag;
  78. char c;
  79. c = getc(fp1);
  80. while (!feof(fp1))
  81. {
  82. flag = 0;
  83. if (c >= 65 && c <= 90) // алфавит от А-Z по таблице ASCII
  84. {
  85. c -= (n % ENG);
  86. if (c < 65)
  87. {
  88. c = 90 - (65 - c) + 1;
  89. }
  90. fprintf(fp2, "%c", c);
  91. flag = 1;
  92. }
  93. if (c >= 97 && c <= 122) // алфавит от a-z по таблице ASCII
  94. {
  95. c -= (n % ENG);
  96. if (c < 97)
  97. {
  98. c = 122 - (97 - c) + 1;
  99. }
  100. fprintf(fp2, "%c", c);
  101. flag = 1;
  102. }
  103. if (c >= -64 && c <= -33) // алфавит от А-Я по таблице ASCII
  104. {
  105. c -= (n % RUS);
  106. if (c < -64)
  107. {
  108. c = -33 - (-64 - c) + 1;
  109. }
  110. fprintf(fp2, "%c", c);
  111. flag = 1;
  112. }
  113. if (c >= -32 && c <= -1) // алфавит от а-я по таблице ASCII
  114. {
  115. c -= (n % RUS);
  116. if (c < -32)
  117. {
  118. c = -1 - (-32 - c) + 1;
  119. }
  120. fprintf(fp2, "%c", c);
  121. flag = 1;
  122. }
  123. if (flag == 0)
  124. {
  125. fprintf(fp2, "%c", c);
  126. }
  127. c = getc(fp1);
  128. }
  129. fclose(fp1);
  130. fclose(fp2);
  131. }
  132.  
  133. int main()
  134. {
  135. setlocale(LC_ALL, "Rus");
  136. int n, c;
  137. printf("Введите сдвиг: ");
  138. scanf_s("%d", &n);
  139. getchar(); //нужен для того, чтобы поймать символ клавиши ENTER, нажатой при вводе числа n
  140. system("cls");
  141.  
  142. if (n < 1)
  143. {
  144. return 0;
  145. }
  146.  
  147. printf("Выберите действие: \n");
  148. printf("1. Зашифровать текст \n");
  149. printf("2. Расшифровать текст \n");
  150.  
  151. scanf_s("%d", &c);
  152.  
  153. if (c == 1)
  154. {
  155. encrypt(n);
  156. }
  157. if (c == 2)
  158. {
  159. decipher(n);
  160. }
  161.  
  162. return 0;
  163. }
Advertisement
Add Comment
Please, Sign In to add comment