Advertisement
Guest User

Untitled

a guest
Jul 26th, 2017
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.37 KB | None | 0 0
  1. /* На вход программе подается текст, состоящий не более чем из 200 символов.
  2. Текст был зашифрован следующим образом. Сначала определили количество букв в самом коротком слове, обозначив полученное число n
  3. (словом называется непрерывная последовательность английских букв, слова друг от друга отделяются любыми другими символами).
  4. Затем заменили каждую английскую букву в тексте на следующую за ней n-й по счету в алфавите
  5. (алфавит считается циклическим, за буквой Z следует буква А), оставив другие символы неизменными.
  6. Строчные буквы при этом остались строчными, а прописные — прописными. Напишите программу, которая будет выводить расшифрованный текст.
  7. Программа должна считать выходые данные из файла input.txt и вывести результат в файл output.txt */
  8.  
  9. #include "StdAfx.h"
  10. #include <stdio.h>
  11. #include <iostream>
  12.  
  13. /*метод для дешифрования*/
  14. void PrevChar(char c, int n, int count)
  15. {
  16.     if(isalpha(c)) { //если буква
  17.         if(count - ('Z'-toupper(c))<=n) { //если нужен циклический алфавит
  18.             int k=n-(count - ('Z'-toupper(c)+1)); //считаем, на сколько надо сдвинуться влево от Z
  19.  
  20.             if(isupper(c))  c='Z'+1-k; //если буква большая, выводим большую
  21.             else            c='z'+1-k; //если буква не большая, выводим не большую
  22.         }
  23.         else c=c-n; //если циклический алфавит не нужен, то просто выводим предыдущую n-ную букву
  24.     }
  25.  
  26.     printf("%c", c); //собсно сам вывод получившегося символа (если не буква - никакой обработки нет)
  27. }
  28.  
  29. /*метод для шифрования*/
  30. void NextChar(char c, int n, int count)
  31. {
  32.     if(isalpha(c)) { //если буква
  33.         if('Z'-toupper(c)<n) {
  34.             int k=n-('Z'-toupper(c)+1);
  35.  
  36.             if(isupper(c))
  37.                 c='A'+k;
  38.             else
  39.                 c='a'+k;
  40.         }
  41.         else c=c+n;
  42.     }
  43.  
  44.     printf("%c", c);
  45. }
  46.  
  47. int main()
  48. {
  49.  
  50.     freopen("input.txt","r",stdin);
  51.     freopen("output.txt","w",stdout);
  52.  
  53.     const int count = 26; //сколько букв в алфавите
  54.     char c; //текущий символ
  55.     int n = 0; //счетчик минимальной длины слова
  56.     int min = count*10; //минимальная длина слова, иницилизация
  57.  
  58.     while (scanf("%c", &c) == 1) { //для каждого символа
  59.         if(isalpha(c)) { //если это английская буква
  60.             n++; //инкремент счетчика
  61.         }
  62.         else if(!isalpha(c)) { //если это не английская буква
  63.             if(n<min && n>1) //если счетчик меньше имеющейся минимальной длины и больше еденицы (последовательность)
  64.                 min=n; //обновляем минимальную длину
  65.             n=0; //очищаем счетчик
  66.         }
  67.     }
  68.    
  69.     if(n<min && n>1) //если счетчик меньше имеющейся минимальной длины и больше еденицы (последовательность)
  70.         min=n; //обновляем минимальную длину
  71.        
  72.     while(min>count) //пока минимальная длина больше алфавита
  73.         min=min-count; //уменьшаем минимальную длину на кол-во букв в алфавитеъ
  74.        
  75.     freopen("input.txt","r",stdin); //читаем вход сначала
  76.    
  77.     while (scanf("%c", &c) == 1) { //для каждого символа
  78.         PrevChar(c,min, count); //выводим min-ный предыдущий символ алфавита
  79.         //NextChar(c,min, count); //выводим min-ный следующий символ алфавита
  80.     }
  81.  
  82.     fclose (stdout);
  83.     fclose (stdin);
  84.  
  85.     return 0;
  86. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement