Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

2.2. Что важно знать о программе

Можно ли написать программу для гораздо более сложной задачи, например, для перестановки всей мебели на этаже? Разумеется, можно, только программа для этого будет достаточно длинной.

Что требует от нас программа? Она требует абсолютной точности при ее составлении. Если, например, мы в первой команде ошибемся и скажем ПОВТОРИ 6 РАЗ ШАГ ВПЕРЕД (вместо 5 раз), робот проскочит мимо двери, на второй команде по­вернется и, добросовестно выполняя программу, на третьей команде проломит стену. Если мы перепутаем местами команды 6 и 7, то ро­бот сначала поставит стул, а потом об него же и споткнется.

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

Сообщать роботу команды мы обязаны только теми словами, кото­рые приведены в списке команд, потому что робот понимает только их. Если мы вместо команды ВОЗЬМИ ПРЕДМЕТ дадим команду, БЕРИ ПРЕДМЕТ, робот нас не поймет и команду не выполнит.

Задание 1

Напишите программу, по которой робот сходит в комнату за стулом и вернется с ним в коридор в исходное положение.

2.3. Понятие о процедуре. Может ли робот быть более интеллектуальным?

Умен ли наш робот? Судя по его реакции на ошибки в програм­ме нет. Умный робот не стал бы проламывать стенку. Однако наш робот не виноват в своей глупости. Ведь его умственные возможности исчерпываются списком его команд. А список этот очень бедный. Чем он беден?

Первое. В этом списке нет сложных команд, таких, как "Наведи порядок в комнате", "Перенеси мебель к другой стенке", и даже та­кой сравнительно простой, как "Переставь стул". Можете ли вы до­полнить список команд робота нужными вам командами? Можете, давайте придадим ему такую возможность. Пусть вы хотите, чтобы он выполнял команду на перестановку стула. Для этого вы приду­мываете программу перестановки стула (мы ее уже придумали в разделе 2.1), затем придумываете, как будет звучать новая ко­манда, например, ПЕРЕСТАВЬ СТУЛ, и, наконец, сообщаете роботу программу и говорите ему, что отныне он должен ее выполнять по команде ПЕРЕСТАВЬ СТУЛ. Такая программа называется процедурой, а новая команда ПЕРЕСТАВЬ СТУЛ - обращением к процедуре или вызовом процедуры.

Итак, мы дополнили список команд робота новой командой. Можно ли считать, что робот поумнел? Конечно. Но не очень. И вот почему. Пусть стул находится от двери не в трех шагах, а в двух. Тогда наш робот, выполняя процедуру ПЕРЕСТАВЬ СТУЛ, как она написана в разделе 2.1, споткнется об него, а это, конечно, не говорит о его уме. Чтобы переставить стул, где бы он ни был в комнате, робот должен сначала его найти, но команды на поиск нет в списке его команд, а составить из команд этого списка процедуру поиска невозможно. Мы начинаем видеть, чего не хватает в списке команд робота.

Второе. Он беден не только количеством команд, но и их содер­жанием. Все его команды касаются только ходьбы и переноса пред­метов. Фактически наш робот очень мало умеет, он может только бездумно расхаживать и таскать с места на место мебель. Он не мо­жет включить телевизор, так как не имеет хотя бы команды нажатия на кнопку. Он не может сходить в магазин, так как не умеет считать деньги. Он не может поздороваться с вами, так как не имеет коман­ды что-нибудь произнести. Можете ли вы что-то с этим поделать? Ничего не можете, потому что таким его сделали на заводе. Вам нужен робот с гораздо более разнообразными командами. Кроме того, хорошо было бы иметь команды для очень мелких движений, например, команду СОГНУТЬ СРЕДНИЙ ПАЛЕЦ НА ПРАВОЙ РУКЕ. Тогда из таких команд можно было бы составить процедуры вроде ПОЖМИ РУКУ, или НАЖМИ КНОПКУ, или ВКЛЮЧИ ТЕЛЕВИЗОР. Но воображаемый робот с такими возможностями был бы очень сложен и очень дорого бы стоил.

Вопрос. Что сделает наш поумневший робот, получив, находясь и исходном положении, такую бессмысленную программу:

Программа для робота Пояснения для нас с вами

1. ПЕРЕСТАВЬ СТУЛ Обращение к процедуре ПЕРЕСТАВЬ СТУЛ

2. НАЛЕВО Робот поворачивается налево

3. ПЕРЕСТАВЬ СТУЛ Обращение к процедуре ПЕРЕСТАВЬ СТУЛ

Ответ. Выполняя первую команду (обращение к процедуре ПEPECTABb СТУЛ), робот благополучно переставит стул. Выпол­няя вторую команду, он повернется лицом к дальней стенке. Выполняя третью команду (обращение к процедуре ПЕРЕСТАВЬ СТУЛ), он на первой же команде этой процедуры (ПОВТОРИ 5 РАЗ ШАГ ВПЕРЕД) наткнется на дальнюю стенку.