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

На вход про­грам­ме по­да­ет­ся текст за­кли­на­ния, со­сто­я­ще­го не более чем из 200 сим­во­лов, за­кан­чи­ва­ю­щий­ся точ­кой (сим­вол «точка» во вход­ных дан­ных един­ствен­ный). Оно было за­шиф­ро­ва­но юным вол­шеб­ни­ком сле­ду­ю­щим об­ра­зом. Сна­ча­ла вол­шеб­ник опре­де­лил ко­ли­че­ство букв в самом ко­рот­ком слове, обо­зна­чив по­лу­чен­ное число К (сло­вом на­зы­ва­ет­ся не­пре­рыв­ная по­сле­до­ва­тель­ность ла­тин­ских букв, слова друг от друга от­де­ля­ют­ся лю­бы­ми дру­ги­ми сим­во­ла­ми, длина слова не пре­вы­ша­ет 20 сим­во­лов). Затем он за­ме­нил каж­дую ла­тин­скую букву в за­кли­на­нии на сле­ду­ю­щую за ней К-ю по счету в ал­фа­ви­те (ал­фа­вит счи­та­ет­ся цик­ли­че­ским, то есть за бук­вой Z сле­ду­ет буква А), оста­вив дру­гие сим­во­лы Не­из­мен­ны­ми. Строч­ные буквы при этом оста­лись строч­ны­ми, а про­пис­ные  — про­пис­ны­ми. Тре­бу­ет­ся на­пи­сать как можно более эф­фек­тив­ную про­грам­му (ука­жи­те ис­поль­зу­е­мую вер­сию языка про­грам­ми­ро­ва­ния, на­при­мер, Borland Pascal 7.0), ко­то­рая будет вы­во­дить на экран текст рас­шиф­ро­ван­но­го за­кли­на­ния.

На­при­мер, если за­шиф­ро­ван­ный текст был таким:

Bd Тс Ее Fed Тс,

то ре­зуль­тат рас­шиф­ров­ки дол­жен быть сле­ду­ю­щим:

Zb Ra Сc Dcb Ra.

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

Ре­ше­ние.

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

 

При­мер пра­виль­ной и эф­фек­тив­ной про­грам­мы на языке Пас­каль:

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 begin

if kcmin then

min:=k;

f:=false

end

else {f=false}

if с in [ 'a' ..'z', 'A'..'Z']

then begin f:=true; k:=l end

until c='. ' ;

for i:=l to length(s) do

begin

cnew: = 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 = 0

WHILE NOT (MID$(s, i, 1) = ".")

c$ = MID$ (s, i, 1)

IF f = 1 THEN

IF (c$ >= "A") AND (с $ <= "Z") OR

(C$ >= "a") AND (c$ <= "z") THEN

k = k + 1

ELSE IF k < min THEN min = k

f = 0

ENDIF

ELSE

IF (с $ >= "A") AND (c$ <= "Z") OR

(c$ >= "a") AND (c$ <= "z") THEN

f = 1: k = 1

ENDIF

ENDIF

i = i + I

WEND

IF к < min THEN min = k

FOR j = 1 TO i

cnew$ = CHR$(ASC(MID$(s, j, 1)) - min)

IF (MID$(s, j, 1) >= "a") AND (MID$(s, j, 1)

<= "z") THEN

IF cnew$ < "a" THEN

PRINT (CHR$(ASC(cnew$) + 26));

ELSE PRINT cnew$;

ENDIF

ELSE

IF (MIDS (s, j, 1) >= "A") AND (MID$ (s, j, 1)

<= "Z") THEN

IF cnew$ < "A" THEN

PRINT (CHR$(ASC(cnew$) + 26));

ELSE PRINT cnew$;

ENDIF

ELSE PRINT MID$(s, j, 1);

ENDIF

ENDIF

NEXT j

END

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

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

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

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