а = 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 'Обнуляем все три счетчика
Do
simvol = InputBox("Введи символ")
If simvol <> "/" Then i = i + 1 'Если это не /, то "посчитай" его
Select Case simvol
Case "W" 'Если это W, то
cW = cW + 1 'увеличь счетчик символов W
Case":" 'Если это:, то
cDv = cDv + 1 'увеличь счетчик символов:
Case "/" 'Если это /, то
Exit Do 'завершай работу цикла
End Select
Loop
procent_W = Round(100 * cW / i) 'Вычисляй процент символов W
procent_Dv = Round(100 * cDv / i) 'Вычисляй процент символов:
Debug.Print procent_W, procent_Dv
End Sub
Задание 51: В компьютер вводится N чисел. Подсчитать из них количество положительных, отрицательных и тех, что превышают число 10,
Задание 52: В компьютер вводятся пары целых чисел. Подсчитать, сколько среди них пар, дающих в сумме число 13. Подсчет закончить после ввода пары нулей.
Сумматоры
Сумматор — это переменная величина, в которой вы подсчитываете сумму чего-либо. Если вы поняли идею счетчика, то понять идею сумматора вам будет нетрудно. Посмотрим, как будет работать следующий фрагмент:
s=0 'Обнуляем сумматор. Это не менее важно, чем обнулить счетчик
m: а = InputBox("Введите очередное число")
s=s+a 'Увеличиваем сумматор
Debug.Print "Сумма="; s
GoTo m
В ячейке s накапливается сумма вводимых чисел а, поэтому назовем эту ячейку сумматором. Отличие сумматора от счетчика в том, что счетчик увеличивается на 1 оператором с=с+1, а сумматор — на суммируемое число оператором s=s+a.
Задача: В компьютер вводится N чисел. Вычислить и один раз напечатать их сумму.
Программа:
Private Sub Command2_Click()
N = InputBox("Сколько чисел будем складывать?")
s = 0
For i = 1 То N
а = InputBox("Введите очередное число")
s = s + а
Next i
Debug.Print "Сумма равна"; s
End Sub
Задание 53: Пусть N=2, a=5 и 3. Тогда по этой программе Visual Basic напечатает 8. Что он напечатает, если:
Вместо s=0 написать s=10.
Вместо s=s+a написать s=s+a+1.
Строки Next и Debug.Print поменять местами.
Строки s=0 и For поменять местами.
Строки For и InputBox поменять местами.
Строки s=s+a и Next поменять местами.
Вместо For i=1 То N написать For i=2 То N.
Задания 54–56: Написать программы для следующих задач:
Во дворце 40 залов. Известны длина и ширина каждого зала.
Вычислить площадь пола всего дворца.
Вычислить средний балл учеников вашего класса по физике.
Вычислить произведение N произвольных чисел. Подсказка: Несмотря на то, что произведение — не сумма, эта программа будет отличаться от программы суммирования всего двумя существенными символами (какими?), а структура обеих программ совершенно одинакова.
Вложение циклов в разветвления и наоборот
Реальная процедура на Visual Basic может представлять собой сложную мозаику из циклических и разветвляющихся частей, вложенных друг в друга. Мы уже видели, как в оператор цикла были вложены операторы ветвления. В свою очередь в них могут быть вложены операторы цикла, и так до бесконечности.
Для тренировки определите, что напечатает следующий фрагмент:
Private Sub Command1_Click()
For i = 1 To 5
a = 9
If i * i = a Then
For k = 5 To 8
Debug.Print k;
Else
Debug.Print 1997
End If
Next i
End Sub
Здесь внутрь For i = 1 To 5 вложен If i * i = a,a внутрь него вложен For к = 5 To 8.
Ответ:
1997
1997
5 6 7 8 1997
1997
Вложенные циклы
Вложенные циклы или цикл внутри цикла — весьма распространенная конструкция при программировании.