Top.Mail.Ru

Исполнитель Черепаха. Процедуры

Иногда в задании явно есть одинаковые операции, но применить цикл не удается. Рассмотрим такой рисунок из равносторонних треугольников:

С одной стороны, все треугольники одинаковые, с другой — они расположены так, что нельзя использовать один цикл для всех трех фигур.
Теперь представим себе, что у Черепахи уже есть команда треугольник, которая рисует треугольник и возвращает исполнителя в исходное положение, причем Черепаха должна стоять в углу треугольника и смотреть в ту сторону, в которую она пойдет.
Учтем, что в равносторонних треугольниках все внутренние углы по 60 градусов. Тогда решение может быть записано так:

ТриТреугольника

{

вправо ( 30 );
треугольник;
вправо ( 120 ); назад ( 20 );
/* идем ко второму */
треугольник;
вперед ( 20 ); влево ( 60 );
/* идем к третьему */
вперед ( 40 ); влево ( 60 );
назад ( 20 );
треугольник;

}

Если ввести такую программу, то мы получим ошибку "Не понимаю, что такое треугольник". Это и понятно, поскольку такой встроенной команду у Черепахи нет и она не знает, что делать. Поэтому ей надо объяснить, что такое треугольник, написав расшифровку этой команды. Так как внутренние углы равностороннего треугольника равны 60 градусов, Черепаха должна поворачиваться на 180-60=120 градусов.

Треугольник

{

опусти_перо;

повтори ( 3 )
{
вперед ( 40 );
вправо ( 120 );
}

подними_перо;

}

Отдельно взятая программа ТриТреугольника работать не будет, однако если к ней добавить текст вспомогательного алгоритма треугольник, то исполнитель сможет ее выполнить.

Процедуры (вспомогательные алгоритмы, подпрограммы) – это новые команды, которые мы добавляем к СКИ исполнителя. Чтобы исполнитель знал, что делать по этой команде, после основной программы надо дать расшифровку процедуры через уже известные исполнителю команды.

Как правильно применять процедуры?

  1. Процедуры используются в том случае, если исполнителю приходится несколько раз выполнять одни и те же действия. При этом удобно просто ввести новую команду и расшифровать ее один раз - это может значительно сократить текст программы.
  2. Основная программа всегда записывается первой. Она использует новые команды, расшифрованные после нее, при этом говорят, что процедура вызывается. Одна процедура может вызывать другую процедуру.
  3. Если исполнитель встретил новую команду, которой нет в СКИ, он ищет ее расшифровку, выполняет все действия, которые там указаны, и затем продолжает выполнять основную программу со следующей строчки. При этом говорят, что исполнитель возвращается в основную программу после выполнения процедуры.

Практические задания

Составить программу с использованием процедуры для рисования:

Использован материал из книги "Алгоритмы и исполнители", автор Поляков К.