Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Понятно о Visual Basic.NET. Самоучитель.Ч2.2005...docx
Скачиваний:
46
Добавлен:
25.11.2019
Размер:
4.02 Mб
Скачать
    1. Счетчики и сумматоры

Счетчики и сумматоры похожи друг на друга.

      1. Счетчики

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

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

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

Dim a, c As Integer

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

Do

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

If a > 0 Then c = c + 1

Debug.WriteLine("Введено положительных чисел - " & c)

Loop

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

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

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

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

Программа:

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

Dim a, c, i As Integer

For i = 1 To 200

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

If a > 0 Then c = c + 1

Next i

Debug.WriteLine("Из них положительных - " & c)

End Sub

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

«Ошибки». Что будет, если

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

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

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

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

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

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

Программа:

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click

Dim a, i, c_полож, c_нулей As Integer

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

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

For i = 1 To 200

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

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

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

Next i

Debug.WriteLine("Из них положительных - " & c_полож & " нулей - " & c_нулей)

End Sub

Задача 4: Подсчитывать можно не только числа, но и строки и данные любых других типов. Как, например, узнать, насколько Лев Толстой любил слово «добро»? Для этого можно подсчитать, сколько раз встречается это слово в его произведениях. Решим похожую задачу:

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

Здесь мы организуем три счетчика одновременно: сW – для подсчета букв W, сDv – для подсчета двоеточий, а также i – счетчик общего числа введенных символов, кроме «/».

Программа:

Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click

Dim i, cW, cDv 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

Debug.WriteLine("Символов W было " & Format(cW / i, "P") & " Двоеточий было " & Format(cDv / i, "P"))

End Sub

Печатаются результаты в таком виде:

Символов W было 48,39% Двоеточий было 3,23%

Здесь cW/i дает долю символов W в общем числе символов, а формат "P" преобразовывает эту долю в проценты.

В компьютер вводится N чисел. Подсчитать из них по-отдельности количество положительных, отрицательных и тех, что превышают число 10.

В компьютер вводятся пары целых чисел. Подсчитать, сколько среди них пар, дающих в сумме число 12. Подсчет закончить вводом пары нулей.

«Считаем звезды». Возьмите решенную нами задачу о звездном небе и подсчитайте заодно, сколько звезд из 100 попадет в левую часть неба (конкретнее, сколько звезд отстоят от левого края формы не более, чем на половину ее ширины). Пусть компьютер тут же ответит и на вопрос: где больше звезд – в левом верхнем квадрате неба размером 100 на 100 или в левом нижнем квадрате того же размера (см. Рис. 10 .27)? Указание: Вам придется использовать переменные величины – координаты звезд.

Рис. 10.27