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

Шрифт:

-
+

Закладка:

Сделать
1 ... 155 156 157 158 159 160 161 162 163 ... 192
Перейти на страницу:
Во дворце 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 'Обнуляем все

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