Контрольная работа № 2 - Кафедра АСУ

advertisement
Министерство образования Республики Беларусь
Белорусско-Российский университет
Кафедра ‘’Автоматизированные системы управления’’
КОМПЬЮТЕРНЫЕ ИНФОРМАЦИОННЫЕ ТЕХНОЛОГИИ
Методические указания и задания контрольной работе №1
для студентов заочной формы обучения специальности
«Автоматизированные системы обработки информации»
Могилев 2007
УДК 519.86
Составитель: Ст. преп. Выговская Н.В.
Асс.Галинская И.Г.
Компьютерные информационные технологии. Методические указания и задания к контрольной работе для студентов заочной формы обучения специальности «Автоматизированные системы обработки информации»
Одобрены кафедрой “Автоматизированные системы управления”
Рецензент зав. кафедрой АСУ, канд.техн.наук, доц. С.К. Крутолевич
Редактор А.Т. Червинская
Ответственный за выпуск Крутолевич С.К.
С
Составление Н.В.Выговская, 2010
Белорусско-Российский университет
3
Контрольная работа № 1
Номера задач выбираются в соответствии с двумя последними цифрами номера зачетной книжки студента на пересечении соответствующей строки с соответствующим
столбцом из таблицы 1 – для контрольной работы № 1
Контрольную работу следует оформлять на листах формата А4. На обложке должны быть указаны: название дисциплины, номер группы, шифр (номер зачетной книжки),
фамилия и инициалы студента.
Тексты программ должны быть приведены в виде распечаток и к ним приложены
блок-схемы решения задач. Необходимо сделать распечатку копии экрана с пользовательской формой и (или) рабочего листа с исходными данными и результатами.
В конце каждой работы следует приводить список использованной литературы.
Таблица 1 – Варианты задач для контрольной работы № 1
Предпоследняя
цифра номера
зачетной
книжки
Последняя цифра номера зачетной книжки
9
8
7
6
5
4
3
2
1
0
9
1, 33,
73,93
11, 43, 4, 35, 9, 50, 6, 39, 7, 33, 3, 43, 11, 48, 1, 36, 6, 48,
83, 103 75, 95 70, 90 79, 99 72, 92 62, 102 68, 88 76, 96 67, 87
8
12, 50, 2, 34, 21, 44, 5, 37, 11, 48, 8, 37,
69,89 64, 104 74, 94 77, 97 86, 106 75,94
7
15, 41, 16, 48, 17, 35, 18, 45, 19, 39, 20, 46, 21, 35, 22, 36, 23, 45, 24, 40,
79,98 65, 109 71,89 65, 105 77,96 66, 104 70,88 74,93 64, 102 78, 108
6
25, 33, 26 40, 27 46, 28, 36, 29, 47, 30, 41, 31, 45, 1, 33, 2, 35, 3, 46,
81, 97 80, 100 77, 111 78, 99 67, 87 63, 105 67, 88 75, 96 77, 98 67, 109
5
4, 46, 5, 35, 6, 39, 7, 44, 8, 37, 9, 46, 10, 43, 11, 44, 12, 50, 13, 37,
68, 90 77, 99 81, 103 76, 97 79, 100 69, 92 65, 99 68, 110 64, 108 80, 100
4
14, 38, 15, 44, 16, 49, 17, 38, 18, 42, 19, 38, 20, 54, 21, 45, 22, 43, 23, 57,
77, 93 82, 100 69, 91 78, 99 77, 111 70, 98 66, 103 67, 92 72, 105 68, 104
3
24, 47, 25, 39, 26, 42, 27, 47, 28 37, 29, 56, 30, 39, 31, 49, 2, 47, 3, 42,
67, 99 84, 100 85, 101 70, 102 71, 87 72, 88 79, 105 68, 106 75, 91 82, 108
2
4, 39, 5 48, 6, 41, 7, 40, 8, 45, 9, 36, 10, 38, 11, 39, 12, 50, 13, 49,
73, 109 77, 110 63, 95 62, 90 64, 96 62, 94 65, 97 84, 106 68, 102 70,87
1
14, 34, 15, 38, 16 49, 17, 40, 18, 38, 19, 54, 20, 35, 21, 36, 25, 41, 30, 59,
83, 101 73, 90 77, 94 76, 95 81, 107 74, 94 66, 99 79, 92 73, 91 79, 110
0
7, 44, 5, 33, 16, 37, 10, 40, 2, 42, 6, 36, 4, 41, 5, 46, 23, 49, 26 42,
68, 92 81, 105 67, 102 70, 103 84, 91 75, 88 64, 95 83, 102 67, 92 63, 90
9, 34, 10, 44, 13, 41, 14, 35,
72, 91 63, 107 81, 101 72, 110
4
4 Варианты задач для контрольной работы № 1
4.1 Требования к выполнению задач:
1) указать какие имена (идентификаторы) были присвоены переменным. Для задач
сначала следует записать расчетные формулы и сделать математическое обоснование;
2) написать программу на языке Visual Basic for Applications (VBA), где значения
переменных, входящих в выражение, вводятся через пользовательскую форму (или из рабочего листа) EXCEL, а результаты счета выводятся на пользовательскую форму (если
она есть) и на рабочий лист EXCEL;
3) если не указано иное, то значения переменных и элементов массива определить
самостоятельно, а количество элементов в массиве должно быть не менее 15.
4) указать, какие стандартные функции и операторы языка программирования VBA
были использованы.
4.2 Задачи для решения на VBA
1. В одномерном массиве подсчитать количество элементов, кратных заданному числу
k.
2. В массиве С(n) подсчитать количество отрицательных элементов и сумму положительных элементов.
3. От каждого из m чисел отнять их среднее арифметическое (использовать только
один одномерный массив).
4. Вычислить среднее значение и дисперсию для заданного массива X(k) наблюдений:
1 k
1 k
xср   xi ; d x 
( xi  xср ) 2 .

k i 1
k  1 i 1
5. Многочлены Pm(x) и Qn(x) заданы массивами своих коэффициентов. Найти частное и
остаток от деления Pm(x) на Qn(x) (в виде массивов коэффициентов).
6. Каждый элемент вектора A(n) (кроме двух крайних) заменить выражением:
a  ai  ai 1
a  a2 / an1  an
, а крайние элементы – выражениями: a1/  1
.
ai/  i 1
; an 
4
2
2
7. Удалить из массива A(n) нулевые элементы, передвинув на их место следующие
элементы без нарушения порядка их следования. В результате должен получиться
массив меньшего размера, не содержащий нулей.
8. В массиве K(n) в порядке убывания представлены достоинства денежных знаков (купюр и монет) валютной системы некоторой страны. Реализовать выдачу в этой системе заданной суммы m минимальным числом денежных знаков.
9. В массиве A(n) наименьший элемент поместить на первое место, наименьший из
оставшихся – на последнее место, следующий по величине – на второе место, следующий – на предпоследнее и так далее до середины массива.
10. Удалить в заданном массиве X(n) «лишние» (кроме первого) элементы так, чтобы
оставшиеся образовывали возрастающую последовательность (за один просмотр
массива).
11. В массиве A(n) каждый третий элемент заменить полусуммой двух предыдущих, а
стоящий перед ним – полусуммой соседних с ним элементов. Дополнительный (рабочий) массив не использовать.
12. В массиве H(t) найти первый и последний нулевые элементы.
13. В массиве Р(t) найти наиболее длинную цепочку нулей.
14. Даны два целочисленных массива R(m) и L(n). Найти наибольший элемент массива
R, не имеющий себе равных в массиве L.
15. В целочисленном массиве A(n) найти наиболее длинную цепочку одинаковых подряд стоящих элементов.
16. В массиве A(n) много совпадающих элементов. Найти количество различных элементов (не упорядочивая массива).
5
17. Найти все числа, встречающиеся в массиве A(m) строго два раза (не упорядочивая
массива).
18. В массиве A(n) найти самую длинную последовательность, которая является арифметической прогрессией.
19. В массиве A(n) найти самую длинную последовательность, которая является геометрической прогрессией.
20. В массиве A(2n+1), не содержащем одинаковых элементов, найти средний по величине элемент, т.е. такой, что в массиве А ровно n элементов меньших его и столько
же элементов больше его. Массив А сохранить (не сортировать), дополнительных
массивов не использовать.
21. Задан массив, состоящий из n неотрицательных элементов. Найти в нем индекс элемента, для которого сумма элементов, стоящих до него, наименее отличается от
суммы элементов, стоящих после него.
22. Дан массив целых чисел. Найти в нем максимальный и минимальный элементы. Вывести все элементы исходного массива, расположенные (находящиеся) между этими
экстремальными значениями.
23. Дан массив целых чисел. Найти в нем максимальный (max) и минимальный (min)
элементы. Вывести в порядке возрастания все целые числа из интервала (max;min).
24. В массиве A(n) вывести номера (индексы) локальных максимумов, т.е. таких ai, что
ai-1<ai>ai+1.
25. В массиве A(2n) каждый элемент с четными индексами поменять местами с предыдущим.
26. Многочлен Pn(x) задан массивом своих коэффициентов A(n+1). Найти массив коэффициентов производной этого многочлена.
27. В массиве Z(n) найти число чередований знака, т.е. число переходов с минуса на
плюс или с плюса на минус (нуль знака не имеет).
28. В массиве А(n) каждый элемент, кроме первого, заменить суммой всех предыдущих
элементов.
29. Каждый из элементов массива X(n) xi заменить средним значением первых i элементов этого массива.
30. Каждый из элементов массива Х(n) xi заменить минимальным среди первых i элементов этого массива.
31. Осуществить циклический сдвиг элементов массива T(n) на m позиций влево (при
этом необязательно m<n).
32. Элементы одномерного массива A(n2) построчно расположить в матрице B(n,n).
33. Строки матрицы A(m,n) заполнены не полностью: в массиве L(m) указано количество элементов в каждой строке. Переслать элементы матрицы построчно в начало
одномерного массива T(m·n), подсчитать их количество.
34. Матрицу M(m,n) заполнить натуральными числами от 1 до m·n по спирали, начинающейся в верхнем левом углу и закрученной по часовой стрелке.
35. В матрице A(m,n) каждый элемент ai,j заменить минимальным среди элементов подматрицы A/(i,j), расположенной в левом верхнем углу матрицы А.
36. В матрице A(m,n) каждый элемент ai,j заменить суммой элементов подматрицы
A/(i,j), расположенной в левом верхнем углу матрицы А.
37. Матрицу A(m,n) заполнить следующим образом: для заданных k и l элементу akl присвоить значение 1; элементам, окаймляющим его 9соседние элементы по вертикали,
горизонтали и диагоналям) – значение 2; элементам следующего окаймления – значение 3 и так далее до заполнения всей матрицы.
38. Матрицу K(m,n) заполнить следующим образом: элементам, находящимся на периферии (по периметру матрицы), присвоить значение 1; периметру оставшейся подматрицы – значение 2 и так далее до заполнения всей матрицы.
6
39. В массиве X(m,n) каждый элемент (кроме граничных) заменить суммой непосредственно примыкающих к нему элементов по вертикали, горизонтали и диагоналям.
40. Содержимое квадратной матрицы А(n,n) повернуть на 900 по часовой стрелке, считая
центром поворота центр симметрии матрицы.
41. В каждом столбце и каждой строке матрицы P(n,n) содержится строго по одному нулевому элементу. Перестановкой строк добиться расположения всех нулей по главной диагонали матрицы.
42. Матрица A(n,n) состоит из нулей и единиц. Найти в ней номера хотя бы одной строки, не содержащей единицы.
43. Найти среднее арифметическое элементов каждой строки матрицы A(m,n) и вычесть
его из элементов этой строки.
44. В матрице A(m,n) все ненулевые элементы заменить обратными по величине и противоположными по знаку.
45. Задана матрица A(k,l). Найти вектор B(l), каждый элемент которого равен среднему
арифметическому элементов соответствующего столбца матрицы А.
46. Дан массив A(n,m). Все положительные его элементы поместить в начало массива
B(n·m), а отрицательные – в начало массива C(n·m). Подсчитать количество тех и
других.
47. Латинским квадратом порядка n называется квадратная таблица размером n·n, каждая строка и каждый столбец которой содержат все числа от 1 до n. Проверить является ли заданная целочисленная матрица латинским квадратом.
48. Латинским квадратом порядка n называется квадратная таблица размером n·n, каждая строка и каждый столбец которой содержат все числа от 1 до n. Организовать создание такой матрицы.
49. Магическим квадратом порядка n называется квадратная таблица размером n·n, состоящая из чисел 1,2,3,…,n2 так, что сумма по каждому столбцу, каждой строке и
каждой из двух диагоналей равны между собой. Проверить, является ли заданная целочисленная матрица магическим квадратом.
50. Седловой точкой в матрице называется элемент, являющийся одновременно
наибольшим в столбце и наименьшим в строке. Седловых точек может быть несколько (в этом случае они имеют разные значения). В матрице А(n,m) найти седловую точку и ее координаты.
51. Дана матрица A(m,n). Сравнить сумму элементов нижней треугольной матрицы
(элементы, стоящие ниже главной диагонали) с суммой элементов главной диагонали, не вычисляя суммы всех элементов исходной матрицы.
52. В каждой строке квадратной матрицы найти наибольший и поменять его с соответствующим диагональным.
53. Найти все числа, каждое из которых встречается в каждой строке матрицы A(m,n).
54. Проверить, не является ли заданная матрица A(m,n) осесимметричной.
55. Проверить, не является ли заданная матрица A(m,n) центросимметричной.
56. Заполнить матрицу A(m,n) числами 1,2,3,4, так, чтобы по горизонтали и вертикали не
было одинаковых элементов.
57. Результаты сессии, состоящей из трех экзаменов, для группы из n студентов представлены матрицей K(n,3). Оценка ставится по пятибалльной системе; неявка обозначена единицей. Подсчитать количество неявок, неудовлетворительных, удовлетворительных, хороших и отличных оценок по каждому предмету.
58. Просуммировать элементы матрицы A(n,n) по каждой из линий, параллельных главной диагонали.
n
59. Для матрицы A(m,n) найти ее норму: A  max  | aik | .
i 1, m
k 1
60. В матрице A(m,n) найти минимальный среди максимальных элементов столбцов.
7
61. Дана матрица A(m,n). Определить разность наибольшего и наименьшего элементов в
каждой строке.
62. Дан текст; найти наибольшее количество цифр, идущих в нем подряд.
63. Дан текст; определить, содержит ли он символы, отличные от букв и пробела.
64. Дан текст. Если в тексте нет символа *, то оставить этот текст без изменения, иначе
каждую из малых латинских букв, предшествующих первому вхождению символа *,
заменить на цифру 3.
65. Дан текст. Если в тексте нет символа +, то оставить текст без изменений, иначе каждую из цифр, предшествующую первому вхождению символа +, заменить символом
–.
66. Дан текст; если в нем нет малых латинских букв, то оставить его без изменения, иначе каждый из символов, следующих за первой группой малых латинских букв, заменить точкой.
67. Дан текст; выяснить, является ли этот текст десятичной записью целого числа.
68. Дана символьная матрица размера n на т. Получить последовательно все строки
матрицы, исключая те, для которых есть равные среди строк с меньшими номерами.
69. Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не
содержащие пробелов внутри себя, будем называть словами. Для каждого из слов
указать, сколько раз оно встречается среди всех слов, образованных символами данного текста.
70. Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не
содержащие пробелов внутри себя, будем называть словами. Найти все слова, содержащие наибольшее количество гласных латинских букв (а, е, i, о, и).
71. Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не
содержащие пробелов внутри себя, будем называть словами. Найти все слова, в которых доля букв a, b максимальна.
72. Дан текст. Группы символов, разделенные пробелами (одним или несколькими) и не
содержащие пробелов внутри себя, будем называть словами. В тех словах, которые
оканчиваются сочетанием букв ing, заменить это окончание на ed.
73. Дано натуральное число п. Получить символьное представление п в виде последовательности цифр и пробелов, отделяющих группы по три цифры, начиная справа.
74. Дано натуральное число п (n≤1000). Записать это число русскими словами (семнадцать, двести пятьдесят три, тысяча и т. д.).
75. Дано натуральное число п, равное выраженной в копейках цене некоторого товара,
например 317, 5005, 100 и т. д. Выразить цену в рублях и копейках, например 3 руб.
17 коп., 50 руб. 05 коп., 1 руб. 00 коп. и т. д. (число копеек записывается всегда двумя цифрами).
76. Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из
знаков +, –, *. Группой букв будем называть такую совокупность последовательно
расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.
Выяснить, встречается ли в данном тексте группа букв one.
77. Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из
знаков +, –, *. Группой букв будем называть такую совокупность последовательно
расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.
Выяснить, верно ли, что в данном тексте больше групп букв, чем групп знаков.
78. Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из
знаков +, –, *. Группой букв будем называть такую совокупность последовательно
расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.
8
Найти число таких групп букв, которые начинаются и кончаются одной и той же
буквой.
79. Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из
знаков +, –, *. Группой букв будем называть такую совокупность последовательно
расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.
Найти все такие группы букв, в которые буква а входит не менее двух раз.
80. Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из
знаков +, –, *. Группой букв будем называть такую совокупность последовательно
расположенных букв, которой непосредственно не предшествует и за которой непосредственно не следует буква. Аналогично определим группу цифр и группу знаков.
Найти самую длинную группу цифр. Если эту наибольшую длину имеет несколько
групп, то взять первую по порядку.
81. Дан текст. Если первый символ текста не является малой латинской буквой, то оставить его без изменения. Если же это малая латинская буква, но за начальной группой
малых латинских букв не следует цифра, то также оставить текст без изменения.
Иначе каждую цифру, принадлежащую группе цифр, следующей за начальной группой малых латинских букв, заменить символом *.
82. Дан текст. Найти номер первой по порядку группы цифр, начинающейся цифрой 2.
83. Дан текст. Найти число тех групп букв, которые заканчиваются той же буквой, что и
первая группа букв.
84. В заданном тексте найти самое длинное слово.
85. Проверить, является ли данное слово словом-палиндромом, одинаково читающееся
как слева направо, так и справа налево (например, шалаш, Анна).
86. Во введенном слове подсчитать количество различных букв и вывести сами буквы.
4.3 Задачи для создания приложения с формой и заполнения табличной базы данных в EXCEL
87. Картотека домашней библиотеки: выходные данные книги (авторы, название, издательство и так далее), раздел библиотеки (специальная литература, хобби, домашнее
хозяйство, беллетристика и так далее), происхождение и наличие книги в данный
момент, субъективная оценка книги. Выбор книги по названию и автору с сохранением данных в текстовый файл.
88. Картотека Интерпола. Данные по каждому зарегистрированному преступнику: фамилия, имя, кличка, рост, цвет волос и глаз, особые приметы, гражданство, место и
дата рождения, последнее место жительства, знание языков, преступная профессия,
последнее дело и так далее. Выборка по любому множеству признаков. Сохранение
данных в текстовый файл.
89. Бюро знакомств. База потенциальных женихов и невест: пол, регистрационный номер, дата регистрации, сведения о себе, требования к партнеру. Выбор подмножества
подходящих кандидатур. Сохранение данных в текстовый файл.
90. Биржа труда. База безработных: анкетные данные, профессия, образование, место и
должность последней работы, причина увольнения, семейное положение, жилищные
условия, контактные координаты, требования к будущей работе. Поиск и регистрация клиента; формирование объявлений для печати с сохранением данных в текстовый файл.
91. Записная книжка. Анкетные данные, адреса, телефоны, место работы или учебы,
должность знакомых, коллег и родственников, характер знакомства, деловые качества . Поиск по произвольному шаблону. Сохранение данных в текстовый файл.
92. Касса аэрофлота. Расписание: номер рейса, маршрут, пункты промежуточной посадки, время отправления, дни полета. Количество свободных мест на каждом рейсе. Выбор
9
ближайшего рейса до заданного пункта (при наличии свободных мест) с сохранением
данных в текстовый файл.
93. Справочник потребителя (служба быта). База предприятий бытового обслуживания города: название, разряд, адрес и телефоны, специализация, перечень оказываемых услуг, форма собственности, часы и дни работы. Поиск предприятий по заданной услуге с сохранение
м данных в текстовый файл.
94. Справочник покупателя. База торговых точек города: название, адрес и телефоны, специализация, форма собственности, время работы. Выбор магазинов по произвольному шаблону. Сохранение данных в текстовый файл.
95. Магазин с одним продавцом. Компьютер вместо кассового аппарата. База наличия товаров: наименование, единица измерения, цена единицы, количество, дата последнего завоза. Регистрация поступления товара (как старых, так и новых наименований). Оформление покупки: выписка чека с сохранением данных в текстовый файл.
96. Отдел кадров. База данных о сотрудниках фирмы: паспортные данные, образование, специальность, подразделение, должность, оклад, даты поступления в фирму и последнего
назначения и т. д. Сокращение штатов: выбор для увольнения лиц пенсионного и предпенсионного возраста, подготовка приказа. с сохранением данных в текстовый файл.
97. Генеалогическое дерево. Паспортные данные членов некоторого родового клана; ссылки на детей (или на родителей). Поиск всех предков для указанного лица с сохранением
данных в текстовый файл.
98. Склад. База товаров, хранящихся на складе: наименование, единица измерения, цена единицы, количество, дата последнего завоза. Регистрация поступления товара (формирование
приход ной. наклад ной) и отгрузки (расходная накладная) с сохранением данных в текстовый файл.
99. Касса автовокзала. Расписание автобусов: номер рейса, конечный и промежуточный
пункты, время отправления. Количество свободных мест на каждом рейсе. Выбор ближайшего рейса до заданного пункта (при наличии свободных мест), оформление билетов
с сохранением данных в текстовый файл.
100. Администратор гостиницы. Список номеров: класс, число мест. Список гостей: паспортные данные, даты приезда и отъезда, номер. Поселение гостей: выбор подходящего номера (при наличии свободных мест), регистрация, оформление квитанции с сохранением
данных в текстовый файл. Поиск гостя по ф.и.о.
101. Справочник меломана. База групп и исполнителей; песен; база дисков с перечнем
песен (в виде ссылок). Выбор всех песен заданной группы. Сохранение данных в текстовый файл.
102. Ежедневник. База намечаемых мероприятий — дата, время и протяженность, место проведения. Автоматическое напоминание ближайшего дела: по текущей дате и времени;
планируемых дел. Просмотр дел на завтра, послезавтра и так далее. Сохранение данных в
текстовый файл.
103. Терминология. База определений какой-либо науки: вводимый термин, его толкование
(определение), ссылки на используемые термины. Поиск термина с сохранением данных в
текстовый файл.
104. Шеф-повар. База рецептур блюд: раскладка, рецепт приготовления. База продуктов
на складе: наименование, цена, количество. Формирование меню на день (на заданное число персон); званый ужин. Проверка достаточности запасов; формирование расходной
накладной на склад, корректировка запасов. Сохранение данных в текстовый файл.
105. Справочник лекаря. База болезней: название, симптомы, процедуры, перечень рекомендуемых лекарств с указанием требуемого количества. База медикаментов на складе:
название, количество, взаимозаменяемость. Формирование рецепта после осмотра больного, проверка наличия лекарств, корректировка запасов. Сохранение данных в текстовый файл.
10
106. Зачисление абитуриентов. База абитуриентов: анкетные данные, совокупность оценок
на вступительных экзаменах, готовность учиться на договорной основе. Выбор для зачисления заданного количества абитуриентов; формирование для собеседования списка тех,
кто набрал предельный проходной балл, но не может платить за образование. Сохранение данных в текстовый файл.
107. Обмен жилья. База предложений по обмену: район, площадь, планировка и т. д.; требования
к вариантам обмена. Регистрация клиентов, выбор подходящих вариантов, удаление при
состоявшемся обмене или отказе. Развитие задачи. Возможность съезда или разъезда, в
том числе «несколько на несколько»; «возможны варианты». Сохранение данных в текстовый файл.
108. Справочник абитуриента. База вузов: наименование, адрес, перечень специальностей,
конкурс прошлого года по каждой специальности {дневной, вечерней, заочной форм), размер оплаты при договорном обучении. Выбор по разным критериям: все о данном вузе;
все о данной специальности, поиск минимального конкурса по данной специальности
или вообще. Сохранение данных в текстовый файл.
109. Справочник почтовой индексации. Республика, область (край), район, населенный
пункт, почтовый индекс. Поиск по любой совокупности полей (кроме последнего);
иерархическая связь между полями (обратите внимание, что, например, Павловск есть в
Алтайском крае, Воронежской и Ленинградской областях). Сохранение данных в текстовый файл.
110. Сбербанк. Сведения о вкладчиках банка: номер лицевого счета, категория вклада, паспортные данные, текущая сумма вклада, дата последней операции. Операции приема и выдачи любой суммы, автоматическое начисление процентов. Сохранение данных в текстовый файл.
111. Ломбард. База хранимых товаров и недвижимости: анкетные данные клиента, наименование товара, оценочная стоимость; сумма, выданная под залог, дата сдачи, срок хранения. Операции приема товара, возврата, продажи по истечении срока хранения. Сохранение данных в
текстовый файл.
11
4.4 Примеры выполнения заданий
Пример 1.
Решить задачу на VBA
Условие:
Можно ли коробку размером abc упаковать в посылку размером
rst? «Углом» укладывать нельзя.
Оформление и описание решения:
1. Построим блок-схему алгоритма. Приведена на рисунке 5.
2. Напишем следующую программу.
Sub short13()
Dim A(1 To 3) As Integer
'массив габаритов коробки
Dim B(1 To 3) As Integer
'массив габаритов посылки
Dim i As Integer
Dim OK As Boolean 'переменная-индикатор возможности поместить коробку в посылку
OK = False
'изначально коробка не может быть помещена в посылку
'чтение габаритов коробки и посылки
For i = 1 To 3
A(i) = Cells(i + 2, 1)
'считывание габаритов коробки из ячеек A3:A5
рабочего листа
B(i) = Cells(i + 2, 3)
'считывание габаритов посылки из ячеек C3:C5
рабочего листа
Next i
'следующий цикл позволяет перебрать все возможные позиции того, как коробка
будет «помещаться» в посылке
For i = 1 To 3
'условие, проверяющее есть ли возможность расположить коробку в посылке
'оператор Mod, остаток от деления, используется здесь для того, чтобы значения
индексов
'массива габаритов коробки не выходили за допустимые пределы, т.е. не были
больше трёх.
If ((B(1) > A(i) And B(2) > A(i Mod 3 + 1) And B(3) > A((i +
1) Mod 3 + 1)) Or _
(B(3) > A(i) And B(2) > A(i Mod 3 + 1) And B(1) > A((i + 1)
Mod 3 + 1))) Then OK = True
Next i
If (OK = True) Then MsgBox ("Получается!") Else MsgBox ("Ничего
не выходит")
End Sub
12
Начало
OK = False
i=1,3,1
Чтение
A(i), В(i)
i=1,3,1
Проверка возможности
разместить
коробку
в
посылке какойто одной стороной.
OK = True
нет
да
OK = True
Вывод
“нет”
Вывод
“да”
Конец
Рис. 5 – Блок-схема алгоритма программы
3. Составим шаблон для ввода данных о размерах коробки и посылки на рабочем листе
EXCEl.
13
Рис. 6 – Пример тестирования программы
Рис. 7 – Пример тестирования программы
Создание программы завершено. В ходе её работы требования, данные в условии,
выполняются. Это подтверждает правильность составления алгоритма. Результаты тестирования программы на рисунках 6 и 7.
4. Описание используемых операторов:
For ... Next – оператор цикла, повторяющий последовательность действий определённое количество раз;
If … Then ... Else …– оператор условия, выполняющий одну из последовательностей действий в зависимости от истинности/ложности условия;
Mod – оператор, возвращающий остаток от деления (x Mod y) числа x на y;
MsgBox S – оператор вывода на экран окна, содержащего значение строковой переменной S.
14
Пример 2.
Создание приложения с формой и заполнения табличной базы данных в
EXCEL
В качестве учебного примера представлены этапы решения задачи «Касса автовокзала» с описанием используемых средств языка VBA.
Условие:
Создать следующую базу данных. Касса автовокзала. Расписание автобусов: номер
рейса, конечный и промежуточный пункты, время отправления. Количество свободных мест
на каждом рейсе. Выбор ближайшего рейса до заданного пункта (при наличии свободных
мест), оформление билетов с сохранением данных в текстовый файл.
Подробное описание решения.
Для решения задачи воспользуемся возможностью создания пользовательского меню для нашей базы данных.
Начнем с разработки структуры нашего будущего меню (рисунок 8).
Меню
Файл
Сервис
Создать
новый лист
Добавить запись
Закрыть лист
Удалить запись
Выход
Забронировать
билет
Справка
О программе
Сортировка
Поиск
Рис 8 – Структурная схема меню приложения
Теперь рассмотрим подробнее алгоритм создания меню и его пунктов.
Для создания пользовательского меню используется объект CommandBar и семейство CommandBars (для программирования строк меню и панели инструментов). В семействе CommandBars хранятся все строки меню и панели инструментов конкретного приложения. Поэтому семейство CommandBars содержится в объекте Application (родительском приложении). В свою очередь каждый объект CommandBar содержит семейство объектов CommandBarControls, состоящее из всех элементов управления данной панели инструментов. Свойство Controls объекта CommandBar возвращает семейство CommandBarControls, элементы которого относятся к одному из трех типов:
- CommandBarButton:
Кнопка или элемент меню, вызывающий выполнение команды или подпрограммы.
- CommandBarComboBox:
Сложно организованное меню, похожее на поле ввода, раскрывающийся
список или поле со списком.
15
- CommandBarPopUp:
Вложенное меню.
В общем виде иерархию объектов CommandBars можно изобразить следующим
образом (рисунок 9).
Application
CommandBars
CommandBar
CommandBarControls
CommandBarButton
CommandBarComboBox
CommandBarPopUp
Рис 9 – Иерархия объекта CommandBar
Так как наша панель меню будет создаваться применительно ко всей активной рабочей книге, то процедуры, описывающие ее создание, следует разрабатывать в модуле
«ЭтаКнига» (рисунок 10).
Начнем написание алгоритма с описания процедуры Workbook_Open, которая запускается автоматически сразу же при открытии
приложения.
Private Sub Workbook_Open()
'Вызов процедуры создания
‘пользовательского меню
MenuBuilder
'Вызов процедуры для
’пользовательского меню
UserForm4.Show 'Вызов заставочного
окна UserForm4
End Sub
Рис 10 – Расположение модуля «ЭтаКнига»
При этом будет вызвана процедура создания пользовательского меню MenuBuilder.
А также выведена на экран форма UserForm4 (на рисунке 11), которая представляет собой
заставку-приветствие и содержит всего одну процедуру CommandButton1_Click.
'UserForm4 предназначена для использования в качестве заставки
при запуске
Private Sub CommandButton1_Click()
16
Unload UserForm4
End Sub
Меню
UserForm4
CommёandButton1_Click
Рис 11 – Запуск приложения
Рассмотрим алгоритм процедуры MenuBuilder, необходимой для того, чтобы создать меню пользователя для данного приложения.
Private Sub MenuBuilder()
'Построение пользовательского меню
'Переменная a будет переменной объектного типа CommandBar
(Панель инструментов)
Dim a As CommandBar
'Создаем свою панель меню с помощью метода Add в родительском приложении Application
'Для этого обратимся к объекту CommandBars (Панель инструментов) и к его методу Add
'!!!Помните, что обращение к нижележащим объектам производится с помощью разделителя "." (точки)!!!
Set
a
=
Application.CommandBars.Add(Name:="m",
Position:=msoBarTop, MenuBar:=True, Temporary:=True)
'Создание панели инструментов, где параметр:
'Name - имя нашей панели меню
'Position - положение на окне Excel (в нашем случае выше всех
остальных панелей)
' MenuBar - замена активной строки меню нашей строкой меню
(True - Да, False - Нет)
' Temporary - указатель на то, удалять ли нашу панель после
закрытия разрабатываемой программы
17
'(Если True, то удалять, если False, то сохранить)
'Здесь под переменной скрывается наша панель меню. Конечно, к
ней можно бы было обращаться непосредственно
'Application.CommandBars(Name:="m"), но проще использовать
для этого переменную типа Object (Объект)
With a'Сделаем нашу панель видимой с помощью свойства
‘Visible
.Visible = True
'Начнем создавать на нашей панели вложенные меню (семейство
Controls объекта Command Bars)
With .Controls
'Добавим новое вложенное меню
With .Add(Type:=msoControlPopup)
'Добавление вложенного меню "Файл" на нашу панель меню
.Caption = "Файл" 'Название меню
With .Controls
With .Add(Type:=msoControlButton)
'Добавление пункта "Создать новый лист" в выпадающее меню
"Файл"
.Caption = "Создать новый лист"
'Название пункта меню
.OnAction = "NewDoc" 'Запуск процедуры при выборе пункта "Создать новый лист" (расположена в Module1)
'Свойство .OnAction объекта Controls очень важно, так как оно
по‘зволяет связать процедуру, которая Вы хотите, чтобы запускалась
‘при выборе (нажатии) данного пункта меню (элемента семейства
‘Controls), с этим пунктом
End With
With .Add(Type:=msoControlButton)
'Добавление пункта "Закрыть лист" в выпадающее меню "Файл"
.Caption = "Закрыть лист" 'Название пункта
.OnAction = "Close1"
'Запуск процедуры при выборе пункта
"Закрыть лист" (расположена в Module1)
End With
With .Add(Type:=msoControlButton)
'Добавление пункта "Выход" в выпадающее меню "Файл"
.Caption = "Выход"
'Название пункта
.OnAction = "ExitDoc"
'Запуск процедуры при выборе пункта
"Выход" (расположена в Module1)
End With
End With
End With
'Создадим второе всплывающее меню "Сервис" на нашей панели
With .Add(Type:=msoControlPopup)
.Caption = "Сервис"
'С помощью метода Controls.Add добавим к новому меню несколько пунктов
With .Controls
With .Add(Type:=msoControlButton)
.Caption = "Добавить запись" 'Пункт "Добавить запись"
.OnAction = "Enter" 'Вызов процедуры, отвечающей за ввод
дан‘ных при выборе данного меню
End With
With .Add(Type:=msoControlButton)
.Caption = "Удалить запись" 'Пункт "Удалить запись"
18
.OnAction = "Remove"
'Вызов процедуры удаления
вы‘деленной записи при выборе пункта "Удалить запись"
End With
With .Add(Type:=msoControlButton)
.Caption = "Забронировать билет" 'Пункт "Забронировать
билет"
.OnAction = "Z_b" 'Вызов процедуры заказа билета
‘ при выборе пункта "Забронировать билет"
End With
With .Add(Type:=msoControlButton)
.Caption = "Сортировка" 'Пункт “Сортировка”
.OnAction = "Sort" 'Вызов процедуры сортировки
‘ при выборе пункта "Сортировка"
End With
With .Add(Type:=msoControlButton)
.Caption = "Поиск" 'Пункт "Поиск"
.OnAction
=
"Find"
'Вызов
процедуры
поиска
‘при выборе ‘пункта "Поиск"
End With
End With
End With
'Создадим последнее третье вложенное меню "Справка" на нашей
‘панели меню
With .Add(Type:=msoControlPopup)
.Caption = "Справка" 'Название меню
With .Controls
'Создадим в этом меню пункт "О программе"
With .Add(Type:=msoControlButton)
.Caption = "О программе"
.OnAction = "AboutProg" 'Вызов процедуры,
‘представляющей информацию о программе
.Style = msoButtonIconAndCaption 'Разрешим помещение
‘картинки рядом с названием пункта
'Создание значка для пункта меню
.FaceId = 466 'Задание значка с кодом 466
End With
End With
End With
End With
End With
End Sub
Результатом работы данной процедуры будет панель меню следующего вида (рисунки 12, 13, 14, 15).
Рис 12 – Внешний вид панели меню
Рис 13 – Вложенное меню Файл
19
Рис 14 – Вложенное меню Сервис
Рис 15 – Вложенное меню Справка
Рассмотрим работу каждого пункта меню подробно. Начнем с пункта Создать новый лист меню Файл, отвечающего за создание нового листа Excel, на котором будет
расположена вся информация о рейсах.
Процедура NewDoc, расположенная в модуле Module1, необходима для запуска
формы UserForm6, предназначенной для ввода имени нового листа.
Public Sub NewDoc()
'Открытие формы для создания нового листа
UserForm6.Show
End Sub
'UserForm6 используется для ввода имени нового рабочего листа и
его создания
Private Sub CommandButton1_Click()
Dim i As Boolean, a As String, w As Worksheet
i = False
Do
a = CStr(UserForm6.TextBox1)
For Each ws In Worksheets
'Проверим, существует ли лист с таким же именем, созданный
ранее,
'и не ввели ли мы по ошибке пустую строку как имя нового листа
If ws.Name = a Or a = "" Then
MsgBox "Лист с данным именем уже существует либо был сделан некорректный ввод!", _
vbCritical, "Ошибка": Exit Sub
Else: i = True: End If
Next
Loop Until i = True
'Для добавления нового листа в текущую книгу воспользуемся методом
'Sheets.Add
Sheets.Add
'Присвоим новому текущему рабочему листу введенное нами имя
ActiveSheet.Name = a
create
'Вызов процедуры, отвечающей за формирования внешнего вида
базы данных на новом листе Excel
Unload Me
End Sub
Private Sub CommandButton2_Click()
20
Unload Me
End Sub
Private Sub UserForm_Initialize()
UserForm6.TextBox1.SetFocus
End Sub
Форма выглядит следующим образом (рисунок 16).
Создадим новый рабочий лист (рисунки 17, 18).
Рис. 16 – Внешний вид формы UserForm6
Рис 17 – Ввод имени нового рабочего листа
Рис 18 – Создание нового рабочего листа
21
Создание заголовков и оформление ячеек будущей базы данных происходит в процедуре create, расположенной в модуле Module1.
Public Sub create()
'Задание заголовков и ширины столбцов
Range("1:1").Select:
Selection.Font.FontStyle
=
"полужирный": Range("A1:A1").Select
Worksheets(ActiveSheet.Name).Cells(1, 1) = "№ рейса"
Worksheets(ActiveSheet.Name).Cells(1, 2) = "Промежуточный
пункт"
Worksheets(ActiveSheet.Name).Cells(1, 3) = "Конечный пункт"
Worksheets(ActiveSheet.Name).Cells(1,
4)
=
"Время
отправления"
Worksheets(ActiveSheet.Name).Cells(1, 5) = "Кол-во свободных
мест"
Columns("A:A").ColumnWidth = 12: Columns("B:B").ColumnWidth
= 27
Columns("C:C").ColumnWidth = 27: Columns("D:D").ColumnWidth
= 25
Columns("E:E").ColumnWidth = 24
End Sub
Процедура Close1, расположенная в модуле Module1, удаляет текущий рабочий
лист.
Public Sub Close1()
'Закрывает текущий рабочий лист с базой данных, путем его удаления
ActiveWindow.SelectedSheets.Delete
End Sub
Процедура ExitDoc, расположенная в модуле Module1, завершает работу приложения.
Public Sub ExitDoc()
'Закрытие программы
Application.Quit
End Sub
Перейдем к рассмотрению меню Сервис.
Рассмотрим структуру алгоритма пункта Добавить запись меню Сервис.
Процедура Enter, расположенная в модуле Module1, вызывает форму UserForm1,
предназначенную для ввода информации о новом рейсе.
Public Sub Enter()
'Открытие формы для ввода данных
UserForm1.Show
End Sub
'UserForm1 отвечает за корректный ввод данных в базу
Private Sub CommandButton1_Click()
Dim i As Integer
'Проверим правильность ввода исходных данных
22
'Функция IsNumeric проверяет, является ли введенная переменная
чис‘лом так как часы и минуты вводятся в виде чисел
If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox6.Text = "" Or IsNumeric(TextBox3.Text) = False _
Or
IsNumeric(TextBox4.Text)
=
False
Or
IsNumeric(TextBox5.Text) = False Then
MsgBox "Ошибка ввода.", vbApplicationModal, "Внимание":
TextBox1.SetFocus: Exit Sub
End If
i = Application.CountA(Range("A:A")) + 1
'Переменной i присваивается количество непустых записей в базе
'Для этого мы воспользовались методом CountA объекта
‘Application
'"A:A" означает, что мы ищем непустые записи только в столбце A ‘(номера рейсов),так как в других столбцах непустых записей будет ‘столько же
'Прибавляем единицу, так как следующая ячейка снизу пуста, туда и внесем новую запись
'Объект Worksheets - это лист Excel, с которым мы работаем
'Чтобы указать конкретный лист, с которым ведется работа,
‘необходимо указать номер листа (например, Worksheets(1) или
‘Worksheets("лист1")) или ввести параметр ActiveSheet.Name, который указывает имя окрытого листа, где в нашем случае хранится база
данных
'Конечно, перед этим необходимо присвоить ActiveSheet.Name
имя нашего листа, что сделано в пользовательской процедуре NewDoc
Worksheets(ActiveSheet.Name).Cells(i, 1) = i - 1
'Свойство Cells позволяет обратиться к конкретной ячейке текущего листа, используя обычную нумерацию строк и столбцов как в
двухмерном массиве
Worksheets(ActiveSheet.Name).Cells(i, 2) = TextBox1
Worksheets(ActiveSheet.Name).Cells(i, 3) = TextBox2.Text
Worksheets(ActiveSheet.Name).Cells(i, 4) = TextBox6.Text
+_ " в " + TextBox3.Text + "," + TextBox4.Text
Worksheets(ActiveSheet.Name).Cells(i,5)=CInt(TextBox5.Text)
End Sub
Private Sub CommandButton2_Click()
Unload Me
'Закрытие формы без сохранения в TextBox введенной информации
End Sub
23
Рис 19 – Внешний вид формы UserForm1
Рис 20 – Результат работы процедуры UserForm1
Процедура Remove, расположенная в модуле Module1, отвечает за удаление выбранного рейса из базы.
Public Sub Remove()
'Удаление записи со смещением строк
Dim a As Integer: Dim i As Integer: Dim k As Integer: Dim
p As Integer
'Найдем номер выделенной ячейки, которую вместе со всей строкой хочет удалить пользователь
a = Application.ActiveCell.Row
'Запишем номер рейса данной строки, так как строки могут
‘быть отсортированы не по возрастанию номеров рейсов
p = CInt(Worksheets(ActiveSheet.Name).Cells(a, 1))
24
'Отсортируем в порядке возрастания номеров рейсов записи в базе
для более удобного доступа
Worksheets(ActiveSheet.Name).Range("A2:" & "E" & Application.CountA(Range("A:A"))).Sort
Key1:=Worksheets(ActiveSheet.Name).Range(Chr(65) & "2")
Worksheets(ActiveSheet.Name).Range("A1").Select
'Произведем сдвиг на одну строку вверх всех строк, лежащих ‘ниже удаленной
a = p + 1
If a = 1 Then: MsgBox "Заголовок нельзя удалить!",
vbCritical, "Ошибка": Exit Sub
For k = a To Application.CountA(Range("A:A"))
'Цикл от
текущей до последней строки
For i = 2 To 6
Worksheets(ActiveSheet.Name).Cells(k,
i)
=
Worksheets(ActiveSheet.Name).Cells(k + 1, i)
Worksheets(ActiveSheet.Name).Cells(k + 1, i) = ""
Next i
Next k
Worksheets(ActiveSheet.Name).Cells(Application.CountA(Range("A:_A"))
, 1) = ""
End Sub
Результат работы процедуры Remove представлен на рисунках 19, 20.
Рис. 21 – Указание рейса, подлежащего удалению
Рис. 22 – Запись удалена
Рассмотрим создание пункта Забронировать билет меню Сервис.
25
Забронировать билет
Z_b
UserForm3
Рис. 23 – Структура разработки пункта Забронировать билет
Public Sub Z_b()
'Открытие формы для бронирования билета с сохранением в
файл
UserForm3.Show
End Sub
'UserForm3 предназначена для заказов билетов
Private Sub CommandButton1_Click()
If TextBox1.Text = "" Or IsNumeric(TextBox2.Text) = False
Then
MsgBox "Ошибка ввода.", vbApplicationModal, "Внимание":
TextBox1.SetFocus: Exit Sub
End If
If Worksheets(ActiveSheet.Name).Cells(CInt(TextBox2) + 1,
5) > 0 Then
'Для корректного поиска номера рейса, билет на который нужно
заказать отсортируем сначала наши записи по возрастанию номеров рейсов (по
столбцу A)
Worksheets(ActiveSheet.Name).Range("A2:" & "E" & _ Application.CountA(Range("A:A"))).Sort
_
Key1:=Worksheets(ActiveSheet.Name).Range(Chr(65) & "2")_
Worksheets(ActiveSheet.Name).Range("A1").Select
Worksheets(ActiveSheet.Name).Cells(CInt(TextBox2)
+
1,
5)_ = Worksheets(ActiveSheet.Name).Cells(CInt(TextBox2) + 1, 5)
- 1
'Внесем информацию о забронированных билетах в текстовый файл последовательного доступа
Open "file.txt" For Output As #1
Print #1, TextBox1; Tab; "Номер рейса - "; TextBox2
Close #1
Else: MsgBox "Билетов на этот рейс больше нет или нет такого рейса!", , "Нет билетов"
End If
End Sub
Private Sub CommandButton2_Click()
Unload Me
End Sub
Рассмотрим создание пункта Сортировка меню Сервис, отвечающего за упорядочивание записей по выбранному критерию.
26
Рис. 24 – Внешний вид формы UserForm3
Сортировка
Sort
UserForm5
Рис. 25 – Структура разработки пункта Сортировка
Процедура Sort, расположенная в модуле Module1, предназначена для вызова формы UserForm5, где и будет происходить выбор критерия сорти-ровки.
Co
mdoBox1
Рис. 26 – внешний вид UserForm5 (для хранения критериев сортировки используется объект ComboBox)
Public Sub Sort()
'Открытие формы для сортировки данных
UserForm5.Show
End Sub
'UserForm5 предназначена для ввода критерия сортировки
Private Sub CommandButton1_Click()
Worksheets(ActiveSheet.Name).Range("A2:" & "E" & Application.CountA(Range("A:A"))).Sort
Key1:=Worksheets(ActiveSheet.Name).Range(Chr(65
+
ComboBox1.ListIndex) & "2")
Worksheets(ActiveSheet.Name).Range("A1").Select
Unload Me
End Sub
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To Application.CountA(Range("1:1"))
'Внесение непустых записей в объект ComboBox1 (всплывающий
список) на форме из текущего рабочего листа Excel
ComboBox1.AddItem
Worksheets(ActiveSheet.Name).Cells(1,
i)
Next i
ComboBox1.ListIndex = -1
'Свойство ListIndex указывает на номер записи, которая будет
выведена на объект ComboBox1. В данном случае -1 указывает, что на
верхнюю строку ввода не будет выведено ничего (чтобы увидеть все записи, просто нажмите на стрелку, находящуюся справа от строки ввода
списка)
27
End Sub
Рассмотрим пункт Поиск меню Сервис, отвечающего за поиск ближайшего по
времени рейса до нужного пункта.
Public Sub Find()
'Открытие формы для поиска данных
UserForm2.Show
End Sub
'UserForm2 предназначена для поиска ближайшего рейса в данный
город
Private Sub CommandButton1_Click()
Dim i As Integer: Dim j As Integer: Dim n As Integer
Dim flag As Boolean
If TextBox1.Text = "" Then
MsgBox "Ошибка ввода.", vbApplicationModal, "Внимание":
TextBox1.SetFocus: Exit Sub
End If
n = 0
'Метод Sort позволяет отсортировать, по умолчанию, в порядке возрастания все рейсы в базе по их номерам, времени оправления и
т.п.
'Для этого выбираем наш рабочий лист с базой данных
Worksheets(ActiveSheet.Name)
'Указываем все заполненные ячейки от A2 до E№, где № - номер последней снизу заполненной строки, который мы найдем с помощью
метода CountA(A:A)
'Key1 - это параметр сортировки, присвоим ему значение D2
'Это значит, что сортировка будет вестись по столбцу D, то
есть по времени отправления
Worksheets(ActiveSheet.Name).Range("A2:" & "E" & Application.CountA(Range("A:A"))).Sort
Key1:=Worksheets(ActiveSheet.Name).Range("D2")
'С помощью метода Select устанавливаем курсор на ячейку A1
Worksheets(ActiveSheet.Name).Range("A1").Select
flag = False
For i = 2 To Application.CountA(Range("A:A"))
For j = 2 To 3
If Worksheets(ActiveSheet.Name).Cells(i, j) = TextBox1.Text Then n = CInt(Worksheets(ActiveSheet.Name).Cells(i,
1)): flag = True: Exit For
Next j
If flag Then Exit For
Next i
If n = 0 Then
MsgBox "Необходимый рейс не найден!"
Else: MsgBox " Необходим рейс: №" & n & Chr(13) & Chr(10)
& "Время отправления: " _
& Worksheets(ActiveSheet.Name).Cells(n + 1, 4)
End If
End Sub
28
Private Sub CommandButton2_Click()
Unload Me
End Sub
Рис. 27 – Внешний вид формы UserForm2
Процедура AbouProg вызывает форму UserForm7, на которой размещена краткая
информация о нашей программе.
Public Sub AboutProg()
'Открытие формы "О программе"
UserForm7.Show
End Sub
'UserForm7 предназначена для вывода краткой информации о программе
Рис. 28– Внешний вид формы UserForm7
На этом создание программы завершено.
Для пояснения алгоритма работы процедур поиска и сортировки приведем блоксхемы алгоритмов и описание используемых операторов и функций.
Начало
Worsheets(ActiveSheet.Name).
Range("A2:" & "E" & Application.CountA(Range ("A:A"))).Sort
Key1:=Worksheets(ActiveSheet.Name)
.Range(Chr(65 + ComboBox1.ListIndex) & "2")
Worsheets(ActiveSheet.Name).
Range("A1").Select
Конец
Рис 29 – Блок-схема алгоритма сортировки
29
Начало
flag=False
i=2, Application.CountA(Range
("A:A")), 1
j=2, 3,1
Worksheets (ActiveSheet.Name).
Cells(i, j) =
TextBox1.Text
Нет
n = CInt(Worksheets(ActiveSheet.
Name).Cells(i, 1))
flag = True
flag
Да
Нет
n=0
"Необходим рейс: №" & n &
Chr(13) & Chr(10) & "Время
отправления: "
& Worksheets(ActiveSheet.
Name).Cells(n + 1, 4)
Да
Необходимый рейс
не найден
Конец
Рис 30 – Блок-схема алгоритма процедуры поиска записи
Функция проверки типа IsNumeric(x) проверяет является ли переменная (x) числовым значением, если да, то функция принимает значение True (истина), иначе– False
(ложь).
Условный оператор If…Then…Else…End If.
Синтаксис:
If <Условие> Then [<операторы 1>] [Else [<операторы 2>]
30
Если условие принимает значение True, то выполняется оператор (или операторы)
после Then, если False, то выполняется оператор (или операторы) после Else. Ветвь Else
является необязательной. Допускается также использование формы синтаксиса в виде
блока:
If < Условие 1> Then
[<операторы 1>]
[ElseIf < Условие-n> Then
[<операторы n>] …
[Else]
[<Иначе операторы >]]
End If
Оператор цикла For позволяет повторять группу операторов заданное число раз.
Синтаксис:
For <счётчик цикла> =<начало> To <конец> [step<шаг>]
<тело цикла>
[Exit For]
Next [<счётчик_цикла>]
Здесь <счётчик_цикла>–это числовая переменная. В начале выполнения цикла она
принимает значение, задаваемое числовым выражением <начало>. Числовое выражение
<конец>– задает заключительное выражение счётчика цикла. Числовое выражение <шаг>
не обязательно и по умолчанию равно 1. <Тело цикла>– это последовательность операторов, которая будет выполнена заданное число раз. Если шаг положителен, цикл завершится, когда впервые выполнится условие:
<счетчик_цикла> > <конец>
Если шаг цикла отрицателен, условие его завершения:
<счетчик_цикла> < <конец>
Это условие проверяется перед началом выполнения цикла, а затем после каждого
прибавления шага к счётчику цикла в операторе Next. Если оно выполнено, управление
передается на оператор следующий за Next, нет–выполняются операторы из тела цикла.
Завершить цикл For…Next можно и с помощью оператора Exit For. Такие операторы могут быть расположены в тех местах тела цикла, где требуется из него выйти, не дожидаясь
выполнения условия завершения.
Функция MsgBox выводит на экран диалоговое окно, содержащее сообщение,
устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа integer, указывающее, какая кнопка была нажата. Синтаксис:
MsgBox (promt[, button] [, title])
Аргументы:
- promt–строковое выражение, отображаемое как сообщение в диалоговом окне;
- button–числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения.
- title–строковое выражение, отображаемое в строке заголовка диалогового окна.
Если этот аргумент опущен, в строку заголовка помещается имя приложения.
Or - логическая операция “или”.
And - логическая операция “и”.
Оператор цикла с постусловием Do…Loop Until.
Синтаксис:
Do
<тело цикла>
31
[Exit Do]
…
Loop Until <условие>
<Тело цикла> выполняется до тех пор, пока <условие> не примет значение истина
(цикл продолжается при ложном значении <условия>). Есть возможность досрочного выхода из цикла (это реализовано через Exit Do).
Оператор присоединения свойств к объекту With.
Синтаксис:
With <объект>
…
.<свойство>
End With
Список рекомендуемой литературы
1. Вычислительная техника и программирование. Методические указания к
выполнению контрольных работ и курсового проектирования для
студентов заочной формы обучения. ГУВПО «Белорусско-Российский
Университет», 2004.
2. Microsoft Corporation. Руководство программиста по Visual Basic для Microsoft
Office 97-Русская редакция TOO “Channel Trading Ltd.” 1997 – 517 c.
3. А.Гарнаев. Самоучитель VBA – СПб.:БХВ –Санкт-петербург, 2001.-512с.
4. П. Санна и др. Visual Вasic для приложений (версия) в подлиннике: пер.с
англ., BHV – Санкт-Петербург,1999 – 704 с., ил.
5. Гетц К., Гилберт М. Программирование на Visual Basic 6 и VBA. Руководство
разработчика/ Пер. с англ. Киев: Издательская группа BHV.2001.-2001
6. Симонович С.В. и др. Информатика. Базовый курс. – СПб: Питер, 2000.
7. Хомоненко А.Д. и др. Основы современных компьютерных технологий: Уч.
пособие. — СПб.: КОРОНА принт, 1998.
8. Гарнаев А.Ю. Самоучитель VBA. – СПб, БХВ –Санкт-Петербург, 2002.
9. Гарнаев А. Ю. Excel, VBA, Internet в экономике и финансах. - СПб.: БХВПетербург, 2002. - 816 с: ил.
10. Васильев А. VBA в Office 2000: учебный курс. - СПб, Питер, 2002.
11. Кузьменко В.Г. VBA 2002. – М.: Издательство БИНОМ, 2002.
12. MS OfficeХР: Разработка приложений / Под ред Ф.А. Новикова. СПб.: БХВПетербург, 2003.
13. Харрис, Мэтью. Освой самостоятельно программирование для Microsoft Excel
2000 за 21 день. : Пер. с англ. : Уч. пос. – М. : Издательский дом
"Вильяме", 2000. – 880 с. : ил. – Парал. тит. англ.
Download