Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ИНФ_Лаб_Работы 12-16_VBA_2010.pdf
Скачиваний:
22
Добавлен:
31.05.2015
Размер:
428.66 Кб
Скачать

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. Такая процедура называется макросом. Процесс написания макроса также автоматизирован. Для этого требуется:

а) вызвать команду Сервис — макрос — Начать_запись. Факт записи показывается наличием на экране окна записи (см. рисунок справа) и изображением аудиокассеты около указателя мыши;

б) в диалоговом окне задать макросу имя, указать степень доступности макроса (для данного документа или для всех документов), при желании назначить макросу горячую клавишу;

в) выполнить запланированную последовательность действий; г) завершить запись макроса щелчком кнопки Остановить_запись в окне записи.

В дальнейшем для исполнения макроса надо вызвать команду Сервис — Макрос — Макросы, выбрать нужный макрос в списке и щелкнуть кнопку Выполнить. Можно запустить макрос проще — с помощью горячей клавиши, если она была назначена при создании макроса.

Sub Форматирование()
'
' Форматирование Макрос ' Макрос записан 18.05.2007 Петров
'
Selection.WholeStory Selection.Font.Name = "Tahoma" Selection.Font.Size = 16
With Selection.ParagraphFormat
.SpaceBeforeAuto = False
.SpaceAfterAuto = False
.Alignment = wdAlignParagraphJustify
.FirstLineIndent = CentimetersToPoints(0.7)
.CharacterUnitFirstLineIndent = 0
.WordWrap = True End With
Selection.HomeKey Unit:=wdStory
End Sub
Рис.12

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

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 = I0esn , где s некоторая постоянная, находимая опытным путем. При неограниченном возрастании n величина In стремится к нулю.

Информация n-го знака в тексте моделируется формулой In = (I0 I)esn + 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 = I0esn , где I0 — ранее подсчитанная средняя

информация одной буквы. Параметр s принять равным 0,48. Для подсчета степени числа e использовать встроенную функцию EXP(). Примерный вид формулы в первой ячейке (F2)

таков: =$C$2*EXP(–0,48*E2).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]