Следует избегать изменения значения параметра цикла в каких-либо операторах внутри цикла

282295
знаков
41
таблица
133
изображения

1. Следует избегать изменения значения параметра цикла в каких-либо операторах внутри цикла.

2. Передача управления на операторы внутри цикла (кроме первого) из каких-либо операторов вне цикла запрещена.

Оба фрагмента программ эквивалентны, т.е. два цикла могут заканчиваться одним оператором Next.

При выполнении цикла в цикле внутренний цикл выполняется для каждого значения параметра внешнего цикла (в фрагментах программ оператор C(I,J) = A(I) * B(J) выполнится 12 раз со следующей последовательностью индексов: С(1,1), С(1,2), С(1,3), С(1,4), С(2,1), С(2,2), С(2,3), С(2,4), С(3,1), С(3,2), С(3,3),

С(3,4)).

Внутренний (“вложенный”) цикл должен целиком содержаться во внешнем цикле:

Число вложенных циклов не ограничено.

Пример.

Рассматривается фрагмент программы для формирования вектора А(4). элементами которою являются суммы столбцов матрицы В (5,4).

Dim А(1 То 4), В(1 То 5, / То 4) As Single’onepaTop объявления массивов

For J = I To 4

A(J) = 0 'присвоение начального значения

'элемента вектора For / = / То 5

A(J) = A(J) + B(/,J) 'вычисление суммы в цикле Next / Next J

Пример программы.

Определен массив записей для хранения результатов экзаменов

Dim Sesia (5) As Resiiitaf на основе пользовательского типа данных Type Reyiltat

Familia As Sti ing * 20 Name Exam (1 To 3) As Stung * /5 ReyiltExam (/ To J) As Integer End Type

Программа должна вводить исходные данные и определять среднюю оценку студента, фамилия которого задается

Поместим описание пользовательской структуры данных в раздел Geneial модуля Module! (рис 3 7) и создадим форму (рис 3 8).

Рис 37

Форма и программы процедур обработки событии обеспечивают следующую логику работы При загрузке формы меткам (Label I, Label2, Label3) присваиваются названия экзаменов и активизируется командная кнопка “Ввод”, командная кнопка “Вычисление” не активна Последовательное пятикратное щелканье мыши по кнопке “Ввод” после заполнения информацией текстовых окон обеспечивает ввод необходимых исходных данных После чего командная кнопка “Ввод” деактивизируется, а командная кнопка “Вычисление” активизируется После ввода в текстовое окно под ней фамилии и щелчка мыши по кнопке “Вычисление” производится вычисление средней оценки студента и результат выводится в текстовое окно

Рис 38

 

Работа с формой показана на рис.3.9, а, б.

3.5.5.2. Оператор цикла Do-Loop

Синтаксис оператора следующий

Do [{While | Until} логическое выражение]

[блок операторов}

[Exit Do]

[блок операторов ]

Loop

или

Do

[блок операторов }

[Exit Do]

[блок операторов ]

Loop [{While | Until} логическое выражение ] где Do, While, Until, Exit Do, Loop ключевые слова. Пара Do-Loop определяют начало и конец оператора цикла;

While определяет выполнение операторов, входящих в цикл, пока стоящее следом логическое выражение принимает значение “True”;

Until определяет выполнение операторов, входящих в цикл, до тех пор пока стоящее следом логическое выражение не примет значения “True”; Exit Do используется для прекращения выполнения цикла (управление передается на оператор, который следует сразу за Loop) и применяется, например, и логическом операторе, который проверяет альтернативное условие прерывания цикла (например, ошибку).

Запись условия “{While | Until} логическое выражение” в начале или в конце цикла определяет, где это условие (задается логическим выражением) будет проверяться.

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

Пример последовательного чтения информации из файла, когда необходима проверка, что файл не закончился, анализируя наличие записи конца файла с использованием встроенной функции EOF ( номер файла):

Операторы чтения файла будут выполняться только в случае значения функции EOF — False (текущая запись не является концом файла).

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

Пример.

Do I Do Password = InputBox (“Введите пароль”) Password = InputBox (“Введите пароль”) Loop While Password О “Секрет” ] Loop Until Password = “Секрет”

В данном примере условие стоит в конце и ввод пароля (обращение к встроенной функции InputBox) выполняется хотя бы один раз (формируется проверяемое в конце условие). В первом случае используется While, определяющее повторение цикла пока “Секрет” не совпадает с введенным значением. Во втором случае используется Until, определяющее повторение цикла до момента совпадения “Секрет” с введенным значением.

Пример программы.

Программа производит вычисление ряда с задаваемой точностью вычисления. М-и элемент ряда вычисляется по формуле

(-irN/(N!*(2*N+l))

Программа реализуется в четырех вариантах с использованием оператора цикла Do-Loop. Варианты определяют место записи условий While и Until. Каждый вариант помещается в процедуру обработки события щелчка мыши по соответствующей командной кнопке (кнопки “Вариант!”, “Вариант2”, “ВариантЗ”, “Вариант4”) на форме. Иллюстрации работы примера на рис. 3.10.

Текст процедур примера:

Private Sub Commandl_Click () Dim Eps, Sum, Sumi As Double Dim N, NFactorial As Integer Eps = Val(InputBox(“Введите точность вычисления”).) Sum = 0: N = 1: NFactorial = 1 Do While Abs((-1)”N/(NFactorial*(2 * N + 1))) > Eps

Sum = Sum + (-1) л N /(NFactorial * (2 * N + 1)) • N = N + 1

NFactorial = NFactorial * N Loop

MsgBox “Сумма paBHa”+Str$(Sum)+”,N равно” + Str$(N) End Sub

Private Sub Command2_Click() Dim Eps, Sum, Sumi As Double Dim N, NFactorial As Integer

Eps = Val(InputBox(“Введите точность вычисления”)) Sum = 0: N =- 1: NFactorial = 1

Do Until Abs ( (-1)”N/(NFactorial*(2 * N + 1))) < Eps Sum = Sum + (-1) A N / (NFactorial * (2 * N + 1)) N = N + 1

NFactorial = NFactorial * N Loop

MsgBox “Сумма равна”+31г$(Sum)+”, N равно”+ Str$(N) End Sub

Private Sub Command3_Ciick() Dim Eps, Sum, Sumi As Double

Dim N, NFactorial As Integer

Eps = Val(InputBox(“Введите точность вычисления”))

Sum =0: N = 1: NFactorial - 1

Do Sum ^ Sum + (-1; N / (NFactorial * (2 * N + 1))’

N = N + 1

NFactorial = NFactorial * N

Loop Wnile Abs ( (-1)’”N/(NFactorial* (2 * N + !)))> Eps

MsgBox “Сумма paBHa”+Str$(Sum)+ “, N равно” + Str$(N) End Sub

Private Sub Command4_Ciick () Dim Eps, Sum, Sumi As Double Dim N, NFactorial As Integer Eps = Val(InputBox(“Введите точность вычисления”)) Sum = 0: N = 1: NFactoriai = 1 Do

Sum = Sum + (-1) л N / (NFactorial (2 * N + 1))

N = N + 1

NFactorial = NFactoriai * N Loop Until Abs((-1)”N/(NFactorial*(2*N + !)))< Eps MsgBox “Сумма paBHa”+Str$(Sum).”, N равно” + Str$(N) End Sub

Циклы Do-Loop позволяют также строить циклы со счетчиком, аналогично циклам For-Next.

Пример.

Counter = 1 \ Counter = 1

Do While Counter <= 100 Do While Counter > 100

В(Counter) = ......... В(Counter) = ........

Counter = Counter + 1 Counter = Counter + 1

Loop Loop

Эти два фрагмента программы эквивалентны следующему фрагменту с использованием цикла For — Next.

For Counter = 1 То 100

В(Counter ) = ...........

Next Counter

Для организации ввода исходных значений элементов массивов удобно использовать операторы цикла при работе For-Next и Do-Loop. Примеры процедур обработки события щелчка мыши по форме, которые обеспечивают последовательный ввод элементов массива в специальном окне InpiitBox и их вывод в специальном окне MsgBox:

Sub Form_Click ()

Dim I As Integer

Static A(1 To 5)

I = 1

Do While I <= 5

A (‘I^=Val (InputBox ( “Введите элемент массива” ( Str(-T) ) )

MsgBox “Значение элемента массива” •+ Str(A(I))

1=1+1

Loop

End Sub

Sub Form_Click ()

Dim I As Integer

Static A(1 To 5) 1=1 Do Until I > 5

A (I)=Val(InputBox(“Введите элемент массива” + Str(-I) ) )

MsgBox “Значение элемента массива” + Str(A(‘I))

1=1+1

Loop

End Sub

Окна для ввода и вывода в приведенных примерах имеют вид на рис. 3.11 и 3.12. Альтернативным способом ввода нескольких значении элементов массива может быть использование текстового окна и его свойств SelLength, SelStart, SelText (см описание текстового окна) В определенных позициях текстового окна можно задавать значения различных элементов массива и с использованием указанных функции эти поля выделять (аналогично тому, как осуществлялся ввод данных в текстовой строке ввода в операционнои системе DOS и др ) Создадим форму и разместим на ней текстовое окно, определив максимальное число символов 80 (свойство MaxLength = 80)

Исторический экскурс' когда-то недавно на перфокарте можно было “набить” 80 символов и строка фортран-программы состояла из 80 позиции Каждый элемент массива будем располагать последовательно в четырех позициях строки (число символов вводимого числа, включая десятичную точку, не превышает 4) Пробелы между числами отсутствуют

Имя текстового окна Input_Txt Остальные параметры определяются по умолчанию Определим процедуру обработки события нажатия клавиши KeyPiess

Sub Inpui:_Txt_KeyPress (KeyAscii As Integer) Static A(1 To 5) As Single If KeyAscii = 13 Then For I = 1 To 5 Input-_txt. SalStart-f’I 1) *4 'последовательно

'определяется начальная позиция вводимого числа lnput_txt.SelLength= 4 'определяется количество ' вводимых символов

A(I) = Val(Input_txt.SelText) 'выделяются 'необходимые символы и преобразуются

'в числовое значение (функция Val) Print A(I}; 'печать введенных значении на форме Next I End If

Процедура обеспечивает ввод значении пяти элементов массива при нажатии клавиши “Enter” (ASC1I-код клавиши равен 13). Стоящая “,” после оператора Punt A(I) обеспечивает печать следующего элемента массива на той же строке сразу после предыдущего.

Альтернативно можно использовать “,” (выводимые значения располагаются на одной строке в фиксированных зонах формы) При отсутствии указанных символов выводимые значения располагаются на отдельных строках На рис 3 13 показаны вводимые символы и распечатываемые значения Пример программы.

В качестве примера приводится программа нахождения суммы элементов матрицы 3*4 (три строки и четыре столбца), хотя бы один индекс которых кратен трем.

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

Текст процедуры:

Private Sub Form_Click ()

Static A(1 То 3, 1 То 4), Sum As Single For J = 1 To 4 Input_txtl.SelStart = (J - 1) * 4 'последовательно

“определяется начальная позиция вводимого числа Input_txtl.SelLength = 4 'определяется количество

'вводимых символов А(1, J) = Val(Input_txtl.SelText) 'выделяются

'необходимые символы и

'преобразуются в числовое значение (функция Val) Next J

Print А(1, 1), А(1, 2), А(1, 3), А(1, 4) For J = 1 То 4 Input_txt2.SelStart = (J - 1) * 4 'последовательно

'определяется начальная позиция вводимого числа Input_txt2.SelLength = 4 'определяется количество

'вводимых символов А(2, J) = Val(Input_txt2.SelText) 'выделяются

'необходимые символы и преобразуются в числовое

'значение (функция Val) Next J

Print А(2, 1), А(2, 2), А(2, 3), А(2, 4) For J = 1 То 4 Input_txt3.SelStart = (J - 1) * 4 'последовательно

'определяется начальная позиция вводимого числа Input txt3.SelLength = 4 'определяется количество

'вводимых символов А(3, J) = Val(Input_txt3.SelText) 'выделяются

'необходимые символы и преобразуются

'в числовое значение (функция Val) Next J

Print А(3, 1), А(3, 2), А(3, 3), А(3, 4) Sum = О

For I = 1 То 3 алгоритм For J = 1 То 4 суммирования IfI/3=I\30rJ/3=J\3 Then элементов Sum = Sum + A(I, J) матрицы, один

Рис. 3.14


Информация о работе «Програмирование на Visual Basic»
Раздел: Кибернетика
Количество знаков с пробелами: 282295
Количество таблиц: 41
Количество изображений: 133

Похожие работы

Скачать
61591
9
0

... соответствующее диалоговое окно для выбора таблиц из базы-источника, а затем диалоговое окно для выбора файла назначения. ·     Выберите соответствующие спецификации и выполните экспортирование. ·     Microsoft Access выдаст сообщение о результате экспортирования.   Запросы. Запрос можно представить себе как точку зрения на данные, включенные в таблицу. Запросы служат для селекции и ...

Скачать
62384
1
0

... мастера на основе одной или нескольких таблиц или запросов. Мастер задает подробные вопросы об источниках записей, полях, макете, требуемых форматах и создает отчет на основании полученных ответов. 1.        В окне базы данных выберите Отчеты и нажмите кнопку Создать. 2.        В диалоговом окне Новый отчет выберите нужного мастера. 3.        Выберите таблицу или запрос, содержащие данные, на ...

Скачать
23613
0
1

... . В начале своего появления сканеры взаимодействовали с программами посредством уникального для каждой модели сканера интерфейса, что серьезно затрудняло включение поддержки работы со сканером в прикладные программы. Для решения этой проблемы был разработан TWAIN - индустриальный стандарт интерфейса программного обеспечения для передачи изображений из различных устройств в Windows и Macintosh. ...

Скачать
257002
0
22

... быть выведены на печать. На экране рисунки могут быть статическими (неподвижными) или динамическими (движущимися). В последнее время машинная графика выделилась в самостоятельный раздел информатики с многочисленными приложениями. Средствами машинной графики создается не только печатная продукция, но и рекламные ролики на телевидении, мультфильмы. Объясним, как кодируется изображение в памяти ...

0 комментариев


Наверх