“В МИР ИНФОРМАТИКИ” № 73

Школа программирования. Основы программирования на Visual Basic

Н.М. Тимофеева,
г. Обнинск Калужской обл.

Продолжение. Начало см. “В мир информатики” № 69–72 (“Информатика” № 4–7/2006)

Пример программирования № 4 “Вычисление площади”

Постановка задачи

Разработайте программу для вычисления площади трапеции по известным значениям длин ее оснований и высоты.

План решения

На рис. 1 показан предлагаемый дизайн экрана:

Рис. 1

Назначение каждого элемента управления:

1) текстовые окна — для ввода значений исходных параметров;

2) надписи — одна для показа вычисленной площади, остальные — для описания исходных параметров;

3) линии — для изображения трапеции и размерных линий;

4) кнопка — для завершения программы по щелчку.

Каждое текстовое окно будет иметь одинаковые подпрограммы, реагирующие на событие “Нажатие клавиши ”. N–S-диаграмма для разработки подпрограмм:

Подпрограмма для кнопки будет аналогична разработанным во всех предыдущих проектах.

Создание интерфейса

· Используя элемент управления инструментом Line (Линия), начертите трапецию (вы вынуждены будете чертить каждую из четырех сторон отдельно). Добавьте линии для указания размеров. У линий есть свойство BorderWidth (ширина), которое позволяет чертить одни линии (например, размерные) тоньше, чем другие.

· Поместите на форму пять надписей, три текстовых окна и одну кнопку. Измените размеры и позицию надписей и текстовых окон, как показано на рис. 2 и 3.

Установка свойства

Написание кода

Событие по умолчанию для текстового окна — это Change (Изменение). А код, который будет написан для текстовых окон, будет реагировать на событие KeyPress (Нажатие на клавишу). Это событие выбирается из выпадающего списка, как это показано на рис. 4:

Рис. 4

Как указывалось выше, код, реагирующий на событие KeyPress (Нажатие на клавишу), будет одинаковым для всех трех текстовых окон. Когда нажата клавиша в любом из текстовых окон, код должен обеспечивать вычисление площади и присваивание вычисленного значения свойству Caption надписи lblПлощадь (для этого случая была выбрана надпись, а не текстовое окно, так как указанное только что свойство надписи может быть изменено только с помощью кода).

Введите следующий код для текстового окна txtСторонаA:

Private Sub txtСторонаA _KeyPress(KeyAscii As Integer)

'Если нажата клавиша <Enter>,

If KeyAscii = 13 Then

'то вычисляется площадь

lblПлощадь.Caption = 1/2 *

(Val(txtСторонаA.Text) +

+ Val(txtСторонаB.Text)) *

Val(txtВысота.Text)

End If

End Sub

Создайте аналогичный код для двух других текстовых окон (отличие будет состоять лишь в заголовках подпрограмм). При этом пользуйтесь операциями Copy (Копировать) и Paste (Вставить) из пункта меню Edit (Правка), вместо того чтобы печатать весь текст заново.

Введите следующий код для кнопки:

Private Sub cmdВыход_Click()

End 'Завершить программу

End Sub

Сохранение проекта

Создайте папку ПРИМЕР4 и сохраните в ней форму и проект под именами трапеция.frm и трапеция.vbp.

Тестирование приложения

  • Запустите программу.
  • Обратите внимание, что площадь вычисляется только тогда, когда вы нажимаете клавишу .
  • Решите задачу: “Дорожным рабочим нужно сделать покрытие на участке дороги длиной 25 м, которая сужается с ширины 6 м до ширины 4 м. Какова общая площадь покрытия?”

Взгляд назад

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

Пояснения

1. Значение каждого свойства элемента управления имеет конкретный тип данных. В частности, свойство Text текстового окна — строковый (состоящий из символов) тип. Поэтому, когда это свойство используется в вычислениях, необходимо преобразовать значение в числовой тип данных. Вот почему в коде использовалась функция Val. Например: Val(txtСторонаА.Text).

2. При вводе данных в текстовое окно могла бы произойти ошибка (при вводе нечисловых значений). Функция Val частично обеспечивает защиту — любые нечисловые данные преобразуются этой функцией в ноль.

3. Как обычно, для расчета величин и присваивания их значению тех или иных свойств элементов управления используется оператор присваивания. Для значения свойства Caption надписи lblПлощадь расчет проводится по формуле:

A = 1/2 (a + b)h

В алгебре знак умножения можно опустить.
В коде Visual Basic он обязательно должен присутствовать:

A = 1 / 2 * (a + b) * h,

или в нашем случае:

lblПлощадь.Caption = 1 / 2 *

(Val(txtСторонаA.Text) +

Val(txtСторонаB.Text)) * Val(txtВысота.Text)

4. В заголовке процедур обработки события KeyPress (Нажатие на клавишу) можно увидеть параметр KeyAscii. Он объявляется как величина целого типа — Integer (то же самое, как вы понимаете целые в математике — целые положительные и отрицательные числа): (KeyAscii As Integer).

Каждое нажатие на клавишу клавиатуры ассоциируется с числовым кодом (так называемым “ASCII-кодом”). Клавиша имеет код 13. Всякий раз, когда нажимается клавиша на клавиатуре, процедура обработки события KeyPress соответствующего текстового окна проверяет, не нажата ли клавиша . Как только это происходит — вычисляется площадь.

5. В этом примере программирования применяется так называемый “неполный условный оператор”. Его общий вид:

If <Условие> Then

<Действие(ия)>

End If

Он используется в программах в тех случаях, когда какое-то действие (какие-то действия) должно выполняться не всегда, а только при определенном условии. Обратите внимание, End If отмечает конец конструкции ветвления (неполного условного оператора) в коде.

Вопросы и задания для проверки знаний

1. Каждый символ на клавиатуре (и не только) имеет2 ASCII-код (American Standard Code for Information Interchange — Американский стандартный код для обмена информацией). Буквы английского алфавита закодированы так: “A” — 65, “B” — 66, “С” — 67 и т.д., для строчных букв: “a” — 97, “b” — 98, “с” — 99 и т.д.

а) назовите ASCII-код буквы “R”;

б) назовите ASCII-код тринадцатой буквы английского алфавита (заглавной буквы);

в) назовите ASCII-код буквы “y”.

2. Как вы думаете, уместно ли использовать тип данных Variant для свойства Caption (Надпись)?

3. Параметр KeyAscii (в рассмотренном примере программирования) имеет тип данных Integer. Что это значит?

4. Какой тип данных у свойства Text текстового окна?

5. Почему строки кода между If Then и End If записываются с отступами?

6. В каком случае к свойству Text должна быть применена функция Val?

7. Каждый пример программирования, рассмотренный до сих пор, содержал процедуру:

Private Sub cmdВыход_Click()

End ' Завершить программу

End Sub

Для чего она используется?

8. Запишите следующую формулу, пользуясь операторами Visual Basic:

S = 1/2 (a + l)n

9. Нарисуйте воздушного змея. Какие два размера нужны для вычисления его площади? Разработайте приложение для вычисления площади воздушного змея (змея нарисуйте с помощью элемента управления Line (Линия)).

От редакции. Пожалуйста, присылайте разработанные проекты и ответы на вопросы в редакцию. Ваша активность будет учтена при подведении итогов учебного года в нашей газете.

Продолжение следует


2 Для представления в компьютере

TopList