Накопление сумм и произведений

Создание контекстных подсказок

End Sub

End If

Next i

Private Sub StBar1_PanelClick(ByVal Panel As ComctlLib.Panel)

End Sub

Call OpStBar.StrInit

StBar1.Panels(1).Text ="щелкни ->" : StBar1.Panels(2).Text = OpStBar.StrBar(1)

Dim i As Integer : Dim j As Integer

'If Panel.Index = 2 Then'вариант оператора, распознающего панель

If Panel.Key = "смена" Then'распознавание панели по параметру Key

For i = 1 To 5' вычисление номера текущей подсказки

If Panel.Text = OpStBar.StrBar(5) Then j = 0: Exit For

If Panel.Text = OpStBar.StrBar(i) Then j = i: Exit For

If j < 5 Then j = j + 1 : Panel.Text = OpStBar.StrBar(j)'запись текста в панель

Рис. 4.31. Текст программы, управляющей строкой статуса с двумя панелями

Процедура инициализации массива подсказок StrBar(5) описана в модуле OpStBar (рис. 4.30). Как и выше, объекту StatusBar присвоено имя StBar1. Щелчком по второй (правой) панели меняется содержимое панели. Распознавание выбранной панели выполняется на основе параметра панели Key, которому для второй панели присвоено значение "смена".

Контекстные подсказки это короткие сообщения, которые появляются при установке указателя мыши на элементы интерфейса пользователя. Для реализации контекстной подсказки достаточно задать текст в свойстве ToolTipText.

 

В процессе обработки данных встречается необходимость вычислить сумму (или произведение) элементов массива или чисел вводимых с клавиатуры или из файла.

Схема выполнения указанной операции показана на рис. 4.32. Сумма и произведение накапливаются в переменных Sum и Mult. Процесс накопления совершается в цикле. Первыми операторами тела цикла являются операторы вычисления очередного слагаемого и очередного сомножителя. Они могут быть прочитаны из файла, из массива или введены с клавиатуры с помощью функции InputBox. Методы выполнения соответствующих операций описаны выше.

Если происходит чтение из массива, то переменные Sum и Mult дополняются счетчиком цикла (например, с именем I), в который при каждом проходе тела цикла нужно добавлять единицу.

В следующих операторах происходит накопление суммы и произведения. В зависимости от ситуации для принятия решения о завершении цикла применяются значение счетчика цикла, обнаружение конца файла или специальный запрос с помощью объекта InputBox. Примеры выполнения описанных операций приведены на рис. 4.32.

 

 
 

 

 


Рис. 4.31. Схема накопления суммы и произведения

На рис. 4.32,а производится накопление суммы и произведения элементов массива М, причем число элементов известно. Поэтому применен цикл For-Next. Заполнение элементов массива числами не показано, т.к. к изучаемому вопросу не имеет отношения.

Dim Sum as Single Dim Mult as Single Dim I as Integer Dim N as Integer Dim M() as Single N=10: Sum=0: Mult=1 ReDim M(1 to N) as Single For I=1 to N Sum=Sum+M(I) Mult=Mult*M(I) Next I Dim Sum as Single Dim Mult as Single Dim А as Single Open "F" for input as #1 Sum=0: Mult=1 Do while not EOF(1) Input#1, A Sum=Sum+A Mult=Mult*A Loop Close Dim I As Single Dim Sum As Single Dim Mult As Single Dim А As Single Sum = 0: Mult = 1 Do While I <> 6 A = InputBox("A=") Sum = Sum + A Mult = Mult * A I=MsgBox("Выход?", 4) Loop
а) б) в)
Рис. 4.32. Примеры накопления суммы и произведения элементов массива (а), чисел, записанных в файл (б) и введенных с клавиатуры (б)

Рис. 4.32,б показывает накопление суммы и произведения из файла с неизвестным числом записей. Поэтому применен цикл Do-Loop с претестом окончания файла, имеющим вид While Not EOF(1). При обнаружении конца файла функция EOF приобретает значение TRUE, и цикл завершается.

Рис. 4.32,в иллюстрирует накопление суммы и произведения чисел, вводимых с клавиатуры. Число чисел неизвестно. Для ввода данных используется функция InputBox, для определения момента завершения цикла – MsgBox. Второй параметр функции MsgBox имеет значение 4, указывая на наличие кнопок "Yes" и "No". Число 6 в претесте While I<>6 указывает, что цикл продолжается до нажатия кнопки "Yes".