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


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

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

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

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

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

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

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

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

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

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

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

все

Здесь усло­вие − одна из ко­манд про­вер­ки усло­вия.

По­сле­до­ва­тель­ность ко­манд − это одна или не­сколь­ко любых ко­манд-при­ка­зов.

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

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

впра­во

за­кра­сить

все

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

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

впра­во

все

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

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

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

кц

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

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

впра­во

кц

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

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

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


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


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

Ал­го­ритм может быть вы­пол­нен в среде фор­маль­но­го ис­пол­ни­те­ля или  за­пи­сан в тек­сто­вом ре­дак­то­ре.

Со­хра­ни­те ал­го­ритм в фор­ма­те про­грам­мы Кумир или в тек­сто­вом файле. На­зва­ние файла и ка­та­лог для со­хра­не­ния Вам со­об­щат ор­га­ни­за­то­ры эк­за­ме­на.

 

Ре­ше­ние.

Это за­да­ние ещё не ре­ше­но, при­во­дим ре­ше­ние про­то­ти­па.


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

 

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

 

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

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

 

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

 

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

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

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

все

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

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

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

впра­во

за­кра­сить

все

 

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

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

впра­во

все

 

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

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

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

кц

 

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

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

впра­во

кц

 

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

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


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


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

 

15.2 На­пи­ши­те про­грам­му для ре­ше­ния сле­ду­ю­щей за­да­чи. Уче­ни­ки 4 клас­са вели днев­ни­ки на­блю­де­ния за по­го­дой и еже­днев­но за­пи­сы­ва­ли днев­ную тем­пе­ра­ту­ру. Най­ди­те сред­нюю тем­пе­ра­ту­ру за время на­блю­де­ния. Если ко­ли­че­ство дней, когда тем­пе­ра­ту­ра под­ни­ма­лась выше нуля гра­ду­сов, не менее 5, вы­ве­ди­те YES, иначе вы­ве­ди­те NO. Про­грам­ма по­лу­ча­ет на вход ко­ли­че­ство дней, в те­че­ние ко­то­рых про­во­ди­лось на­блю­де­ние N (1 ≤ N ≤ 31), затем для каж­до­го дня вво­дит­ся тем­пе­ра­ту­ра.

 

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


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

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

4

4

12

−2

8

3.5

 

NO


 

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

 

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

вниз

кц

 

впра­во

 

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

вверх

кц

 

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

за­кра­сить

вверх

кц

 

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

влево

кц

 

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

за­кра­сить

вверх

кц

 

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

var

a, N, i, num : integer;

sredn : real;

begin

num:=0; sredn:=0;

readln(N);

for i:=1 to N do begin

readln(a);

sredn := sredn + a;

if a > 0 then num := num + 1;

end;

sredn := sredn / N;

writeln(sredn);

if num >= 5 then writeln('YES')

else writeln('NO')

end.

Прототип задания ·