Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB.doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
8 Мб
Скачать
☆

Глава 4.Типичные маленькие программы

Каждому программисту известны такие слова, как счетчик, сумматор, вложенные циклы и другие подобные понятия, составляющие элементарную технику программирования. Без них не обходится ни одна реальная программа, и если мы хотим идти дальше, то нам без них не обойтись. В этой главе я не буду вводить новых операторов, а покажу, как программировать типичные задачи, в том числе и те, что используют упомянутые понятия.

4.1.Вычислительная циклическая программа

Задача: Во дворце 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 To 40

написать

N = InputBox("Сколько залов во дворце?")

For i = 1 To N

Задание 47: Даны стороны N кубиков. Вычислить объем каждого.

4.2.Роль ошибок

Пусть во дворце три зала размерами 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 To N написать For i=2 To N то результаты будут такими:

Площадь пола=300 Объем зала=1200

Площадь пола=600 Объем зала=3000

На этом программа закончит работу и не спросит размеров третьего зала. Вам не кажется странным, что она посчитала 1 и 2 залы, а не 2 и 3? Если кажется, то учтите, что пользователь ничего не знает об ошибке в программе, а компьютер не говорит ему, размеры какого по счету зала ему нужно вводить.

Задания 48-49:

Определите без компьютера, что напечатает компьютер, если

  1. строку For i=1 To N поместить на три строки ниже, а именно - перед строкой S = Dlina * Shirina

  2. поменять местами строки Debug.Print и Next

Если задания не получаются, введите программы в компьютер и используйте пошаговый режим.

4.3.Счетчики

Счетчик - это переменная величина, в которой вы что-нибудь подсчитываете. Для чего нужны счетчики? Ну хотя бы для того, чтобы подсчитать количество жизней главного персонажа в компьютерной игре.

Задача 1: В компьютер с клавиатуры вводятся числа. Компьютер после ввода каждого числа должен печатать, сколько среди них уже введено положительных.

Фрагмент, решающий задачу:

c=0 'Обнуляем счетчик

m: a = InputBox("Введите очередное число")

If a>0 Then c=c+1

Debug.Print "Из них положительных -" , c

GoTo m

Пояснения: В 2.4 мы придумали переменную i, которую назвали счетчиком циклов. Здесь мы тоже придумали переменную c. Она у нас выполняет роль счетчика положительных чисел. Сердце счетчика - оператор c=c+1. Именно он в нужный момент увеличивает счетчик на 1. Но и без If a>0 Then тоже никак нельзя. Если бы его не было, то c подсчитывал бы все числа без разбору, то есть был бы обыкновенным счетчиком циклов. В нашем же фрагменте увеличение с на 1 выполняется не всегда, а лишь при положительном а.

Обязательно прокрутите программу в пошаговом режиме.

В сложных программах не забывайте обнулять счетчик перед входом в цикл, а не то он начнет считать вам не с нуля, а бог знает с чего. Как бы вам понравилось, если бы таксист в начале поездки не обнулил счетчик?

В нашем фрагменте значения счетчика печатаются при каждом выполнении цикла. Изменим задачу.

Задача 2: В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и один раз напечатать, сколько среди них положительных.

Программа:

Private Sub Command2_Click()

c = 0 'Обнуляем счетчик

For i = 1 To 200

a = InputBox("Введите очередное число")

If a > 0 Then c = c + 1

Next i

Debug.Print "Из них положительных -"; c

End Sub

Пояснения: Путь рассуждений здесь тот же, что и в первой задаче. В результате применения оператора For тело цикла выполняется ровно 200 раз, благодаря чему счетчик с накапливает нужное значение. Оператор Debug.Print выполняется только один раз и печатает последнее накопленное значение, потому что в ячейке с будет находиться именно оно..

Задание 50: Что будет, если

  1. Вместо c=0 написать c=10.

  2. Вместо c=c+1 написать c=c+2.

  3. Строки Next и Debug.Print поменять местами.

  4. Строки c=0 и For поменять местами.

  5. Строки For и InputBox поменять местами.

А в следующей программе мы используем уже два счетчика. Изменим задачу.

Задача 3: В компьютер вводится ровно 200 чисел. Компьютер должен подсчитать и один раз напечатать, сколько среди них положительных чисел и сколько нулей.

Программа:

Private Sub Command3_Click()

c_полож = 0 'Обнуляем счетчик положительных чисел

c_нулей = 0 'Обнуляем счетчик нулей

For i = 1 To 200

a = InputBox("Введите очередное число")

If a > 0 Then c_полож = c_полож + 1

If a = 0 Then c_нулей = c_нулей + 1

Next i

Debug.Print "Из них положительных -"; c_полож, "Нулей -"; c_нулей

End Sub

Как узнать, насколько Лев Толстой любил слово "добро"? Для этого достаточно, используя с минимальными изменениями нижеприведенную программу, ввести в компьютер слово за словом его произведения.

Задача 4: В компьютер один за другим вводятся произвольные символы. Ввод заканчивается символом "/". Подсчитать, какой процент от общего числа введенных символов составляют символ "W" и символ ":" по отдельности.

Здесь мы организуем три счетчика одновременно: сW - для подсчета букв W, сDv - для подсчета двоеточий, а также 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. Подсчет закончить после ввода пары нулей.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]