Во дворце 40 залов. Известны длина, ширина и высота каждого зала. Вычислить площадь пола и объем каждого зала.
Сначала напишем фрагмент для одного зала:
Dlina = InputBox ("Введите длину") 'Начало фрагмента
Shirina = InputBox ("Введите ширину")
Visota = InputBox ("Введите высоту")
S = Dlina * Shirina 'Площадь пола
V = S * Visota 'Объем
Debug.Print "Площадь пола="; S, "Объем зала="; V 'Конец фрагмента
Для решения задачи этот фрагмент нужно выполнить 40 раз, для чего вполне естественно вложить его в оператор For:
Private Sub Command1_Click()
For i = 1 To 40
Dlina = InputBox("Введите длину") 'Начало фрагмента
Shirina = InputBox("Введите ширину")
Visota = InputBox("Введите высоту")
S = Dlina * Shirina 'Площадь пола
V = S * Visota 'Объем
Debug.Print "Площадь пола="; S, "Объем зала="; V 'Конец фрагмента
Next i
End Sub
Полужирным шрифтом я выделил новые по сравнению с предыдущим фрагментом строки.
Чтобы программа подходила для любого числа залов, нужно вместо
For i = 1 То 40
написать
N = InputBox("Сколько залов во дворце?")
For i = 1 То N
Задание 47: Даны стороны N кубиков. Вычислить объем каждого.
Роль ошибок
Пусть во дворце три зала размерами 20*15*4, 30*20*5 и 10*5*3. В этом случае, выполняя программу предыдущего параграфа, мы вводим N=3 и оператор For выполняет цикл три раза.
Мы знаем, что по ошибочной программе компьютер выдает ошибочные результаты. Например, если в нашей программе мы вместо V=S*visota напишем V=S+visota, то результаты будут такими:
Площадь пола=300 Объем зала=304
Площадь пола=600 Объем зала=605
Площадь пола=50 Объем зала=53
Если же случайно вместо For i=1 То N написать For i=2 То N то результаты будут такими:
Площадь пола=300 Объем зала=1200
Площадь пола=600 Объем зала=3000
На этом программа закончит работу и не спросит размеров третьего зала. Вам не кажется странным, что она посчитала 1 и 2 залы, а не 2 и 3? Если кажется, то учтите, что пользователь ничего не знает об ошибке в программе, а компьютер не говорит ему, размеры какого по счету зала ему нужно вводить.
Задания 48–49: Определите без компьютера, что напечатает компьютер, если строку For i=1 То N поместить на три строки ниже, а именно — перед строкой S = Dlina * Shirina поменять местами строки Debug.Print и Next
Если задания не получаются, введите программы в компьютер и используйте пошаговый режим.
Счетчики
Счетчик — это переменная величина, в которой вы что-нибудь подсчитываете. Для чего нужны счетчики? Ну хотя бы для того, чтобы подсчитать количество жизней главного персонажа в компьютерной игре.
Задача 1: В компьютер с клавиатуры вводятся числа. Компьютер после ввода каждого числа должен печатать, сколько среди них уже введено положительных.
Фрагмент, решающий задачу:
с=0 'Обнуляем счетчик
m: а = InputBox("Введите очередное число")
If а>0 Then с=с+1
Debug.Print "Из них положительных — ", с
GoTo m
Пояснения: Мы придумали переменную с, которую назвали счетчиком. Она у нас выполняет роль счетчика положительных чисел. Сердце счетчика — оператор с=с+1. Именно он в нужный момент увеличивает счетчик на 1. Но и без If а>0 Then тоже никак нельзя. Если бы его не было, то с подсчитывал бы все числа без разбору, то есть был бы обыкновенным счетчиком циклов. В нашем же фрагменте увеличение с на 1 выполняется не всегда, а лишь при положительном а.
Обязательно прокрутите программу в пошаговом режиме.
В сложных программах не забывайте обнулять счетчик перед входом в цикл, а не то он начнет считать вам не с нуля, а бог знает с чего. Как бы вам понравилось, если бы таксист в начале поездки не обнулил счетчик?
В нашем фрагменте значения счетчика печатаются при каждом выполнении цикла. Изменим задачу.
Задача 2: В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и один раз напечатать, сколько среди них положительных.
Программа:
Private Sub Command2_Click()
с = 0 'Обнуляем счетчик
For i = 1 То 200
а = InputBox("Введите очередное число")
If а > 0 Then с = с + 1
Next i
Debug.Print "Из них положительных с
End Sub
Пояснения: Путь рассуждений здесь тот же, что и в первой задаче. В результате применения оператора For тело цикла выполняется ровно 200 раз, благодаря чему счетчик с накапливает нужное значение. Оператор Debug.Print выполняется только один раз и печатает последнее накопленное значение, потому что в ячейке с будет находиться именно оно..
Задание 50: Что будет, если Вместо с=0 написать с=10.
Вместо с=с+1 написать с=с+2.
Строки Next и Debug.Print поменять местами.
Строки с=0 и For поменять местами.
Строки For и InputBox поменять местами.
А в следующей программе мы используем уже два счетчика. Изменим задачу. Задача 3: В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и один раз напечатать, сколько среди них положительных чисел и сколько нулей. Программа:
Private Sub Command3_Click()
с_полож = 0 'Обнуляем счетчик положительных чисел
с_нулей = 0 'Обнуляем счетчик нулей
For i = 1 То 200
а = InputBox("Введите очередное число")
If а > 0 Then с_полож = с_полож + 1
If а = 0 Then с_нулей = с_нулей + 1
Next i
Debug.Print "Из них положительных с_полож, "Нулей с_нулей
End Sub
Как узнать, насколько Лев Толстой любил слово "добро"? Для этого достаточно, используя с минимальными изменениями нижеприведенную программу, ввести в компьютер слово за словом его произведения.
Задача 4: В компьютер один за другим вводятся произвольные символы. Ввод заканчивается символом "/". Подсчитать, какой процент от общего числа введенных символов составляют символ "W" и символ":" по отдельности.
Здесь мы организуем три счетчика одновременно: cW — для подсчета букв W, cDv — для подсчета двоеточий, а также i — счетчик общего числа введенных символов, кроме "/".
Программа:
Private Sub Command4_Click()
Dim i As Integer, cW As Integer, cDv As Integer
Dim procent_W As Integer, procent_Dv As Integer
Dim simvol As String
i = 0: cW = 0: cDv = 0 'Обнуляем все