Онлайн
библиотека книг
Книги онлайн » Разная литература » Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»

Шрифт:

-
+

Закладка:

Сделать
1 ... 134 135 136 137 138 139 140 141 142 ... 192
Перейти на страницу:
в услужливо возникающем окне Immediate.

А вот теперь садитесь за компьютер. Создайте новый проект. Ничего реального мы из него делать не будем, он будет служить только для упражнений с переменными величинами. Разместите в нем кнопку, а в окно кода запишите такую программу:

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 (точно так же, как и содержимое обычного текстового поля) текстом, а не числом, если даже оно состоит из цифр. А раз так, то и переменные а, Ь, с, берущие свое значение из текстового поля, он

1 ... 134 135 136 137 138 139 140 141 142 ... 192
Перейти на страницу: