1. Расчертить все поле горизонтальными пунктирными линиями.
НАЧ
ПОКА впереди НЕ стена
НЦ
ДЕЛАЙ линия
ДЕЛАЙ правый переход
ДЕЛАЙ линия
ДЕЛАЙ левый переход
КЦ
КОН
ПРОЦЕДУРА линия
ПОКА впереди НЕ стена
НЦ
ШАГ
ЕСЛИ впереди НЕ стена
ТО
ПРЫЖОК
ВСЁ
КЦ
КОНЕЦ ПРОЦЕДУРЫ
ПРОЦЕДУРА правый переход
ПОВОРОТ
ПОВОРОТ
ПОВОРОТ
ЕСЛИ впереди НЕ стена
ТО
ПРЫЖОК
ПОВОРОТ
ПОВОРОТ
ПОВОРОТ
ВСЁ
КОНЕЦ ПРОЦЕДУРЫ
ПРОЦЕДУРА левый переход
ПОВОРОТ
ЕСЛИ впереди НЕ стена
ТО
ПРЫЖОК
ПОВОРОТ
ВСЁ
КОНЕЦ ПРОЦЕДУРЫ
2) Нарисовать квадраты во всех углах поля.
НАЧ
ДЕЛАЙ квадрат
ДЕЛАЙ переход
ДЕЛАЙ квадрат
ДЕЛАЙ переход
ДЕЛАЙ квадрат
ДЕЛАЙ переход
ДЕЛАЙ квадрат
КОН
ПРОЦЕДУРА квадрат
ШАГ
ПОВОРОТ
ПОВОРОТ
ПОВОРОТ
ШАГ
ПОВОРОТ
ПОВОРОТ
ПОВОРОТ
ШАГ
ПОВОРОТ
ПОВОРОТ
ПОВОРОТ
ШАГ
ПОВОРОТ
ПОВОРОТ
ПОВОРОТ
КОНЕЦ ПРОЦЕДУРЫ
ПРОЦЕДУРА переход
ПОКА впереди НЕ стена
НЦ
ПРЫЖОК
КЦ
ПОВОРОТ
ПОВОРОТ
ПОВОРОТ
КОНЕЦ ПРОЦЕДУРЫ
//Обьявляем дополнительные переменные и главный массив, а также два дополнительных - они будут "половинками".
var
a, b, c: array [1..100] of longint;
i, min, n, j, t: longint;
begin
//Читаем количество элементов в нашем массиве.
readln(n);
//Читаем массив.
for i := 1 to n do read(a[i]);
//Заполняем первую "половинку".
for i := 1 to n div 2 do b[i] := a[i];
//Заполняем вторую "половинку". Но раз это уже вторая "половинка" главного массива, то и
//цикл теперь должен начинаться со второй части массива, а заканчиваться уже в его конце.
for i := n div 2 + 1 to n do c[i - n div 2] := a[i];
//Теперь отсортируем первую "половинку" методом выбора. Идея этого метода
//основывается на том, что мы ищем минимальный среди неотсортированных элемент,
//а затем аем его с тем, который стоит сразу после отсортированных.
for i := 1 to (n - 1) div 2 do
begin
min := i;
for j := i + 1 to n div 2 do
if b[min] > b[j] then
min := j;
if min <> i then begin
t := b[i];
b[i] := b[min];
b[min] := t;
end;
end;
//Затем вторую точно также, только стоит обратить внимание на сравнения.
//Так как надо отсортировать по убыванию, то теперь сравнение перед "swap"-ом
//будет другим.
for i := 1 to (n - 1) div 2 do
begin
min := i;
for j := i + 1 to n div 2 do
if c[min] < c[j] then
min := j;
if min <> i then begin
t := c[i];
c[i] := c[min];
c[min] := t;
end;
end;
//А теперь по очереди выводим готовые "половинки", не забывая ставить
//пробел после вывода каждого элемента.
for i := 1 to n div 2 do write(b[i], ' ');
for i := 1 to n - n div 2 do write(c[i], ' ');
end.