Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







Саратовский государственный технический университет





Саратовский государственный технический университет

технологический институт

 

Ю.В. Клинаев

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

В среде программирования VBA

 

Учебное пособие по дисциплинам
«Компьютерное моделирование»
и «Моделирование физических систем»

для студентов специальности «Программное обеспечение вычислительной техники и автоматизированных систем»

 

 

Саратов 2002

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

Если используется MsgBox () (со скобками), то значение функции присваивается целой переменной. Возвращаемое значение i=1,….,7.

I определяется тем, какая из кнопок Окна сообщения нажата:

I кнопка

1 ОК

2 Отмена

3 Стоп

4 Повтор

5 Пропустить

6 Да

Нет

 

Типы данных для переменных VBA.

Integer (2 байта) – 32768 до 32767 Целое Double (8 байт)

Byte (1 байт) Целое без знака 0-255

Long (4 байта) Длинное целое – 2147483648 до 2147483647

Single (4 байта) Числа с плавающей точкой обычной точности

Отрицательные: - 3,402823Е38 до – 1,401298Е-45

Положительные и 0: 1,401298Е-45 до 3,402823Е38

String (1 байт на символ) – Строки символов от 0 до 2 млрд

Variant (16 байт + 1 байт на каждый символ, если значение типа Variant содержат строку) – для любых типов данных, кроме типа, определенного пользователем.

Описание переменных.

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

Dim Var1 As Integer

Dim – ключевое слово, указывающее на описание переменной (сокращенное от Dimension).

Var1 – имя переменной.

As – ключевое слово, используемое в качестве разделителя переменной и типа данных.

Integer – ключевое слово, представляющее собой название типа.

Dim Var2 As Double

Dim Var3 As Integer

 

Функции (числовые).

Abs (x), Sgn (x), Sqr (x), Log (x), Ln (x), Rnd (x), Sin (x), Tan (x), Cos (x), Exp (x), Atn (x).

Преобразование данных.

CSng (x), Cint (x)………..x As String.

 

Структура программы.

Sub Progr_Name ()

Dim

{Тело}

End Sub`Pror­_Name

 

Ввод данных.

X = InputBox («введите данные (числовые)»)

D = CSng (x)

 

Вывод данных.

I = MsgBox (S, 1, «Площадь треугольника»), где S –имя переменной, 1 – индикатор вида окна вывода.

Индикатор = 0 OK

1 ОК Отмена

2 Стоп Повтор Пропустить

3 Да Нет Отмена

4 Да Нет

5 Повтор Отмена

6 ОК

 

(переменная) i = MsgBox ………

 

Значение i указывает кнопку, которая была нажата:

 

I = 1 ОК

2 Отмена

3 Стоп

4 Повторить

5 Пропускать

6 Да

Нет

 

 

Полная форма (синтаксис) функции InputBox ().

 

InputBox (prompt [,title][,default][,xpos] – [,ypos][,helpfile,contex])

1. prompt – строка-сообщение в диалоговом окне. Если строк много, то для разделения строк можно использовать ВК – Chr (13), ПС – Chr (10) или ВК&ПС (Chr(13)&Chr(10))/

2. title – строка-отображение в строке заголовка диалогового окна. Если title отсутствует, то в строку заголовка помещается имя приложения.

3. Default – строка-отображение в поле ввода как используемое по умолчанию. Если его нет, то поле пустое.

4. Xpos – числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана. Если xpos нет, то диалоговое окно выравнивается по центру по горизонтали

5. Ypos – числовое выражение, задающее расстояние между верхней границей диалогового окна и верхним краем экрана. Если ypos нет, то диалоговое окно помещается по вертикали примерно на 1/3 экрана.

6. Helpfile – строка, определяющая имя файла справки, содержащем справочные сведения о данном диалоговом окне. Если аргумент указан, необходимо наличие аргумента context.

7. Context – числовое выражение, определяющее номер соотвествующего раздела справочной системы. Если этот аргумент указан, то необходимо наличие аргумента helpfile.

MsgBox (prompt [,buttons][,title][,helpfile,context])

1. prompt – строка, отображаемая как сообщение в диалоговом окне.

2. Buttons – числовое выражение (опция), представляющее сумму значений, которое указывает число и тип отображаемых кнопок, тип используемого значка, основную кнопку и модальность окна сообщения. Значение по умолчанию равно 0.

Значение констант и тип кнопок:

Константа Значение Отображение кнопки

VbOKOnly 0

VbOKCancel 1

VbAbortRetryIgnore 2

VbYesNoCancel 3

VbYesNo 4

VbRetryCancel 5

3. title – строка, отображаемая в строке заголовка.Если его нет, то в строку заголовка помещается имя приложения.

4. Helpfile – строковое выражение, определяющее имя файла справки о данном дилоговом окне.

5. Context – комментарий.

Buttons

Константа Значение Значок сообщения

VbCritical 16

VbQuestion 32

VbExclamation 48

VbInformation 64

Значение аргумента buttons, определяющее основную кнопку в диалоговом окне.

Константа Значение Номер основной кнопки

VbDefaultButton1 0 1

VbDefaultButton2 256 2

VbDefaultButton3 512 3

VbDefaultButton4 768 4

Вместо возвращаемого значения – «какая кнопка нажата», лучше использовать константы VBA:

Константа Значение Нажатая кнопка

VbOK 1 OK

VbCancel 2 Отмена (Cancel)

VbAbort 3 Прервать (Abort)

VbRetry 4 Повторить (Retry)

VbIgnore 5 Пропустить (Ignore)

VbYes 6 Да (Yes)

VbNo 7 Нет (No)

 

MsgBox «Ошибка в вычислениях», - vbInformation, «Извлечение корня из отрицательного числа».

 

Элементы управления, их свойства и методы.

 

Поле: TextBox создается с помощью кнопки Поле. Используется для ввода текста, который потом используется в программе, или для вывода результатов расчетов программы. Текст, введенный в поле, обычно в программе преобразуется либо в числа, либо в формулы.

Основные свойства: TextBox1.Свойство.

Text – возвращает текст, содержащийся в поле.

Visible – допустимые значения True – поле отображается во время выполнения программы, False – в противном случае.

Enabled – True – пользователь непосредственно может вносить изменения в содержание поля – поле доступно. False – в противном случае.

Multiline – True – многострочный режим ввода текста. False – однострочный.

WordWrap – True – режим автоматического переноса. False – в противном случае.

AutoSize – True – устанавливается режим автоматического изменения размера поля так, чтобы весь вводимый текст помещался в нем. False – фиксированный размер поля.

Кнопка.

Кнопка CommandButton создается с помощью кнопки Кнопка. Используется для инициирования выполнения некоторых действий, вызываемых нажатием кнопки; например, запуск программы или остановка ее выполнения, печать результатов и т.д.

Caption – надпись.

Cancel – True – устанавливаются отменяющие функции для кнопки, т.е. нажатие клавиши <Esc> приводит к тем же результатам, что и нажатие кнопки.

False – в противном случае.

Visible – True – кнопка отображается во время выполнения программы, False – нет.

Enabled – True – запрещено нажатие кнопки пользователем, False – в противном случае.

Accelerator – назначает клавишу, при нажатии на которую одновременно с клавишей <Alt> происходит запуск действий, связанных с кнопкой:

CommandButton1.Accelerator = “C”.

Picture – внедряет на поверхность кнопки картинку.

CommandButton1:Picture= _

LoadPicture(“C:\Мои_документы\Круг.bmp”)

Функция LoadPicture (полное_имя_файла) считывает графическое изображение, где выражение в склбках – аргумент, указывающий полное имя файла, т.е. его спецификацию.

Default – задает кнопку по умолчанию, т.е. устанавливает ту кнопку, для которой действия, связанные с ней, будут выполняться при касании клавиши «Enter».

Переключатель.

Элемент управления OptionButton создается с помощью Переключатель

Свойства.

Value – возвращает True, если переключатель выбран. False – в противном случае.

Enabled – допустимое значение True – пользователь может выбрать переключатель (доступен). False – в противном случае.

Visible – True – переключатель отображается во время выполнения программы, False – в противном случае.

Capture – надпись, отображаемая рядом с переключателем.

Пример: Игра «Орел-Решка».

Выбирая один из двух переключателей, игрок загадывает один из вариантов: орел (1 для компьютера) или решка (0 для компьютера). Не зная о выборе игрока, компьютер синтезирует с равной вероятностью либо 0, либо 1, что и моделирует бросание монеты. Если игрок указал правильную сторону монеты, подброшенную компьютером, то он выиграл. В противном случае выигрывает компьютер. Компьютер информирует о результате игры.

При проигрыше:

С помощью UserForm1 создадим диалоговое окно, а в модуле UserForm1 введем следующую процедуру, синтезирующую отклик на нажатие кнопки.

Бросание монеты:

Private Sub CommandButton1_Click () – генерация с равной вероятностью либо 0 (решка), либо 1 (орел), т.е. моделирование бросания монеты.

Randomize

Монеты=Int(2*Rnd)

Сравнение результата бросания монеты компьютером с ситуацией, если игрок заказал «Орел».

If OptionButton1.Value = True Then

If Монета = 0 Then MsgBox «Не везет Займись изучением …»

If Монета = 1 Then MsgBox «Везунчик1 Ты выиграл1»

End if

Сравнение результата бросания компьютером с ситуацией, если игрок загадал «Решка».

If OptionButton2.Value = True Then

If Монета=1 Then MsgBox «Не везет….»

If Монета=0 Then MsgBox «Везунчик1 Выиграл1»

End if

End Sub

 

Общий метод:

SetFocus – устанавливает фокус на вызвавшем этот метод элементе управления.

Функции проверки типов:

IsArray (переменная) – является ли переменная массивом.

IsData () – является ли переменная датой.

IsEmpty () – была ли переменная описана инструкцией Dim.

IsError () – является ли переменная кодом ошибок.

IsNull () – является ли переменная пустым значением (Null).

IsNumeric () – является ли переменная числовым значением.

IsObject () – является ли переменная объектом.

 

Пример: программа ”Калькулятор - деление”

Калькулятор.

Private Sub CommandButton1_Click()

Dim Числитель As Double

Dim Знаменатель As Double

Dim Результат As Double

Rem проверка первого поля.

If IsNumeric (TextBox1.Text) = False Then

MsgBox «Ошибка в числителе», _

VbInformation, «Деление»

TextBox1.SetFocus

Exit Sub

End if.

Rem проверка второго поля.

If IsNumeric (TextBox2.Text) = False Then

MsgBox «Ошибка в знаменателе», _

VbInformation, «Деление»

TextBox2.SetFocus

Exit Sub

End if.

If CDbl (TextBox2.Text) = 0 Then

MsgBox «Знаменатель не может быть нулем», _

VbInformation, «Деление»

TextBox2.SetFocus

Exit Sub

End if.

Числитель=CDbl(TextBox1.Text)

Знаменатель=CDbl (TextBox2.Text)

Результат=Числитель/Знаменатель

TextBox3.Text=CStr(результат)

End Sub.

Перехват и обработка ошибок.

Из диалогового окна VBA видно, что каждая ошибка имеет свой код. Коды наиболее часто встречающихся ошибок:

Код Сообщение

5 Приложение не запущено

6 Переполнение

7 Не хватает памяти

9 Индекс вышел за пределы допустимого диапазона

11 Деление на ноль

13 Несоответствие типа

52 Неправильное имя файла или идентификатора

56 Ошибка ввода-вывода

71 Диск не готов

61 Переполнение диска

72 Повреждение поверхности диска

368 Истек срок действия данного файла. Программе требуется файл более новой версии.

482 Ошибка принтера.

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

Инструкция

On Error Происходит перехват ошибки. Устанавливает, что должна делать программа в случае появления ошибки.

 

 

Подпрограмма обработки ошибки:

 

Синтаксис 1: On Error GoTo строка – активизирует подпрограмму обработки ошибок, начало которой определяется аргументом. Строка – метка или номер строки.

Синтаксис 2: On Error Resume Next – указывает, что при возникновении ошибки происходит передача управления на инструкцию, непосредственно следующую за инструкцией, где возникла ошибка.

Синтаксис 3: On Error GoTo 0 – отключает любой активизированный обработчик ошибок в текущей процедуре.

Инструкция Resume – обеспечивает процедуре возможность продолжить работу после обработки ошибок.

Синтаксис 1: Resume – после обработки ошибки управление передается той инструкции, в которой произошла ошибка.

Синтаксис 2: Resume строка – после обработки ошибки управление передается инструкции с номером строка (или метка строка).

Синтаксис 3: Resume Next – передается управление инструкции, следующей за инструкцией, в которой произошла ошибка.

Инструкция останавливает выполнение процедуры.

Exit Exit Sub

Exit Function

Exit Property

Подпрограмма обработки ошибки обычно включает объект Err, который содержит информацию об ошибках выполнения.

Некоторые свойства и методы объекта Err:

Свойства: Number – возвращает код ошибки.

Description – возвращает строковое выражение, содержащее текст сообщения об ошибке.

Метод Clear – очищает все значения свойств Err.

Вернемся к калькулятору: пусть в поле знаменатель не 0, а 1-40 – появится ошибка переполнения. В обработке ошибки предусмотрим два отклика: 1. Пользователь информируется программой в случае появления ошибки переполнения; знаменателю и числителю присваивается значение 1 и с этим значением производится вычисление. 2. При появлении ошибки, отличной от ошибки переполнения, выполнение программы прерывается с информированием пользователя об ошибке.

Private Sub CommandButton1_Click()

Dim Числитель As Double

Dim Знаменатель As Double

Dim Результат As Double

Передача управления на обработчик ошибок, помеченный меткой Обработчик.

On Error GoTo Обработка

Проверка, является ли числитель числом.

If IsNumeric (TextBox1.Text) = False Then

MsgBox «Ошибка в числителе», _ VbInformation, «Деление»

TextBox1.SetFocus

Exit Sub

End if.

Проверка, является ли знаменатель числом.

If IsNumeric (TextBox2.Text) = False Then

MsgBox «Ошибка в знаменателе», _ VbInformation, «Деление»

TextBox2.SetFocus

Exit Sub

End if.

Проверка, является ли знаменатель нулем.

If CDbl (TextBox2.Text) = 0 Then

MsgBox «Знаменатель не может быть нулем», _ VbInformation, «Деление»

TextBox2.SetFocus

Exit Sub

End if.

Вычисление

Числитель = CDbl (TextBox1.Text)

Знаменатель = CDbl (TextBox2.Text)

Результат = Числитель/Знаменатель

TextBox3.Text = Cstr (Результат).

Выход из процедуры в случае успешного завершения

Exit Sub

Rem Обработчик ошибок

Обработка:

Select Case Err.Number

Обработка ошибки переполнения

Case Is = 6

MsgBox «Произошла ошибка переполнения», _ VbInformation, «Деление»

TextBox1.Text = 1

TextBox2.Text = 1

Знаменатель = 1

Resume

Обработка любой другой ошибки

Case Else MsgBox «Произошла ошибка: &Err.Description& _VbInformation, «Деление»

Exit Sub

End Select

End Sub

 

Программа «Орел-Решка»

 

Переменные уровня модуля:

Dim Банк As Long

Dim Партия As Long

Dim НомерМаксимум As Long

Dim НомерМинимум As Long

Dim Максимум As Long

Dim Минимум As Long

Private Sub CommandButton1_Click()

Rem Определяет номер очередной партии

Партия=Партия+1

Rem Запрещается пользователем изменение значения в поле Банк в течение игры.

TextBox1.Enabled=False

Rem Проверяем, являются ли вводимые в поле Банк данные числом.

If IsNumeric (TextBox1.Text)=False Then

MsgBox «Введите ставку»,VbExclamation, «Орел и решка»

TextBox1.Enabled=True

TextBox1.SetFocus

Exit Sub

End if

Банк=CLng (TextBox1.Text)

Rem Проверяем, не превышает ли Банк максимально допустимую величину.

If Банк > 10000 Or Банк < 0 Then

MsgBox «Ставка должна быть в диапазоне [1,10000]”, _ VbExclamation, «Орел и решка»

TextBox1.Enabled=True

TextBox1.SetFocus

Exit Sub

End if

Бросание монеты

Randomize

Монета=Int (2*Rnd)

Сравнение результата бросания монеты компьютером с ситуацией, когда игрок загадал «орел».

If OptionButton1.Value=True Then

If Монета=0 Then

Банк=Банк-1

TextBox1.Text=CStr(Банк)

End if

If Монета=1 Then

Банк=Банк+1

TextBox1.Text=CStr(Банк)

End if

Сравнение результата бросания монеты компьютером с ситуацией, когда игрок загадал «решка».

If OptionButton2.Value=True Then

If Монета=1 Then

Банк=Банк-1

TextBox1.Text=CStr(Банк)

End if

If Монета=0 Then

Банк=Банк+1

TextBox1.Text=CStr(Банк)

End if

End if

TextBox2.Text=CStr(Партия)

Определяется, превышает ли текущее значение поля Банк максимальную величину

If Банк > Максимум Then

Максимум=Банк

НомерМаксимум=Партия

TextBox3.Text=CStr(Максимум)

TextBox5.Text=CStr(НомерМаксимум)

End if

Определяется, превышает ли минимальное значение поля Банк текущее значение.

If Банк < Минимум Then

Минимум=Банк

НомерМинимум=Партия

TextBox4.Text=CStr(Минимум)

TextBox6.Text=CStr(НомерМинимум)

End if

End Sub

Private Sub CommandButton2_Click()

Процедура закрытия диалогового окна

UserForm1.Hide

End Sub

 

Private Sub UserForm_Initialize()

Процедура инициализации диалогового окна

Максимум=0

Минимум=10000

Партия=0

Поле Банк доступно для ввода информации пользователем при инициализации диалогового окна

TextBox1.Enabled=True

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

TextBox2.Enabled=False

TextBox3.Enabled=False

TextBox4.Enablrd=False

TextBox5.Enabled=False

TextBox6.Enabled=False

При инициализации диалогового окна выбран переключатель Open

OptionButton1.Value=True

End Sub

Назначение процедур UserForm Initialize:

1. Активизирует диалоговое окно.

2. Поле Банк доступно для ввода информации пользователем при инициализации диалогового окна.

3. В поля Партия, Максимум, Минимум, Игра разрешен только программный ввод данных.

4. При инициализации диалогового окна выбран переключатель Орел.

Нажатие кнопки «Бросание монеты» запускает на выполнение процедуру CommandButton1_Click:

5. В переменной Партия учитывается номер очередной партии.

6. В поле Банк разрешен только программный ввод данных. Перед началом игры первой партии проверяется, является ли вводимое данное числом в диапазоне от1 до 10000. Если «нет», то предлагается данные откорректировать. В поле Банк снова разрешен ввод данных. После чего происходит выход из процедуры для повтора ввода данных.

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

Нажатие кнопки Отмена запускает на выполнение процедуру CommandButton2_Click:

8. Закрывает диалоговое окно.

Другие элементы управления

Рамка (является контейнером)

Элемент управления Frame. Используется для визуальной группировки элементов управления. Основным свойством является Capture, отображающее надпись рамки

 

Флажок и выключатель.

Элемент управления CheckBox –Флажок. Предоставляет пользователю возможность выбора. Обычно имеет два состояния: установленное и сброшенное, но может настраиваться на выбор из трех альтернатив. Флажок имеет те же свойства Value, Enabled, Visible, Capture, что и переключатель.

Свойство TripleState: False – выбор 2-х False и True; True – выбор 3-х False, True, Null.

Элемент ToggleButton – выключатель. Представляет те же возможности, что и флажок.

Private Sub UserForm_Initialize ()

Выключатель

ToggleButton1.Value=True

ToggleButton2.Value=False

ToggleButton3.TripleState=True

ToggleButton3.Value=Null

Флажок

CheckBox1.Value=True

CheckBox2.Value=False

CheckBox3.TripleState=True

CheckBox3.Value=Null

End Sub

 

Список.

ListBox – применяется для хранения списка значений. Из списка выбирается одно или несколько значений.

Свойства:

ListIndex – возвращает номер текущего элемента списка, нумерация начинается с нуля.

ListCount – число элементов в списке.

TopIndex – элемент списка с наибольшим номером.

ColumnCount – устанавливает число столбцов в списке.

TextColumn – устанавливает столбец в списке, элемент которого возвращается свойством Text.

Enable – True – запрещен выбор значений из списка, False – в противном случае.

Text – возвращает выбранный с списке элемент.

List – возвращает элемент списка, стоящий на пересечении строки и столбца (List(row,column) – синтаксис).

MultiSelect – устанавливает способ выбора элемента списка.

Значения: fmMiltiSelectSingle – выбор только одного элемента

FmMultiSelectMulti – разрешен выбор нескольких элементов посредством либо щелчка, либо нажатием «Пробел».

FmMultiSelectExtended – разрешено использование «Shift» при выборе ряда последовательностей элементов списка.

ListStyle – значение fmListStylePlain – выбранный элемент из списка выделяется цветом.

FmListStyleOption – перед каждым элементом в списке располагается флажок и выбор элемента из списка соответствует установке флажка.

MatchEntry – выводит 1-й подходящий элемент из списка при наборе его имени на клавиатуре.

Значения: fmMatchEntryNone – режим вывода подходящего элемента в списке отключен.

FmMatchEntryLetter – выводит подходящий элемент по набранной первой букве (желателен список, отсортированный по алфавиту).

FmMatchEntryComplete – выодит подходящий элемент по полному набранному имени.

Наиболее часто используемые методы элемента ListBox:

Clear – удаляет все элементы списка

RemoveItem – удаляет из списка элемент с указанным номером (RemoveItem(index)-стнтаксис).

AddItem – добавляет.

AddItem([item[,varIndex]])

Item – элемент (строковое выражение), добавляемый в список.

VarIndex – номер добавляемого элемента.

 

Заполнение списка.

Способы:

Поэлементно, если список состоит из одной колонки:

With ListBox1

.AddItem «Июнь»

.AddItem «Июль»

.AddItem «Август»

.LisrIndex=0

End With

Массивом, если список состоит из одной колонки:

With ListBox1

.List=Array («Июнь», «Июль», «Август»)

.ListIndex=1

End With

Из диапазона А1:В4, в который предварительно введены элементы списка. Результат выбора (индекс выбранной строки) вводится в ячейку С1:

With ListBox1

.ColumnCount=2 – устанавливает число столбцов

.RowSource=”A1:B4” – устанавливает диапазон, содержащий элементы списка.

ControlSource=”C1” – устанавливает ячейку, куда возвращаются элементы списка.

BoundColumn=0 – возвращает индекс выбранной строки

End With

Поэлементно, если список состоит из нескольких колонок, например двух:

With ListBox1

.ColumnCount=2

.AddItem «Июнь»

.List(0,1)=”Сессия”

.AddItem”Июль”

.List(1,1)=”Каникулы”

.AddItem “Август”

.List(2,1)=”Каникулы”

End With

Массивом, если список состоит из нескольких колонок, например двух:

Dim A(2,1) As String

A(0,0)=»Июнь»:A(0,1)=»Сессия»

А(1,0)=»Июль»:А(1,1)=»Каникулы»

А(2,0)=»Август»:А(2,1)=»Каникулы»

With ListBox1

.ColumnCount=2

.List=A

End With

Выбор нескольких элементов из списка.

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

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

With ListBox1

.List=Array(1,3,4,5,6,7,8,9)

.ListIndex=0

.MultiSelect=fmMultiSelectMulti

Среднее=0

N=0

For i=0 to.ListCount-1 if.Selected(i)=True then

N=n+1

Среднее=Среднее+.List(i)

End if

Next i

End With

Среднее=Среднее/n

 

Выбор одного из многих вариантов.

Select Case – выбор варианта

Select Case Выражение

Case ДиапазонЗначений1

ПоследовательностьОператоров1

Case ДиапазонЗначений2

ПоследовательностьОператоров2 …..

Select Case Выражение1 Case Значение1 Case Значение2…..Case Else

ПоследовательностьОператоровN

End Select

 

Выражение – любое арифметическое или иное выражение.

ДиапазонЗначений1, ДиапазонЗначений2,…. Одно из значений

Выражение, либо границы области значений.

 

Примеры, исчерпывающие ДиапазонЗначений.

ДиапазонЗначений – выражение после слова Case:

-1,1,3,5

6000 To 10000

Is > 20000

Is < > «Иванов»

-1,1,3,5,6000 To 10000, Is>20000

Что может входить в ДиапазонЗначений:

Одно из чисел –1,1,3,5

Любое число между 6000 и 10000

Любое число > 20000

Любая строка, отличная от «Иванов»

Любое число из первых трех приложений

To, Is – ключевые слова VBA.

Задача.

 

Написать программу, оценивающую знания по физике по следующей системе: за каждую решенную задачу (из пяти) начисляются баллы – за первые две задачи по 6 баллов, за 3-ю и 4-ю по девять баллов, за пятую – 12 баллов. Оценка зависит от суммы набранных баллов так, как показано в таблице:

 

 

БАЛЛЫ ОЦЕНКИ
  Менее 15 От 15 до 24 От 25 до 34 Не менее 35    

Экранная форма:

Созданы 5 одинаковых объектов – 5 Флажок (Контрольный индикатор) – CheckBox. Щелчок на каждом из них должен изменять значение его свойства Value:

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

1. Пяти переменным V1%, V2%, V3%, V4%, V5% присваивается значения свойства Value объекта CheckBox.

2. Вызывается процедура Summa, которая присваивает переменной S% сумму набранных баллов, по значению которой переменной m% присвоится значение оценки с помощью Case.

Sub Summa (V1%, V2%, V3%, V4%, V5%, S%, m%)

S=V1*6+V2*6+V3*9+V4*9+V5*12

Select Case S

Case Is < 15 m=2

Case 15 To 24 m=3

Case 25 To 34 m=4

Case Is >=35 m=5

Case Else m=0

End Select

End Sub

Код любой из 5 процедур:

Private Sub CheckBox _Click ()

V1%=CheckBox1.Value

V2%=CheckBox2.Value

V3%=CheckBox3.Value

V4%=CheckBox4.Value

V5%=CheckBox5.Value

Call Summa(V1%, V2%, V3%, V4%, V5%, S%, m%)

TextBox1.Text=CStr (S)

TextBox2.Text=CStr (m)

End Sub

Программа для работы со списком.

Задачи: 1) заполнить список

2) выбирать несколько элементов из списка

3) выполнять специфицированные операции над выбранными

элементами из списка.

Задание: разработать программу, позволяющую выбрать несколько чисел, выводимых в списке в диалоговом окне с названием Операции над элементами списка. В группе выбора Операция следует установить один из переключателей: Сумма, Произведение, Среднее, т.е. выбрать операцию над выбранными числами. Нажатие кнопки Вычислить должно приводить к выполнению операции и выводу результата в поле Результат. Предусмотрим дополнительный сервис приложения.

Событие:

UserForm_Initialize – 1) активизирует диалоговое окно; 2) запрещает ввод данных в поле Результат; 3) назначает клавише “Esc” функцию кнопки Отмена, а клавише “Enter” функцию Вычислить; 4) связывает с кнопками Вычислить и Отмена, а также с переключателями всплывающей подсказки.

CommandButton1_Click (кнопка Вычислить) – 1) определяет какой переключатель выбран. В зависимости от выбранного переключателя нажатие Вычислить производит действие над выбранными в списке числами.2) Найденное число выводится в поле Результат.

CommandButton2_Click (кнопка Отмена) – закрывает диалоговое окно.

Private Sub CommandButton1_Click ()

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

Dim i As Integer где i – вспомогательная переменная

Dim h As Integer где h – счетчик числа выбранных элементов

Dim Сумма As Double - сумма

Dim Произведение As Double - произведение

Dim Среднее As Double - среднее

Dim Результат As Double – записывается результат операции.

При выборе 1-го переключателя вычисляется сумма

If OptionButton1.Value=True Then

Сумма=0

With ListBox1 For i=0 To.ListCount-1

If.Selected(i)=True Then

Сумма=Сумма+.List(i)

End if

Next i

End With

Результат=Сумма

End if

При выборе 2-го переключателя вычисляется произведение

If OptionButton2.Value=True Then

Произведение=1

With ListBox1 For i=0 To.ListCount-1

If Selected(i)=True Then

Произведение=Произведение*List(i)

End if

Next i

End With

Результат=Произведение

End if

При выборе 3-го переключателя вычисляется среднее арифметическое

If OptionButton3.Value=True Then

Среднее=0 n=0

With ListBox1 For i=0 To.ListCount-1

If Selected(i)=True Then n=n+1

Среднее=Среднее+.List(i)

End if

Next i

End With

Результат=Среднее/n

End if

Результат выводим в поле Результат

TextBox1.Text=CStr(Format(Результат,”Fixed”))

End Sub ‘кнопка Вычислить

TextBox1.Enabled=False

Назначение клавише “Enter” функции кнопки Вычислить.

Задание текста всплывающей подсказки

With CommandButton1

.Default=True

.ControlTipText=’Нахождение результата”

End With

Назначение клавише “Esc” функции кнопки Отмена

Задание текста всплывающей подсказки

CommandButton2.Cancel=True

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

UserForm1.Caption=”Операции над элементами списка”

UserForm1.Show

End Sub

Private Sub CommandButton2_Click()

Процедура закрытия диалогового окна

UserForm1.Hide

End Sub

 

Private Sub UserForm_Initialize()

Процедура инициализации диалогового окна

Заполнение списка

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

With ListBox1

.List=Array(1,3,4,5,6,7,8,10)

.ListIndex=0

.MultiSelect=fmMultiSelectMulti

End With

Первоначальный выбор переключателя Сумма при инициализации диалогового окна

Задание текста всплывающих подсказок у переключателей

With OptionButton1

.Value=True

.ControlTipText=”Сумма выбранных элементов”

End With

OptionButton2.ControlTipText=”Произведение выбранных элементов”

OptionButton3.ControlTipText=”Среднее значение выбранных элементов”

Поле Результат не доступно для пользователя.

 

Элемент управления Image (рисунок)

Используется для отображения графических файлов в формате bmp, cur, ico, jpg, wmf. Основные свойства Image, используемые для управления выводом изображения:

AutoSize – True – рисунок автоматически изменяет размер для того,

Чтобы отобразить изображение целиком.

False – в противном случае.

Picture – задает отображаемый графический файл. Используется с

Функцией LoadPicture.

Image1.Picture=LoadPicture(“C:\my_doc\Круг.втр”)/

Функция LoadPicture (ПолноеИмяФайла) считывает графическое изображение. Чтобы удалить картинку надо присвоить свойству Picture значение LoadPicture (“ “).

PictureSizeMode – устанавливает масштабирование рисунка.

Значения:

FmPictureSizeModeClip – не помещающиеся в границах объекта части рисунка обрезаются.

FmPictureSizeModeStretch – рисунок масштабируется так, чтобы он занимал всю поверхность объекта.

FmPictureSizeModeZoom – рисунок масштабируется с сохранением относительных размеров так, чтобы он помещался целиком внутри объекта.

PictureAlignment – устанавливает расположение рисунка внутри объекта.

Значения:

FmPictureAlignmentTopLeft – в верхнем левом углу

FmPictureAlignmentTopRight – в верхнем правом углу

FmPictureAlignmentCenter – в центре

FmPictureAlignmentBottomLeft – в нижнем левом углу

FmPictureAlignmentBottomRight – в нижнем правом углу.

 

PictureTiling – True – объект покрывается мозаикой из рисунка.

False – в противном случае.

Пример размещения рисунка в объекте. Во всех 4-х случаях рисунок выравнивается по верхнему левому краю объекта.

В 1-м случае: изображение пропорционально масштабируется так, чтобы целиком заполнить область объекта.

Во 2-м: масштабирование непропорциональное.

В 3-м: рисунок размещается произвольно.

В 4-м: область объекта покрывается мозаикой из рисунков.

Private Sub UserForm_Initialize()

With Image1

.PictureAlignment=fmPictureAlignmentTopLeft

.PictureAlignment=fmPictureSizeModeZoom

.Picture=LoadPicture(“C:\Face.bmp”)

End With

With Image2

.PictureAlignment=fmPictureAlignmentTopLeft

.PictureSizeMode=fmPictureSizeModeStretch

.Picture=LoadPicture(“C:\Fase.bmp”)

End With

With Image3

.PictureAlignment=fmPictureAlignmentTopLeft

.PictureSizeMode=fmPictureSizeModeClip

.Picture=LoadPicture(“C:\Fase.bmp”)

End With

With Image4

.PictureAlignment=fmPictureAlignmentTopLeft

.PictureTiling=True

.Picture=LoadPicture(“C:\Fase.bmp”)

End With

End Sub

Пример управления размером и перемещением элемента управления.

Private Sub CommandButton1_Click()

Передвижение колобка по поверхности формы

If Image1.Top>0 And Image1.Left>0 Then

Image1.Move Image1.Left=Image1.Left-5

Image1.Top=Image1.Top-0

Else Image1.Visible=False

End if

End Sub

Private Sub CommandButton2_Click()

Изменение размера Колобка

‘ Image1.Height=Image1.Height+3

Image1.Width=Image1.Width+3

End Sub

Инициализация диалогового окна

With Image1

Изображение Колобка хранится в файле Dot.bmp

.Picture=LoadPicture(“Dot.bmp”)

.PictureAlignment=fmPictureAlignmentTopLeft

.PictureSizeMode=fmPictureAlignmentModeZoom

.BorderStyle=fmBorderStyleNone

.Visible=True

End With

End Sub

Left, Top – устанавливают координаты верхнего левого угла элемента управления, определяющие его положение в форме.

BorderStyle – fmBorderStyle – границы в виде контура.

None – невидима

 

Методы в экранной форме:

 

 

Геометрическая оптика

 

Каково расстояние от наблюдателя до оазиса в пустыне, если путник утром видит в небе мираж под углом 10° к горизонту, а показатель преломления из-за сильного охлаждения поверхности пустыни за ночь убывает с высотой z по закону

n=n0-kz, где n0=1,0004, k=2×10-5 м-1.

Нужно написать соотношение для перехода от слоя к слою и найти Dl (переход к l) суммированием, делая маленький шаг Dl.

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

; ;

; ;

,

,

.


Sub Мираж ()

Pi=3.141596

for u=5 to 15 step 5

a= cos (u*pi/180): h=1E-02: n=1.0004

x=0: z=0

m1: z=z+h

x =x +abs (h*a/sqr (1-a*a))

n1=n: n=n1+0.0004*exp (-0.05*z))

a1=a: a=a1*n1/n

if a<1 then goto m2

a=a1: h=-h

m2: if z>0 then goto m1

print u, x

next u

end sub


, n=1+(1-0.05×z)=1.0004-0.00002×z

, n=1+0.0004(-0.05×z)=1-2×10-5×z

 

 

Тестовый пример

 


 


Саратовский государственный технический университет

технологический институт

 

Ю.В. Клинаев

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







Что способствует осуществлению желаний? Стопроцентная, непоколебимая уверенность в своем...

Живите по правилу: МАЛО ЛИ ЧТО НА СВЕТЕ СУЩЕСТВУЕТ? Я неслучайно подчеркиваю, что место в голове ограничено, а информации вокруг много, и что ваше право...

Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.