СДАМ ГИА: РЕШУ ОГЭ
Образовательный портал для подготовки к экзаменам
Информатика
информатика
сайты - меню - вход - новости


Задания
Версия для печати и копирования в MS Word
Задание 20 № 816

Вы­бе­ри­те ОДНО из пред­ло­жен­ных ниже за­да­ний: 20.1 или 20.2.

 

20.1 Ис­пол­ни­тель Робот умеет пе­ре­ме­щать­ся по ла­би­рин­ту, на­чер­чен­но­му на плос­ко­сти, раз­би­той на клет­ки. Между со­сед­ни­ми (по сто­ро­нам) клет­ка­ми может сто­ять стена, через ко­то­рую Робот прой­ти не может.

У Ро­бо­та есть де­вять ко­манд. Че­ты­ре ко­ман­ды — это ко­ман­ды-при­ка­зы:

 

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

 

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

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

Ещё че­ты­ре ко­ман­ды —  это ко­ман­ды про­вер­ки усло­вий. Эти ко­ман­ды про­ве­ря­ют, сво­бо­ден ли путь для Ро­бо­та в каж­дом из четырёх воз­мож­ных на­прав­ле­ний:

 

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

 

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

 

если усло­вие то

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

все

 

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

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

впра­во

за­кра­сить

все

 

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

 

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

впра­во

все

 

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

 

нц пока усло­вие

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

кц

 

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

 

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

впра­во

кц

 

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

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

На ри­сун­ке ука­зан один из воз­мож­ных спо­со­бов рас­по­ло­же­ния стен и Ро­бо­та

(Робот обо­зна­чен бук­вой «Р»).

 

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

 

 

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

 

Ал­го­ритм дол­жен ре­шать за­да­чу для про­из­воль­но­го раз­ме­ра поля, лю­бо­го до­пу­сти­мо­го рас­по­ло­же­ния стен и лю­бо­го рас­по­ло­же­ния и раз­ме­ра про­хо­да.

 

 

 

 

 

 

 

 

 

 

 

20.2 На­пи­ши­те про­грам­му, ко­то­рая в по­сле­до­ва­тель­но­сти на­ту­раль­ных чисел опре­де­ля­ет сумму всех чисел, крат­ных 6 и окан­чи­ва­ю­щих­ся на 2. Про­грам­ма по­лу­ча­ет на вход на­ту­раль­ные числа, ко­ли­че­ство введённых чисел не­из­вест­но, по­сле­до­ва­тель­ность чисел за­кан­чи­ва­ет­ся чис­лом 0 (0 — при­знак окон­ча­ния ввода, не вхо­дит в по­сле­до­ва­тель­ность).

Ко­ли­че­ство чисел не пре­вы­ша­ет 100. Введённые числа не пре­вы­ша­ют 300. Про­грам­ма долж­на вы­ве­сти одно число: сумму всех чисел, крат­ных 6 и окан­чи­ва­ю­щих­ся на 2.

 

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

 

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

12

24

22

72

11

0

84

Ре­ше­ние.

20.1 Ко­ман­ды ис­пол­ни­те­ля будем за­пи­сы­вать жир­ным шриф­том, а ком­мен­та­рии –

кур­си­вом. На­ча­ло ком­мен­та­рия будем обо­зна­чать сим­во­лом "|" .

 

|Дви­га­ем­ся впра­во, пока не дой­дем до про­хо­да

нц пока не (снизу сво­бод­но)

впра­во

кц

 

|Дви­га­ем­ся впра­во по про­хо­ду

нц пока (снизу сво­бод­но)

впра­во

кц

 

|Дви­га­ем­ся впра­во и за­кра­ши­ва­ем клет­ки над го­ри­зон­таль­ной ли­ни­ей после про­хо­да

нц пока не (снизу сво­бод­но)

за­кра­сить

впра­во

кц

 

|Дви­га­ем­ся вниз, чтобы ока­зать­ся у внеш­ней сто­ро­ны пра­во­го вер­ти­каль­но­го от­рез­ка стены

вниз

 

|Дви­га­ем­ся вниз и за­кра­ши­ва­ем остав­ши­е­ся клет­ки

нц пока не (слева сво­бод­но)

за­кра­сить

вниз

кц

 

Воз­мож­ны и дру­гие ва­ри­ан­ты ре­ше­ния.

 

20.2 Ре­ше­ни­ем яв­ля­ет­ся про­грам­ма, за­пи­сан­ная на любом языке про­грам­ми­ро­ва­ния. При­мер вер­но­го ре­ше­ния, за­пи­сан­но­го на языке Пас­каль:

 

var a, s: integer;

begin

s := 0;

readln(a);

while a<>0 do

begin

if (a mod 6 = 0) and (a mod 10 = 2) then

s := s + a;

readln(a);

end;

writeln(s);

end.

 

Воз­мож­ны и дру­гие ва­ри­ан­ты ре­ше­ния. Для про­вер­ки пра­виль­но­сти ра­бо­ты про­грам­мы не­об­хо­ди­мо ис­поль­зо­вать сле­ду­ю­щие тесты:

 

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

12

72

0

84
2

60

0

0
3

22

0

0
4

74

12

0

12