На вход программе подается текст заклинания, состоящего не более чем из
Условие
На вход программе подается текст заклинания, состоящего не более чем из 200 символов, заканчивающийся точкой (символ «точка» во входных данных единственный). Оно было зашифровано юным волшебником следующим образом. Сначала волшебник определил количество букв в самом коротком слове, обозначив полученное число К (словом называется непрерывная последовательность латинских букв, слова друг от друга отделяются любыми другими символами, длина слова не превышает 20 символов). Затем он заменил каждую латинскую букву в заклинании на следующую за ней К-ю по счету в алфавите (алфавит считается циклическим, то есть за буквой Z следует буква А), оставив другие символы Неизменными. Строчные буквы при этом остались строчными, а прописные — прописными. Требуется написать как можно более эффективную программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет выводить на экран текст расшифрованного заклинания. Например, если зашифрованный текст был таким: Bd Тс Ее Fed Тс,то результат расшифровки должен быть следующим:Zb Ra Сc Dcb Ra. Критерии оценивания выполнения задания | Баллы | Программа работает для любых входных данных. Допускается наличие в тексте программы одной синтаксической ошибки: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается несколько раз, то это считается за одну ошибку). | 4 | Программа работает верно, но входные данные запоминаются в массиве, размер которого соответствует числу N. Этот массив, возможно, потом сортируется. Возможно, в принципиально верно организованном вводе данных есть одна ошибка (например, использование read вместо readln в Паскале или неверное считывание строки в C++). Три балла также выставляется, если в эффективной программе, удовлетворяющей критериям выставления 4 баллов, есть одна ошибка, в результате которой программа работает неверно на некоторых наборах нетипичных входных данных. | 3 | Программа работает в целом верно, эффективно или нет, но в реализации алгоритма содержится до двух ошибок (неверная инициализация счётчиков, допущена ошибка в принципиально верно организованной сортировке или алгоритме поиска минимальных элементов, используется знак “<” вместо “<=”, “or” вместо “and” и тому подобное). Возможно, некорректно организовано считывание входных данных. Допускается наличие от одной до пяти синтаксических ошибок, описанных выше | 2 | Программа, возможно, неверно работает при некоторых входных данных, но по приведённому тексту решения ясно, что экзаменуемый понимает, из каких этапов должно состоять решение задачи. При использовании сортировки она может быть реализована принципиально неверно (например, вместо двух циклов используется один), или допущена принципиальная ошибка в поиске нужных элементов. Всего допускается до 4 различных ошибок в реализации алгоритма, в том числе описанных в критериях присвоения двух баллов. Допускается наличие от одной до семи синтаксических ошибок, описанных выше. | 1 | Задание не выполнено или выполнено неверно. | 0 | Максимальный балл | 4 |
Формат задания
Решение по шагам
Как рассуждать
Решение. Программа читает входные данные, сразу подсчитывая минимальную длину встречающихся слов. За второй проход исходных данных производится замена букв латинского алфавита и печать расшифрованного сообщения. Баллы начисляются только за программу, которая решает задачу хотя бы для частного случая (например, для строчных английских букв и без циклического сдвига). Пример правильной и эффективной программы на языке Паскаль:var f:boolean; i, k, min: integer; c,cnew:char; s:string; begin s : = " ;min:=250; k:=0; f:=false; repeat read(c); s:=s+c;if f then {слово началось} if с in ['a'..'z','A'..'Z']then k:=k+l else beginif kcmin then min:=k;f:=falseendelse {f=false}if с in [ 'a' ..'z', 'A'..'Z']then begin f:=true; k:=l end until c='. ' ;for i:=l to length(s) do begincnew: = chr (ord (s [i] ) -min) ; case s[i] of' a'..'z1:i f cnew<1 a 1 then write(chr(ord(cnew)+2 6)) else write(cnew); 1A'..' Z 1:if cnewc'A' then write(chr(ord(cnew)+26)) else write(cnew); else write(s[i]) end; end; readln end. Пример правильной программы на языке Бейсик: DIM i, j, min, к, f, a (26) AS. INTEGER DIM s AS STRING INPUT s i = 1 k = 0 min = 250 f = 0WHILE NOT (MID$(s, i,
Осталось ещё 6 шагов — откроются после входа:
- Шаг 2
- Шаг 3
- Шаг 4
- Шаг 5
- Шаг 6
- Шаг 7
Бесплатно · займёт минуту