Мы убедились в том, что черепаха весьма не самостоятельна, и поэтому необходимо программировать каждое ее движение. Фигуры, которые мы рисуем, становятся все сложнее. Вот почему часто возникают вопросы: С чего начать?Как продолжить? У каждого, наверное, имеется своя собственная стратегия рисования фигур, но несколько советов, возможно, пойдут вам на пользу.
- Нарисуйте от руки или при помощи подходящих инструментов фигуру, которую должна нарисовать черепаха.
- Определите основные части фигуры. Если некоторые из них сложны для рисования, разделите их на части или упростите, убрав некоторые детали.
- Дайте подходящие имена отдельным частям и затем используйте их в качестве имен процедур.
- Нарисуйте фигуру еще раз, собирая ее последовательно по деталям.
- Опишите главную процедуру рисования фигуры. Она в определенном порядке будет использовать процедуры рисования отдельных частей фигуры.
- Опишите каждую процедуру, которую использует главная процедура, и проверьте ее действие. Исправьте замеченные ошибки.
- Проверьте действие главной процедуры, а тем самым и действие всей программы. В случае появления ошибок исправьте их.
- Если вам кажется, что вы можете улучшить рисунок, отредактируйте программу подходящим способом.
Рис. 63
Посмотрим, как можно применить эти советы, рисуя хронометр. Сначала нарисуем его от руки (рис. 63). Хронометр состоит из циферблата, стрелки, кнопки и кольца:
ЭТО ХРОНОМЕТР
ЦИФЕРБЛАТ
КНОПКА
КОЛЬЦО
СТРЕЛКА
КОНЕЦ
Мы видим, что в фигуре участвуют две окружности с разными радиусами (циферблат и кольцо). Для их вычерчивания можно использовать, например, процедуру ПРОКР (и участвующую в ней процедуру ЧАСТЬПРОКР). В нашем случае, однако, удобнее, чтобы центр циферблата совпадал с точкой, в которой находится черепаха. Поэтому мы воспользуемся новой процедурой для вычерчивания окружности:
ЭТО ОКРУЖНОСТЬ :РАДИУС
БЕЗСЛЕДА
ВЛЕВО 90
ВПЕРЕД :РАДИУС
ВПРАВО 90
СОСЛЕДОМ
ПРОКР : РАДИ УС
БЕЗСЛЕДА
ВПРАВО 90
ВПЕРЕД :РАДИУС
ВЛЕВО 90
СОСЛЕДОМ
КОНЕЦ
Проверим ее действие:
ОКРУЖНОСТЬ 50
Циферблат представляет собой круг с делениями. По-этому процедуру ЦИФЕРБЛАТ можно описать так:
ЭТО ЦИФЕРБЛАТ
ОКРУЖНОСТЬ 50
ДЕЛЕНИЯ
КОНЕЦ
Так как у циферблата 60 делений, то процедуру ДЕЛЕНИЯ можно описать следующим образом:
ЭТО ДЕЛЕНИЯ
ПОВТОРИ 60 [ДЕЛЕНИЕ]
КОНЕЦ
Опишем и процедуру ДЕЛЕНИЕ:
ЭТО ДЕЛЕНИЕ
БЕЗСЛЕДА
ВПЕРЕД 45
СОСЛЕДОМ
ВПЕРЕД 5
БЕЗСЛЕДА
НАЗАД 50
СОСЛЕДОМ
ВПРАВО 6
КОНЕЦ
А теперь разграфим циферблат:
ЦИФЕРБЛАТ
Кнопку хронометра начертим в виде квадрата со стороной, равной 4 шагам:
ЭТО КНОПКА
БЕЗСЛЕДА
ВПЕРЕД 50
ВЛЕВО 90
ВПЕРЕД 2
ВПРАВО 90
СОСЛЕДОМ
КВАДРАТ 4
БЕЗСЛЕДА
ВПРАВО 90
ВПЕРЕД 2
ВЛЕВО 90
НАЗАД 50
СОСЛЕДОМ
КОНЕЦ
ЭТО КВАДРАТ :СТОРОНА
ПОВТОРИ 4 [ВПЕРЕД :СТОРОНА ВПРАВО 90]
КОНЕЦ
КНОПКА
Теперь опишем кольцо:
ЭТО КОЛЬЦО
БЕЗСЛЕДА
ВПЕРЕД 60
СОСЛЕДОМ
ОКРУЖНОСТЬ 10
БЕЗСЛЕДА
НАЗАД 60
СОСЛЕДОМ
КОНЕЦ
Посмотрим, как оно выглядит:
КОЛЬЦО
Вы, наверное, заметили, что при вычерчивании частей хронометра мы обычно возвращаем черепаху в то место, откуда она начала двигаться. Таким образом, лучше отсчитывается ее местоположение. Этот принцип мы будем соблюдать и в процедуре СТРЕЛКА:
ЭТО СТРЕЛКА
ВПЕРЕД 50
НАЗАД 50
КОНЕЦ
Посмотрим на стрелку;
СТРЕЛКА
Теперь черепаха может "собрать" хронометр:
ГРАФИКА
ХРОНОМЕТР
Он выглядит почти как настоящий! Если бы и стрелка могла двигаться...
Это совсем не сложно. Отредактируем процедуру СТРЕЛКА:
ЭТО СТРЕЛКА
ВПЕРЕД 50
КАРАНДАШ 0
НАЗАД 50
КАРАНДАШ 1
ВПРАВО 6
СТРЕЛКА
КОНЕЦ
Увидим, что получается:
ХРОНОМЕТР
Действительно, ходит! Но все же он нуждается в некоторых усовершенствованиях. Например, стрелка так длинна, что при ее движении стираются и черточки, по которым она проходит. Укоротим ее, задав команды ВПЕРЕД и НАЗАД с вводом 40 вместо 50. Кроме того, хронометр спешит, потому что измеряет время в компьютерных секундах. Чтобы замедлить его ход, воспользуемся процедурой ЗАМЕДЛЕНИЕ.
ЭТО ЗАМЕДЛЕНИЕ :ВРЕМЯ
ПОВТОРИ :ВРЕМЯ [ ]
КОНЕЦ
При выполнении процедуры ЗАМЕДЛЕНИЕ число секунд, в течение которых компьютер "ждет", определяется значением вводного параметра. Вставим ее, например, после команды КАРАНДАШ 0.
После многократных опытов устанавливаем, что одно из подходящих значений параметра ВРЕМЯ равно 820.
Чтобы сходство с настоящим хронометром стало еще большим, уберем черепаху.
Запускаем хронометр еще раз и, если все в порядке, сохраняем программу на дискете. Теперь мы уже можем похвалиться, что в нашем распоряжении - электронный хронометр:
Упражнения
Нарисуйте на экране часы, показывающие 8 ч 48 мин 16 с.
Отредактируйте программу из упр. 1 так, чтобы часы показывали 11 ч 16 мин 36 с.
Часы показывают 9 ч. Через сколько минут минутная стрелка догонит часовую?
Минутная стрелка часов имеет длину 20 см, часовая - 15 см. Во сколько раз скорость движения конца минутной стрелки больше скорости движения конца часовой стрелки?
Раскрасьте циферблат хронометра, который получается при выполнении программы ХРОНОМЕТР.
Нарисуйте карманные часы (рис. 64).
Рис. 64
Объясните, как можно заставить ходить часы из упр. 6.
Отредактируйте программу ХРОНОМЕТР таким образом, чтобы с ее помощью можно было чертить хронометры разных размеров.
Отредактируйте программу ХРОНОМЕТР так, чтобы получились часы, у которых есть только часовая стрелка.
Связку из семи труб, каждая из которых имеет внешний диаметр 10 см, нужно опоясать возможно более короткой веревкой. Какова должна быть длина этой веревки?
Начертите поперечный разрез связки труб из упр. 10, приняв, что один шаг черепахи соответствует одному сантиметру.
Напишите программу для исполнения песенки Тик- так, используя процедуры и команду ПОВТОРИ: