8. Переместиться в общую область программного кода «General» и внести описание трёх переменных.
Замечание. Если описание переменной выполняется в теле процедуры, то она видна (доступна) только в данной процедуре. Переменная, описанная в общей области видна во всех процедурах модуля.
9.Запустить программу. Проверить работу кнопки «Старт».
10.Двойным щелчком по кнопке «Стоп» войти в область кода и вписать следующий код.
11. Запустить приложение (программу). Скопировать форму в буфер обмена нажатием клавиш Alt + Print_Screen. Вставить изображение в документ Word. Выйти из приложения. Скопировать программный код (листинг) в документ Word. Показать преподавателю работу приложения и отчет (документ Word).
Контрольные вопросы
1.Что такое структурное программирование?
2.В чем заключается объектно-ориентированное проектирование?
3.В чём различие частных и общих процедур?
4.Какова структура имени частной процедуры?
5.Для чего необходимо описывать все переменные, используемые в процедурах?
6.Какова область видимости переменных?
7.Перечислите и объясните смысл всех операторов, использованных в данной работе.
Работа 15. Основы программирования на языке VBA. Написание макросов
Общие указания
Цель работы: практическое освоение методики написания и последующего редактирования макросов, знакомство с основными операторами языка VBA.
Работая с документом MS Word или с рабочим листом электронной таблицы, мы можем заметить, что часто приходится выполнять одну и ту же последовательность действий. Исполнение этих действий можно автоматизировать, записав их в виде процедуры (Sub) на языке VBA. Такая процедура называется макросом. Процесс написания макроса также автоматизирован. Для этого требуется:
а) вызвать команду Сервис — макрос — Начать_запись. Факт записи показывается наличием на экране окна записи (см. рисунок справа) и изображением аудиокассеты около указателя мыши;
б) в диалоговом окне задать макросу имя, указать степень доступности макроса (для данного документа или для всех документов), при желании назначить макросу горячую клавишу;
в) выполнить запланированную последовательность действий; г) завершить запись макроса щелчком кнопки Остановить_запись в окне записи.
В дальнейшем для исполнения макроса надо вызвать команду Сервис — Макрос — Макросы, выбрать нужный макрос в списке и щелкнуть кнопку Выполнить. Можно запустить макрос проще — с помощью горячей клавиши, если она была назначена при создании макроса.
Практическое задание
1. Создать в личной папке документ Word под именем «Фамилия_макрос». Набрать в нем приведенный в рамке текст.
Начинаем осваивать VBA.
Создаем макросы. Автоматизируем форматирование текста. Ремонтируем неопрятный текст.
2.Создать макрос форматирования документа (под именем «Форматирование»), включающий следующие действия:
а) выделить весь текст документа (Ctrl + A);
б) установить с помощью панели инструментов Форматирование шрифт «Tahoma» и размер 16 пт;
в) вызвать диалоговое окно форматирования абзацев по команде Формат — Абзац и установить в нём для свойства абзацев Выравнивание значение «По ширине», а для свойства Первая_строка значение «Отступ» (размер отступа 0,7 см);
г) переместиться в начало документа (Ctrl + Home). Остановить запись.
3.Просмотреть листинг (текст) макроса, воспользовавшись командой Сервис — Макрос
—Макросы. Для просмотра выбрать макрос из списка в диалоговом окне и щелкнуть кнопку Изменить. Примерный текст макроса показан на рисунке 12.
Комментарии. Листинг доступен для редактирования вручную. Так, если вы производили какие-то ошибочные действия, которые не требуется сохранять, их запись
можно удалить из листинга.
Поясним некоторые операторы, содержащиеся в тексте макроса.
Selection.WholeStory — как объект Фрагмент
(выделенное) интерпретируется весь текст документа. Здесь Selection — объект, а WholeStory
— метод . Под словом «метод» в Visual Basic подразумевается некоторое действие над объектом (или выполняемое объектом). Применение метода описывается оператором вида Объект.Метод или Объект.ВложенныйОбъект.Метод1.
Selection.Font.Name = "Tahoma" — присвоение
свойству Name объекта Font (Символ) в выделенном фрагменте значения "Tahoma". Следующий оператор присваивает значение свойству символов Size — Размер. Это известный
Вам оператор Let. Далее в выделенном присваиваются новые значения свойствам абзацев (объект ParagraphFormat). Поскольку при написании макроса для этих целей использовалось соответствующее диалоговое окно, эта серия операторов записана экономичным образом с помощью блочного оператора With/End_With. В приведенной иллюстрации многие операторы этой серии отсутствуют, они были удалены при последующем редактировании уже созданного макроса. Вы без особого труда найдете в этом блоке строки задания свойств Выравнивание и Первая_строка.
Selection.HomeKey Unit:=wdStory — метод HomeKey над объектом Фрагмент (в начало),
для параметра Unit (Единица) задано значение Весь_текст.
4.Открыть в текстовом редакторе Блокнот файл «Болванка_1». Скопировать в конец документа Word содержимое этого файла, затем запустить на исполнение созданный макрос.
5.Внести в листинг макроса изменения: исправить имя шрифта на «Bookman Old Style», размер шрифта — 14 пт, отступ первой строки абзаца — 1 см.
Выйти из редактора Visual Basic.
1 Часто для метода задают параметры его исполнения. Параметры перечисляются в операторе после указания метода и разделяются пробелом. Оператор имеет вид Объект.Метод Параметр1:=Знач1 Параметр2:=Знач2.
6.Исполнить исправленный макрос. Просмотреть изменения, произошедшие в тексте.
7.Организовать показ в тексте непечатаемых символов щелчком кнопки ¶ на панели инструментов Стандартная.
8.Создать макрос «Пробелы» для правильной постановки пробелов около знаков препинания, удаления лишних пробелов и замены черточки в роли тире на знак тире.
Действия: вызвать диалог Правка — Заменить. Выполнить замену точки на ".└─┘" (точка и последующий пробел): В строку Найти диалогового окна вписать точку, а в строку Заменить_на — точку с пробелом, нажать кнопку Заменить_всё.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Закрыть диалоговое окно и остановить |
|||
|
|
|
Sub Пробелы() |
|
|
|
|
|||||||||||||||||||
|
|
|
|
|
|
|
запись макроса. |
|
|
|||||||||||||||||
|
' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Просмотреть текст этого макроса. |
|||||
|
|
|
' Пробелы Макрос |
|
|
|
|
|
Если |
все |
действия |
выполнены |
||||||||||||||
|
|
|
' Макрос записан 10.05.2010 Петров |
|
правильно, то листинг будет выглядеть, |
|||||||||||||||||||||
|
' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
примерно как на рисунке 13. На рисунке |
||||||
|
|
|
|
Selection.Find.ClearFormatting |
|
|
|
|
выделен голубым цветом фрагмент замены |
|||||||||||||||||
|
|
|
|
Selection.Find.Replacement.ClearFormatting |
|
|
|
знака точка на цепочку точка, пробел. |
||||||||||||||||||
|
|
|
|
With Selection.Find |
|
|
|
|
|
|
|
|
|
|
|
|
|
9. Вставить две пустые строки между |
||||||||
|
|
|
|
.Text = "." |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
данным фрагментом и строкой End_Sub. |
||||||
|
|
|
|
.Replacement.Text = ". " |
|
|
|
|
|
|
|
|
|
|
Затем скопировать выделенный фрагмент |
|||||||||||
|
|
|
|
.Forward = True |
|
|
|
|
|
|
|
|
|
|
|
|
листинга вместе с одной пустой строкой в |
|||||||||
|
|
|
|
.Wrap = wdFindContinue |
|
|
|
|
|
|
|
|
буфер обмена. |
|
|
|||||||||||
|
|
|
|
.Format = False |
|
|
|
|
|
|
|
|
|
|
|
|
Вставить |
скопированный |
фрагмент в |
|||||||
|
|
|
|
.MatchCase = |
False |
|
|
|
|
|
|
|
|
|
образованное пустое пространство 11 раз |
|||||||||||
|
|
|
|
.MatchWholeWord |
= False |
|
|
|
|
|
|
так, чтобы между каждыми вставками |
||||||||||||||
|
|
|
|
.MatchWildcards = False |
|
|
|
|
|
|
|
|
оставалась пустая строка. |
|
||||||||||||
|
|
|
|
.MatchSoundsLike = False |
|
|
|
|
|
|
|
Переписать выражения в кавычках для |
||||||||||||||
|
|
|
|
.MatchAllWordForms = False |
|
|
|
|
строк каждого фрагмента листинга: |
|||||||||||||||||
|
|
|
|
End With |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.Text = "." |
|
|
||
|
|
|
|
Selection.Find.Execute Replace:=wdReplaceAll |
|
|
|
.Replacement.Text = ". " |
|
|||||||||||||||||
|
|
|
End Sub |
|
|
Рис. 13. |
|
|
|
|
|
Замены |
производить, руководствуясь |
|||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
приведенной ниже таблицей. |
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для избежания путаницы в таблице |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
приведены все 12 шагов алгоритма и даны сответствующие пояснения. |
Таблица 1. |
|||||||||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
№№ |
|
Text |
|
Replacement.Text |
|
Пояснения и примечания |
||||||||||||||||||
|
1 |
|
|
. |
|
|
|
|
|
|
|
|
|
.└─┘ |
|
Постановка пробела после точки или |
||||||||||
|
2 |
|
|
, |
|
|
|
|
|
|
|
|
|
,└─┘ |
|
запятой. Знаком └─┘показан пробел |
||||||||||
|
3 |
|
|
( |
|
|
|
|
|
|
|
|
|
└─┘( |
|
Постановка пробелов снаружи от |
||||||||||
|
4 |
|
|
) |
|
|
|
|
|
|
|
|
|
)└─┘ |
|
круглых скобок |
|
|
||||||||
|
5 |
|
|
(└─┘){2;} |
|
(└─┘) |
|
Удаление множественних пробелов |
||||||||||||||||||
|
6 |
|
|
└─┘¶ |
|
¶ |
|
|
|
|
Удаление пробелов в конце и начале |
|||||||||||||||
|
7 |
|
|
¶└─┘ |
|
¶ |
|
|
|
|
абзаца, ¶ — знак абзаца |
|
||||||||||||||
|
8 |
|
|
-└─┘ |
|
—└─┘ |
|
Замена черточки на тире |
|
|||||||||||||||||
|
9 |
|
|
└─┘. |
|
. |
|
|
|
|
Удаление пробелов перед точкой или |
|||||||||||||||
|
10 |
|
|
└─┘, |
|
, |
|
|
|
|
запятой |
|
|
|||||||||||||
|
11 |
|
|
(└─┘ |
|
( |
|
|
|
|
Удаление пробелов, прилегающих к |
|||||||||||||||
|
12 |
|
|
└─┘) |
|
) |
|
|
|
|
скобкам изнутри |
|
Замечание. Знак абзаца и «длинное тире» являются специальными символами и вписываются в листинг в закодированном виде соответственно "^p" и "^+".
Пояснение. Если в редактируемом документе встречается, например, 5 пробелов подряд, то после однократного выполнения этого шага останется 3 пробела. Программа найдет первые два пробела и заменит их одним, то же сделает с третьим и четвертым пробелами и продолжит поиск в оставшейся части документа. После второго исполнения в
документе останется 2 пробела, и потребуется еще одно исполнение данного действия. Предлагаемая конструкция с использованием круглых и фигурных скобок позволяет программе находить множественные пробелы и заменять их на одиночные.
Если действия при написании макроса выполнены правильно, то во вставленном фрагменте документа исчезнут лишние пробелы, появятся в нужных местах, где их не было,
атакже появится знак тире.
10.Просмотреть макрос.
11.Открыть в текстовом редакторе Блокнот файл «Болванка_2». Скопировать текст из него и вставить в конец вашего документа. Затем поочередно запустить на исполнение созданные макросы. Показать результат преподавателю и отключить показ непечатаемых
символов повторным щелчком кнопки ¶ на панели инструментов Стандартная.
12.Войти в окно редактора Visual Basic по команде Сервис — Макрос — Редактор_Visual_Basic. Скопировать листинг обоих макросов, затем вставить его в конец документа.
13.Удалить созданные макросы (а также все другие макросы, если они есть): выбрать поочередно макросы из списка в диалоговом окне, вызываемом командой Сервис — Макрос — Макросы, и щелкнуть кнопку Удалить.
Контрольные вопросы
1.Приведите из макросов примеры операторов вида Объект.Метод (или Объект.ВложенныйОбъект.Метод) и Объект.Свойство=Значение.
2.Какую роль играет алгоритмическая конструкция With / End_With?
3.Предложите способ добавления в макрос «Пробелы» кодов постановки пробела после вопросительного знака (восклицательного знака, двоеточия, точки с запятой) и удаления пробелов, предшествующих упомянутым знакам? Как наиболее рационально осуществить это редактирование?
4.Каковы кодовые представления знаков абзаца длинного тире в макросах?
Работа 16. Измерение информации с помощью электронных таблиц Excel
Общие указания
Цель работы: измерение синтаксической информации по формулам Хартли и Шеннона. Овладение методами информационного измерения текста.
Для измерения синтаксической информации в сообщении используются формулы Хартли
m |
m |
I0 = log2 m и Шеннона I0 = ∑ pi log2 (1/ pi ) = −∑ pi log2 pi , где I0 — информация |
|
i =1 |
i =1 |
одного знака текста, m — численность алфавита, pi — вероятность появления i-ого знака алфавита в тексте. Первая формула (Хартли) используется только при условии равенства вероятностей для всех знаков.
Не следует думать, что информация сообщения равна произведению длины сообщения на величину I0. Дело в том, что отдельные знаки текста имеют контекстную обусловленность, которая снижает информационную цену каждого следующего знака. Величина I0 является усредненным значением. Информация n-го знака в слове вычисляется по формуле
In = I0e−sn , где s некоторая постоянная, находимая опытным путем. При неограниченном возрастании n величина In стремится к нулю.
Информация n-го знака в тексте моделируется формулой In = (I0 − I∞)e−sn + I∞ , где I∞
— некоторый параметр. В отличие от предыдущей формулы при n→∞ величина In стремится к величине I∞, отличной от нуля Это связано с тем, что длина слова так или иначе ограничена, а текст может быть практически как угодно длинным.
Описанные закономерности вскрывают явление информационной избыточности текста, положенное в основу технологий сжатия информации в программах-архиваторах.
Формулы Хартли и Шеннона применимы также к измерению семантической информации при условии выделения в сообщении семантических единиц. Так в сообщении об исходе бросания игрального кубика (все исходы равновероятны) семантическая информация измеряется по формуле Хартли, параметр m принимается равным шести (число возможных исходов).
Практическое задание
1. Открыть собственную рабочую книгу. При отсутствии в ней чистых листов вставить новый лист. Присвоить листу имя «Информация». В столбцы A и B рабочего листа, ввести данные из таблицы 1.
|
|
|
|
|
|
|
Табл. 1 |
Буква |
Вероятн. |
Буква |
Вероятн. |
Буква |
Вероятн. |
Буква |
Вероятн. |
Пробел |
0,175 |
Р |
0,040 |
Я |
0,018 |
Х |
0,009 |
О |
0,090 |
В |
0,038 |
Ы |
0,016 |
Ж |
0,007 |
Е, Ё |
0,072 |
Л |
0,035 |
З |
0,016 |
Ю |
0,006 |
А |
0,062 |
К |
0,028 |
Ь, Ъ |
0,014 |
Ш |
0,006 |
И |
0,062 |
М |
0,026 |
Б |
0,014 |
Ц |
0,004 |
Т |
0,053 |
Д |
0,025 |
Г |
0,013 |
Щ |
0,003 |
Н |
0,053 |
П |
0,023 |
Ч |
0,012 |
Э |
0,002 |
С |
0,045 |
У |
0,021 |
Й |
0,010 |
Ф |
0,002 |
2.Выбрать команду Сервис — Макрос — Безопасность. Установить уровень безопасности «Низкая» (только в этом режиме можно работать с объектами VBA).
3.Войти в окно редактора VBA и добавить в модуль листинг функции ШЕННОН, для вычисления информации по формуле Шеннона для распределения вероятностей, заданного таблицей.
Function ШЕННОН(Массив_вероятностей As Range) As Double
'Вычисление информации по формуле Шеннона
Dim Ячейка As Range, m As Double
For Each Ячейка In Массив_вероятностей m = Ячейка.Value
ШЕННОН = ШЕННОН – m * Log(m) Next Ячейка
ШЕННОН = ШЕННОН / Log(2) End Function
Замечание. Аргументом данной функции является величина типа Range. Это массив ячеек. Объект Range появляется, когда мы выделяем массив на рабочем листе.
4. Переключиться на рабочий лист. В ячейке C1 записать «Информация I0». В ячейке C2 с помощью написанной функции, используя в качестве аргумента данные табл. 1, вычислить среднюю информацию одной буквы русского текста по Шеннону. В качестве аргумента указать массив вероятностей (B2:B33).
5. Начиная с ячейки E1, построить таблицу по образцу табл. 2.
Табл. 2
Номер буквы в слове |
Информация |
Информация n |
Информация |
|
буквы |
знаков слова |
с избытком |
1 |
|
|
|
2 |
|
|
|
Ввести номера от 1 до 10. В ячейки другой колонки ввести формулу для расчета информации, несомой n-й буквой слова: In = I0e−sn , где I0 — ранее подсчитанная средняя
информация одной буквы. Параметр s принять равным 0,48. Для подсчета степени числа e использовать встроенную функцию EXP(). Примерный вид формулы в первой ячейке (F2)
таков: =$C$2*EXP(–0,48*E2).