информатика
Математика
Информатика
Английский язык
Немецкий язык
Французcкий язык
Испанский язык
Физика
Химия
Биология
География
Обществознание
Литература
История
сайты - меню - вход - новости




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

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

 

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

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

 

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

 

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

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

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

 

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

 

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

 

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

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

все

 

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

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

вправо

закрасить

все

 

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

 

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

вправо

все

 

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

 

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

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

кц

 

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

 

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

вправо

кц

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

 

Робот на­хо­дит­ся в пра­вой клет­ке уз­ко­го го­ри­зон­таль­но­го коридора. Ши­ри­на ко­ри­до­ра — одна клетка, длина ко­ри­до­ра может быть произвольной. Воз­мож­ный ва­ри­ант на­чаль­но­го рас­по­ло­же­ния Ро­бо­та приведён на ри­сун­ке (Робот обо­зна­чен бук­вой «Р»):

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

 

 

 

 

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

Количество чисел не пре­вы­ша­ет 1000. Введённые числа не пре­вы­ша­ют 30 000. Про­грам­ма долж­на вы­ве­сти одно число: ко­ли­че­ство трёхзначных чисел, крат­ных 4.

 

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

 

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

120

9

365

4

0

1

Пояснение.

20.1 Ко­ман­ды ис­пол­ни­те­ля будем за­пи­сы­вать жир­ным шрифтом, а комментарии, по­яс­ня­ю­щие ал­го­ритм и не яв­ля­ю­щи­е­ся его частью, — курсивом. На­ча­ло ком­мен­та­рия будем обо­зна­чать сим­во­лом «|».

 

|Закрасим на­чаль­ную клетку

закрасить

|Двигаемся влево, пока не дойдём до конца коридора, за­кра­ши­вая все клет­ки на пути

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

влево

закрасить

кц

|Двигаемся вправо, воз­вра­ща­ясь в на­чаль­ную клетку

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

вправо

кц

 

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

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

 

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

 

var a, answer: integer;

begin

answer:=0;

readln(a);

while a<>0 do begin

if (a mod 4 = 0) and (a > 99) and (a <1000) then

answer := answer + 1;

readln(a); end;

writeln(answer);

end.

 

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

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

 

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

300

16

17

0

1
2

1000

8

0

0
3

400

420

0

2