Шрифт:
Закладка:
А вот теперь садитесь за компьютер. Создайте новый проект. Ничего реального мы из него делать не будем, он будет служить только для упражнений с переменными величинами. Разместите в нем кнопку, а в окно кода запишите такую программу:
Private Sub Command1_Click()
а = 2 * 3 + 4
b = а
у = а + b + 1
Debug.Print a, b, y, b + у
End Sub
Запустите проект. Щелкните по кнопке Command1 — в окне Immediate должны появиться 4 числа:
10 10 21 31
Вы видите окно Immediate? Если нет, то — View->Immediate Window.
Какая польза от переменных величин?
Самая крохотная и простая польза в том, что с их помощью удобно решать несложные вычислительные задачи. Например, даны стороны прямоугольника: а=27018, Ь=3954. Вычислить его площадь и периметр (напомню, что периметр — это сумма длин сторон прямоугольника).
Создайте проект с кнопкой. Задачу решает следующая программа:
Private Sub Command1_Click()
а = 27018
b = 3954
S = а*b 'Площадь
p=2*a+2*b 'Периметр
Debug.Print S, p
End Sub
После запуска и щелчка по кнопке вы увидите в окне Immediate следующие два числа:
106829172 61944
Первое из них — площадь, второе — периметр. Без применения переменных величин операторы получились бы более громоздкими:
S = 27018*3954 'Площадь
р = 2*27018 + 2*3954 'Периметр
что особенно заметно в больших программах. Есть и масса других преимуществ, которые вы почувствуете в следующих главах.
Продолжаем о переменных величинах
Нужно иметь в виду, что в операторе присваивания слева от знака равенства не может стоять число или выражение. Можно писать с=34, но нельзя писать 34=с. Можно писать z=f-v+990, но нельзя писать f-v+990=z. Правило это принято вот почему. Оператор присваивания устроен так, что сначала смотрит или вычисляет, какое значение имеет правая часть, а затем присваивает это значение тому, что стоит в левой части. То, что справа от знака равенства, присваивается тому, что слева от знака равенства, а не наоборот. Нет смысла присваивать значение числу или выражению.
Обратите внимание еще на один важный момент. Когда школьник видит выражение (например, d+2d), он не обязательно его вычисляет. Он может его преобразовать или, скажем, упростить (получив 3d). Компьютер же, видя выражение, сначала его, может быть, и упростит, но затем обязательно вычислит. А для этого он должен знать численные значения входящих в него величин (в нашем случае это величина d). Таким образом, вычисляя правую часть оператора присваивания (например, у=а+Ь+1), компьютер должен обязательно заранее знать, чему равны переменные, из которых эта правая часть состоит (в нашем случае это а и Ь). Ответственность за это знание лежит полностью на программисте. Пусть забывчивый программист записал такой фрагмент:. а=10: у=а+Ь+1…, нигде в программе не придав Ь никакого значения. Естественно, при вычислении выражения а+Ь+1 компьютер не будет знать, чему равно Ь. В такой ситуации разные языки программирования поступают по-разному. Некоторые "злые" языки просто отказываются вычислять выражения, "вредный" Турбо-Паскаль может подставить вместо Ь какую-нибудь ерунду (и молчок, между прочим), Visual Basic же добрый, он подставляет вместо Ь нуль.
Проверим. Заставим Visual Basic в нашем последнем проекте про прямоугольник не выполнять оператор а = 27018. Для этого его можно просто стереть, но удобнее просто поставить перед ним кавычку, тогда Visual Basic подумает, что это комментарий и выполнять не будет:
’а = 27018
Вот результат:
0 7908
Действительно, все выполнилось так, как если бы а было равно нулю.
Объявление переменных величин InputBox
Как мы можем задать компьютеру какую-нибудь величину? Оператором присваивания — раз. Введя ее в текстовое поле, как мы делали в калькуляторе — два. Есть еще один удобный и приятный способ — InputBox.
В вашем проекте о прямоугольнике вы можете хоть сто раз нажимать на кнопку
— результаты все время будут одинаковые. Это потому что исходные данные а=27018 и Ь=3954 никто не меняет. Скучно. Хорошо бы компьютер при нажатии на кнопку каждый раз спрашивал нас, чему равны стороны прямоугольника. А мы бы ему отвечали. А уж потом он вычислял.
Для этого нам нужно слегка изменить программу:
Private Sub Command1_Click()
а = InputBox("Введите ширину прямоугольника")
b = InputBox("Введите высоту прямоугольника")
S = а*Ь
р = 2*а + 2*Ь
Debug.Print S, р
End Sub
Как видите, заменены первые две строки: а=27018 и Ь=3954.
Конструкция
а = InputBox("Введите ширину прямоугольника")
есть оператор присваивания и означает она приказ компьютеру вывести сначала на экран вот такое окно — >
После чего человек вводит в белое текстовое поле этого окна любое число и нажимает ОК. После этого компьютер присваивает переменной а введенное значение и продолжает работу, то есть переходит к выполнению следующего оператора. Запустите проект и посмотрите, как он работает.
Если вам не нравится строка Project1 в заголовке окна, то вы можете задать свою строку, так дополнив оператор:
а = InputBox("Введите ширину прямоугольника", "Ввод данных")
Результат — >
Почему плохо не объявлять переменные величины
Посмотрим, где Visual Basic дает сбой, если не объявлять переменные величины. Рассмотрим простую задачу:
Даны три стороны треугольника. Вычислить его периметр.
Создаем новый проект с кнопкой для задачи о треугольнике. По аналогии с процедурой о прямоугольнике легко пишем процедуру для треугольника:
неправильная процедура:
Private Sub Command1_Click()
а = InputBox("Введите первую сторону треугольника")
b = InputBox("Введите вторую сторону треугольника")
с = InputBox("Введите третью сторону треугольника")
р = а + Ь + с
Debug.Print р
End Sub
Запускаем проект, вводим стороны — 2, 3, 4 и какой результат мы видим? Вместо 9 мы видим 234! Почему? Здесь тот же случай, что и с калькулятором, там было то же самое, пока мы не применили Val. Почему? Первое: Visual Basic считает содержимое текстового поля окна InputBox (точно так же, как и содержимое обычного текстового поля) текстом, а не числом, если даже оно состоит из цифр. А раз так, то и переменные а, Ь, с, берущие свое значение из текстового поля, он