Задания
Версия для печати и копирования в MS Word
Тип Д18 C3 № 5085
i

15.1. Ис­пол­ни­тель Робот умеет пе­ре­ме­щать­ся по ла­би­рин­ту, на­чер­чен­но­му на плос­ко­сти, раз­би­той на клет­ки. Ниже при­ве­де­но опи­са­ние Ро­бо­та. У Ро­бо­та есть че­ты­ре ко­ман­ды пе­ре­ме­ще­ния:

вверх вниз влево впра­во

При вы­пол­не­нии любой из этих ко­манд Робот пе­ре­ме­ща­ет­ся на одну клет­ку со­от­вет­ствен­но: вверх ↑, вниз ↓, влево ←, впра­во →. Между со­сед­ни­ми (по сто­ро­нам) клет­ка­ми может сто­ять стена, через ко­то­рую Робот прой­ти не может. Если Робот по­лу­чит ко­ман­ду пе­ре­дви­же­ния через стену, то он раз­ру­шит­ся.

Че­ты­ре ко­ман­ды про­ве­ря­ют ис­тин­ность усло­вия от­сут­ствия стены у каж­дой сто­ро­ны той клет­ки, где на­хо­дит­ся Робот:

свер­ху сво­бод­но снизу сво­бод­но слева сво­бод­но спра­ва сво­бод­но

Эти ко­ман­ды можно ис­поль­зо­вать вме­сте с усло­ви­ем «eсли», име­ю­щим сле­ду­ю­щий вид:

если усло­вие то
по­сле­до­ва­тель­ность ко­манд
все

 

«По­сле­до­ва­тель­ность ко­манд»  — это одна или не­сколь­ко любых ко­манд, вы­пол­ня­е­мых Ро­бо­том. На­при­мер, для пе­ре­дви­же­ния на одну клет­ку впра­во, если спра­ва нет стен­ки, можно ис­поль­зо­вать такой ал­го­ритм:

если спра­ва сво­бод­но то
впра­во
все

 

В одном усло­вии можно ис­поль­зо­вать не­сколь­ко ко­манд про­вер­ки усло­вий, при­ме­няя ло­ги­че­ские связ­ки и, или, не, на­при­мер:

если (спра­ва сво­бод­но) и не (снизу сво­бод­но) то
впра­во
все

 

Для по­вто­ре­ния по­сле­до­ва­тель­но­сти ко­манд можно ис­поль­зо­вать цикл «пока», име­ю­щий сле­ду­ю­щий вид:

нц пока усло­вие
по­сле­до­ва­тель­ность ко­манд
кц

 

На­при­мер, для дви­же­ния впра­во, пока это воз­мож­но, можно ис­поль­зо­вать сле­ду­ю­щий ал­го­ритм:

нц пока спра­ва сво­бод­но
впра­во
кц

 

Также у Ро­бо­та есть ко­ман­да за­кра­сить, за­кра­ши­ва­ю­щая клет­ку, в ко­то­рой Робот на­хо­дит­ся в на­сто­я­щий мо­мент.

 

Вы­пол­ни­те за­да­ние.

 

На бес­ко­неч­ном поле име­ет­ся лест­ни­ца. Сна­ча­ла лест­ни­ца спус­ка­ет­ся вниз слева на­пра­во, потом под­ни­ма­ет­ся вверх также слева на­пра­во. После подъ­ема лест­ни­ца пе­ре­хо­дит в вер­ти­каль­ную стену. Вы­со­та каж­дой сту­пе­ни 1 клет­ка, ши­ри­на  — 1 клет­ка. Ко­ли­че­ство сту­пе­нек, ве­ду­щих вверх, и ко­ли­че­ство сту­пе­нек, ве­ду­щих вниз, не­из­вест­но. Между спус­ком и подъ­емом ши­ри­на пло­щад­ки 1 клет­ка. Робот на­хо­дит­ся в клет­ке, рас­по­ло­жен­ной в на­ча­ле спус­ка. На ри­сун­ке ука­зан один из воз­мож­ных спо­со­бов рас­по­ло­же­ния стен и Ро­бо­та (Робот обо­зна­чен бук­вой «Р»).

На­пи­ши­те для Ро­бо­та ал­го­ритм, за­кра­ши­ва­ю­щий все клет­ки, рас­по­ло­жен­ные не­по­сред­ствен­но над лест­ни­цей, как по­ка­за­но на ри­сун­ке. Робот дол­жен за­кра­сить толь­ко клет­ки, удо­вле­тво­ря­ю­щие дан­но­му усло­вию. На­при­мер, для при­ве­ден­но­го выше ри­сун­ка Робот дол­жен за­кра­сить сле­ду­ю­щие клет­ки (см. рис.).

Ко­неч­ное рас­по­ло­же­ние Ро­бо­та может быть про­из­воль­ным. Ал­го­ритм дол­жен ре­шать за­да­чу для бес­ко­неч­но­го поля и лю­бо­го ко­ли­че­ства сту­пе­ней. При ис­пол­не­нии ал­го­рит­ма Робот не дол­жен раз­ру­шить­ся.

 

15.2. На­пи­ши­те про­грам­му, ко­то­рая по двум дан­ным на­ту­раль­ным чис­лам a и b, не пре­вос­хо­дя­щим 30000, под­счи­ты­ва­ет ко­ли­че­ство чет­ных на­ту­раль­ных чисел на от­рез­ке [a, b] (вклю­чая концы от­рез­ка). Про­грам­ма по­лу­ча­ет на вход два на­ту­раль­ных числа a и b, при этом га­ран­ти­ру­ет­ся, что 1 ≤ a  b  30000. Про­ве­рять вход­ные дан­ные на кор­рект­ность не нужно. Про­грам­ма долж­на вы­ве­сти одно число: ко­ли­че­ство чет­ных чисел на от­рез­ке [a, b].

 

При­мер ра­бо­ты про­грам­мы:

 

Вход­ные дан­ные

Вы­ход­ные дан­ные

10

20

6

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

Ре­ше­ние.

15.1 Сле­ду­ю­щий ал­го­ритм вы­пол­нит тре­бу­е­мую за­да­чу.

впра­во

вниз

нц пока спра­ва сво­бод­но

за­кра­сить

впра­во

за­кра­сить

вниз

кц

за­кра­сить

вверх

нц пока спра­ва сво­бод­но

за­кра­сить

впра­во

за­кра­сить

вверх

кц

 

15.2. Ва­ри­ант ре­ше­ния на языке Пас­каль.

var a, b, count, i: integer;

begin

read(a, b);

count:=0;

for i := a to b do begin

if i mod 2 = 0 then count := count + 1;

end;

writeln(count);

end.

 

При­ве­дем дру­гое ре­ше­ние на языке Python.

a = int(input())

b = int(input())

count = 0

for i in range(a, b + 1):

if i % 2 == 0:

count += 1

print(count)

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

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­ния 15.1Баллы
Ал­го­ритм пра­виль­но ра­бо­та­ет при всех до­пу­сти­мых ис­ход­ных дан­ных2
При всех до­пу­сти­мых ис­ход­ных дан­ных верно сле­ду­ю­щее:

1) вы­пол­не­ние ал­го­рит­ма за­вер­ша­ет­ся, и при этом Робот не

раз­би­ва­ет­ся;

2) за­кра­ше­но не более 10 лиш­них кле­ток;

3) оста­лись не­за­кра­шен­ны­ми не более 10 кле­ток из числа тех,

ко­то­рые долж­ны были быть за­кра­ше­ны

1
За­да­ние вы­пол­не­но не­вер­но, т. е. не вы­пол­не­ны усло­вия, поз­во­ля­ю­щие по­ста­вить 1 или 2 балла0
Мак­си­маль­ный балл2

 

Кри­те­рии оце­ни­ва­ния вы­пол­не­ния за­да­ния 15.2Баллы
Пред­ло­же­но вер­ное ре­ше­ние. Про­грам­ма пра­виль­но ра­бо­та­ет на всех при­ведённых выше те­стах. Про­грам­ма может быть за­пи­са­на на любом языке про­грам­ми­ро­ва­ния2
Про­грам­ма выдаёт не­вер­ный ответ на одном из те­стов, при­ведённых выше. На­при­мер, ре­ше­ние, в ко­то­ром не­вер­но за­да­но усло­вие от­бо­ра чисел: if (a mod 8 = 0) or (a > 9) and (a < 100), вы­даст не­пра­виль­ный ответ на тесте № 11
Про­грам­ма выдаёт на те­стах не­вер­ные от­ве­ты, от­лич­ные от опи­сан­ных в кри­те­рии на 1 балл0
Мак­си­маль­ный балл2
Раздел кодификатора ФИПИ: