Рефераты

Реферат: Програмирование на Visual Basic

Type Student

Familia As String * 20 Name As String * 10 Voyast As

Integer Birthdate As Double Length As Integer Wegith As

Integer End Type

рассмотренной выше. Записи располагаются последовательно в памяти машины и

занимают каждая 44 байта. 20 байт занимает Familia (один символ

занимает 1 байт), 10 байт - Name, 2 байта -Voyast (целый тип

занимает 2 байта), 8 байт - Birthdate (вещественный двойной точности

занимает 8 байт) и по 2 байта -Length и Wegith (целый тип).

Элемент пользовательского типа данных (записи) может являться массивом.

Например, можно объявить массив записей для хранения результатов экзаменов

студентов группы. Туре Rezultat

Familia As String * 20 NameExam (4) As String * /5 RewltExam (4) As Integer

End Type Dim Sesia(25) As Reyiltat

Объявлен пользовательский тип данных Rewltat, элементами которого

являются Familia фиксированной длины 20 символов (фамилия студента не

может состоять более чем из 20 символов), массив NameExam (4) из пяти

элементов (число экзаменов в сессии не более 5) для хранения названия экзаменов

(название каждого экзамена не может состоять более чем из 15 символов), массив

RewltExam (4) из пяти элементов для хранения оценок по каждому экзамену

(целого типа). Длина записи Rewltat 105 байтов.

На базе пользовательского типа данных Requital объявлен массив

Se<iia(25), каждый элемент которого содержит информацию об экзаменах и

оценках для одного студента (не более 26 студентов в группе). Один элемент

массива занимает 105 байтов памяти, а весь массив 2730 байт.

В Visual Basic имеется возможность переопределять количество элементов

массива в момент выполнения программы, т.е. динамически определять размер

массива. Это позволяет эффективно использовать дефицитную оперативную память

при создании программ. Для этого используется оператор ReDim (не объявление,

а команда, выполняемая при работе программы) в программе

ReDini [Preserve] имя [([описатель})} [, имя [([описатель})}}

Preserve сохраняет данные существующего массива при выполнении оператора

(для многомерных массивов можно применять только для правого индекса).

При использовании оператора ReDim в операторе объявления массива не задается

размер (объявляется динамический размер (dynamic array)).

В примере объявленный динамическим массив Massl( ) при выполнении программы

первый раз определяется состоящим из 10 элементов (Massl(lO)). Далее —

состоящим из 25 элементов (Massl(25)). При переопределении нельзя изменять

тип.

Элементы объявленного массива могут использоваться в операторах программы в виде

имя массива (значение индекса [значение индекса} ...)

Значение индекса задается арифметическим выражением (см. ниже), нецелочисленные

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

должны находиться в пределах возможных значении индекса, задаваемых операторами

определения или переопределения массива (в случае нарушения последнего

условия в процессе выполнения программы, выдается предупреждение об ошибке и

программа прекращает работу). Пример.

Если массив объявлен оператором

Dim A(10,20) As Double,

то для обращения к его элементам в операторах программы можно использовать

А(0,0) A(5,J+!) A(1,K) А(2.5, 9.8) (обращение к элементу А(2,10).

. К элементам массива рассмотренных выше пользовательских типов данных

обращение записывается:

MasStitdent(J).Name (обращение к имени j-ro студента массива

MasStudent, как к элементу записи Student)

Sesia(Ciirrent).NameExam(2) (обращение к названию экзамена для текущего

(current) индекса студента массива Sesia как к третьему элементу

массива NameExam, являющегося элементом записи Reviltat}.

Пример.

В качестве примера рассмотрим фрагмент программы, реализующий перестановку

элементов массива А, состоящего из 10 элементов, в обратном порядке.

В данном примере три оператора перестановки элементов, операторы изменения

значения индекса и проверки условия выполняются несколько раз при разных

значениях I (изменяемый параметр). Реализован так называемый “ручной” цикл,

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

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

которые и организуют цикл вычислений.

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

организовываться в виде массивов, что позволяет делать программы более

универсальными и компактными. Если при разработке формы двум одинаковым

элементам управления присваиваются одинаковые имена, то открывается

специальное окно для подтверждения создания массива управляющих элементов.

При подтверждении (ответ “Да”), элементы управления организуются в массив и у

процедур обработки событий для этих элементов управления появляется параметр

— индекс элемента управления. Изменяя значение индекса, одну и ту же

процедуру обработки события можно использовать для разных элементов.

В списке свойств элементов управления имеется свойство Index, значение

которого определяет индекс данного элемента в массиве. Индексы присваиваются

автоматически последовательно при создании на форме нового одинакового

элемента управления (первому элементу — 0, второму — 1 и т. д.) Эта

последовательность может быть изменена разработчиком формы, но только на

этапе создания формы.

3.3. ВЫРАЖЕНИЯ

Выражения используются для операций над данными. В зависимости от данных и

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

и символьные. Выражение можно определить

операнд [знак операции операнд} [знак операции операнд]

... где в зависимости от типа выражения используются соответствующие

операнды и знаки операций.

3.3.1. Арифметическое выражение

Используются следующие знаки операций:

+ - сложение (2.36+12.5);

  • вычитание (231-49);

* - умножение (3*2);

“ - возведение в степень (1(^2, результат 100, 10*-2, результат 0.01,

25^.5 или 25”(1/2), результат 5);

/ - деление с плавающей точкой (3/2, результат 1.5);

\ - целочисленное деление (3/2, результат 1);

Mod - вычисление Остатка (7Mod4, результат 3). Приоритет выполнения операции

(в порядке убывания приоритета): возведение в степень, умножение и деление с

плавающей точкой, целочисленное деление, вычисление остатка, сложение и

вычитание. Вычисления в выражении производятся слева направо. Скобки изменяют

приоритет.

Пример:

14/5*2 = 5.6 - операции одного приоритета выполняются слева направо;

14\5*2 = 1 - умножение имеет более высокий приоритет и при целочисленном

делении дробная часть отбрасывается;

27^1/3 = 9 — возведение в степень обладает наивысшим приоритетом;

27-(1/3) = 3 - скобки изменяют последовательность операций.

Операнды выражения:

  • константа (Integer, Long, Currency, Single, Double, Variant);
  • переменная (Integer, Long, Currency, Single, Double, Variant);

  • элемент массива (Integer, Long, Currency, Single, Double, Variant);

  • обращение к стандартной функции (см. ниже);

  • обращение к

    процедуре — функции (см. ниже);

  • арифметическое выражение в

    скобках.

3.3.2. Логическое выражение

Логические выражения используются в математической логике и их также называют

Булевыми выражениями, по имени математика Дж. Буля.

Используются следующие знаки логических операций:

  • Not- логическое отрицание НЕ;
  • And —

    логическое умножение И;

  • Or — логическое сложение ИЛИ;
  • Xor — исключительное ИЛИ;

  • Eqv — логическая эквивалентность;
  • Imp — логическая импликация.

Логические операции объединяют логические величины, которые могут принимать два

значения: True (Истина) или False (Ложь). Результат логической

операции также принимает одно из двух значений: True (Истина) или False (Ложь).

Результа1 ложческои операции определяется следующей таблицей:

Значенияpciv.im.it ипер.шии
Оперли.1 (А)Oiicp.iiLi (В)Nol ANot ВA And liA Oi ВA Xoi ВA Eч^ ВA Imp В
Т] нсTrueFalseFalseTineTrueFalseTrueTrue
FalseTrueTmcFalseFalseTrueTrueFalseF.ilse
TmePulseF.ilseTi неFalseTineTrueFalseFalse
FalseFalseТшеTmeFalseFalseFalseTineTrue

Приоритет выполнения операций (в порядке убывания приоритета): Not, And, Or,

Xor, Eqv, Imp.

Пример:

True And Not False Or False

Вычисляется Not False, результат — True; далее вычисляется And. результат —

True; последним вычисляется Or, результат — True.

Операндами логического выражения являются:

  • логические константы;
  • логические переменные;
  • обращения к функциям, возвращающим логические значения;

. • выражения отношения;

  • заключенные в скобки логические выражения.

Выражения отношения состоят из двух арифметических или символьных (см. ниже)

выражений, объединенных знаками операций отношения:

> — больше;

< — меньше;

>= — больше или равно;

<= - меньше или равно;

= — равно;

<> — не равно.

Выражение принимает значение либо True, либо False. Примеры:

3 + 1 > 3 (результат True);

SiirName = “Ивсмов “ (если переменная SiirName имеет

значение “ Иванов”, то результат True, в противном случае False);

“А” > “В” (результат False, побитово сравниваются значения кодов

символов, код символа “Я” больше кода символа 'A”).

Двойные неравенства для правильного их вычисления необходимо записывать с

использованием знаков логических операций. Когда арифметические данные

преобразуются к логическому типу, то 0 преобразуется в False, а другие

значения преобразуются в True. При преобразовании логического типа к

арифметическому, False преобразуется к 0, a True к —1.

Рассмотрим неравенство 23 < А < 543. Хотя синтаксически Visual

Basic допускает такую запись, результат в любом случае будет True независимо от

значения переменной А. Выражение вычисляется слева направо: 23 <

А даст либо True. либо False, т.е. либо —/, либо 0. —/ или 0 всегда меньше

543 и результат будет True. Для того чтобы вычисление было корректным, это

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

логической операции.

Правильная запись двойного неравенства: 23 < A And A< 543

(если использовать Or вместо And, то вычисление также будет некорректно).

Составим логическое выражение для набора условий:

Вначале вычисляется выражение в скобках ( И <= Y And ^<=

q) — True, далее слева направо вычисляются Л+ 2 >= Y And д + В > С

False, далее

д*Х + B*Y = D And ( // <= Y And Y <= Q) -

False, последней операция Or. которая лает результат — False.

3.3.3. Символьное выражение

В Visual Basic определена одна операция с символьными данными - конкатенация

(сцепление), позволяющая объединять несколько строк в одну. Знак операции — “+”

или “&”.

Операндами символьного выражения могут быть:

  • символьная константа;
  • символьная переменная:
  • элемент символьного массива (string);

  • обращение к

    процедуре-функции, возвращающей символьное значение (см. ниже);

  • обращение к стандартной функции, возвращающей символьное значение (см.

    ниже).

Пример:

NameS = “Иван”

SurName$ = “Иванов”

. Narne$ + SurNameS дает результат “ИванИванов” Следует обратить внимание

(см. Пример), что необходимые пробелы нужно расставлять самостоятельно.

Visual Basic их не вставляет.

3.4. СТАНДАРТНЫЕ ФУНКЦИИ

В Visual Basic имеется широкий набор встроенных (стандартных) функций,

облегчающий написание программ. Имеются математические функции, для обработки

строк, для работы с временем и датами, для финансовых расчетов.

Встроенные функции различаются тем, что некоторые воз-вращрют вычисленное

значение, другие не возвращают. Обращения к функциям, которые возвращают

вычисленное значение, является операндом выражения (в рассмотренном выше

выражении

A(I,J+1) * (Cos(B+3.5) + 2 * К 3) + (Р - 3.25) операнд Cos(B+3.5)

является обращением к встроенной функции вычисления косинуса угла).

Обращение к встроенной функции, возвращающей значение того или иного типа,

должно соответствовать выражению, в кото-

ром к ней обращаются. Например, и арифметическом выражении можно обращаться к

функциям, возвращающим значения арифметических типов, в символьном —

символьного типа.

Обращения к функциям, которые не возвращают вычисленное значение, являются

отдельными операторами программы. Например, запись отдельного оператора

  • Веер является обращением к встроенной функции подачи звукового

    сигнала (в момент выполнения этого оператора компьютер выдает звуковой

    сигнал).

Для обращения к некоторым встроенным функциям нужно задавать значение аргумента

(например, Sin(X+2), где Х+2 выражение, определяющее значение

аргумента). Для других встроенных функций аргумент задавать не нужно (например.

Now). Примерами математических функций являются:

  • Atn — возвращает арктангенс;
  • Sin — возвращает синус;
  • Cos — возвращает косинус;

  • Tan - возвращает тангенс;
  • Ехр — возвращает е^х;

  • Log — возвращает натуральный

    логарифм;

  • Sqr — возвращает квадратный корень;
  • Rnd —

    возвращает случайное число;

  • Sgn — возвращает знак числа:
  • Fix — возвращает округленное число. Примерами строковых функций являются:

  • StrComp — сравнивает две строки;

  • Lease - преобразовывает

    строку в нижний регистр;

  • Ucase - преобразовывает строку в

    верхний регистр;

  • Spase — создает строку пробелов;

• • String — создает строку символов;

  • Len — определяет длину строки;
  • Instr — ищет

    подстроку;

  • Right — выделяет правую часть строки;
  • Left

    — выделяет левую часть строки;

  • Asc — возвращает ASCII код

    символа;

  • Сиг — возвращает символ по ASCII коду;
  • Str —

    преобразовывает число в строку;

  • Val — преобразовывает

    строку в число. Примерами функций даты и времени являются:

  • Date —

    устанавливает и возвращает текущую дату;

  • Time —

    устанавливает и возвращает текущее время;

  • DateSerial —

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

    год);

  • Day — преобразовывает последовательную дату в день

    месяца;

  • Month — преобразовывает последовательную дату в месяц

    года;

  • Year — преобразовывает последовательную дату в год. Полные

    сведения о встроенных функциях и правилах их применения можно найти в

    справочной системе Visual Basic.

3.5. ОПЕРАТОРЫ

. Программа на Visual Basic состоит из процедур (любая программа состоит хотя

бы из одной процедуры). Процедуры состоят из операторов.

Оператором (Statement) является синтаксически полное описание конкретной

команды (аналог предложения на русском или другом языке), которая выражает

одно действие или определение.

Одному оператору соответствует одна строка программы. Однако можно

использовать разделительный знак двоеточие (:), чтобы поместить больше чем

один оператор в строке программы.

Операторы программы выполняются последовательно сверху вниз (слева направо

для операторов на одной строке), если другие операторы (перехода, управления,

обращения к функциям' или процедурам, см ниже) не вызывают изменения

последовательности их выполнения.

Строки программы могут, быть обозначены метками (Linelabel) или номерами

(Linenumber).

Метка (Label) обозначает следующую строку программы. Метка может включать не

более 40 символов (первый обязательно буква) и заканчивается двоеточием(:),

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

если ей не предшествует никакой символ.

Номер строки (Lilienumber) обозначает следующую строку программы. Номер строки

может включать не более 40 десятичных цифр и не заканчивается двоеточием.

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

никакой символ. В рамках одной процедуры номера строк не могут повторяться.

Пример:

Routine: ' метка Num = Num / 2 ' оператор, помеченный меткой Routine:

123 ' Номер строки

Msgbox “Half of your number is “ & Num ' оператор с номером 123

Программу легче читать и отлаживать, если операторы программы снабжены

комментариями. Комментарии начинаются с апострофа ('), за которым можно

размещать любые замечания в тексте программы. Если комментарии располагается на

нескольких строках, то каждую строку нужно начинать с апострофа.

3.5.1. Оператор перехода

Оператор перехода имеет вид GoTo метка

и вызывает переход к выполнению оператора, с указанной меткой или номером

строки. ,

Пример:

GoTo 123 'после этого оператора будет выполняться оператор Msgbox ...

Num = Num / 2

123 ' Номер строки

Msgbox “Половина введенного числа равна “ & Num

Следует отметить, что использование оператора перехода в программах является

признаком низкой квалификации программиста и его желательно избегать.

Другой оператор перехода позволяет перейти к выполнению выделенной группы

операторов (так называемая внутренняя процедура). Синтаксис его использования

следующий:

GoSub { метка \ номер строки }

{метка : \ номер строки } Return

этот оператор вызывает переход к выполнению группы операторов, начало коюрои

указано меткой или номером строки. Последний оператор группы является

оператор Return (Return и GoSub — ключевые слова).

Пример:

  • Sub Form_Click ()

Dim Num ' Объявление переменной.

Num = Input Во\(“ Введите число.”)

GoSub Routine ' Переход к группе операторов (к

' внутренней процедуре).

GoTo Nextparl ' Обход группы операторов (внутренней

'процедуры). Routine: ' Начало группы операторов (внутренней

'процедуры). Num = Num / 2

Return ' Конец группы операторов (выход из внутренней ' процедуры).

Nextparl: ' Продолжение программы. Msgbox “Половина введенного числа

равна “ & Num End Sub

3.5.2. Оператор присваивания

Оператор присваивания (assignment statement) имеет следующий вид:

[Let] элемент массива = выражение

Переменной или элементу массива в левой части оператора присваивается

значение вычисленного выражения в левой части.

Примеры:

С = A(f,J+l) * (Cos(B+3.5) + 2 * К л 3) + (Р - 3.25)

StartTime = Now

1=1+1

Massiv_J(3,4) =В л 2 - 4*А*С + D

Student_1.Birthdate =DateSerial(1975,6,11) - используется встроенная

функция DateSerial для преобразования трех последовательных чисел (год,

месяц, число) в дату.

Р = Х+ 2 >=KAnd A + В > С Or А*Х + B*Y=D And (H<=Y And Y<=Q)

Sesia( Current). Name Exam( 2)= “Физика “

При использовании оператора присваивания следует соблюдать следующие правила:

Если в левой части оператора используется переменная или элемент массива

символьного типа (String), то выражение в правой части должно быть тоже

символьное; Если в левой и правой частях оператора используются

арифметические данные (Integer. Long, Single, Double, Currency^ но разных

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

присвоения значения вещественной константы 2.5 переменной целого типа (I =

2.5) будет 2 (т.е. в ячейке памяти отведенной для переменной I будет

храниться значение 2).

Переменной или элементу массива типа Variant в левой части может

соответствовать любой тип выражения в правой части (в ячейке памяти для

хранения данных типа Variant сохраняется не только значение, но и его тип).

Однако такого присвоения желательно избегать.

Опция Let в операторе используется для присвоения значения одного данного

пользовательского типа другому, при условии что типы элементов обоих

пользовательских данных совпадают.

3.5.3. Условный оператор

Как правило, алгоритмы обработки информации и реализующие их программы

содержат проверки каких-либо условии, от которых зависит последующее

действие. Для этого предназначен условный оператор, который имеет вид

If логическое выражение Then then-последователпость [Else else

-последовательность} или

If логическое выражение Then

[блок операторов — 1} [Elself логическое выражение Then

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

[блок операторов — п] ] End If где If, Then, Elself, Else, End If

ключевые слова.

Во второй синтаксической конструкции If и End If являются как бы

открывающей и закрывающей скобкой группы операторов, образующих структурный

логический оператор.

Then-последователность и else-последовательность имеют вид

{операторы \ [GoTo] номер строки \ GoTo метка } операторы

последовательность расположенных на одной строке операторов, разделенных

двоеточием.

Пример:

If А > 10 Then A = А + I : В = В + А : С = С + В: GoTo

Vsiavka

If Name = “Иван” Then GoTo 555

If Name = “Иван “ Then 555 (эквивалентно предыдущему оператору)

блок операторов 1, блок операторов 2, ... блок операторов п _

последовательность выполняемых операторов.

Первая синтаксическая конструкция условного оператора обеспечивает

альтернативное выполнение then-последователности или else-последовательности в

зависимости от значения логического выражения (принимает значение True или

False ) If True Then 'эти операторы Else 'эти операторы

выполняются не выполняются 'следующий оператор . If False Then

'эти операторы Else 'эти операторы

не выполняются выполняются ' следующий оператор

Вторая синтаксическая конструкция условного оператора обеспечивает

альтернативное выполнение блоков операторов (блок операторов — 1, блок

операторов — 2,... блок операторов — п) в зависимости от значений логических

выражений (принимает значение True или False ) If True Then

'эти операторы блока выполняются Else эти операторы блока не выполняются End

If 'следующий оператор If False Then

'эти операторы блока не выполняются Else 'эти операторы блока

выполняются End If • 'следующий оператор Ключевое слово Elself позволяет

объединить функции Else и следующего вложенного If. Примеры показывают

эквивалентность, с точки зрения реализуемого алгоритма, двух фрагментов

программ

Во втором примере отсутствует повторное вложение If — End If.

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

Программа должна определять количество десятичных цифр в вводимом числе от 0

до 1000. Запуск программы осуществляется щелчком мыши по форме (операторы

программы помещаются в процедуру обработки события Foim_Click):

Private Sub Form_Click()

Dim X, Y 'объявление переменных . X = InputBox(“Введите число больше 0 и

меньше 1000.”)

If X < 10 Then

Y = 1 • 1 цифра. Elself X < 100 Thpn

Y = 2 ' 2 цифры. Else

Y = 3 ' 3 цифры. End If

If Y > 1 Then Unit = “ цифры.” Else Unit = “ цифру.”

MsgBox “Введенное число имеет “ & Y & Unit End Sub

Рис 33

После запуска программы появляется пустая форма Щелчок мыши на форме вызывает

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

щелчком мыши по кнопке или клавишей “Enter” (рис. 3 3). После ввода

появляется окно с результатом (рис. 3 4)

3.5.4. Управляющая структура Select Case

Структура Select Case применяется, когда одна величина участвует в нескольких

логических сравнениях и определяет, какой блок операторов будет выполняться

Алгоритм такого множественного сравнения можно запрограммировать и с

использованием логического структурного оператора, но применение структура

Select Case эффективнее

Наиболее часто структура Select Case применяется в тех случаях, когда

сравниваемая величина является целым числом (например, для выбора блоков

операторов программы в зависимости от выбранной альтернативы диалога) *

Рис 34

Select Case, Case, Case Else, End Select ключевые слова

(Select Case и End Select соответственно оператор начала и конца структуры);

проверяемое выражение — арифметическое или символьное выражение;

список выражении I, список выражении 2...- может иметь

одну из следующих форм:

выражение

выражение То выражение

Is знак отношения выражение

Пример:

Select Case Value

Case /, 3

Блок операторов 1

Case 5 То 10

Блок операторов 2

Case 12 Is >= 15

Блок операторов 3

Case Else

Блок операторов 4 End Select

В данном примере проверяемым выражением является значение Value. Если

значение Value 1 или 3 (Case /, 3), выполняется Блок

операторов I. Если значение Value от 5 до 10 (Case 5 То

10), выполняется Блок операторов 2. Если значение Value

равно 12 или больше 15 (Case 12 Is >= 15), выполняется

Блок операторов 3. Если значение Value не равно ни одному из

указанных значений

^и не принадлежит ни одному из указанных диапазонов, выполняется Блок

операторов 4.

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

Программа должна определять, является ли вводимый символ большой или малой

буквой латинского алфавита или четной или нечетной десятичной цифрой.

Проверка символа осуществляется по значению ASClI-кода вводимого символа.

Значение ASClI-кода вводимого символа является проверяемым выражением

структуры Select Case. В зависимости от значения кода выдается то или иное

сообщение (соответствующие блоки Case-операторов. Запуск программы

осуществляется щелчком мыши по форме (операторы программы помещаются в

процедуру обработки события Form_Click). Для ввода символа и вывода сообщения

используются встроенные функции InpupBox и MseBox.

Рис 3 5

В программе используются всгроенные функции Len (определяет длину строки),

Cdbl (преобразует тип исходного выражения в тип Double), Is Numeric

(проверяет, является ли символ числом), Asc (преобразует символ и ASCll-код),

Спг (преобразует ASCII-код в строку).

После запуска программы появляется пустая форма. Щелчок мыши на форме

вызывает появление окна ввода, в котором можно набрать вводимый символ и

ввести его щелчком мыши по кнопке или клавишей “Enter” (рис. 3.5). После

ввода появляется окно, выводящее характеристику введенного символа

Ввод других символов будет вызывать вывод соответствующих сообщений.

Рис 3 б

3.5.5. Циклы

В алгоритмах обработки информации и реализующих их программах широко

используются циклы — повторяющиеся одинаковые вычисления.

Для реализации такого рода программ в Visual Basic специальные средства —

операторы цикла.

3.5.5.1. Оператор цикла For-Next

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

For параметр цикла = начшьное значение То конечное значение [Step

шаг}

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

[Exit For] [блок операторов^ Next {параметр цик-га {,параметр цик-ш ][, ...]]

где For, To, Exit For, Step, Next ключевые слова. Пара For-Next

определяют начало и конец оператора цикла. Операторы между ними (б->ок

операторов) повторяются столько раз, сколько определено. задаваемыми

начальным значением, конечным значением и

шагом.

Exit For может находится в любом месте между For - Next и используется

для прекращения выполнения цикла (управление передается на оператор, который

следует сразу за Next) и применяется, например, в логическом операторе, который

проверяет альтернативное условие прерывания цикла (например, ошибку).

Параметр цчюш - арифметическая переменная, не может быть

элементом массива или элементом пользовательского типа

данных.

Начальное значение, конечное значение и шаг определяют

значения, которые принимает параметр цикла при работе программы - на первом

шаге параметр цикла принимает начальное значение, после выполнения операторов,

входящих в цикл (блок операторов), параметр цикла изменяется на величину шага

(выполняется оператор Next), опять выполняются операторы, входящие в цикл,

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

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

значения.

После того, как параметр цикла примет все свои значения и соответственное

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

Next оператор.

. Операторы, входящие в цикла будут выполняться если:

шаг цикла >= 0 и конечное значение >= начальное значение шаг цикла <

0 и конечное значение <= начальное значение. Пример.

Рассматривается фрагмент программы для нахождения максимального значения

элементов одномерного массива из 15 элементов.

Dim В (1 То J5), МахВ As Single 'оператор объявления массива и переменной

МахВ = В(1) 'присвоение начального значения МахВ For /= /To 15 'начало цикла

If B(I) > МахВ Then МахВ = В(1) 'этот оператор выполнится 15 раз

Next / 'конец цикла MsgBox Str(MaxB) 'для вывода результата используется

'встроенная функция MsgBox, в которой 'используется встроенная функция Str

'для преобразования числового значения в строку

При использовании оператора цикла необходимо соблюдать правила:

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 [ Until логическое выражение]

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

[Exit Do]

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

Loop

или

Do

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

[Exit Do]

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

Loop [While логическое выражение ] где Do, While, Until,

Exit Do, Loop ключевые слова. Пара Do-Loop определяют начало и конец оператора

цикла;

While определяет выполнение операторов, входящих в цикл, пока стоящее

следом логическое выражение принимает значение “True”;

Until определяет выполнение операторов, входящих в цикл, до тех пор пока

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

используется для прекращения выполнения цикла (управление передается на

оператор, который следует сразу за Loop) и применяется, например, и логическом

операторе, который проверяет альтернативное условие прерывания цикла (например,

ошибку).

Запись условия “ 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, 2, 3, 4, 5, 6, 7, 8


© 2010 Собрание рефератов