- •В.Н.Агеев
- •А23 Программирование и основы алгоритмизации. Конспект лекций – м.: мгуп, 2012.– *** с.
- •Содержание
- •Предисловие
- •1. Понятие алгоритма в информатике. Блок-схемы алгоритмов
- •2. Типовые алгоритмы и их блок-схемы.
- •3. Алгоритмические языки и их классификация
- •Языки программи- рования
- •4. Методы объектно-ориентированного программирования
- •5. Интегрированная среда разработки Visual Basic
- •6. Программирование на языке Visual Basic
- •7. Программирование разветвляющихся процессов
- •If условие Then Оператор1 [ Else Оператор2]
- •8. Программирование циклических процессов
- •9. Графические возможности языка Visual Basic
- •10. Функции даты и времени. Объект Timer
- •11. Работа с внешними файлами и устройствами
- •Input # номер, имя_переменной
- •12. Работа с дисками и папками
- •CommonDialog1.ShowOpen
- •Open CommonDialog.FileName For Input As # 1
- •13. Работа с базой данных
- •14. Типы ошибок и методы отладки программ.
- •1. Синтаксические ошибки.
- •2. Ошибки в структуре программы.
- •3. Ошибки, возникающие во время выполнения программы.
- •4. Логические ошибки или ошибки алгоритма.
- •15. Примеры проектов
4. Логические ошибки или ошибки алгоритма.
Бывают ситуации, когда программа работает, ошибок выполнения нет, однако результат не соответствует ожидаемому. Это может выясниться во время тестирования программы, когда в качестве исходных берутся такие данные, для которых заранее известен результат расчетов.
Среда разработки VisualBasicпозволяет проверить ход выполнения программы, проследить шаг за шагом всю последовательность действий и по промежуточным результатам найти то место в программе, в котором имеется логическая ошибка. В режиме отладки можно приостановить выполнение программы в указанном заранее месте и получить значения всех текущих переменных.
Для перехода в режим отладки необходимо в основном меню выбрать пункт «Debug»(Отладка) и в появившейся панели инструментов (см. рис.34) выбрать пункт «Toggle Breakpoint»(точка прерывания). Строка программы, в которой находится в это время курсор будет выделена красным цветом а слева от нее появится красная точка. Таких точек останова можно сделать несколько, перемещая курсор в нужное место программы и затем выбирая пункт «Toggle Breakpoint». Повторный выбор этого пункта удаляет точку останова. Для того, чтобы снять все точки останова, используется пункт «Clear All Breakpoints»(очистить все точки прерывания).

Рис.34. Вызов панели инструментов «Debug»
В панели отладки имеется пункт “Add Watch” (Добавить наблюдение), позволяющей поместить имя выбранной переменной в специальное окно в нижней части экрана. Таких переменных может быть несколько. Во время очередной приостановки программы можно увидеть значения выбранных переменных и сравнить их с ожидаемыми значениями.
В режиме отладки можно осуществлять пошаговое выполнение программы. Для этого используется команда “Step Into” (Шаг с заходом), которая позволяет не только выполнить текущий оператор программы, но и перейти внутрь вызываемой процедуры или функции. Если такой необходимости нет, используют команду “Step Over” (Шаг с обходом), которая, в отличие от предыдущей позволяет обойти вызываемую процедуру.
15. Примеры проектов
Построение графика функции
Задача:
построить график функции
на отрезке –1<x
<1.
Вид экранной формы показан на рис.35, а текст программы – на рис.36.

Рис.35. Проект «Построение графика функции»

Private Sub Command1_Click()
Const PI = 3.14152 ’ константа пи
Picture1.Scale (-1, 2)-(1, -2) ’ масштабирование графического окна
Picture1.Line (-1, 0)-(1, 0) ’ построение осей координат
Picture1.Line (0, -2)-(0, 2)
For I = -1 To 1 Step 0.25 ’ вывод значений по оси OX
Picture1.PSet (I, 0)
Picture1.Print I
Next I
For I = -3 To 3
Picture1.PSet (0, I) ’ вывод значений по оси OY
Picture1.Print I
Next I
For X = -1 To 1 Step 0.002 ’ построение графика функции
Y = Exp(X) * Sin(2 * PI * X) ’ с шагом 0,002
Picture1.PSet (X, Y)
Next X
End Sub
Рис.36. Программа вывода точек графика функции
Вычисление числа методом Монте-Карло
Задача: с помощью датчика случайных чисел вычислить координаты Nточек, равномерно распределенных внутри квадрата со стороной 2. Подсчитать число точекN1 точек попавших внутрь круга, вписанного в этот квадрат. Считая, что числаNиN1 пропорциональны площади квадрата и круга соответственно, вычислить приближенное значение числа по формуле4N1/N.
На рис.37 показана экранная форма с графическим окном PictureBox, в которое выводятся точки красного цвета, если они попадают внутрь круга и синим, если вне его. В левое текстовое окно вводится числоN, а в правое – результат вычислений, приближенное значение числа. Текст программы на рис.38.

Рис. 37. Экранная форма проекта «Метод Монте-Карло»

Private Sub Command1_Click()
Picture1.Scale (-1, 1)-(1, -1) ‘ масштабирование окна
Picture1.Line (-1, 1)-(1, -1), vbWhite, BF ‘ закрашивание окна
N = Val(Text1.Text) ‘ N – количество точек
N1 = 0 ‘ N1 – счетчик попаданий в круг
Randomize ' инициализация датчика случайных чисел
For i = 1 To N ‘ цикл вычисления координат точек
XT = 2 * Rnd - 1
YT = 2 * Rnd - 1
If XT * XT + YT * YT < 1 Then ‘ если точка попадает в круг
N1 = N1 + 1 ‘ счетчик увеличивается на единицу
Picture1.PSet (XT, YT), vbRed ‘ рисуется точка красного цвета
Else ‘ в противном случае
Picture1.PSet (XT, YT), vbBlue ‘ рисуется точка синего цвета
End If
ProgressBar1.Value = i / N ‘ обновляется индикатор
Next i
PI = 4 * N1 / N ‘ вычисляется число пи
Text2.Text = Str(PI)
End Sub
Рис.38. Программа вычисления числа вода точек графика функции
Поскольку при больших значениях Nрасчеты могут занять несколько секунд, на форме размещен индикатор выполнения программы, элементProgressBar(полоска, в которой количество закрашенных прямоугольников пропорционально количеству выполненных шагов цикла, а не закрашенных – количеству оставшихся шагов. ЭлементProgressBarизначально отсутствует в панели инструментовVisualBasic, для того, чтобы разместить его на форме, необходимо предварительно выбрать компонентCommonDiaalg 6(см. раздел 12). В окне свойств элементаProgressBarнужно задать свойстваmin=0 иmax=1, а в программе изменять значение свойстваValueс помощью выражения
ProgressBar1.Value =i/N
где i– параметр цикла типа пересчета,N– конечное значение параметра цикла.
Проект «Часы».
Задача: через каждую секунду нужно определять текущее время и отображать его в графическом окне в виде аналоговых часов, и в текстовом окне в виде цифровых часов.
На рис.39 показана экранная форма, а на рис.40 – программный код.

Рис.39. Экранная форма проекта «Часы»

Private Sub Timer1_Timer()
Dim h As Integer
Dim m As Integer
Dim s As Integer
Dim n As Integer
h = Hour(Now) ‘ текущий час
m = Minute(Now) ‘ текущая минута
s = Second(Now) ‘ текущая секунда
n = Int(m / 12)
Text1.Text = Format(Now, "hh:mm:ss") ‘ вывод текущего времени
Picture1.Scale (-5, 5)-(5, -5)
Picture1.Cls ‘ очистка графического окна
Picture1.BackColor = vbCyan
Tsiferblat ‘ вызов процедуры вычерчивания циферблата
Picture1.DrawWidth = 1 ‘ вычерчивание секундной стрелки
Picture1.Line (0, 0)-(4 * Sin(6 * s * 3.14 / 180), 4 * Cos(6 * s * 3.14 / 180)), vbRed
Picture1.DrawWidth = 2 ‘ вычерчивание минутной стрелки
Picture1.Line (0, 0)-(3.5 * Sin(6 * m * 3.14 / 180), 3.5 * Cos(6 * m * 3.14 / 180)), vbBlack
Picture1.DrawWidth = 3 ‘ вычерчивание часовой стрелки
Picture1.Line (0, 0)-(3 * Sin((30 * h + 6 * n) * 3.14 / 180), 3 * Cos((30 * h + 6 * n) * 3.14 / 180)), vbBlack
End Sub
Рис.40. Текст процедуры Timer1_Timer()
Задача решается с помощью использования объекта Timer(см. раздел 10) . Экземпляру этого объекта, размещенному на форме присвоено имяTimer1.
Свойству Intervalэтого объекта задано значение 1000 мс (то есть одна секунда). ПроцедураTimer1_Timer()запускается через каждую секунду. Текст ее представлен на рис.40.
Текст процедуры Tsiferblat представлен на рис.41. С помощью этой процедуры прорисовывается элементы циферблата. Толстыми желтыми точками по окружности радиуса 4 показаны 12 часовых меток, между ними – четыре черные точки. Рядом с желтыми точками выведены числа от 1 до 12.

Sub Tsiferblat()
Dim i As Byte
For i = 0 To 60
If i Mod 5 = 0 Then
Picture1.DrawWidth = 5 ‘
Picture1.PSet (4 * Sin(6 * i * 3.14 / 180), 4 * Cos(6 * i * 3.14 / 180)), vbYellow
Else
Picture1.DrawWidth = 3
Picture1.PSet (4 * Sin(6 * i * 3.14 / 180), 4 * Cos(6 * i * 3.14 / 180)), vbBlack
End If
Next i
Picture1.DrawWidth = 1
Picture1.FontSize = 16
For i = 1 To 12
fi = (60 + i * 30) * 3.14 / 180
X = 4.5 * Cos(fi) - 0.3
Y = 4.5 * Sin(fi) + 0.3
If i < 4 Then
X = X - 0.2
End If
Picture1.PSet (X, Y), vbCyan
Picture1.Print 13 - i
Next i
End Sub
Рис.41. Текст процедуры Tsiferblat
Примечание. Рассмотренные в этом разделе проекты были выполнены студентами при изучении курса «Программирование и начала алгоритмизации». Следует отметить, что эти и другие задачи можно решить многими способами. Приведенные программные коды являются возможными вариантами решений и не претендуют на оптимальность в каком-либо смысле.
Рекомендуемая литература
1. Агеев В.Н.Информационное обеспечение систем управлении: учебное пособие / В.Н.Агеев.– М., 2009.– 162 с.
2. Курилович В. VisualBasic/ В. Курилович.– М., 2006.– 284 с.
3. Сайлер Б., Споттс Дж.ИспользованиеVisualBasic6 / Б. Сайлер, Дж.Споттс.– М., 2008.– 830 с.
4. Программирование и основы алгоритмизации: лабораторные работы.– М.: МГУП, 2009.– 38 с
