ГДЗ Информатика 10 класс Семакин §10 Автоматическая обработка информации









1. На информационной ленте машины Поста расположен массив из N меток. Каретка находится под крайней левой меткой. Какое состояние установится на ленте после выполнения следующей программы?

1 → 2

2 ↕ 3

3 → 4

4 ? 5,2

5 ← 6

6 v 7

7 !

В результате выполнения программы на ленте останутся 2 метки - крайняя левая и крайняя правая (из тех, что были на ленте первоначально).

Команды 2, 3, 4 стирают все метки после первой левой. В команде 5 каретка возвратится назад, а в команде 6 будет поставлена метка на месте последней стертой.

2. На информационной ленте на некотором расстоянии справа от каретки, стоящей под пустой клеткой, находится непрерывный массив меток. Требуется присоединить к правому концу массива одну метку.

1→2     2?1,3       3→4        4?5, 3       5v6       6!

Двигаемся вправо пока не начнется массив меток, двигаемся дальше пока не конец. Конец? Пишем одну метку

3. На ленте расположен массив из 2n - 1 меток. Составить программу отыскания средней метки и стирания ее.

Команда

Переход

Комментарий

<

2

Ищем первую незаполненную ячейку слева

?

3,1

 

1

4

 

>

5

 

0

6

Правая пустая ячейка сдвигается вправо

>

7

 

?

8,6

Ищем правую незаполненную ячейку справа

1

9

 

<

10

 

?

12,11

Если текущая ячейка не заполнена, то она центральная

0

1

Левая пустая ячейка сдвигается влево

<

13

Стираем лишние заполненные ячейки по краям. Идем до левого края

?

14,12

 

>

15

 

0

16

Стираем крайнюю левую метку

>

17

Идем до центральной клетки

?

18,16

 

>

19

Идем до правого края

?

20,18

 

<

21

 

0

22,20

Стираем крайнюю метку

<

23

Возвращаемся в центральную ячейку

?

24,22

 

 

4. На ленте расположен массив из 2n меток. Составить программу, по которой машина раздвинет на расстояние в одну клетку две половины данного массива.

program z;

const n = 15;  // задаем количество элементов в массиве

var  i, k, s:integer; // задаем переменные целого типа

m:array [1..2*n+1] of integer;

begin

for i:=1 to 2*n do  // записываем в массив 2*n меток

m[i]:=1;

for i:=1 to 2*n do  // выводим исходный массив на экран

write(m[i],' ');

writeln;    // переходим на новую строку для вывода ответа

for i:=2*n+1 downto n+1 do  // сдвигаем на одну клетку вправо вторую половину массива

m[i]:=m[i-1];

m[n+1]:=0;

for i:=1 to 2*n+1 do  // выводим полученный массив на экран

write(m[i],' ');

end.

Смотрите также: