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




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

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

 

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

 

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

 

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

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

 

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

 

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

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

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

все

 

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

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

вправо

закрасить

все

 

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

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

вправо

все

 

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

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

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

кц

 

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

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

вправо

кц

 

 

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

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

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

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

 

 

20.2 Напишите про­грам­му для ре­ше­ния следующей задачи. Ка­ме­ра наблюдения ре­ги­стри­ру­ет в ав­то­ма­ти­че­ском режиме ско­рость проезжающих мимо неё автомобилей, округ­ляя значения ско­ро­сти до целых чисел. Не­об­хо­ди­мо определить среднюю зарегистрированную скорость всех автомобилей. Если ско­рость хотя бы од­но­го автомобиля была не мень­ше 60 км/ч, вы­ве­ди­те «YES», иначе вы­ве­ди­те «NO».

Программа по­лу­ча­ет на вход число про­ехав­ших автомобилей N (1 ≤ N ≤ 30), затем ука­зы­ва­ют­ся их скорости. Зна­че­ние скорости не может быть мень­ше 1 и боль­ше 300. Про­грам­ма должна сна­ча­ла вывести сред­нюю скорость с точ­но­стью до од­но­го знака после запятой, затем «YES» или «NO».

 

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

 

Входные данныеВыходные данные
4
74
69
63
96
75.5
YES

Пояснение.

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

 

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

закрасить

влево

кц

 

вверх

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

закрасить

вверх

кц

 

 

 

20.2 Решение

 

var N, a, i: integer; s, ave: real; b: boolean;

begin

s := 0.0; b := false;

readln(N);

for i := 1 to N do

begin

readln(a); s := s + a;

if a >= 60 then b := true;

end;

ave := s/N; writeln(ave:6:1); if b then writeln('YES') else writeln('NO')

end.

 

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

 

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

3

50

81

65

65.3

YES

2

1

60

60.0

YES

3

2

13

52

32.5

NO

4

3

15

140

25

60.0

YES

Спрятать пояснение · ·
Владислав Коледа 25.05.2016 13:34

10 строка: if b then... После "b" надо написать "=True".

Сергей Никифоров

Здравствуйте! Такая запись возможна, поскольку переменная b имеет тип boolean.

Андрей Лукьянов 26.05.2017 13:41

2-3 строчка: Не­об­хо­ди­мо определить мак­си­маль­ную зарегистрированную ско­рость автомобиля.

6-7 строчка: Про­грам­ма должна сна­ча­ла вывести сред­нюю скорость с точ­но­стью до од­но­го знака после запятой,

(я с планшета если что)