Выбрать главу

   а = 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

Вложенные циклы

Вложенные циклы или цикл внутри цикла — весьма распространенная конструкция при программировании.