Шрифт:
Закладка:
Если вы установите в окне свойств формы свойство FontTransparent равным False, то через пространство между буквами не будет просвечивать поверхность формы.
У оператора Print есть еще кое-какие возможности, но, пожалуй, хватит.
Диалог с компьютером
Напишем программу, которая осуществляла бы такой диалог человека с компьютером:
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН: Здравствуй, я компьютер, а тебя как зовут?
ЧЕЛОВЕК ВВОДИТ С КЛАВИАТУРЫ: Коля
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН: Очень приятно, Коля. Сколько тебе лет?
ЧЕЛОВЕК ВВОДИТ С КЛАВИАТУРЫ: 16
КОМПЬЮТЕР ВЫВОДИТ НА ЭКРАН: Ого! Целых 16 лет! Ты уже совсем взрослый!
Пусть человек вводит свои реплики при помощи InputBox, а компьютер печатает свои с помощью Print. Для хранения в памяти имени человека выдумаем переменную imya, а для возраста — vozrast.
Вот программа:
Dim imya As String
Dim vozrast As Integer
Private Sub Command1_Click()
Print "Здравствуй, я компьютер, а тебя как зовут?"
imya = InputBox("Жду ответа")
Print "Очень приятно, "; imya; ". Сколько тебе лет?"
vozrast = InputBox("Жду ответа")
Print "Ого! Целых"; vozrast; "лет! Ты уже совсем взрослый!"
End Sub
Вам понятно, зачем в операторе Print "Очень приятно, "; imya; ". Сколько тебе лет?" внутри кавычек нужны запятая и точка? Если нет, то попробуйте их убрать и посмотрите на результат.
Диалог будет отличаться только той информацией, которую вводит человек. Так, в другой раз по этой же программе будет осуществлен следующий диалог: КОМПЬЮТЕР: Здравствуй, я компьютер, а тебя как зовут?
ЧЕЛОВЕК: Фантомас!
КОМПЬЮТЕР: Очень приятно, Фантомас!. Сколько тебе лет?
ЧЕЛОВЕК: 100
КОМПЬЮТЕР: Ого! Целых 100 лет! Ты уже совсем взрослый!
Не подумайте, что эта программа очень умная. Она совершенно не анализирует, какую информацию человек ввел с клавиатуры. Поэтому с ней возможен и такой диалог:
КОМПЬЮТЕР: Здравствуй, я компьютер, а тебя как зовут?
ЧЕЛОВЕК: Сгинь с моих глаз!
КОМПЬЮТЕР: Очень приятно, Сгинь с моих глаз!. Сколько тебе лет?
ЧЕЛОВЕК: -2
КОМПЬЮТЕР: Ого! Целых -2 лет! Ты уже совсем взрослый!
Как выводить информацию в текстовое поле
Конечно, оператором присваивания:
Трудность в том, что в операторе присваивания правая часть не может состоять из нескольких элементов, как в операторе Print, это один-единственный элемент, который может быть числом, строкой, числовой или строковой переменной, числовым или строковым выражением, содержимым текстового поля.
Правая часть вычисляется и становится содержимым текстового поля.
Text1.Text="Кошка"+" Собака" (Кошка Собака)
Что же делать, если мы хотим вывести в текстовое поле сразу несколько элементов? Здесь мы должны выстроить их в один элемент. Сделаем же это знаком +. У нас получится одно выражение:
Text1.Text = "Месяц " + Mes + " для меня отпускной." (Месяц май для меня отпускной.)
А вот с примером о поросенке немного посложнее. Попробуем проделать то же самое:
Text1.Text = "Вес поросенка + Ves + "килограммов" (Ошибка "Type mismatch" — Несовпадение типов)
Дело вот в чем. Visual Basic присматривает за тем, чтобы программист не складывал "бочки и селедки". То есть, если складываешь, то уж складывай одни числа, или уж одни строки (как в задаче об отпускном месяце), а строки с числами складывать никак нельзя. Ведь "Вес поросенка =" и "килограммов" это строки, a Ves — это числовая переменная.
Но и здесь есть, конечно, выход. Помните, как в 0 при помощи Val мы приказали компьютеру считать текст числом (другими словами — преобразовали текст в число)? Совершенно аналогично здесь мы прикажем компьютеру считать число текстом (другими словами — преобразуем число в текст). И сделает это функция Str:
Text1.Text = "Вес поросенка =' Str(Ves) + " килограммов" (Вес поросенка = 35 килограммов)
Задание 14: Напишите программу для следующей задачи: Компьютер запрашивает названия двух планет, радиусы их орбит (в миллионах километров) и скорости движения по орбите (в миллионах километров в сутки). После этого он вычисляет продолжительность года на планетах и выдает результат в таком виде: Продолжительность года на планете Земля — 365 суток, а на планете Эоэлла — 12 суток. Результат — в двух вариантах: печать на форме оператором Print и вывод в текстовое поле.
Указание для тех, кто не знает физики и геометрии: Год равен времени одного оборота по орбите, а оно равно длине орбиты, деленной на скорость движения по орбите. Длина орбиты равна
, где R — радиус орбиты.Оглядимся вокруг
Ну вот, с переменными величинами мы разобрались. Узнали что-то. А научились ли мы в результате этого знания делать что-нибудь новенькое и интересное? Вроде, нет. Ничего особенно приятного, за исключением, может быть, диалога с компьютером. Нда-а-а… Зачем же все мучения?
Что такое выбор (ветвление)
У начинающего программиста интерес должен вызывать такой вопрос: как компьютер думает, как он принимает решения, как он выбирает, какое действие из нескольких возможных нужно выполнить в данный момент? Ведь пока компьютер выполнял все, что ему приказывали, не рассуждая. Попробую ответить.
Возьмем игру в воздушный бой. Предположим, самолет на экране летит на автопилоте. Это значит, он должен самостоятельно поддерживать высоту полета между 3000 м и 3200 м. Для этого ему достаточно периодически определять высоту, и если она меньше 3000, лететь вверх, а если больше 3200 — вниз. Естественно, этот выбор делает программа для игры в воздушный бой, сам по себе компьютер ничего выбрать не может. В программе заранее пишутся процедуры для полета вверх и для полета вниз, а выбор между ними делает специальная команда (оператор) выбора, имеющаяся в каждом языке программирования. Вот алгоритм выбора между полетом вверх и вниз:
Определи высоту.
Если высота < 3000, то выполняй процедуру ВВЕРХ.
Если высота > 3200, то выполняй процедуру ВНИЗ.
Продолжай полет.
Здесь команды 2,3 — команды выбора. В общем случае команда выбора содержит условие, от которого зависит, будет ли выполняться какая-нибудь команда или группа команд. Это условие может быть самым разным: нажата или нет любая клавиша, нажата или нет конкретная клавиша, был ли щелчок мышью над таким-то объектом, больше ли одно число другого, правда ли, что с клавиатуры введено такое-то слово и т. д. В нашем случае условие