информатика
сайты - меню - вход - новости




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

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

 

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

 

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

 

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

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

 

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

 

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

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

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

все

 

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

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

вправо

закрасить

все

 

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

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

вправо

все

 

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

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

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

кц

 

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

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

вправо

кц

 

 

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

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

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

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

 

 

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

 

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

 

Входные данныеВыходные данные
16
24
56
22
12
0
72

Пояснение.

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

нц

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

закрасить

вправо

кц

 

нц

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

закрасить

вниз

кц

 

закрасить

 

нц

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

влево

кц

 

вниз

 

нц

пока не (справа свободно)

закрасить

вниз

кц

 

закрасить

вправо

 

нц

пока не (сверху свободно)

закрасить

вправо

кц

 

20.2 Решение

 

var a, s: integer;

begin

s: = 0;

readln(a);

while a<>0 do begin

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

s : = s + a;

readln(a);

end;

writeln(s)

end.

 

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

 

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

8

6

10

0

0
2

16

0

16
3

16

96

5

0

112