три счетчика
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
Вложенные циклы
Вложенные циклы или цикл внутри цикла — весьма распространенная конструкция при программировании.
Поставим себе задачу — напечатать таблицу умножения. В следующем виде:
Начнем с малого — пусть нужно напечатать
1*1=1
Вот фрагмент программы:
Фрагмент 1
а=1
Ь=1
proizv = а * b
Print а, "*",Ь, "=",proizv
Здесь в операторе Print 5 элементов:
сомножитель а,
символ знака умножения "*",
сомножитель b,
символ "=",
значение произведения proizv
Усложним задачу. Попробуем заставить компьютер напечатать первую строку таблицы:
Замечаем, что здесь нам нужно решить 9 элементарных задач на вычисление произведения, первую из которых решает фрагмент 1. Все они очень похожи и различаются лишь значением второго сомножителя. Таким образом, для решения каждой из 9 задач подошел бы наш фрагмент 1, если бы в нем в операторе Ь=1 вместо единицы стояла нужная цифра. В данном случае идеально подходит оператор For:
Фрагмент 2
а = 1
For b = 1 То 10
proizv = а * Ь
Print а; "*"; Ь; proizv;
Next b
Прокрутите программу в пошаговом режиме.
Следующая ступень усложнения — последняя — напечатать не одну строку таблицы, а девять. Для этого фрагмент 2 должен быть выполнен 9 раз, каждый раз — с новым значением а. Чтобы этого достичь, "обнимем" фрагмент 2 оператором For точно так же, как мы обнимали фрагмент 1.
Фрагмент 3
For а = 1 То 10
For b = 1 То 10
proizv = а * Ь
Print а; "*"; Ь; "="; proizv;
Next b
Next a
Прокрутите программу в пошаговом режиме, для удобства заменив 9 на 4.
Печатается все, что надо, но в одну строчку. Добавим в нужное место пустой Print, чтобы после окончания очередной строки печать начиналась с новой:
Фрагмент 4
For а = 1 То 10
For b = 1 То 10
proizv = а * Ь
Print а; "*"; Ь; "="; proizv;
Next b
Print
Next a
Прокрутите программу в пошаговом режиме. Прочувствуйте то, что пустой Print мы поместили именно в нужное место, строчкой выше или ниже он все бы испортил.
Печатает фрагмент 4 плохо. Акуратных столбцов не получается. Мы не будем добиваться идеальной картинки. Просто поменяем точку