Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VB-для курсового проектирования4.doc
Скачиваний:
28
Добавлен:
23.08.2019
Размер:
2.36 Mб
Скачать

1.6.3. Контрольные вопросы

  1. Какие стили пользовательского интерфейса Windows-приложения можно создать в Visual Basic?

  2. С помощью какого свойства осуществляется связь пункта меню и процедуры обработки события Click?

  3. Перечислите основные возможности использования элемента Rich TextBox.

  4. Какими методами загружается и выгружается форма, и какими методами отображается и скрывается форма?

  5. Какие методы у системного объекта Clipboard?

2. Примеры решения задач в табличном процессоре Excel

2.1. Теоретическая часть

Табличный процессор состоит из электронных таблиц (ЭТ), которые часто называют листами. Электронная таблица состоит из столбцов и строк. Строки именуются буквами (A,B,C, … ,T, … AA,AB, … ,IV), столбцы – цифрами от 1 до 65536. Место пересечения строки и столбца называется ячейка. Каждая ячейка имеет свой уникальный адрес. Адреса бывают относительными, абсолютными и комбинированными. Например, A28, R75 – относительные адреса, $A$28, $R$75 – абсолютные адреса, $A28, R$75 – комбинированными адреса. В электронной таблице можно работать как с отдельными ячейками, так и с диапазоном ячеек, например, A1:B2 – представляет диапазон ячеек A1,A2,B1,B2. В ячейках могут размещаться текст, число, дата, формула, функция. Формула всегда начинается со знака равенства и представляет собой выражение, состоящее из адресов ячеек, функций, имен диапазонов, объединенных знаками арифметических, логических или условных операций, например, =SIN(A5/H8)*12. Обычно в ячейке виден только результат вычисления, сама же формула отображается в строке формул, находящейся под панелью инструментов. Функция – это стандартная формула, например, =СУММ(A1:A5). Все функции объединены по группам. Так, математическая группа содержит такие функции как МОБР – для нахождения обратных матриц, МУМНОЖ – для умножения матриц, ТРАНСП – для транспонирования матриц, SIN, COS, TAN и др., логическая группа – функцию ЕСЛИ, статистическая – функцию ЛИНЕЙН. Доступ к функциям возможен через команду Вставка\Функция либо через кнопку на панели инструментов.

Относительный адрес, указанный в формуле, при копировании формулы будет автоматически изменяться (пересчитываться) в соответствии с относительным смещением от предыдущего местоположения формулы. Абсолютный адрес, указанный в формуле, при копировании формулы не будет автоматически изменяться. При копировании формулы, содержащей комбинированный адрес, будет изменяться строка либо столбец, у которого нет знака «$». Чтобы скопировать формулу в диапазон необходимо захватить мышкой маркер заполнения, находящейся в правом нижнем углу ячейки с формулой, и протащить его до конечной ячейки.

2.2. Практическая часть

Пример 1. Построить график следующей функции при х[0,1] с шагом 0.1:

  • В ячейку A1 введите начальное значение x, а именно - 0.

  • В ячейку A2 введите формулу: =A1+0.1

  • Захватив, манипулятором мышь маркер заполнения ячейки A2, протащите его до ячейки A10. Тем самым, Вы скопируете формулу с относительной адресацией в диапазон ячеек.

  • В ячейку B1 введите формулу: =ЕСЛИ(A1<0.2;1+LN(1+A1);

ЕСЛИ(И(A1>=0.2;A1<=0.8);(1+A1^(1/2))/(1+A1);2*EXP(-2*A1))).

Тот же результат получится при вводе формулы: =ЕСЛИ(A1<0.2; 1+LN(1+A1);ЕСЛИ(A1<=0.8;(1+A1^(1/2))/(1+A1);2*EXP(-2*A1)))

  • Дважды щелкните левой кнопкой мыши по маркеру заполнения ячейки B1. Это приведет к заполнению диапазона введенной функции, соответствующей диапазону аргумента.

  • Для проверки полученных данных y создайте в Visual Basic for Application (VBA) программный код. Выполните команду Сервис\Макрос\Редактор Visual Basic. Находясь в окне редактора, выполните команду Insert\Module. В окне Projects появится модуль с именем Module1. В окне Code этого модуля введите следующую функцию, описывающую заданную функциональную зависимость:

Function gr(x)

If x < 0.2 Then

gr = 1 + Math.Log(1 + x)

ElseIf x <= 0.8 Then

gr = (1 + Math.Sqr(x)) / (1 + x)

Else

gr = 2 * Math.Exp(-2 * x)

End If

End Function

  • Перейдите в окно Excel и в ячейку C1 введите формулу: =gr(A1). Скопируйте формулу в диапазон значений. Данные в столбцах С и В должны совпасть.

  • Постройте график y=f(x) и нажмите кнопку Save.

Пример 2. Построить поверхность z=x2-y2 при x,y[-1,1] с шагом 0.2.

  • В диапазон ячеек B1:L1 последовательно сформируйте числа от –1 до 1 с шагом 0.2, соответствующих изменению переменной x, а в диапазон A2:A12 – ту же последовательность значений для переменной y.

  • В ячейку B2 введите формулу комбинированной адресации: =B$1^2-$A2^2

  • Используя маркер заполнения ячейки B2, заполните диапазон строк и диапазон столбцов.

  • Далее выделяют диапазон ячеек A1:L12 и строят поверхность.

  • Для проверки полученных данных создайте кнопку на Листе1 с помощью панели Элементы управления. Дважды щелкните по кнопке, при этом откроется окно программного кода с процедурой обработки события Click(). Заполните ее следующим содержанием, описывающим процесс расчета заданной поверхности:

Private Sub CommandButton1_Click()

ActiveCell.Offset(RowOffset:=-1, ColumnOffset:=0).Value = _

"Построение поверхности на языке VBA"

x = -1

For i = 1 To 11 ' Формирование элементов X=[-1...1] с шагом 0.2

ActiveCell.Offset(RowOffset:=0, ColumnOffset:=i).Value = x

x = x + 0.2

Next

' Определение адресов диапазона X

x1 = ActiveCell.Offset(RowOffset:=0, ColumnOffset:=1).Address

x2 = ActiveCell.Offset(RowOffset:=0, ColumnOffset:=11).Address

'Изменение размера диапазона Х, начертания и цвета фона

Range(x1, x2).Font.Size = 10

Range(x1, x2).Font.Bold = True

Range(x1, x2).Interior.ColorIndex = 6 ' Желтый цвет фона ячеек

y = -1

For i = 1 To 11 ' Формирование элементов Y=[-1...1] с шагом 0.2

ActiveCell.Offset(RowOffset:=i, ColumnOffset:=0).Value = y

y = y + 0.2

Next

' Определение адресов диапазона Y

y1 = ActiveCell.Offset(RowOffset:=1, ColumnOffset:=0).Address

y2 = ActiveCell.Offset(RowOffset:=11, ColumnOffset:=0).Address

'Изменение размера диапазона Y, начертания и цвета фона

Range(y1, y2).Font.Size = 10

Range(y1, y2).Font.Bold = True

Range(y1, y2).Interior.ColorIndex = 6 ' Желтый цвет фона ячеек

' Формирование и вывод элементов Z=X^2-Y^2

For i = 1 To 11

For j = 1 To 11

x = ActiveCell.Offset(RowOffset:=0, ColumnOffset:=j).Value

y = ActiveCell.Offset(RowOffset:=i, ColumnOffset:=0).Value

ActiveCell.Offset(RowOffset:=i, ColumnOffset:=j).Value = x ^ 2 - y ^ 2

Next

Next

End Sub

  • Метод ActiveCell определяет активную ячейку ЭТ, относительно которой будет происходить построение поверхности. Метод Offset формирует смещение по строкам и столбцам относительно активной ячейки. Свойство Value определяет значение ячейки, а свойство Address – адрес ячейки. Метод Range определяет выбор диапазона ячеек.

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

Пример 3. Решить систему линейных уравнений, представленную в матричной форме A2X=B, где .

  • Представим систем уравнений в виде X=(A2)-1B

  • Коэффициенты матрицы A введите в диапазон ячеек A1:B2

  • Коэффициенты матрицы B введите в диапазон ячеек C1:C2

  • Выделите мышью диапазон ячеек D1:D2 и введите следующую формулу: =МУМНОЖ(МОБР(МУМНОЖ(A1:B2;A1:B2));C1:C2)

  • Далее выделите в строке формул приведенную формулу и нажмите CTRL+SHIFT+ENTER. В ячейке D1 появится значение 1.12, а в ячейке D2 – значение –0.44. При этом представленная формула в строке формул будет охвачена фигурными скобками.

  • Для проверки полученных значений x создайте в VBA программный код. Выполните команду Сервис\Макрос\Редактор Visual Basic. Двумя щелчками мыши в окне Projects откройте окно кода модуля Module1. (Если ни одного модуля нет, то создайте его командой Insert\Module). В окне Code модуля введите следующую функцию, описывающую решение системы линейных уравнений:

Function Matrix(A As Variant, B As Variant) As Variant

Matrix = WorksheetFunction.MMult(WorksheetFunction.MInverse( _ WorksheetFunction.MMult(A, A)), B)

End Function

  • Класс WorksheetFunction содержит много математических функций, в том числе, и функции работы с матрицами: Mmult – осуществляет перемножение матриц, Minverse – находит обратную матрицу, Transpose – осуществляет транспонирование матриц.

  • Выделите диапазон ячеек E1:E2. Отыщите с помощь мастера функций вновь созданную функцию Matrix и введите диапазоны ее двух параметров A1:B2 и C1:C2. Выделите формулу в строке формул и нажмите CTRL+SHIFT+ENTER.

  • Результаты в ячейках C1:C2 и E1:E2 должны совпасть.

Пример 4. Найти все корни нелинейного уравнения x3 – 0.01x2 – 0.7044x +0.14=0.

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

  • Протабулируйте значение x[-1,1] с шагом 0.2, начиная с ячейки A1.

  • В ячейку B1 введите полином =A1^3-0.01*A1^2-0.7044*A1 +0.14

  • Скопируйте эту формулу в диапазон и обратите внимание на изменение знака значений полинома. Если значение полинома не меняет знак, уменьшите шаг табулирования x.

  • В нашем случае полином меняет знак на интервалах [-1; -0.8], [-0.2; 0.4], [0.6; 0.8]. С помощью команды Сервис\Параметры\ Вычисления установите относительную погрешность 0,000001 и количество итераций 1000.

  • Введите в ячейки C2:C4 средние значения корней: -0.9; 0.3; 0.7.

  • В ячейку D2 введите формулу: =C2^3-0.01*C1^2-0.7044*C1 +0.14

  • Скопируйте эту формулу в диапазон D2:D4.

  • Для каждой ячейки диапазона D2:D4 с помощью команды Сервис\Подбор параметров найдите три корня полинома. Например, для ячейки D2 в диалоговом окне Подбор параметров в поле Установить в ячейке введите $D$2, в поле Значение0, в поле Изменяя значение ячейки - $C$2 и нажмите ОК.

  • Постройте график полинома.

  • Для проверки полученных корней создайте кнопку на Листе1 с помощью панели Элементы управления. Дважды щелкните по кнопке, при этом откроется окно программного кода с процедурой обработки события Click. Заполните ее следующим содержанием, описывающим процесс получения корня методом Ньютона:

Private Sub CommandButton2_Click()

Const e = 0.00001

ActiveCell.Offset(RowOffset:=-1, ColumnOffset:=0).Value="Аргумент"

ActiveCell.Offset(RowOffset:=-1, ColumnOffset:=1).Value="Корень"

ActiveCell.Offset(RowOffset:=-1, ColumnOffset:=2).Value="Функция"

ActiveCell.Offset(RowOffset:=-1, ColumnOffset:=3).Value="Производная"

For i = 1 To 4

ActiveCell.Offset(RowOffset:=0, ColumnOffset:=i - 1).Value = "-------------"

Next

x = -1 ' Формирование элементов X=[-1...1] с шагом 0.2

For i = 1 To 11

ActiveCell.Offset(RowOffset:=i, ColumnOffset:=0).Value = x

x = x + 0.2

Next

' Определение адресов диапазона X

x1 = ActiveCell.Offset(RowOffset:=1, ColumnOffset:=0).Address

x2 = ActiveCell.Offset(RowOffset:=11, ColumnOffset:=0).Address

'Изменение размера диапазона Х, начертания и цвета фона

Range(x1, x2).Font.Size = 10

Range(x1, x2).Font.Bold = True

Range(x1, x2).Interior.ColorIndex = 4 ' Зеленый цвет фона ячеек

For i = 1 To 11

x = ActiveCell.Offset(RowOffset:=i, ColumnOffset:=0).Value

Do

x0 = x

x = x - f(x) / df(x)

Loop Until Abs(x - x0) < e

ActiveCell.Offset(RowOffset:=i, ColumnOffset:=1).Value = x

ActiveCell.Offset(RowOffset:=i, ColumnOffset:=2).Value = f(x)

ActiveCell.Offset(RowOffset:=i, ColumnOffset:=3).Value = df(x)

Next

End Sub

  • В окне Code объекта Лист1 запишите еще две функции:

Function f(ByVal x As Double) As Double

f = x ^ 3 - 0.01 * x ^ 2 - 0.7044 * x + 0.14

End Function

Function df(ByVal x As Double) As Double

df = 3 * x ^ 2 - 0.02 * x - 0.7044

End Function

  • Вернитесь в окно Excel, выйдите из режима Конструктора, щелкните по пустой ячейке правее полученных корней с использованием команды Подбор параметров и нажмите созданную Вами кнопку. Вы увидите расчетные данные и те же три корня.

Пример 5. Установить аналитическую (регрессионную) зависимость выпуска изделий по следующим статистическим данным:

Таблица 6

Месяц

1

2

3

4

5

6

7

8

9

10

11

12

Кол-во

Изделий

30

40

45

40

38

45

50

49

52

47

45

40

  • Аппроксимируем статистические данные выпуска изделий кубическим сплайном (полиномом 3-й степени): y=Ax3+Bx2+Cx+D, x- месяцы, y – количество изделий. Задача состоит в том, чтобы определить коэффициенты A,B,C,D для функциональной зависимости на основе статистических данных.

  • Заполните диапазон A2:A13 числами от 1 до 12, а диапазоны B2:B13 и C2:C13 формулами квадрата и куба значений диапазона A2:A13.

  • Заполните диапазон Е2:Е13 числами, соответствующих количеству произведенных изделий.

  • Выделите четыре строки для определения неизвестных коэффициентов A,B,C,D и пять строк, сформировав диапазон ячеек G2:J6, и введите в этот диапазон формулу: =ЛИНЕЙН(Е2:Е13; A2:C13;1;1), здесь Е2:Е13 – блок y, A2:C13 – блок x, первая единица определяет вычисление свободного члена зависимости (в нашем случае - D), вторая единица – статистику.

  • Далее выделите в строке формул приведенную формулу и нажмите CTRL+SHIFT+ENTER. В первой строке выделенного диапазона, появятся коэффициенты полинома A,B,C,D, как на рис.13.

  • Для проверки полученных значений, постройте график зависимости y=f(x), как показано на рис.13.

  • Щелкните правой клавишей мыши по графику и в появившемся контекстном меню выберите команду Добавить линию тренда.

  • В появившемся диалоге Линия тренда на закладке Тип выберите Полиномиальная Степень 3, а на закладке Параметры – флажки Показать уравнение на диаграмме и Поместить на диаграмму величину достоверности аппроксимации (R2).

  • Нажмите ОК. Результаты построения и расчета должны совпасть.

Рис.13

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]