Динамические эффекты

Предварительная подготовка

Эффекты форматирования

Графические объекты

Движение объектов

Ожившие графики

Другие варианты

Вентильные схемы

Автоматизация тестирования

Автоматизация оценки

Проект "Машина времени"

Игра "Жизнь"

Заполнение аттестатов

На главную

 

Динамические эффекты
на основе форматирования

  Имитация движения. ПакетУдаление избыточной информацииИз пункта А в пункт ББегущая строка
Схема управленияУстранение вибраций АвтобусСвязьЦепьКипение
Формула оценки, «степень требовательности»Таблица умноженияExcel - гуманитарий
Метод последовательных приближенийПоиск оптимального элемента

Имитация движения. Пакет

Для начала продолжим линию, предложенную в предыдущей статье по созданию моделей передачи информации, но добавим в этот процесс обычное форматирование с использованием задержки.

Выделим часть десятой строки в пределах окна и применим Формат – Ячейки… - Граница и выберем нижнюю тонкую сплошную, цвет Авто.

Включим запись макроса. Выделим первую ячейку на этой же строке, и ее нижнюю границу отформатируем указанным способом так, чтобы она стала сплошной широкой и красной. Не выключая запись макроса, еще раз отформатируем эту же ячейку так, как отформатирована вся строка. Запись макроса можно остановить.

При его запуске мы фактически ничего не увидим, так как перекраска границы происходит за недоступное нашему восприятию время. Однако идея уже понятна: демонстрацию первого форматирования нужно увеличить (здесь нам поможет задержка), а после стирания (второе форматирование) необходимо, чтобы процесс распространился дальше (для этого воспользуемся циклом).

Теперь смелее нажимаем кнопку Выполнить макрос  и, выбрав  Изменить…, войдем в Редактор Visual Basic. Преобразуем его в соответствии с нашим планом:

Tik = 1000000

For C = 1 To 40

  With Cells(10, C).Borders(xlEdgeBottom)

      .LineStyle = xlDash

      .Weight = 4

      .ColorIndex = 3

  End With

  For i = 1 To Tik: Next i

  With Cells(10, C).Borders(xlEdgeBottom)

      .LineStyle = xlContinuous

      .Weight = 2

      .ColorIndex = xlAutomatic

  End With

Next C

А теперь настало время запустить… Пакет помчался вдоль линии связи. Откорректируем величину задержки.

Удаление избыточной информации

Макрос довольно подробно фиксирует не только те свойства объекта, которые  вы изменяли, но и те, что не изменялись. Не всегда это оправданно. В большинстве случаев избыточную информацию без проблем можно удалить, от чего ваша программа станет более простой и понятной. Довольно скоро вы станете различать, какие строки в макросе имеют прямое отношение к вашим действиям, а какие образовались из-за его чрезмерного усердия.

Вот красноречивый пример окраски границ ячейки в синий цвет. В ответ на элементарное действие пользователя макрос разразился целой тирадой:

Range("D2").Select

Selection.Borders(xlDiagonalDown).LineStyle = xlNone

Selection.Borders(xlDiagonalUp).LineStyle = xlNone

With Selection.Borders(xlEdgeLeft)

    .LineStyle = xlContinuous

    .Weight = xlThin

    .ColorIndex = 5

End With

With Selection.Borders(xlEdgeTop)

    .LineStyle = xlContinuous

    .Weight = xlThin

    .ColorIndex = 5

End With

With Selection.Borders(xlEdgeBottom)

    .LineStyle = xlContinuous

    .Weight = xlThin

    .ColorIndex = 5

End With

With Selection.Borders(xlEdgeRight)

    .LineStyle = xlContinuous

    .Weight = xlThin

    .ColorIndex = 5

End With

Тот же самый результат получим, преобразовав макрос к виду:

Range("D2").Borders.ColorIndex = 5

Всего то одна строка!

Не при всяких действиях макросы бывают такими «многословными», поэтому не пугайтесь.

Из пункта А в пункт Б

Попытаемся усовершенствовать предыдущий проект, используя более зрелищный подход. Отформатируем ту же строку, установив в ней размер символов 36, а заливку ячеек – бледно-зеленой. Включив запись макроса, выполним следующие действия:

-     в первую ячейку нашей строки вставим символ велосипеда из шрифта Webdings, а в вышележащую – стрелку из шрифта Wingdings 3 (цвет символов по вашему вкусу);

-     удалим только что вставленные символы и остановим запись макроса.

Теперь откроем макрос кнопкой  на панели Visual Basic и приведем его к виду:

For C = 1 To 40

  Cells(10, C).Value = "b"

  Cells(10, C).Font.Name = "Webdings"

  Cells(9, C).Value = "Ж"

  Cells(9, C).Font.Name = "Wingdings 3"

  For t = 1 To Tik: Next t

  Cells(10, C).Value = ""

  Cells(9, C).Value = ""

Next C

Не забудьте задать значение переменной для задержки.

Уже можно проиллюстрировать задачу из учебника для начальной школы или загадку «А и Б сидели на трубе».

Символы многих транспортных средств в разных ракурсах можно найти в шрифте Transportation.

Бегущая строка

Изменив направление на обратное и заменив символ  сообщением, получим возможность использования в своих проектах на Excel «бегущей строки»:

For C = 40 To 1 Step -1

  Cells(10, C).Value = "Бегущая строка"

    For t = 1 To Tik: Next t

  Cells(10, C).Value = ""

Next C

Если у вас вместо ожидаемого текста бежит набор графических символов, отформатируйте строку под шрифт Arial. Старайтесь не перегружать макросы и все, что можно подготовить для его работы, выполнять обычными методами. Так, в предыдущем проекте, если предварительно установить в строке 10 шрифт "Webdings", а в строке 9 шрифт "Wingdings 3", то необходимость в соответствующих строчках макроса отпадет, и он получится еще короче.

Схема управления

Следующий проект вы можете подготовить для демонстрации на уроках информатики при изучении темы «Модель замкнутой системы управления». Изображения управляющей системы и объекта управления выполнены способом объединения диапазонов ячеек и форматирования внешних границ. Каналы связи также «вычерчены» методом форматирования. Передача управляющего сигнала и информации о состоянии объекта осуществляется с помощью макроса на основе вставки символа и форматирования границы ячейки. В активном состоянии объекты выделяются цветом, что тоже отражено в макросе.

Устранение вибраций

В проектах с использованием динамических эффектов на основе форматирования границ ячеек при исполнении макроса может наблюдаться «вибрация» картинки в окне. Причина этого явления кроется в том, что при выборе широкой границы размер текстового поля в ячейке не изменяется, а изменяется ширина или высота ячейки. Для устранения этой неприятности можно за пределами сцены выделить столбец и отформатировать горизонтальные границы ячеек цветом фона максимальной ширины. В случае необходимости аналогичную процедуру можно произвести за пределами сцены и с какой-либо строкой, выделив вертикальные границы. Не возбраняется и индивидуальный, творческий подход.

Автобус

Идея этого динамического эффекта основана на изменении размеров символов. Из шрифта Webdings вставлен символ автобуса. Размер символа изменяется в цикле с задержкой. Для получения крупного изображения диапазон 10х10 ячеек объединен.

For s = 1 To 300

  Range("AP3").Font.Size = s

  For t = 1 To Tik: Next t

Next s

Иногда, по непонятной причине, автобус при исполнении этого макроса застряет на полпути. При повторных запусках такого явления не наблюдается.

Связь

Для моделирования передачи информации можно использовать принцип бегущих огней, используемый в елочных гирляндах, когда по очереди загорается или, наоборот, гаснет каждая третья лампочка. Воплотить в макросе это можно следующим образом: в цикле выделяются границы ячеек, чьи номера кратны 3, затем следующие за ними и еще раз следующие, после чего все повторяется. Создается эффект бегущей волны.

For M = 1 To 10

  n = M Mod 3

  For p = 2 To 40 Step 3

    With Cells(7, p + n).Borders(xlEdgeBottom)

        .LineStyle = xlDash

        .Weight = xlMedium

        .ColorIndex = 3

    End With

  Next p

  For p = 2 To 40 Step 3

    With Cells(7, p + n).Borders(xlEdgeBottom)

        .LineStyle = xlContinuous

        .Weight = xlThin

        .ColorIndex = xlAutomatic

    End With

  Next p

Next M

Внешний цикл задает число повторов, внутренние циклы можно переставить местами.

Цепь

В модели простейшей электрической цепи при нажатии на кнопку замыкается выключатель. Положительные заряды, как им и положено по теории, бегут от «плюса» к «минусу». Лампочка загорается. Всем процессом управляет малюсенький цикл, который в ячейке под кнопкой чередует данные: 0, 1, 2.

For p = 0 To 20

  Range("G8").Value = p Mod 3

  For t = 1 To Tik * 5: Next t

Next p

Range("G8").Value = 3

Остальное реализовано с помощью формул и условного форматирования. Ячейки по внешнему периметру схемы берут данные из управляющей ячейки непосредственно (путем «заморозки» ссылок) или по цепочке. Одни ячейки перекрашивают границу, образующую проводник, при условии равенства нулю, следующие при единице, и, наконец, при двойке. Данные в них скрыты путем выбора цвета символов под цвет фона. Что касается внутренних ячеек, то они содержат формулы вида: =ЕСЛИ($G$8=2;"+";""). Здесь в условии в левой части равенства ссылка на управляющую ячейку, а в правой –  0, 1 или 2, в порядке чередования.

Изменение положения выключателя осуществлено путем смены форматирования границ диапазона с диагонального на боковое. Источник питания создан с помощью панели рисования, а лампа взята из автофигур.

Последняя строка Range("G8").Value = 3 задает управляющей ячейке непредусмотренное условиями значение и, таким образом, служит выключателем, которым убираются со схемы все знаки «+» и восстанавливается цвет проводников по умолчанию.

Кипение

Аналогичным образом можно продемонстрировать процесс кипения. Только в этом случае использованы три управляющие ячейки, скрытые под кнопкой, в каждой из которых чередуются 0, 1 или 2.

For p = 0 To 20

  Range("D12").Value = p Mod 3

  Range("F12").Value = (p + 1) Mod 3

  Range("E12").Value = (p + 2) Mod 3

  For t = 1 To Tik: Next t

Next p

Range("D12:F12").Value = 3

Ячейки, изображающие воду, берут значения из управляющих ячеек, со сдвигом относительно друг друга и по слоям. Условное форматирование для них одинаково: при равенстве нулю цвет символа белый. Так образуются «пузырьки». По умолчанию цвет символов  совпадает с цветом воды, а размер символов увеличивается от слоя к слою.

Все ячейки, в которых отображаются скобки «пара», связаны формулой =ЕСЛИ($D$12=1;"(";ЕСЛИ($D$12=2;")";"")) с одной из управляющих ячеек, но в каждом слое правые части равенств в условиях циклически сдвинуты вдоль кольца 0, 1, 2.

В последней строке, как и в предыдущей модели, выполняется отключение пузырьков и пара.

Формула оценки, «степень требовательности»

Еще со времен программируемых калькуляторов «Электроника Б3-34» (не так много осталось преподавателей информатики, которые помнят те добэйсиковские времена, когда он был единственным техническим средством для сопровождения учебного пособия для школьников под редакцией А.П.Ершова и В.М.Монахова) я использую для оценки знаний при тестировании следующую формулу: oc = Int((otv / vop) ^ 2 * 5 + 0.5).

Здесь oc – оценка, vop – количество заданных вопросов, otv – число правильных ответов, функция Int(x) – находит целую часть. В данном случае дробь otv/vop возведена в квадрат для увеличения «степени требовательности», так как таблицу умножения надо знать хорошо. Изменяя показатель степени (можно использовать и дробные показатели, например 1.5), можно регулировать требовательность.

Достоинство этой формулы еще и в том, что она позволяет обходиться без операторов ветвления или выбора. Хотя здесь не велика премудрость, однако за последние 20 лет мне не приходилось встречаться с ее использованием в разработках для контроля знаний.

Таблица умножения

Эту программу для проверки знаний приходилось воплощать еще на «Электронике Б3-34». Почему бы не попробовать в электронных таблицах?

Способ оценивания описан выше, а для реализации заданий использована событийная процедура Worksheet_SelectionChange – изменение выбора на рабочем листе. Первая команда в этой процедуре Range("AF6:AP16").Select пресекает всякую попытку выделить любой другой диапазон или ячейку, кроме диапазона для ввода ответа. Множители задаются с помощью генератора случайных чисел:

Range("L6").Value = Int(Rnd(1) * 8 + 2)

Количество вопросов – пока не надоест или по указанию учителя.

Excel - гуманитарий

Вопрос о возможности использования электронных таблиц на уроках русского или иностранного языка обычно вызывает недоумение. «В одну телегу впрячь не можно коня и трепетную лань»1, – вот готовый ответ классика. На первый взгляд здесь противоречия посущественнее, чем между Моцартом и Сальери, однако же, не будем торопиться с поспешными выводами, ведь факты – упрямая вещь.

Вот фрагмент рабочего листа, где MS Excel, выступая в роли учителя начальных классов, предлагает задания по русскому языку, тщательно выявляет допущенные ошибки, помечая их в тексте мигающими маркерами, и выставляет оценку за работу.

Идея этого проекта довольно проста. Каждая буква текста занимают одну ячейку. Таким образом, все знаки обретают свои координаты: номер строки и номер столбца. Координаты знакомест для вставки пропущенных букв и их надлежащие значения сведены в таблицу, которая вынесена за пределы окна и может быть спрятана одним из ранее указанных способов.

Макрос в цикле по указанным координатам читает введенные значения и сравнивает их с имеющимися правильными ответами. При расхождении соответствующие ячейки маркируются.

Понятно, что такого рода упражнения можно подготовить и для уроков математики и для других предметов.

Метод последовательных приближений

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

-     обдумывание всего проекта и разбивка его на основные модули;

-     выделение в модулях существенных  сторон;

-     продумывание и планирование общего сценария проекта;

-     разработка способов управления проектом;

-     тщательная разработка расположения объектов и элементов;

-     разработка дизайна сцены;

-     создание и отладка отдельных макросов;

-     оптимизация кода макроса;

-     объявление переменных и массивов;

-     организация обмена данными между макросами;

-     организация циклов и ветвлений;

-     отладка усовершенствованных макросов;

-     внедрение созданных блоков в основное тело проекта;

-     структурирование и комментирование блоков;

-     отладка взаимодействия отдельных частей и модулей;

-     настройка скорости выполнения отдельных фаз проекта;

-     коррекция недочетов.

Поиск оптимального элемента

Проблема развития алгоритмического мышления и усвоения основ программирования в современной школе является довольно острой, и причина здесь не только в сокращении времени на изучение этой темы. Другим существенным обстоятельством является то, что, соблазнив детей прелестями графического интерфейса и другими мультимедийными чудесами, мы, как бы обманывая, отбрасываем их назад в прошлый век, в мрачные QBasic или Pascal, и пытаемся убедить, что вот так и создаются программы. А так как исходные тексты профессиональных программ  мы показать не в состоянии, в это тем более трудно поверить. Вот и приходится слышать: «А зачем нам это старьё?» Кроме того, подбор задач по теме программирования весьма далек от современных чудес и не вызывает энтузиазма.

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

-     несложны в реализации и вполне по силам учащимся основной школы;

-     эффективны и привлекательны;

-     реализованы в современной среде программирования;

-     позволяют продемонстрировать все основные структуры и операторы языка программирования, предусмотренные школьной программой.

Есть реальная возможность увлечь детей и поддержать тем самым отечественную школу программирования.

Однако это не все. Если вы учитель информатики, то наверняка знаете, как не просто объяснить детям, чем решение задачи по математике отличается от решения задачи по программированию и какова разница между записью алгоритма и его исполнением.

Некоторые ученики поначалу никак не могут взять в толк, что для решения им необходимо играть сразу три роли: программиста, исполнителя и пользователя, а также чем эти роли отличаются друг от друга. Особенно трудно дается роль формального исполнителя, оттого и роль программиста не удается. Программы работают так быстро и так скрытно, что обычно не могут являться иллюстрацией исполнения, вот и приходится учителю «нарезать» петли на доске, объясняя реализацию цикла на блок-схеме или иную премудрость. Не всегда это получается убедительно.

Попробуем известными уже нам способами приручить программу и сделать ее не такой спешной и более наглядной. И чтобы в разных вариантах: и на бейсике, и на алгоритмическом языке, и в виде блок-схемы. Да и чтобы видно было, что в памяти творится!

А еще, чтобы с ручным управлением: захотел – остановился, захотел – дальше поехал!! И чтобы скорость можно было переключать!!!

Сказано – сделано. Милости просим…

В этом эмуляторе, в основном использовалось выделение текста и выделение ячеек, а также передача сигнала по цепочке. Для организации цикла, при ручном управлении, применен оператор выбора. Текст программы несложно переделать под Pascal, оставив начинку на VBA.


1 А.С.Пушкин. «Полтава» (1829).На верх

 

Динамические эффекты Предварительная подготовка Эффекты форматирования Графические объекты
&Движение объектов Ожившие графики Другие варианты Вентильные схемы Автоматизация тестирования
Автоматизация оценки Проект "Машина времени" Игра "Жизнь" Заполнение аттестатов

© 2007 Государственное областное образовательное учреждение
"Россошанская школа-интернат для детей-сирот и детей, оставшихся без попечения родителей"