Онлайн
библиотека книг
Книги онлайн » Разная литература » Интернет-журнал "Домашняя лаборатория", 2008 №7 - Журнал «Домашняя лаборатория»

Шрифт:

-
+

Закладка:

Сделать
1 ... 156 157 158 159 160 161 162 163 164 ... 192
Перейти на страницу:
три счетчика

   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 плохо. Акуратных столбцов не получается. Мы не будем добиваться идеальной картинки. Просто поменяем точку

1 ... 156 157 158 159 160 161 162 163 164 ... 192
Перейти на страницу: