Задания
Версия для печати и копирования в MS Word
Тип Д19 C4 № 3620
i

При про­грам­ми­ро­ва­нии школь­ной те­сти­ру­ю­щей си­сте­мы по ан­глий­ско­му языку вы­яс­ни­лось, что файлы с во­про­са­ми к те­стам легко до­ступ­ны, и каж­дый может перед те­стом от­крыть их и за­ра­нее узнать во­про­сы. Было ре­ше­но за­ко­ди­ро­вать файлы. Для этого при­ду­ма­ли сле­ду­ю­щий ал­го­ритм.

Каж­дая стро­ка файла ко­ди­ру­ет­ся от­дель­но.

В каж­дой стро­ке ищут­ся от­дель­ные слова, и все сим­во­лы слова сдви­га­ют­ся по ал­фа­ви­ту цик­ли­че­ски впра­во на длину слова.

Сло­вом счи­та­ет­ся любая по­сле­до­ва­тель­ность под­ряд иду­щих сим­во­лов ла­тин­ско­го ал­фа­ви­та, строч­ных и про­пис­ных.

Цик­ли­че­ский сдвиг сим­во­ла по ал­фа­ви­ту впра­во на X  — за­ме­на сим­во­ла на сим­вол, сто­я­щий в ал­фа­ви­те на X по­зи­ций даль­ше. Если при этом про­ис­хо­дит выход за пре­де­лы ал­фа­ви­та, счёт на­чи­на­ет­ся с на­ча­ла ал­фа­ви­та.

При­мер цик­ли­че­ско­го сдви­га сим­во­лов на 3 по­зи­ции: буква «Е» пре­вра­ща­ет­ся в букву «Н», буква «t»  — в букву «w» буква «Y»  — в букву «В».

На­пи­ши­те эф­фек­тив­ную, в том числе и по ис­поль­зу­е­мой па­мя­ти, про­грам­му (ука­жи­те ис­поль­зу­е­мую вер­сию языка про­грам­ми­ро­ва­ния, на­при­мер Borland Pascal 7.0), ко­то­рая долж­на за­ко­ди­ро­вать стро­ку по ука­зан­но­му ал­го­рит­му.

На вход про­грам­ме по­да­ет­ся стро­ка, со­сто­я­щая из не более чем 250 сим­во­лов ла­тин­ско­го ал­фа­ви­та, про­бе­лов, зна­ков пре­пи­на­ния, раз­но­го рода ско­бок, ка­вы­чек и дру­гих сим­во­лов. Стро­ка за­кан­чи­ва­ет­ся сим­во­лом «#». Дру­гих сим­во­лов «#» в стро­ке нет.

Про­грам­ма долж­на вы­ве­сти за­ко­ди­ро­ван­ную по ука­зан­но­му ал­го­рит­му стро­ку.

 

При­мер вход­ных дан­ных:

Day, mice. "Year" - a mistake#

При­мер вы­ход­ных дан­ных:

Gdb, qmgi. "Ciev" - b tpzahrl#

Спрятать решение

Ре­ше­ние.

ПАС­КАЛЬ

var.s:string;

flag:boolean;

i, k,len:integer; begin

readln(s); {счи­та­ли всю вход­ную стро­ку}

flag:=false; {при­знак се­ре­ди­ны слова}

for i : =1 to length (s) do

begin

{если те­ку­щий сим­вол - буква}

if (upcase(s[i])>='A' ) and (upcase(s[i])<= 'Z')

then

if flag then {не пер­вая буква слова}

len:=len+1 {те­ку­щая длина слова уве­ли­чи­лась на 1}

else {пер­вая буква слова}

begin

flag:=true;

len:=1 {те­ку­щая длина слова = 1}

end

else {те­ку­щий сим­вол  — не буква}

if flag then {слово толь­ко что за­кон­чи­лось}

begin

flag:=false; for k:=1 to len do {пе­ре­би­ра­ем все сим­во­лы слова}

begin

if ((s[i-k]>='a') and (s[i-k]<='z'))

then

s[i-k]:=chr((ord(s[i-k])+len-ord('a')) mod 26 + ord('a'))

else

s[i-k]:=chr((ord(s[i-k])+len-ord('A')) mod 26 + ord('A'));

end

end

end;

writeln(s)

end.

Спрятать критерии
Критерии проверки:

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­нияБаллы
Про­грам­ма ра­бо­та­ет для любых вход­ных дан­ных про­из­воль­но­го раз­ме­ра. Про­грам­ма про­смат­ри­ва­ет вход­ные дан­ные один раз. До­пус­ка­ет­ся на­ли­чие в тек­сте про­грам­мы одной син­так­си­че­ской ошиб­ки: про­пу­щен или не­вер­но ука­зан знак пунк­ту­а­ции, не­вер­но на­пи­са­но или про­пу­ще­но за­ре­зер­ви­ро­ван­ное слово языка про­грам­ми­ро­ва­ния, не опи­са­на или не­вер­но опи­са­на пе­ре­мен­ная, при­ме­ня­ет­ся опе­ра­ция, не­до­пу­сти­мая для со­от­вет­ству­ю­ще­го типа дан­ных (если одна и та же ошиб­ка встре­ча­ет­ся не­сколь­ко раз, то это счи­та­ет­ся за одну ошиб­ку).4
Про­грам­ма ра­бо­та­ет верно. До­пус­ка­ет­ся на­ли­чие от одной до трех син­так­си­че­ских оши­бок. Воз­мож­но, в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ном вводе дан­ных есть одна ошиб­ка (на­при­мер, ис­поль­зо­ва­ние read вме­сто readln в Пас­ка­ле или не­вер­ное счи­ты­ва­ние стро­ки в C++). Три балла также вы­став­ля­ет­ся, если в эф­фек­тив­ной про­грам­ме, удо­вле­тво­ря­ю­щей кри­те­ри­ям вы­став­ле­ния 4 бал­лов, есть одна ошиб­ка, в ре­зуль­та­те ко­то­рой про­грам­ма ра­бо­та­ет не­вер­но на не­ко­то­рых на­бо­рах не­ти­пич­ных вход­ных дан­ных.3
Про­грам­ма ра­бо­та­ет в целом верно, эф­фек­тив­но или нет, но в ре­а­ли­за­ции ал­го­рит­ма со­дер­жит­ся до двух оши­бок (не­вер­ная ини­ци­а­ли­за­ция счётчи­ков, до­пу­ще­на ошиб­ка в прин­ци­пи­аль­но верно ор­га­ни­зо­ван­ной сор­ти­ров­ке или ал­го­рит­ме по­ис­ка ми­ни­маль­ных эле­мен­тов, ис­поль­зу­ет­ся знак “<” вме­сто “<=”, “or” вме­сто “and” и тому по­доб­ное).

Воз­мож­но, не­кор­рект­но ор­га­ни­зо­ва­но счи­ты­ва­ние вход­ных дан­ных. До­пус­ка­ет­ся на­ли­чие от одной до пяти син­так­си­че­ских оши­бок, опи­сан­ных выше

2
Про­грам­ма, воз­мож­но, не­вер­но ра­бо­та­ет при не­ко­то­рых вход­ных дан­ных, но по при­ведённому тек­сту ре­ше­ния ясно, что эк­за­ме­ну­е­мый по­ни­ма­ет, из каких эта­пов долж­но со­сто­ять ре­ше­ние за­да­чи. При ис­поль­зо­ва­нии сор­ти­ров­ки она может быть ре­а­ли­зо­ва­на прин­ци­пи­аль­но не­вер­но (на­при­мер, вме­сто двух цик­лов ис­поль­зу­ет­ся один), или до­пу­ще­на прин­ци­пи­аль­ная ошиб­ка в по­ис­ке нуж­ных эле­мен­тов. Всего до­пус­ка­ет­ся до 4 раз­лич­ных оши­бок в ре­а­ли­за­ции ал­го­рит­ма, в том числе опи­сан­ных в кри­те­ри­ях при­сво­е­ния двух бал­лов. До­пус­ка­ет­ся на­ли­чие от одной до семи син­так­си­че­ских оши­бок, опи­сан­ных выше.1
За­да­ние не вы­пол­не­но или вы­пол­не­но не­вер­но.0
Мак­си­маль­ный балл4