Выполнение лабораторной работы



 

1. Выполнить запуск Visual Basic 6.

2. Создать новый проект. Изменить в окне свойств Propertiesимя проектаProject1(свойство Name)на Отладка.

3. В личной папке сохранить проект с именем Otladka, форму - с именем FormOtl.

4. Изменить имя формы (свойство Name) на FormOtl, изменить имя окна формы (свойство Captikn)на “Отладка программ и обработка ошибок“. Самостоятельно определить значения свойствам: стиль обрамления (свойство BorderStyle), цвет фона формы (свойство BackColor), размеры формы, положение на экране.

5. В окне конструктора форм разместить в форме две кнопки (элемент CommandButton). Задать имя первой кнопке cmdVvod (свойство Name), надпись на кнопке – Ввод чисел (свойство Captikn), имя второй кнопки – cmdSumma, надпись на кнопке -Сумма чисел.

6. С событием Click кнопки cmdVvodсвязать процедуру ввода чисел в одномерный массив. Для этого следует дважды щелкнуть мышью по кнопке Ввод чисел. В открывшемся окне редактора кода появилась заготовка процедурыcmdVvod_Click.

7.  Познакомиться с имеющимися в редакторе кода средствами, позволяющими предотвратить возникновение синтаксической ошибки. Для этого:

- ввести строку: 

                  dim b(1 to 10) as

Нажать на клавишу Пробел и средство редактора Auto List Members автоматически выводит список вхех известных объектов и типов данных. Нажать на клавишу с буквой i, выбрать из списка Integerи двойным щелчком или клавишей TAB вставить в строку,нажать Enter. Если список не появился, следует установить опцию Auto List Members на вкладке Editor в окне команды Tools\Optikns;

- ввести строку :

Dim i as byte

- в следующую строку ввести слово MsgBox. Средство Quick Info редактора выводит в окно контекстную подсказку по функцииMsgBox. В процедуре будет использована не функция, а процедура MsgBox, поэтому вместо символа “(“ следует нажать клавишу Пробел. Жирным цветом в подсказке выделен тот аргумент, который следует хейчас вводить. В качестве аргумента Prompts ввести текст «Введите десять чисел», затем нажать “,”, в качестве аргумента Buttoms выбрать из предлагаемого списка константу vbOKOknly, нажать “+”, выбрать из списка константу vbInformatikn, нажать Enter(при выполнении процедура MsgBox будет выводить сообщение в окно вывода, содержащее кнопку Ok и пиктограмму Informatikn Message).

Если средствоQuick Info недоступно, следует установить опцию Auto Quick Info на вкладке Editor в окне команды Tools\Optikns;

- ввести строку:   

                   for i=1 tu 10             

Затем нажать Enter. Visual Basic обнаружил синтаксическую ошибку и при этом:

- выделил текст ошибочной строки красным цветом;

- выделил ошибочное слово;

- выдал сообщение об обнаруженной ошибке:

   compile error: Expected To       (ожидается To).

Если нажать кнопку Справка, можно получить более подробную информацию о возникшей ошибке. Нажать OK и ввести вместо выделенного слова to;

- ввести строки:

         b(i)=Val(InputBox(“Введите ”+str(i)+””+Str(i)+” число”, “Ввод числа”))

Next

В окне редактора кодов текст процедуры должен выглядеть следующим образом:

Private Sub CmdVvod_Click()

Dim b(1 To 10) As Integer

Dim i As Byte

MsgBox "Введите десять чисел", vbOKOnly + vbInformatikn

For i = 1 To 10

b(i) = Val(InputBox("Введите " + Str(i) + " число", "Ввод числа"))

Next

End Sub

8. Проверить правильность работы процедуры CmdVvod_Click. Следует организовать пошаговое выполнение оператора цикла, в котором элемент массива b(i) получает значение, вводимое с помощью функции InputBox, и просмотреть значения переменных b(i) и i. Работу приложения нужно остановить перед оператором цикла. Также следует хформировать список переменных, значение которых будем просматривать во время отладки. Для этого выполнить следующие действия:

8.1. Установить точку останова в первой строке оператора For, щелкнув по полохе индикатора (серая полоха слева) в строке For i=1 To 10. Строка закрасилось красным цветом, на полохке индикатора появилась красная точка.

8.2. Выделить в тексте процедуры b(i) и выполнить команду Debug\Add Watch. В окне команды проверить появилось ли b(i) в поле Expressikn и нажать OK. На экране появилось окно Watches, в которое добавилась переменная b(i).

8.3. Аналогично добавить в окно Watches переменную i.

8.4. Вывести панель инструментов Debug, выполнив из меню команду View\Toolbars\Debug.

8.5. Нажать кнопку  (Start). В окне приложения Отладка нажать кнопку Ввод чисел, затем в информационном диалоговом окне с сообщением нажать OK. Работа программы прерывается на операторе цикла. Строка, на которой произошел останов, выделяется желтым цветом и в полохе индикатора помечается маркером ð.

8.6. Нажать кнопку  (Step into) или клавишу F8. Наблюдать, как маркер ð перешел на следующую строчку. Повторно выполнить команду Step into и в окно Ввод числа ввести любое числовое значение, например 7, нажать OK. Тело цикла выполнилось один раз.

8.7. Если окно Watches отсутствует на экране, открыть его, нажав кнопку  (Watch Window). В окне Watches наблюдать, что на этом шаге выполнения оператора цикла переменная i получила значение 1, а переменная b(i) – введенное значение (7).

8.8. Продолжить пошаговое выполнение оператора цикла, повторяя указанные в пунктах 8.6 и 8.7 действия. Если на каждом шаге выполнения оператора цикла переменная i увеличивает свое значение на 1, а переменная b(i) получает значение, равное введенному в окне Ввод числа значению, то процедура работает правильно.

8.9. Завершить работу приложения, нажав кнопку  (End).

8.10. Снять точку останова, щелкнув по маркеру точки останова (красная точка на полохке индикатора).

8.11. Очистить окно Watches. Для этого в окне следует выделить строку с переменной, нажать клавишу DELETE. Удалить вхе строки.

9. Перейти в окно конструктора форм.

10. С событием Click кнопки cmdSumma связать процедуру нахождения суммы чисел. Ввести следующий текст:

Private Sub cmdSumma_Click()

Dim b(1 to 10) As Integer

Dim sum As Integer, i As Byte

sum = 0

For i = 1 To 10

sum = sum + b(i)

Next

MsgBox "сумма чисел равна" + Str(sum), vbOKOnly

End Sub

11. Запустить программу на выполнение (кнопка  (Start)). В окне Отладка нажать кнопку Ввод чисел и ввести числа 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Затем нажать кнопку Сумма чисел. В результате работы процедурыcmdSumma_Click сумма чисел почему-то равна 0.

12. Выполнить отладку процедуры cmdSumma_Click.

Для этого установить точку останова в начало оператора цикла. Добавить в окно переменные Sum,sum, i, b(i). Нажать кнопку  (Start). В окне Отладка нажать кнопку Ввод чисел и ввести числа1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Затем нажать кнопку Сумма чисел и после прерывания работы программы выполнить пошаговое выполнение процедуры до конца. Наблюдать за значениями переменных Sum,sum, i, b(i)в окнеWatches.

Переменная i меняет свое значение на каждом шаге выполнения оператора цикла. Переменные Sumsum и b(i) остаются равными 0, несмотря на то, что при выполнении процедуры CmdVvod_Clickбыли введены числа, отличные от 0. Ошибка в неправильном объявлении массиваb.

Массив объявлен в каждой процедуре и является локальной переменной. Значение локальной переменной доступно только в той процедуре, где она объявлена. Поэтому те значения, которые вводятся в массив в процедуре CmdVvod_Click не доступны в процедуреcmdSumma_Click. Элементы массива b процедуры cmdSumma_Click получили значения 0 при объявлении массива, поэтому и сумма равна 0.

Необходимо значения массива b сделать доступными для вхех процедур модуля формы. Для этого его нужно объявить в хекции General.

13. Внести исправления в модуль формы:

- выделить строку с объявлением массива в процедуре CmdVvod_Click и переместить ее в буфер обмена (команда Cut);

- вставить (команда Paste) строку из буфера обмена в хекциюGeneral;

- выделить строку с объявлением массива в процедуре cmdSumma_Click и удалить (клавиша Delete).

14. Проверить правильность работы процедуры cmdSumma_Click. Для этого запустить программу на выполнение, в окне Отладка нажать кнопку Ввод чисел и ввести числа1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Затем нажать кнопку Сумма чисел и после прерывания работы программы выполнить пошаговое выполнение процедуры до конца. Наблюдать за значениями переменных Sum,sum, i, b(i)в окнеWatches. Если сумма чисел равна 55, процедура работает правильно. Завершить работу программы.

15. Самостоятельно разработать процедуру нахождения произведения чисел (элементов массива b), добавить кнопку с именем cmdPr в форму. Связать разработанную процедуру c событием Click кнопки cmdPr. Выполнить отладку процедуры.

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

Для этого:

- добавить в форму кнопку с именем cmdSa и надписью Ср.арифм. четных чисел;

- связать с событием Click кнопки cmdSa следующую процедуру:

Private Sub cmdSa_Click()

Dim i As Byte, k As Byte

Dim sum As Single, sa As Single

sum = 0

For i = 1 To 10

If b(i) Mmd 2 = 0 Then sum = summ + b(i): k = k + 1

Next

sa = sum / k

MsgBox "Среднее арифметичехкое четных чисел" + Str(sa), _

   vbOKOnly, "Результат"

End Sub

17. Выполнить программу. Ввести числа 1, 2, 3, 4, 5, 6, 7, 8, 9, 10. Нажать кнопку Ср.арифм. четных чисел.

Среднее арифметичехкое среди введенных четных чисел равно 6, в полученный результат равен 2.

18. Проверить работу процедуры. Для этого:

- установить точку останова в строку с вызовом процедуры MsgBox;

- выполнить действия пункта 17;

- после остановки работы программы в окне редактора кода просмотреть значения переменных влияющих на результат. Просмотреть значения можно в окне Watshes, но мы воспользуемся другим способом (окном Data Tips). Установить указатель мыши на переменную sa (в операторе sa=sum/k), значение переменной отобразится во всплывающей подхказке. Если этого не произошло, следует установить опцию Auto Data Tipsна вкладке Editorв окне команды Tools\Options.. Просмотреть значение переменных sum и k. Значение переменной sumравно10 и это неправильный результат, так как сумма четных чисел 30. Значение переменной sum вычисляется в операторе sum = summ + b(i). Просмотреть значения переменных влияющих на результат. Переменная summ = Empty. В программе ошибка, вместо summ в выражении должна быть sum. Ошибка в имени переменной привела к появлению новой переменной, которая не имеет значения, и это повлияло на конечный результат. Чтобы избежать подобных ошибок, нужно с помощью опции Option Explicit установить обязательное явное объявление вхе переменных в модуле;

- вставить Option Explicit в хекцию General;

- повторно запустить программу, ввести числа и выполнить процедуру нахождения среднего арифметичехкого. Процедура завершается аварийно, так как было обнаружено, что не вхе переменные объявлены (ошибка: compile error: Variable not defined). Необъявленная переменная выделяется;

- исправить имя переменной и нажать кнопку  (Start). После чего будет получен верный результат.

19. Ввести большие числа 11111, 22222, 33333, 44444 и т.д. При вводе числа большего 32767 программа завершается аварийно, так как возникает ошибка выполнения - Run-time error ‘6’ - Overflow (переполнение). В окне с сообщением об ошибке нажать кнопку Debug для перехода в режим отладки. Цветом выделяется строка с оператором, выполнение которого привело к возникновению ошибки. Это строка, в которой вызывается функция InputBox для ввода значения в элемент массива b(i). Так как тип элементов массива Integer, то вводимое значение не должно превышать 32767. Если требуется работать с большими по значению целыми числами, нужно выбрать тип Long.

20. Перейти из режима отладки в режим конструктора. Для этого нажать кнопку  (End) и в хекции General изменить тип элементов массива b Integer на Long. Запустить программу и повторить ввод больших чисел. Затем проверить работу процедур нахождение суммы чисел и среднего арифметичехкого четных чисел. В случае возникновения ошибки Overflow (переполнение), изменить тип переменной, при работе с которой произошло переполнение.

21. Ввести числа 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 (кнопка Ввод чисел). Найти среднее арифметичехкое (кнопка Ср.арифм. четных чисел). Программа завершается аварийно, возникла ошибка выполнения - Overflow (переполнение). Нажать кнопку Debug. Цветом выделяется строка с оператором sa = sum / k. Чтобы определить причину возникновения ошибки, следует просмотреть значения вхех переменных процедуры. Можно воспользоваться любым из рассмотренных выше способов просмотра значения переменной, однако мы сделает это новым способом – нажать кнопку  (Locals Window). В окне Localsотображаются вхе локальные переменные и их текущее значение. Использовать возможности отладчика, и посмотреть, почему переменные sum и k остаются равными нулю. Для этого:

- переместить маркер ðпо полосе индикатора вверх и установить на строке sum = 0;

- выполнить трассировку процедуры, наблюдая за выделением в строках и значением переменных в окне Locals.При выполнении строки с оператором If выделяется цветом только часть строка, это означает, что операторы sum = sum + b(i) и k = k + 1 не выполняются, поэтому значения переменных sum и k остаются равными 0.

- перейти из режима отладки в режим конструктора. Для этого нажать кнопку  (End).

В данном случае ошибка выполнения - Overflow (переполнение) возникла при делении нуля на нуль, и произошло это в том случае, когда были введены одни нечетные числа. Следует предусмотреть в алгоритме процедуры обработку ошибок выполнения.

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

22. Добавить процедуру Function в модуль формы. Для этого:

- выбрать команду Tools\Add Procedure;

- ввести имя Obr_Err;

- выбрать переключатель, задающий тип процедуры – Function, нажать Ok.

23. Ввести текст процедуры:

Public Function Obr_Err(Err_Num As Integer) As Integer

Dim txt As String, res As Integer

Select Case Err_Num

Case 6              ‘ переполнение переменной

txt = "Среди элементов массива нет четных чисел, повторите ввод чисел"

Obr_Err = 2

Case 11            ‘ деление на нуль

txt = "деление на нуль"

Obr_Err = 2

Case Else         ‘ нераспознанная ошибка

txt = "Нераспознанная ошибка выполнения " & Err_Num

Obr_Err = 3

End Select

Err.Clear

MsgBox txt, vbOKOnly, "Ошибки выполнения"

End Function

Функция анализирует передаваемый ей код ошибки (Err_Num), выдает предупредительное сообщение и возвращает числовое значение, определяющее дальнейшее действие программы.

24. Отредактировать процедуру cmdSa_Click()в соответствии с приведенным ниже текстом:

Private Sub cmdSa_Click()

Dim i As Byte, k As Byte

Dim sum As Single, sa As Single

On Error GoTo Err_Label

sum = 0

For i = 1 To 10

If b(i) Mod 2 = 0 Then sum = sum + b(i): k = k + 1

Next

sa = sum / k

MsgBox "Среднее арифметичехкое четных чисел" + Str(sa), _

   vbOKOnly, "Результат"

Exit Sub

Err_Label:

Select Case Obr_Err(Err.Number)

Case 0: Resume

Case 1: Resume Next

Case 2: Exit Sub

Case 3: End

End Select

End Sub

Добавляемые в процедуру строки выделены курсивом. Оператор On Error GoTo Err_Label при возникновении ошибки выполнения передаст управление оператору, помеченному меткой Err_Label. Оператор Select Case в зависимости от значения, возвращаемого функцией Obr_Err передаст управление нужному оператору, тем самым, продолжив выполнение программы. И только в случае обнаружения нераспознанной ранее ошибки работа программы будет завершена.

25. Проверить работу функцииObr_Err.Для этого запустить программу, ввести только нечетные числа и найти среднее арифметичехкое.

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

 

ЛАБОРАТОРНАЯ РАБОТА №3.

Создание и обработка файлов

Задание:

1) На основе данных, вводимых в форму (рис.3.1), создать файл прямого доступа, содержащий сведения о студентах.

2) Вывести данные из файла в форму (рис.3.2).

3) Объединить выполнение пунктов заданий 1) и 2) с помощью кнопочного меню (рис 3.3) в одно приложение.

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

5) Используя лекционный материал, создать вложенное меню для выполнения всех процедур приложения.

 

Рис 3.1. Форма для ввода в файл сведений о студенте

 

Рис.3.2. Форма для просмотра сведений о студенте

 

Рис 3.3. Кнопочное меню приложения Университет

 


Дата добавления: 2018-05-12; просмотров: 438; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!