© Данная статья была опубликована в № 04/2007 журнала "Информатика" издательского дома "Первое сентября". Все права принадлежат автору и издателю и охраняются.      Главная страница "Первого сентября"
     Главная страница журнала "Информатика"
     Содержание № 04/2007
В мир информатики # 86 (16-28 февраля). Oсновы программирования на Visual Basic


В мир информатики # 86 (16—28 февраля).
Школа программирования

Oсновы программирования
на Visual Basic

Н.М. Тимофеева,
г. Обнинск Калужской обл.

Продолжение. Начало см. “В мир информатики” № 69–73, 78–80, 83, 85 (“Информатика” № 4–8, 19–21, 24/2006, 3/2007)

Пример программирования № 9 “Счетчик слов”

Постановка задачи

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

План решения

На рис. 1 показан предлагаемый дизайн экрана:

Рис. 1

Назначение каждого элемента управления:

1) текстовое окно — для ввода предложения;

2) надписи — одна для “подсказки” пользователю о вводе предложения, вторая — для показа результата подсчета, третья — для информации о назначении второй надписи;

3) кнопки — для выполнения следующих действий по щелчку:

— Считать — для начала подсчета слов;

— Очистить — для очистки текстового окна

и надписи с результатом

подсчета;

— Выход — для завершения программы.

N–S-диаграммы для разработки процедур:

1) процедура для кнопки Очистить:

2) процедура для кнопки Считать:

 

 Примечание. Переменная С “хранит” количество слов во введенном предложении.

Создание интерфейса

Разместите на форме одно текстовое окно, три кнопки и три надписи (рис. 2).

Рис. 2

Установка свойства

Установите следующие свойства формы и элементов управления:

Написание кода

Код для кнопки Считать:

Private Sub cmdСчитать_Click()

Dim S As String, B As String * 1

Dim C As Integer, I As Integer

'Обнуляем счетчик C

C = 0

'Копируем содержимое текстового окна

'в переменную S

S = txtВвод.Text

If Len(S) > 0 Then

'Для каждого символа предложения

For I = 1 To Len(S)

'Выделяем его

B = Mid(S, I, 1)

If B = " " Then 'Если пробел

'Учитываем слово

C = C + 1

End If

Next I

'Учитываем последнее слово

C = C + 1

End If

'Выводим результат

LblСчетчик.Caption = C

End Sub

Код для кнопки Очистить:

Private Sub cmdОчистить_Click()

'Очищаем текстовое окно

txtВвод.Text = ""

'Устанавливаем счетчик в 0

lblСчетчик.Caption = 0

'Активизируем текстовое окно

txtВвод.SetFocus

End Sub

Сохранение проекта

Создайте папку ПРИМЕР9 и сохраните в ней форму и проект под именами счетчик_слов.frm и счетчик_слов.vbp.

Тестирование приложения

Запустите программу. Введите в текстовом окне предложение и щелкните по кнопке Считать.

Рис. 3

Попробуйте “обмануть” программу, чтобы она неправильно считала. Подумайте, как это сделать.

Взгляд назад

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

Убедитесь, что программа выполняет все, что было задано в первом шаге. Но, как вы, наверное, уже убедились, эту программу довольно легко “обмануть”. Усовершенствуйте ее, чтобы это нельзя было сделать.

Пояснения

1. Свойство TabIndex элементов управления используется для задания последовательности перехода от одного элемента к другому при нажатии клавиши . Элемент управления, у которого значение этого свойства равно 0, получает фокус первым (именно этот элемент является активным при запуске программы). В нашем случае первым фокус получает текстовое окно.

2. В процедуре cmdСчетчик_Click() объявлены две переменные символьного типа: переменная S для хранения предложения, введенного в текстовое окно, и переменная B для хранения одного символа. Первая объявлена как символьная переменная произвольной длины; это значит, что она может быть длиной от
0 до более чем 65 000 символов. Переменная B объявлена как символьная переменная фиксированной длины, в данном случае — длиной в 1 символ.

3. В этом примере используются некоторые символьные функции — функции для обработки текстовых данных6. Как и все функции, они возвращают значение. Функция Len возвращает количество символов в строке, указанной в качестве ее аргумента. Например, в данном случае — количество символов в предложении (Len(S)).

4. Функция Mid возвращает копию некоторой части строки. Она имеет три аргумента, например, в этом примере: Mid(S, I, 1), где S — исходная строка, I — номер символа, начиная с которого происходит копирование, 1 — количество символов, которые копируются.

Следующий пример поможет понять действие этой функции: Mid("Информатика", 3, 5) возвращает пять символов из слова Информатика, начиная с третьего символа, т.е. форма.

5. Left и Right — это также символьные функции, подобные Mid. Они возвращают заданное число соответственно крайних левых и крайних правых символов из строки. Примеры:

Left("Снегоход", 4) возвращает Снег;

Right("Снегоход", 3) возвращает ход.

6. В этом проекте вновь использован оператор цикла с параметром For … Next. Это только один из операторов цикла, имеющихся в Visual Basic. Остальные четыре известны как операторы цикла с условием. Среди них выделяют операторы цикла с предусловием:

Do While <условие>

<действия>

Loop

Do Until <условие>

<действия>

Loop

и операторы цикла с постусловием:

Do

<действия>

Loop While <условие>

Do

<действия>

Loop Until

Вот как можно использовать их применительно к рассматриваемой задаче:

I = 1

Do While I <= Len(S)

B = Mid(S, I, 1)

If B = " " Then

C = C + 1

End If

I = I + 1

Loop

I = 1

Do Until I > Len(S)

B = Mid(S, I, 1)

If B = " " Then

C = C + 1

End If

I = I + 1

Loop

I = 0

Do

I = I + 1

B = Mid(S, I, 1)

If B = " " Then

C = C + 1

End If

Loop While I < Len(S)

I = 0

Do

I = I + 1

B = Mid(S, I, 1)

If B = " " Then

C = C + 1

End If

Loop Until I = Len(S)

Вопросы и задания для проверки знаний

1. Если X — переменная символьного типа со значением “слияние”, и Y — переменная символьного типа со значением “кооперация”, то каким будет значение следующих выражений:

a) Len(X);

б) Mid(Y, 3, 5);

в) Right(Y, 8);

г) Left(X, 1)?

Каким эквивалентным выражением с использованием функции Mid можно заменить выражение Right(Y, 5)?

2. Сколько раз выполнится тело следующего оператора:

For J = 9 To 15

…

Next J

3. Если G — переменная символьного типа со значением “Урок”, то каким будет результат выполнения следующего оператора цикла:

For J = 1 To Len(G)

Form1.Print Mid(G, J, 1)

Next J

4. Следующий оператор For … Next печатает на форме числа от 1 до 10:

For N = 1 To 10

Form1.Print N

Next N

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

5. Каков результат выполнения следующего фрагмента кода:

P = 2

Do While P < 1000

Form1.Print P

P = P * 2

Loop

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

6. Какое минимальное количество раз выполняется тело оператора цикла с предусловием? Оператора цикла с постусловием?

7. Объявите локальную переменную символьного типа фиксированной длины в 4 символа, имя которой — P.

8. Если в разработанной программе введенное предложение начинается или заканчивается пробелом, то количество подсчитанных слов будет неправильным7. Но вы можете найти способ написания программы, которая “не ошибается” в подсчете слов. Что такое слово? Подумайте, как начинается слово. Разработайте улучшенную процедуру подсчета количества слов в предложении.

Продолжение