Глава
2. Лекции для среднего уровня
подготовки.
Тема
1. Управление объектами с помощью программ
1. 2. Описание
основных команд языка ЛОГО.
1. 3. 1.
Использование процедур в процедурах
Тема
2. Процедуры с параметрами
2. 1. Пример
применения процедур с параметрами
2. 2. Рисуем
правильные многоугольники
2. 3. Датчик
случайных величин
3. 2. Понятие
рекурсивной процедуры
3. 3. 1.
Примеры управляемых рекурсий
3. 4.
Управление черепашкой с клавиатуры
Тема
4. Разработка многомодульных программ
4. 2. Этапы
решения сложных задач
Тема
5. Внедрение мультимедийных объектов, синхронизация процессов.
5. 1.
Внедрение музыки и звука.
5. 2.
Синхронизация процессов.
Лекции для средней группы рассчитаны на то, что дети уже знакомы с основами работы в среде ЛОГОМИРЫ, умеют работать с графикой, умеют обращаться с черепахами.
Мы будем рассматривать не все объекты среды ЛОГО. В основном лекции для средней группы коснуться управления черепашками и проектами.
Как
и в любой другой области программирования основной структурной единицей программы
является команда. Команды адресуются черепашкам. Чтобы указать
исполнителя команд, можно использовать такое же обращение, как и в русском
языке – имя с запятой, поэтому для того, чтобы можно было к черепахе
обратиться, каждая черепашка имеет имя. При рождении черепашки получают
стандартные имена – ч1, ч2, ч3…, но при желании это имя можно изменить в
диалоговом окне черепахи. Для этого надо щелкнуть по кнопке
в меню инструментов,
а затем по черепашке. При этом откроется диалоговое окно черепашки, содержащее
поля ИМЯ и ИНСТРУКЦИЯ. В поле ИНСТРУКЦИЯ можно написать любой набор команд,
которые черепашка немедленно начнет выполнять, если по ней щелкнуть. В поле ИМЯ
можно написать любое новое имя, но нужно учесть, что все черепашки должны иметь
разные имена. Еще одно замечание касается имен, состоящих из двух и более слов.
Для того, чтобы к таким черепашкам можно было обращаться, имя должно быть
написано в одно слово, например,
Иван-Царевич, баба_яга и т.д.
Если не указано конкретно имя черепахи, которой адресуются команды, то их выполняет активная (главная) в данный момент черепашка. Чтобы сделать черепашку активной, надо щелкнуть на нее мышкой или дать команду стань_главной. Например, так:
ч1, стань_главной.
Если просто обратиться к черепашке, то это не поменяет статус старшинства черепах, т.е. та черепашка, которая была главной , ею и останется.
Команды для черепашек можно записывать в поле команд, в диалоговом окне черепашки, а также на специальном листе программ.
Открывается
при загрузке проекта ЛОГО МИРОВ, либо при нажатии на пиктограмму
.
Чтобы черепашка выполнила команду, написанную в поле команд,
надо нажать клавишу ENTER
после написания команды.
Поле
команд можно использовать для отладки какого-либо запрограммированного
действия. Все, что там написано, исчезает при сохранении проекта. Настоящие
программы пишут на листе программ. Чтобы попасть на этот лист, надо выбрать
пункт «Листы» «Программы» или нажать сочетание клавиш Ctrl+F.
Самая простая команда это команда, заставляющая черепашку двигаться вперед, а перед у черепашки там, куда направлена ее голова. При загрузке проекта голова первой черепашки смотрит вверх и поэтому двигаться она по этой команде будет вверх.
Почти у всех команд есть параметры. Это числа, которые уточняют последующие действия черепашки. Так и у команды «вперед» есть параметр. Он означает, сколько шажков должна сделать черепашка. Так как ножки у черепашки очень коротенькие, то 10 шажков черепашки это приблизительно одна клеточка школьной тетради. Вот как выглядит, например, команда, которая заставит черепашку прошагать 100 шажков:
вперед 100
Чтобы не писать длинные слова, команды можно сокращать. Так, команду вперед можно сократить до двух букв – вп. Таким образом, чтобы отправить черепашку в короткое путешествие, достаточно дать ей команду вп 100.
Аналогичная команда заставляет черепашку пятиться назад: назад
100 или в сокращенной форме -
нд 100.
Понятно, что двигаться только по одной прямой для черепашки
не очень интересно. Поэтому она может поворачиваться. Повернуть черепашку можно
командами направо и налево:
Команда |
Параметр |
Действие |
Сокращенная форма |
примеры |
направо |
Количество градусов |
Черепашка попорачивается направо относительно текущего
состояния на указанное количество градусов |
пр |
направо 45 пр 90 |
налево |
Количество градусов |
Черепашка попорачивается налево относительно текущего
состояния на указанное количество градусов |
лв |
налево 90 лв 60 |
Иногда трудно вспомнить текущее положение головы черепашки,
но надо установить ее в какое-то строго определенное положение, например строго
вверх, или налево. Тогда удобнее использовать команду новый курс.
Команда |
Параметр |
Действие |
Сокращенная форма |
примеры |
нов_курс |
|
Черепашка попорачивается
в соответствии с указанным направлением |
нк |
нов_курс 90 нк 225 |
Черепашка при движении может оставлять следы, т.е. рисовать пером. При открытии нового проекта перо черепашки поднято, т.е. черепашка при движении не оставляет следов, но если дать команду «перо опусти», то черепашка при движении будет оставлять след.
Команда |
Параметр |
Действие |
Сокращенная форма |
примеры |
по |
нет |
Черепашка «опускает перо». После этой команды, куда бы она
не двигалась, будет оставлять след. |
— |
по |
пп |
нет |
Черепашка «поднимает перо», т.е. после этой команды она будет
двигаться бесследно. |
— |
пп |
Цвет пера черепашки при открытии нового проекта устанавливается черным (номер 9), а толщина равна 1 (самое тонкое перо). Эти характеристики пера можно поменять описанными ниже командами:
Команда |
Параметр |
Действие |
Сокращенная форма |
примеры |
нов_размер_пера |
Размер
пера в условных единицах. Самый маленький размер равен 1, самый большой 100. |
Черепашка
меняет свое перо в соответствии с указанным размером |
нрп |
нрп 5 |
нов_цвет |
Либо название, либо номер
цвета. Номер можно узнать, если в графическом редакторе навести на нужный
цвет мышку. Всплывет подсказка с нномером цвета. |
Цвет
пера черепашки меняется на указанный |
нц |
нов_цвет 15 нц “красный |
С другими командами мы будем знакомиться в течение дальнейшей работы по мере необходимости.
Процедура это часть программы, выполняющая самостоятельную задачу и
реализующая тот или иной алгоритм, который можно применить в другой процедуре
или программе.
Таким образом, процедуры до бесконечности расширяют набор примитивов (команд) для черепашек, ведь любая написанная вами программа может считаться еще одной командой.
Первая строка любой процедуры должна содержать слово “это” и имя процедуры. Предпочтительней процедуру называть одним словом. Нежелательно применять в имени разделители и знаки препинания. Количество знаков в имени тоже лучше ограничить в связи с тем, что при вызове процедуры можно сделать ошибки при написании длинных имен. Итак, предлагается начать знакомство с темой написанием процедуры рисования правильной фигуры, например, квадрата.
Текст процедуры записывается на листе программ для Лого миров . Последней строкой в процедуре должна быть строка «конец». Это важно, потому что на листе программ может быть написано много процедур. Признаком окончания процедуры является слово «конец». Все, что написано между строками «конец» и следующей процедурой, начинающейся со слова «это» воспринимается в ЛОГО как комментарий.
Для того, чтобы написать простейшую процедуру (программу) изучим еще одну команду. Это команда, заставляет черепашку повторять то или иное действие какое-то количество раз. Таким образом, это примитив (команда) реализует циклическую структуру алгоритма.
Команда |
Параметр |
Действие |
Сокращенная форма |
примеры |
повтори к [действия] |
к – количество повторений; действия
– команды или определенные пользователем процедуры. |
Черепашка повторяет те действия, которые указаны в скобках |
— |
повтори 100 [вп 1 жди 1] черепашка будет медленно двигаться 100 шагов (жди это
пауза в действиях) |
Теперь можно приняться за обучение черепашки новым командам. Первая из них будет заставлять черепашку рисовать квадрат. Алгоритм рисования очень простой. Черепашка должна идти какое-то количество шагов вперед, а потом поворачиваться на 900.
Примерный текст процедуры квадрата следующий:
это квадрат
по
повтори 4[ вп 60 пр 90]
конец
Для того, чтобы черепашка выполнила новую команду, достаточно просто написать имя процедуры в поле команд:
кв
Теперь у черепашки есть новая команда, которую она может выполнять.
Создайте процедуры рисования равносторонних треугольника, пятиугольника, шестиугольника. Чем отличаются эти процедуры?
В своих процедурах предусмотрите увеличение толщины пера и изменения цвета рисования (см. команды нрп и нц). Чтобы фигуры появились на листе проекта, обучите трех черепашек выполнять созданные вами процедуры: напишите в качестве инструкции в соответствующем поле диалогового окна черепашки название своих процедур. Тогда при щелчке по черепашке, они будут выполнять описанные в программе действия.
Созданные
пользователем процедуры используются также, как и обычные команды для
черепашек. Попробуем, например, использовать созданную ранее процедуру для
рисования узора:
Этот узор составлен из шести квадратов, повернутых относительно друг друга на 600. Текст программы узора может быть таким:
это узор
нрп 4 нц 25 по
повтори 6[квадрат пр 60]
конец
При выполнении процедуры узор черепашка нарисует похожую на приведенный рисунок картинку.
Создайте проект, где в листе программ определите процедуру рисования треугольников. Попробуйте создать три узора (в виде процедур на листе программ), использующие процедуру рисования треугольника, изображенные на рисунке. Обучите трех черепашек с помощью диалогового окна рисовать эти узоры.
В предыдущей лекции мы научились писать программы на листе программ и заставлять черепашек выполнять придуманные нами процедуры. В этой лекции содержится материал, который поможет вам сделать свои процедуры гибче и универсальнее.
Умение определять нужные параметры и правильно их задавать, очень важно при работе с процедурами в программировании.
Параметр это
величина, которая может принимать различные значения и описывает какие-либо
характеристики объектов. В модуле параметр имеет имя, записываемое чаще всего
буквами. Значение параметра можно изменить, при этом меняется результат работы
процедуры.
В качестве примера можно рассмотреть процедуры для квадрата и треугольника. Введем для них один параметр, означающий длину стороны правильной фигуры. Обозначим его :д. В Лого знак «:» перед именем параметра обязателен и показывает, что мы имеем дело со значением параметра, а не с его именем. При этом не стоит забывать, что между «:» и именем параметра пробела быть не должно.
Имена всех используемых параметров нужно обязательно указывать в первой строке процедуры (в заголовке процедуры). С учетом всего вышесказанного тексты процедур для квадрата и треугольника будут выглядеть следующим образом:
*********************************************
это кв :д
по
повтори 4[ вп :д пр
90]
конец
*********************************************
это тр :д
по
повтори 3[вп :д пр
120]
конец
*********************************************
Для того, чтобы черепашка нарисовала нужные фигуры, при вызове процедур необходимо указать конкретные значение параметра. Например, для получения квадрата со стороной 100 шагов черепахи надо набрать в поле команд строку:
кв 100
При выполнении этой команды параметру :д присваивается значение, равное 100 и выполняется процедура с этим значением параметра.
Попробуйте нарисовать подобную картинку с помощью созданной
вами процедуры с параметром для рисования квадратов. Используйте команды нц
и нрп для задания цвета и толщины линии. Оформите отдельную
процедуру для рисования этой картинки на листе программ. Создайте кнопку на
своем проекте с помощью инструмента . Для этого
выберите этот инструмент и растяните на проекте прямоугольник, определяющий
размер и положение будущей кнопки. Откройте диалоговое окно кнопки с помощью
инструмента
(нажмите на глаз, а затем на кнопку) и
введите в окно команд название созданной вами процедуры для рисования узора.
После этого подтвердите ввод, нажав кнопку ОК.
Теперь при нажатии на эту кнопку активная черепашка будет рисовать узор.
Аналогичную
кнопку сделайте для похожего узора из треугольников.
Что пришлось вам
делать каждый раз после рисования квадрата или треугольника в узорах?
Попробуйте ввести второй параметр в процедуры рисования квадратов и
треугольников - цвет пера черепашки.
Если у процедуры несколько параметров, то они и при задании и при вызове
разделяются пробелом. Отредактируйте процедуры узоров для новых процедур.
Примерный вид вашего
проекта:
В качестве примера рассмотрим рисунок лица, составленного из простых геометрических фигур. Для того чтобы получить такой рисунок, применим созданные нами процедуры с параметрами для рисования прямоугольников и треугольников.
Команда |
Параметр |
Действие |
Сокр. форма |
примеры |
крась |
нет |
Черепашка закрашивает замкнутый контур или весь экран
цветом пера. Для закраски внутренней части контура черепашка перед этой
командой должна встать внутрь контура. Поднято или опущено перо у черепашки
не имеет значения. |
— |
повтори 4 [вп 40
пр 90] пп вп 5 пр 90 вп
5 крась По этим командам нарисуется квадрат, а потом закрасится
его внутренность. |
Попробуем модернизировать программу рисования квадрата. Научим черепашку рисовать закрашенные квадраты. Процедура может выглядеть, например, так:
это кв :д :ц заголовок
с определением двух параметров (длина стороны и цвет)
нц :ц смена
цвета пера черепашки
по повтори 4 [вп :д пр 90] рисование
квадрата со стороной :д
пп вп 2 пр 90 вп 2 переход черепашки с поднятым пером внутрь квадрата
крась закраска
внутренней области квадрата
нд 2 лв 90 нд 2 обратный переход в угол квадрата
конец окончание
процедуры
Процедуру для закрашенного треугольника напишите сами по аналогии.
Замечание. Переход во внутреннюю область квадрата или
треугольника зависит от размера фигуры и толщины пера черепашки. Если перо
толстое (больше 2), то надо проходить больше шажков, чтобы попасть внутрь,
иначе можно «застрять» на границе. Приведенный в примере способ закраски
подразумевал, что толщина пера равна 1.
С помощью процедур для закрашенного квадрата и треугольника составьте процедуру для рисования домика. Вызов этой процедуры вставьте в кнопку. Саму процедуру назовите ДОМ. Размеры домика – произвольные.
Это дополнительное задание выполняйте по желанию. Подумайте, как сделать процедуру, которая будет рисовать домик, размер которого задается параметром. Пусть этот параметр будет таким же как и для квадрата: д – длина стенки. Если придумаете, создайте процедуру дом2 на листе программ в том же файле.
Научим черепашку рисовать любые правильные многоугольники.
Многоугольник называется правильным, если все его стороны
и углы равны.
Для того, чтобы написать соответствующую процедуру, следует заметить, что угол поворота черепашки для правильной фигуры можно получить по формуле:
угол = 360 /
количество сторон
В качестве примера можно рассмотреть правильный шестиугольник. Угол поворота черепахи для него равен: 360/6=60. Его можно нарисовать такой командой:
повтори 6[вп 50 пр
60]
Создадим процедуру построения произвольного правильного многоугольника. Обозначим за к количество сторон, д –длину стороны, ц –цвет пера черепашки. Тогда процедура будет выглядеть следующим образом:
это мн :к :д :ц
нц :к по
повтори :к[вп :д пр
360 / :к]
конец
При вызове такой процедуры следует не забывать указать значения параметров, причем именно в том порядке, в котором они указаны. Например, если нужно нарисовать пятиугольник с длиной стороны 30 шагов фиолетового цвета, следует использовать такую команду:
мн 5 30 115
Основные ошибки, которые допускают школьники, связаны с непониманием смысла параметров. Для рассматриваемой процедуры самыми распространенными ошибочными командами являются:
мн 30 5 115 - параметры переставлены местами;
мн :к :д :ц - вместо числовых значений указаны имена параметров;
это мн 5 30 115 - помимо названия процедуры указано слово “это”.
Создайте
в проекте кнопки, которые рисуют шестиугольник, восьмиугольник и 36 угольник с
помощью созданной вами процедуры рисования многоугольника. Как надо изменять
длину стороны, чтобы многоугольник поместился на листе?
Случайная величина это такая переменная, о которой нельзя наверняка сказать, чему она равна. Можно только приблизительно оценить ее значение.
Например, при игре в любую настольную игру используются кубики с нанесенными на их гранях точками. При бросании кубика заранее неизвестно, сколько точек появится на верхней грани, но совершенно точно можно сказать, что их количество будет от 1 до 6.
Для получения случайной величины со значениями из отрезка [0;k] применяется команда сл k. Чтобы получить случайную величину из отрезка [a;b], нужно составить выражение : a + сл b-a.
Например, пусть мы хотим случайно выбрать цвет рисования. Если посмотреть на номера цветов в графическом редакторе, то можно заметить, что их номера меняются от5 (серый) до 135 (алый) с шагом 10. Это значит, что самое маленькое значение цвета для нас будет 5. Чтобы получить все остальные цвета, надо умножить на 10 некую случайную величину со значениями от 0 до 13 и прибавить ее к 5. Вот как будет выглядеть команда случайного выбора цвета:
нц 5 +
10 * сл 13
Попробуйте написать
ее в поле команд и выполните несколько
раз. Как меняется цвет черепахи? Проследить за номером генерируемого датчиком
цвета можно с помощью датчика цвет. Наберите команду покажи цвет
и черепашка сообщит вам, какого она цвета.
Чтобы черепашка
правильно воспринимала команды, не забудьте вводить пробелы впереди и после
знаков арифметических операций - + (сложить) и * (умножить).
Создайте процедуру рисования случайного закрашенного многоугольника случайным цветом. То есть с помощью датчика случайных величин укажите в качестве параметров при вызове процедуры многоугольника случайное значение цвета и количества сторон многоугольника. Создайте кнопку вызова процедуры с такими параметрами.
На
рисунке вы видите результаты многократного нажатия кнопки с вызовом процедуры
рисования случайных многоугольников.
Целью этого задания будет изображение на экране снегопада. Для цвета, размера и количества лучей у снежинок. примените случайные величины.
О задании цвета мы уже говорили выше. Длина лучей снежинки не должна быть слишком большой. Ограничим ее 40 шагами черепахи. В то же время, слишком маленькую снежинку можно принять за точку, поэтому пусть длина луча будет не меньше 10 шагов. Выражение для длины : 10 + сл 30 .
Количество лучей у снежинки тоже не может быть слишком маленьким. Снежинки менее чем с 4 лучами не очень красивые. Пусть количество лучей будет от 5 до 15. Выражение для этой величины: 5 + сл 10.
Прежде чем рисовать снег, составьте процедуру рисования одной снежинки по аналогии с процедурой многоугольника. Назовите ее снежинка. Используйте три параметра : к - количество лучей, д - длина луча, ц - цвет снежинки.
Для рисования снегопада надо много раз повторить рисование снежинки в случайно выбранном месте. Для этого переместимся вперед на случайное число шагов и повернемся на случайное количество градусов. Процедура будет выглядеть примерно таким образом:
Рисование снежинки
это снег
повтори 200[снежинка 5 + сл 10 10 + сл 30 5
+ 10 * сл 13
Переход к следующей снежинке
пп пр 10 + сл 350 вп 10 + сл 200]
конец
В этом примере снежинки располагаются не ближе чем в 10 шагах друг от друга. Ниже приводится результат работы таких процедур. При желании можно усложнить модуль рисования одной снежинки. Например, в конце луча пририсовывать дополнительные маленькие лучики или многоугольники. При этом модуль снег никак не меняется.
Вот пример картинки со снегом из 300 снежинок, толщина пера –2.
Само слово «рекурсия» означает возврат обратно. С рекурсией в жизни мы встречаемся довольно часто. Достаточно поставить два зеркала друг против друга, и можно получить «рекурсивные» отражения одного и того же в самом себе. Можно встретить и рекурсивные стихи. Например, известная поэма о попе:
У попа была собака, он
ее любил.
Она съела кусок мяса,
он ее убил!
В землю закопал, на
табличке написал:
У попа была собака, он
ее любил.
Она съела кусок мяса,
он ее убил!
В землю закопал, на табличке написал:
…
Или песенка о царе:
Жил был царь,
У царя был двор,
На дворе – мочало,
Начинай сказывать
сначала.
Жил был царь,
У царя был двор,
На дворе – мочало,
Начинай сказывать
сначала.
…
Можно встретить и рекурсивные картины. Есть даже специальный раздел графики – фрактальная, в основе которой рекурсивное изображение одного и того же узора в самом себе.
Рисующие руки. Рисунок М.Эшера
Так что же такое рекурсивные процедуры?
Рекурсия - это такая организация алгоритма,
при которой процедура обращается к самой себе. Сама процедура называется
рекурсивной.
Что же получится, если в процедуре записать обращение к самой себе? Чтобы выполнить этот вызов, компьютер ищет в своей памяти процедуру с указанным именем и запускает ее копию. Причем переменные, значения которых передаются в копию процедуры, - "свои" и отличаются от тех, что были в первой копии процедуры. Эта идея создания копий остается справедливой и для всех последующих рекурсивных вызовов.
Создайте процедуру, рисующую квадрат со стороной :а.
это квадрат :а
по
повтори 4 [вп :а пр
90]
конец
При вызове этой процедуры, например в таком виде: квадрат 100, черепашка нарисует квадрат со стороной 100 шажков.
Теперь попробуем превратить эту процедуру в рекурсивную. Вставим вызов этой же процедуры в конец нашей программы:
это квадрат :а
по
повтори 4 [вп :а пр
90]
квадрат :а
конец
Тогда вызов процедуры квадрат 200 заставит черепашку рисовать квадрат бесконечно, пока мы не остановим выполнение процедуры нажатием клавиш Ctrl+Break.
Попробуем усложнить задачу. Заставим черепашку не просто повторять процедуру, а изменим для следующего шага рекурсии параметр рисования. Изменим строку рекурсивного вызова:
квадрат :а - 5
Тогда в следующем вызове процедуры нарисуется уже квадрат со стороной на 5 шажков меньше, а в следующем – опять на 5 шажков меньше и т.д.
Чтобы проследить процесс выполнения такой процедуры, замените команду вп :а командой плавно :а 1. По этой команде черепашка будет тоже двигаться вперед, но со скоростью 1 шаг и вы увидите процесс более подробно. Как только сторона квадрата станет отрицательной, черепашка начнет двигаться уже не вперед, а назад, и получится симметричный рисунок расширяющихся квадратов. Не забудьте нажать Ctrl+Break, чтобы остановить черепашку.
В предыдущих упражнениях процесс, начатый в рекурсивной процедуре можно было остановить только прервав работу программы.
Управлять работой рекурсивных процедур можно с помощью команд с условиями.
Команда |
Краткая форма |
выполняется |
пример |
если условие [действия] |
- |
Проверяется условие. Если
оно верное, то выполняются указанные действия. |
если цп = 105 [нц
115] по этой команде черепашка
изменит свой цвет на фиолетовый, когда доползет до синего цвета поля. |
если_иначе условие [действия1] [действия2] |
- |
Проверяется условие. Если
оно верное, то выполняются действия1, а если нет, то действия2. |
если_иначе цп = 105 [вп 100] [нд 100] Исполняя эту команду,
черепаха будет продвигаться вперед на синем поле и назад - на всех остальных. |
Попробуйте усовершенствовать программу из упражнения 2. Вставьте условие, останавливающее выполнение процедуры. Например, такое:
если :а < -200
[стоп]
Усовершенствуем программу в Упражнении 3. После рисования квадрата будем поворачивать черепашку на малый угол. Таким образом, каждый следующий квадрат будет не только меньше предыдущего, но и повернут относительно него на 1 градус.
это
кв :а
по
если
:а < -200 [стоп]
повтори
4 [плавно :а 1 пр 90] пр 1
кв :а
- 5
конец
Получится довольно милая картинка:
Попробуем изобразить спираль с помощью рекурсивной программы. Для этого будем рисовать ее звенья с уменьшающейся длинной, повернутые на 90 градусов друг относительно друга.
это
спир :а
если
:а < 2 [стоп]
вп :а
пр 90
спир
:а - 5
конец
Придумайте сами и осуществите в проекте свою рекурсивную процедуру с управляемым выходом. Создайте кнопку, включающую рисование рекурсивного узора.
Пусть нам нужно сначала нарисовать спираль, а потом ее стереть. Рисовать спираль мы уже умеем. Чтобы стереть спираль, надо изменить цвет пера черепашки командой нц на цвет фона. Если вы рисуете на белом фоне, то это сделает команда нц 0.
В процедуре стирания спирали нужно пройти по спирали в другую сторону, т.е. не уменьшать, а увеличивать длину звена спирали. Не забудьте повернуть черепашку еще раз на 90 градусов перед организацией стирания. Учтите, что в обратной спирали нужно поворачиваться налево, а не направо, как в прямой.
Попробуйте связать две процедуры друг с другом. Для этого вставьте в строчку с условием окончания процедур вызов противоположных процедур. Тогда получится бесконечный процесс рисования и стирания спирали.
В среде ЛОГО можно создавать очень интересные интерактивные проекты. Один из них – собственный графический редактор, управляемый клавишами.
Для управления действиями черепашки клавишами воспользуемся командами пусть и жди_символ.
Команда |
Краткая форма |
выполняется |
пример |
пусть “имя переменной значение |
- |
Переменной присваивается
указанное значение. |
пусть “число 5 переменной с именем число присвоится значение 5 |
жди_символ |
- |
Приостанавливается
выполнение инструкций до тех пор, пока на клавиатуре не будет нажата
какая-нибудь клавиша и сообщает имя нажатой клавиши. Для того,
чтобы эта команда работала, надо щелкнуть мышкой по листу проекта вне поля
команд и текстовых окон.. |
пусть "ответ
жди_символ покажи :ответ в поле команд появится
символ нажатой клавиши. |
Пусть клавишей «п» черепашка будет поворачивать направо на 90 градусов, клавишей «в» - двигаться вперед на 20 шагов, клавишей «л» - поворачивать на 90 градусов влево. Тогда примерная схема простейшего клавиатурного редактора может выглядеть так:
это
рисование
пусть
"к жди_символ
если
:к = "в [вп 20]
если
:к = "п [пр 90]
если
:к = "л [лв 90]
рисование
конец
Напишите программу для рисования, расширив набор управляющих
клавиш. Например, добавьте повороты на 45 градусов, стирания рисунка, смены
цвета рисования. Поместите указания по пользованию графическим редактором в
текстовое окно. Для его создания нажмите на инструмент и растяните окно на проекте. Щелкните внутрь
окна и пишите текст. Для шрифтового оформления используйте пункт «текст»
главного меню программы.
Для выхода из редактора предусмотрите кнопку «стоп».
Создайте с помощью своего редактора какой-нибудь рисунок.
·
http://school.ort.spb.ru/(Eng)/library/recurs/
·
С.И. Горлицкая, И.Н.
Кузнецова. Думаем и исследуем на Лого. Информатика (приложение к Первому
Сентября), NN 39,44 1996г.
·
С.И. Горлицкая, И.Н. Кузнецова.
Думаем на Лого. Новые технологии в образовании. Санкт-Петербург, 1993г.
·
А.Г.Юдина. Практикум по
информатике в среде LogoWriter. Информатика (приложение к Первому Сентября), NN
35,36 1997г.
·
Brian Harvey. Computer Science Logo Style. The MIT Press Massachusetts
Institute of Technology, 1997.
·
Rachel R. Avery. Logo and the Apple. Prentice-Hall, Inc., Englewood
Cliffs, New Jersey 07632.
Принцип модульности применяется довольно часто в различных областях человеческой деятельности. Этот принцип позволяет улучшить структуру объекта Например, в строительстве модульность намного облегчает и ускоряет процесс возведения здания. В радиотехнике модульность упрощает поиск и замену неисправных частей того или иного устройства. В компьютерной технике этот принцип позволяет создавать любые нужные конфигурации, модернизировать уже имеющиеся.
В программировании принцип модульности тоже очень важен. Деление больших и сложных программ на модули позволяет ввести разделение труда у программистов, упрощает и улучшает общую структуру программы.
В любой области человеческих знаний решение больших и сложных задач проще разбить на подзадачи (отдельные модули) с более простыми условиями. Поэтому развитие у школьников умения выделять и создавать модули, соединять их для решения общей задачи является, на мой взгляд, нужной частью общего образования.
При решении сложных задач возникает потребность поэтапного решения.
Постановка задачи. На этом этапе как раз и необходимо, вникнув в суть задачи, разбить ее на несколько более простых.
Для примера рассмотрим задачу построения улицы домиков. При этом размер домиков, стоящих вдоль улицы будет зависеть от их количества на проекте.
Составление алгоритма можно начать с рассмотрения вида будущей улицы.
Ясно, что решить сразу эту задачу довольно сложно. Разобьем ее на более простые.
Так как улица состоит из домов, то сначала составим процедуру рисования одного домика. Так как размер дома заранее неизвестен, то эта величина должна быть параметром для нашей процедуры.
В свою очередь, рисование домика связано с рисованием простейших геометрических фигур – треугольника и квадрата. Хотелось бы, чтобы они рисовались закрашенными.
Таким образом, структура программы будет выглядеть так:
Разработка блок-схемы алгоритмов, определение параметров процедур.
О построении многоугольников и дома мы уже говорили в предыдущих лекциях, поэтому не буду подробно останавливаться на этом. Блок-схемы будут выглядеть приблизительно так:
Параметры: д –длина стороны; к – количество сторон; ц – цвет рисования.
Параметры:
д – длина стен дома; цд – цвет стен домика; цк– цвет крыши, цо – цвет окна.
Этот модуль использует первые два. Прежде, чем строить улицу, необходимо рассчитать размер домиков. Если исходить из стандартного размера проекта, то он составляет приблизительно 740 шажка черепахи по горизонтали. Значит, размер домиков и расстояние между ними можно рассчитать так:
740/ количество домов – такое кол-во шагов приходится на 1 дом и интервал между ними. Если на интервал между домиками отводить половину длины стен дома, то размер стен дома равен 2/3 от полученного количества шагов на 1 дом. Т.е. – 740/кол-во домов/3*2. Конечно, количество домиков не должно быть очень большим. Например, если пользователь захочет нарисовать 100 домиков, то размер одного дома будет равен приблизительно 5 шажков черепахи. Разглядеть такой домик трудно, да и программа закраски многоугольников будут работать неправильно для таких размеров домов. Поэтому количество домиков на улице лучше задавать не более 50. Лучше ограничить и количество домиков снизу. Один домик это еще не улица. Давайте будем считать улицей только подряд стоящие 4 и более домов.
Расчет размеров дома производится исходя из количества домиков. Задать это количество должен иметь возможность пользователь. Для этого можно воспользоваться командой спроси.
спроси слово-или-список 1 параметр
Открывает диалоговое окно, в котором напечатан вопрос и предлагается напечатать ответ. После того как ответ будет напечатан, его текст хранится в виде символьной цепочки, до следующего применения команды спроси и может быть получен с помощью датчика ответ.
Пример
спроси [сколько вам лет?] – появится диалоговое окно и ЛогоМиры будут ждать ответ пользователя
покажи ответ – ответ пользователя появится в поле команд
12
Итак,
блок-схема будет выглядеть приблизительно так:
Создание и отладка программ и модулей. На этом этапе необходимо не только создать сами программы, но и придумать специальные тестовые задания, чтобы оценить правильность задуманного алгоритма. Необходимо оценить полученные результаты, чтобы либо убедится в правильности работы модулей, либо исправить их.
Создайте
необходимые процедуры для рисования улицы: процедуру для многоугольника, для
самого домика и для рисования улицы. Создайте кнопку, с помощью которой можно
включить рисование улицы. Для удобства создайте еще кнопку стирания рисунка.
Приблизительный вид проекта: показан на рисунке.
Добавьте в проект по заданию 1 еще и диалог с пользователем о цвете стен и крыш будущих домов а также проверку ответа пользователя о количестве домов.
Добавьте в проект 2 автоматическое рисование около каждого домика еще и дерева или цветочка. Не забудьте, что размер этого дерева или цветка должен зависеть от размера дома.
Современная компьютерная техника имеет богатые возможности по применению, хранению и обработке звуковой, графической и видео информации. Было бы обидно не иметь возможности использовать такую информацию в проектах ЛОГО. Внедрить мультимедийные объекты в проекты довольно просто. При этом проект приобретает новые краски и свойства.
Чтобы импортировать звук или музыку в проект выберите команду Возьми - Звук или Возьми – Музыка в меню Файл.
Откроется диалоговое окно импорта звука или музыки, в
котором нужно указать где находится звуковой или музыкальный файл. В этом
диалоговом окне можно увидеть только звуковые файлы (файлы с расширением .WAV)
или музыкальные файлы (файлы с расширением .MID). Выберите нужный и щелкните на
"Открыть".
На листе проекта появится картинка, например, такая (музыка)
или такая
(звук).
Щелчок на картинке запустит звук или музыку, повторный щелчок - его остановит. Теперь можно напечатать имя импортированного звука или музыки в Поле команд, в качестве инструкции кнопке или использовать в процедуре.
Звук или музыка может сопровождать движение черепашки, например:
ч1, всегда [вп 1] блюз
ч2, всегда [вп 1 пр 1] болото
Можно одновременно проигрывать мелодии и звуки, но нельзя одновременно проигрывать звуки и видеоклипы.
Звуковой или музыкальный файл не загружается в ваш проект. При импорте в проект, ЛогоМиры осуществляют два действия:
Если ЛогоМиры не могут найти звуковой файл, они производят поиск сначала в папке, в которой находится данный проект, а затем в той папке, из которой звуковой файл был импортирован. Если ЛогоМиры не смогут найти звуковой файл ни в одной из этих папок, то звук или музыка проигрываться не будут.
Если Вы переносите проект ЛогоМиров, содержащий связь со звуковым или музыкальным файлом на другой компьютер, то нужно перенести и сам файл-источник.
Если на вашем компьютере установлена полная версия ЛогоМиров, то в папке «Мультимедиа», можно найти папку «Звуки». Она содержит файлы и с расширением WAV и с расширением MID.
Импортируйте в свой проект музыкальный и звуковой файл. Если у вас установлена полная версия ЛогоМитров, то звуки и музыку можно выбрать любые из коллекции «Звуки», если же версия не полная, то воспользуйтесь звуковыми файлами, которые будут приложены к лекции.
При создании проектов очень часто возникает необходимость согласованно запустить несколько процессов. Например, в вашем проекте создана танцующая девочка. Но танцевать она должна под музыку. Как сделать два процесса – танец девочки и звучание музыки – синхронными процессами?
Один из способов синхронизации двух процессов состоит в том, что первый процесс запускается командой всегда, затем запускается второй процесс, и, как только второй процесс заканчивается, первый прекращается командой отмени:
это фокус
всегда [танец]
запусти [музыка]
жди_пока [готово? [музыка]]
отмени [танец]
конец
В этой процедуре слово танец обозначает другую процедуру, заставляющую девочку-черепашку танцевать, а слово музыка означает название импортированной музыки.
Заставить черепашку танцевать можно с помощью смены похожих форм через небольшую паузу, задаваемую командой жди.
Пусть, например, есть две похожие формы:
( о
редактировании форм см. лекцию2 для младшей группы). Тогда танец получится при
выполнении такой строки:
повтори 10[нф 45 жди 2 нф 46 жди 2], если у этих форм номера 45 и 46.
Для того, чтобы получить бесконечный танец,
достаточно создать процедуру, содержащую только повторяющиеся действия:
это танец
нф 45 жди 2 нф 46 жди 2
конец
Команда всегда [танец] заставит
девочку танцевать бесконечно
А вот команда запусти [музыка] завершится, как только завершится процедура музыка. Но, прочитав команду запусти, система немедленно приступает к выполнению следующей инструкции - жди_пока... и ждет, пока готово? [музыка] не сообщит да. После этого система переходит к следующей инструкции, останавливающей танец. Процесс музыка не нужно останавливать - он закончится сам по себе. Для того чтобы не было недоразумений, нужно следить за параметрами команд всегда и отмени. Эти параметры должны совпадать.
Команда новая_форма описана в лекциях для младшей группы см. (лекцию 2). Единственное дополнение к этому материалу это то, что в качестве входного параметра может использоваться список. Если входным параметром является список форм, черепашка будет менять их поочередно, при каждом выполнении команды вперед, назад или плавно. Например, команды
нов_форма [собака1 собака2]
повтори 100 [вп 5 жди 1]
заставят собаку бежать.
В проекте из упражнения 1 создайте или используйте готовые похожие формы. Создайте два мультфильма. Один назовите прогулка. В этом мультфильме синхронизируйте звук «болото» и мультик прогулки человека или другого живого существа (звук должен повторяться, пока не кончится прогулка). Для включения мультфильма создайте кнопку (см. лекцию4 для младших).
Второй мультфильм назовите «танец». В нем синхронизируйте музыку «блюз» или любую другую с кем-то танцующим (танцующий должен остановиться по окончании звучания музыки). Для включения мультфильма создайте кнопку.
В ЛогоМирах можно записать и собственные звуки.
Если к Вашему компьютеру присоединен микрофон, то Вы можете записать звуковое сопровождение к проекту или собственный голос и проигрывать его по команде. Каждая новая запись создает отдельный звуковой файл.
Для записи звука выберите и щелкните на лист проекта. Откроется
диалоговое окно записи звука.
Щелкните на для начала записи звука. Длительность записи
зависит от наличия свободного места на жестком диске (10 секунд записи требуют
100 Кбайт дискового пространства).
Щелкните на для остановки записи. Для прослушивания
записи, щелкните на кнопку
. Если
запись Вас не устроила, щелкните на кнопку
еще раз.
Щелкните на ОК. Откроется диалоговое окно сохранения звукового файла.
Дайте имя Вашей записи и щелкните на ОК. Если Вы хотите использовать имя звука как команду, то давайте звукам однословные имена. Имя создаваемого вами звукового файла должно быть короче 32 символов.
Звуковой файл не загружается в ваш проект, ЛогоМиры создают картинку звука в проекте и запоминают связь между картинкой и звуковым файлом на жестком диске компьютера.
Если надо перенести проект ЛогоМиров, содержащий связь со звуковым файлом на другой компьютер, то нужно перенести и звуковой файл.
Когда закрывается диалоговое окно записи звука, картинка записи остается на листе . Для воспроизведения записи достаточно щелкнуть на картинке или написать имя звука в Поле команд.
Создайте в том же проекте еще один мультфильм. Назовите его приветствие. Создайте две или более похожие формы человеческого лица, имитирующие мимику при разговоре. Запишите любой текст приветствия, произнесенный с микрофона. Синхронизируйте звук и мультик. Для запуска этой процедуры создайте кнопку.