Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






По шкале Фаренгейта и наоборот





 

 
 

Создайте новый проект. Разместите в форме проекта элементы интерфейса – две кнопки и информационную надпись.

Опишите в общем разделе модуля формы три переменные: Tem, Cels, Far. В приведенном ниже коде первые две перменные описаны как Variant, а переменная Far как тип Integer.

Занесите в процедуры обработки событий нажатия кнопок нижеприведенный код (без нумерации строк!). Сохраните проект под именем Температура в личной папке проектов, которая должна уже быть вами создана на диске D:\

 

1. Option Explicit 'вставляется VB (это комментарий, он не обрабатывается)

2. Dim Tem, Cels, Far As Integer

3. Private Sub Command1_Click()

4. Tem = InputBox("Введите температуру по Фаренгейту")

5. Do

6. If Tem <> "" Then

7. Cels = Int((Tem + 40) * 5 / 9 - 40)

8. MsgBox "Температура по Цельсию=" & Cels

9. End If

10. Loop While Tem = ""

11. End Sub

 

12. Private Sub Command2_Click()

13. Tem = InputBox("Введите температуру по Цельсию")

14. Do

15. If Tem <> "" Then

16. Far = Int((Tem + 40) * 9 / 5 - 40)

 

17. MsgBox "Температура по Фаренгейту=" & Far

18. End If

19. Loop While Tem = ""

20. End Sub

 

В строке 4 вызывается функция VB InputBox для ввода температуры по Фаренгейту. Введенное значение присваивается переменной Tem. В строке 5 начинается цикл Do с постусловием (строка 10). Заметим, что количество повторений цикла заранее неизвестно. По проекту он должен заканчиваться, когда строчка для ввода температуры в окне функции InputBox останется пустой и переменная Tem получит пустое значение. В строке 6 проверяется, не пусто ли значение Tem. Если нет, то в строке 7 производится пересчет, полученное значение присваивается переменной Cels и на экран с помощью функции MsgBox выдается значение пересчитанной температуры (строка 8). Перед этим значение температуры округляется с помощью функции Int до целого значения. Строка 9 содержит ключевое слово, которое закрывает блок проверки условия оператором If. Если условие выполняется, то будет выполнен кусок кода, стоящий между If и Еnd If. Пересчет температуры из градусов Цельсия в градусы Фаренгейта осуществляется в блоке строк 13-19 аналогичным образом.

Запустите программу. Введите любую температуру и прочтите результаты пересчета в открывающемся окне. Попробуйте переводить температуры из градусов Фаренгейта в градусы Цельсия и наоборот. Затем оставьте строку ввода температуры пустой и нажмите ОК. Работает ли у вас после этого программа? Если создается впечатление, что она зависла, нажмите комбинацию клавиш Ctrl – Break. Эта комбинация клавиш позволяет вам приостановить выполнение программы и посмотреть, а не попали ли вы в бесконечный цикл? Чтобы показать вам это, VB переводит программу в режим отладки и предлагает выполнять ее по шагам. Выполняемая строка подсвечивается желтым. Чтобы выполнить следующую команду нажимайте клавишу F8. Вы легко обнаружите, что пустое значение температуры приводит к бесконечному циклу, поэтому кажется, что программа зависла. На самом деле неправильно выполнена только проверка условия окончания цикла. Что надо сделать для исправления положения дел? Самостоятельно внесите необходимые изменения в текст программы, протестируйте ее и покажите работающую программу преподавателю. Отлаженную программу сохраните в своей папке под тем же именем Температура.

Иногда случается так, что программа действительно зависает, и никакие способы не помогают. В этом случае не выключайте машину! Нажмите комбинацию клавиш Ctrl – Alt – Delete, в окне с перечнем запущенных программ выберите имя зависшей программы (обычно в скобках написано, что ваша программа не отвечает) и нажмите кнопку "Завершить задачу". Снова запустите задачу и добейтесь понимания, при каких условиях она зависает. Исправьте текст программы. Если задача не снимается с зависания, выберите кнопку "Завершить работу", чтобы произвести перезагрузку вашего компьютера.

В этом примере мы познакомились с конструкцией Do…Loop While, функциями Int и InputBox, конструкцией If …Then…End If, конкатенацией строк с помощью значка амперсанда &, правилами записи арифметических выражений.

 

 

Пример 3

Калькулятор

 
 

 

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

Создайте новый проект. Разместите в форме проекта элементы интерфейса, как это показано на рисунке в следующем порядке. Создайте вверху формы слева надпись "Первый операнд". Поместите под ней текстовое поле Text1. Разместите далее вниз надписи и поля Text2 и Text3. Разместите надпись "Операции". Под ней разместите рамку Frame1 из набора инструментов в окне инструментов. Внутри рамки разместите переключатели OptionButton в количестве 7 шт. и подпишите их как показано на рисунке. Заметьте в окне свойств, щелкая по переключателям, что они образуют группу с именем OptionButton, но каждый из них имеет в группе свой уникальный индекс. Добавьте две кнопки слева направо. Им будут присвоены имена Command1 и Command2. Введите в процедуры обработки событий элементов интерфейса нижеприведенный код, который реализует вычисления. Сохраните проект в вашей папке под именем Калькулятор.

 

1. Option Explicit

2. Dim Cl As Integer

 

3. Private Sub Command1_Click()

4. Select Case Cl

5. Case 1

6. Text3.Text = Val(Text1.Text) + Val(Text2.Text)

7. Case 2

8. Text3.Text = Text1.Text - Text2.Text

9. Case 3

10. Text3.Text = Text1.Text / Text2.Text

11. Case 4

12. Text3.Text = Text1.Text * Text2.Text

13. Case 5

14. Text3.Text = Text1.Text \ Text2.Text

15. Case 6

16. Text3.Text = Text1.Text Mod Text2.Text

17. Case 7

18. Text3.Text = Text1.Text ^ Text2.Text

19. End Select

20. End Sub

 

21. Private Sub Command2_Click()

22. End

23. End Sub

 

24. Private Sub Option1_Click()

25. Cl = 1

26. End Sub

 

27. Private Sub Option2_Click()

28. Cl = 2

29. End Sub

 

30. Private Sub Option3_Click()

31. Cl = 3

32. End Sub

 

33. Private Sub Option4_Click()

34. Cl = 4

35. End Sub

 

36. Private Sub Option5_Click()

37. Cl = 5

38. End Sub

39. Private Sub Option6_Click()

40. Cl = 6

41. End Sub

 

42. Private Sub Option7_Click()

43. Cl = 7

44. End Sub

 

В строке 2 модуля формы описываем переменную С1 целого типа. Строки с 24 по 44 связаны с процедурами выбора варианта расчета переключателями из группы OptionButton. В зависимости от того, по какому переключателю щелкнет пользователь, переменная С1 получит значения от 1 до 7. В блоке строк с 3 по 20 реализована процедура вычислений в зависимости от значения переменной С1. Для выбора пути вычислений использована конструкция Select…Case… End Select, проверяющая значение С1. Результат вычислений заносится в поле Text3, а операнды вводятся в поля Text1 и Text2. В строке 3 функция Val явным образом преобразует значения в полях Text1 и Text2 в числовую форму, а в других строках вычислений она не используется, однако результат вычислений все равно получается правильный. Это происходит потому, что VB сам преобразует содержимое полей Text1 и Text2 к нужному типу, "понимая", что арифметические операции нельзя выполнять со строковыми переменными. Блок строк 21-23 связан, как вы уже наверно поняли, с окончанием работы программы.

С точки зрения программиста, программный код в строках 21-44 организован не лучшим образом. Попытайтесь оптимизировать (укоротить) его, придумав другие программные решения. Может быть, вы вернетесь к этой программе, когда ближе познакомитесь с наборами элементов управления.

В этом примере мы познакомились с конструкцией Select…Case… End Select, явным и неявным преобразованием типов, функцией Val, понятием набора переключателей, видами и результатами арифметических операций в VB.

 

Пример 4

Обработка ошибок времени исполнения

 
 

 

Создайте новый проект. Разместите в форме рамку Image1 и кнопку Command1. Мы будем создавать программу, которая открывает графические файлы (изображения) с дискеты и помещает их в рамку Image1. Чтобы изображения вписывались в рамку, установите ее свойство Stretch в значение True (Истина)

Свяжите с командной кнопкой нижеприведенную процедуру. Сохраните проект в своей папке под именем Ошибки. Запустите программу.

1. Option Explicit

2. Dim Попытки As Integer

3. Private Sub Command1_Click()

4. On Error GoTo DiskError

5. Попытки = 0

6. Image1.Picture = LoadPicture("A:\aaaa.wmf")

7. MsgBox "Не могу найти вашу дискету, выгружаю форму",, "Ошибка!"

8. Unload Form1

9. Exit Sub

10. DiskError:

11. If Err.Number = 71 Then

12. MsgBox "Закройте замок дисковода",, "Диск не готов"

13. Попытки = Попытки + 1

14. If Попытки >= 2 Then

15. Resume Next

16. Else

17. Resume

18. End If

19. End If

20. End Sub

 

В строке 2 объявляется переменная Попытки целого типа. Блок строк с 3 по 20 открывает графические файлы с дискеты и анализирует ошибки, которые при этом могут произойти. В строке 4 расположена функция обработки ошибок On Error, которая в случае ошибки перехватывает управление у программы и пытается обработать возникшую ошибку. Обычно эту функцию помещают сразу за заголовком процедуры, чтобы она могла перехватить все возникающие ошибки. За функцией On Error обычно размещается оператор безусловного перехода GoTo, который при возникновении ошибки и ее перехвате отправляет программу в блок обработки ошибок. В нашей программе переход осуществляется на строку 10 с меткой DiskError. Метка в конце должна иметь двоеточие. Сам блок обработки ошибок обычно размещается в конце программы для того, чтобы в случае отсутствия ошибок не заходить в него.

В строке 5 переменной Попытки присваивается нулевое значение (переменная обнуляется). В 6 строке функция LoadPicture пытается загрузить с диска А:\ файл с именем аааа и присвоить имя этого файла свойству Picture объекта Image1. Этот объект занимается отображением графических файлов в нашей форме и может понимать форматы графических файлов wmf, bmp, gif, jpeg, ico. В процессе выполнения операции открытия файла могут встретиться сбойные ситуации. Если в дисководе есть дискета, но на ней нет файла аааа, то ничего не происходит и картинка, естественно, не загружается. Обработка этой ситуации у нас не производится. Но возможен случай, когда дискеты просто не окажется в дисководе. Именно такой случай у нас и запланирован. Перехватчик ошибок обнаруживает, что произошла ошибка, связанная с дисководом и передает управление блоку операторов с меткой DiskError. Здесь, в строке 11 проверяется свойство Number объекта Err, чтобы установить номер ошибки. Если он равен 71, то выдается сообщение о том, что дисковод не готов (строка 12). В строке 13 наращивается значение переменной Попытки. В строке 14 проверяется значение этой переменной и, если оно меньше 2, то выполняется оператор Resume, который снова возвращает программу к той строке, в которой произошла ошибка (6) и,таким образом, имеется возможность снова повторить попытку открытия файла. Поскольку дискету мы не вставляли в дисковод, то снова возникает ошибка и управление опять передается в строку 10, снова проверяется номер ошибки, выдается сообщение, наращивается значение переменной Попытки и становится равным 2. Так как условие в операторе If стало выполняться, управление переходит к оператору Resum Next (Строка 15). Этот оператор игнорирует строку, в которой происходит ошибка (6) и управление передается следующей строке 7, в которой выдается сообщение о невозможности выполнить операцию. После нажатия в окне сообщения кнопки ОК, окно формы выгружается из памяти (строка 8) командой Unload и программа прекращает работу.

Может возникнуть вопрос, а почему мы проверяли именно 71 номер ошибки, а не какой-либо другой? Дело в том, что в VB ошибки имеют свои номера, соответствующие той или иной сбойной ситуации. Эти ситуации и соответствующие им номера ошибок описаны в справочной документации VB. Но как быть, если такой документации нет под рукой? Как узнать номер ошибки, чтобы можно было перехватить ее, написать код для ее обработки и обеспечить тем самым устойчивую работу программы даже в сбойных ситуациях? На помощь приходит все тот же объект Err, у которого есть еще одно замечательное свойство - Description. Оно возвращает строковое выражение, содержащее текст сообщения, связанного с ошибкой, а чтение свойства Number позволяет узнать и ее номер. Поэтому, если вставить после строки 10 две строки вида MsgBox Err. Description и MsgBox Err.Number, то мы сможем узнать описание и номер случившейся ошибки. Например, можно узнать, что если дискета вставлена в дисковод, но на ней нет файла аааа, то возникает ошибка с номером 53, которая нами никак не обрабатывалась. Попробуйте вставить указанные строки в программу и проверьте, как она теперь работает при наличии дискеты в дисководе и без нее.

Кстати, когда вы нажимали точку после имени объекта Err, то наверно обратили внимание, что открывался список свойств объекта Err, куда, кроме упомянутых свойств, входят и другие свойства. Ознакомиться с их особенностями вы сможете самостоятельно, экспериментируя с ними в программе или прочтя справочные материалы VB.

В заключение отметим, что обработчик ошибок обязательно надо включать в процедуры, в которых пользователь может совершить ошибочные действия (ведь ему не запретишь!).

В этом примере мы познакомились с обработчиком ошибок On Error, объектами Err и Image и некоторыми их свойствами, способом ограничения количества попыток выполнения действия (в частности, попыток открытия файла), операторами Resum Next и Resum, GoTo, командой Unload, понятием метки.

 

Пример 5

Date: 2016-07-25; view: 344; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.007 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию