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




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

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

 

20.1

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

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

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

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

 

20.2 На­пи­ши­те программу, ко­то­рая в по­сле­до­ва­тель­но­сти целых чисел опре­де­ля­ет сумму двух наи­боль­ших и сумму двух наименьших. Про­грам­ма долж­на вы­ве­сти две этих суммы в ука­зан­ном порядке. Про­грам­ма по­лу­ча­ет на вход целые числа, ко­ли­че­ство введённых чисел не известно, после­до­ва­тель­ность чисел за­кан­чи­ва­ет­ся чис­лом 0 (0 — при­знак окон­ча­ния ввода, не вхо­дит в последовательность). Ко­ли­че­ство чисел не пре­вы­ша­ет 1000. Введённые числа по мо­ду­лю не пре­вы­ша­ют 30 000.

Пояснение.

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

 

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

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

закрасить

вверх

кц

 

| Закрасим уг­ло­вую клет­ку и пе­ре­ме­стим­ся в на­ча­ло го­ри­зон­таль­ной стены

закрасить

вправо

 

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

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

закрасить

вправо

кц

 

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

 

20.2 Ва­ри­ант ре­ше­ния на языке Паскаль.

 

var a, max, max2, min, min2: integer; 

begin

min:= 30001;

min2:= 30001;

max:= -30001;

max2:= -30001;

readln(a);

while true do

begin

if (a <= min) and (a<>0) then

begin

min2 := min;

min := a;

end

else if (a <= min2) then

min2:=a;

if a >= max then

begin

max2:=max;

max:=a;

end

else if (a >= max2) then

max2:=a;

readln(a);

if a = 0 then break;

end;

writeln(max+max2); writeln(min+min2);

end.