Решение. Этап 1. Математическая часть

Этап 1. Математическая часть

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

  1. Const n = 4, m = 5
  2. i = 1
  3. Если i <= n, то шаг 4, иначе шаг 11
  4. j = 1
  5. Если j <= n, то шаг 6, иначе шаг 9
  6. Ввести X(i,j)
  7. j = j + 1
  8. шаг 5
  9. i = i + 1
  10. шаг 3
  11. k = 0
  1. i = 1
  2. Если i <= n, то шаг 13, иначе шаг 20
  3. j = 1
  4. Если j <= n, то шаг 15, иначе шаг 18
  5. ЕслиX(i, j) <> 0,
то k = k + 1? иначе шаг 17
  1. j = j + 1
  2. шаг 15
  3. i = i + 1
  4. шаг 13
  5. Вывести k

Этап 2. Ввод данных в таблицу Excel.

В ячейки А1:E4 вводится элементы массива X(i, j).

Этап 3. Определение переменных.

Константы n = 4, m = 5 размер массива X(4, 5)

Вводится: массив X(n, m) (Single).

Выводятся (результат): k (Количество ненулевых элементов, (Integer)).

Промежуточные переменные: i – счетчик цикла с параметром (Integer), j – счетчик цикла с параметром (Integer), Temp – вспомогательная переменная для перестановки элементов при сортировке.

Этап 4. Написание процедуры.

На рабочем листе Лист1 при помощи Элементов управления создать элемент Кнопка (СommandBatton1).

Переименовать Кнопку в режиме конструктора. Вызвать контекстное меню ПКМ ® Свойства ® закладку Alhpabetic ® Caption ® в Поле ввода ввести новое название кнопки Количество ненулевых элементов.

Написать Процедуру-Событие для Кнопки «Количество ненулевых элементов»:

Private Sub CommandButton1_Click()

'Деклорация констант

Const n As Integer = 4

Const m As Integer = 5

'Деклорация переменных

Dim X(1 To n,1 To m) As Single

Dim i As Integer

Dim j As Integer

Dim k As Integer

'Ввод массива X(n,m) из диапазона А1:Е4

For i = 1 To n

For j = 1 To m

X(i, j) = Cells(i, j).Value

Next j

Next i

'Подсчет количество ненулевых элементов

' в массиве X(n,m)

k = 0

For i = 1 To n

For j = 1 To m

If X(i, j) <> 0 Then

k = k + 1

End If

Next j

Next i

'Вывод результата

Cells(6, 1).Value = "Количество ненулевых элементов равно " & k

End Sub

 

Этап 5. Выполнение.

Перейти на рабочий лист View®Microsoft Excel или Alt+F11). Выйти из режима Конструктора. В ячейках А1:E4 вводится массив X(4, 5). Нажать Кнопку «Количество ненулевых элементов».

В ячейке А1 появится результат – сообщение «Количество ненулевых элементов равно 11.(Рис.8)

Этап 6. Переименование листа. Навести курсор на закладку Лист1, правой клавишей мыши (ПКМ) вызвать контекстное меню, выбрать пункт Переименовать, удалить старое название листа и с клавиатуры набрать новое Задача_15, нажать Enter.

 

Задача 4 из ТР: Получить вектор , координаты которого равны суммам ненулевых элементов соответствующих строк матрицы .

 

Sub Кнопка1_Щелчок()

'Описание констант

Const n As Integer = 9

Const m As Integer = 5

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

Dim A(1 To n, 1 To m) As Single

Dim b(1 To n) As Single

Dim i As Integer

Dim j As Integer

Dim k As Integer

'Ввод массива А(n,m) из А1:Е9

For i = 1 To n

For j = 1 To m

A(i, j) = Cells(i, j).Value

Next j

Next i

 

‘Получить вектор b, координаты которого

‘равны суммам ненулевых элементов

‘соответствующих строк матрицы A(9,5).

 

For i = 1 To n

k = 0

For j = 1 To m

If A(i, j) <> 0 Then k = k + A(i, j)

Next j

b(i) = k

Next i

'Вывод вектора b в столбец G

Range("G1:H300").Clear

For i = 1 To n

Cells(i, 7).Value = b(i)

Next i

End Sub

 

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

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

В VBA подпрограммы разделяются на процедуры – Sub и подпрограммы-функции – Function . Кроме того, от первоначальных версий BASIC сохранилась конструкция подпрограмм GoSub – Return , которая в настоящее время редко используется и в нашем курсе не рассматривается.

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

Синтаксис процедуры в упрощенной форме имеет вид:

[ Private | Public ] Sub <имя процедуры> ( список )

< операторы >

End Sub

Здесь квадратные скобки указывают на необязательный параметр, вертикальная черта – на варианты параметров, выбираемых пользователем. Так, элемент описания Private указывает, что рассматриваемая процедура доступна только из программы и процедур только того модуля, в котором она описана. Элемент описания Public указывает на то, что рассматриваемая процедура доступна для всех программ и процедур во всех модулях. В предлагаемых образцах программ мы будем использовать процедуры только с описанием Public .

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

Call < имя процедуры > ( фактические переменные )

 

Задача 1

Составить программу табулирования функций

;

для x от -0,5 до 1,5 с шагом 0,1 . Счет функции оформить в виде процедуры, а счет оформить в виде подпрограммы-функции. Использовать цикл Do – Loop Until .

Предположим, что результаты счета будем выводить в Excel – таблицу в следующем виде: заголовок таблицы-символы x , y и z – разместим соответственно в ячейках A1 , С1 , E1 , а результаты счета будем помещать в соответствующие колонки, начиная с третьей строки.

Тогда рассматриваемую задачу можно представить в виде

 

Public Sub f(ByVal x As Single, _

ByRef y As Single)

If x < 0.77 Then

y = 12 * x ^ 2 - 3.6

Else

y = Log(3 * x)

End If

End Sub

 

Public Function g(ByVal x, y As Single) As Single

g = Atn(x * y)

End Function

 

Private Sub Workbook_Open()

Const a = -0.5, b = 1.5, h = 0.1

Dim x As Single

Dim y As Single

Dim z As Single

Dim i As Integer

Range("A1").Value = "x"

Range("C1").Value = "y"

Range("E1").Value = "z"

x = a

i = 3

Do

Call f(x, y)

z = g(x, y)

Cells(i, 1).Value = x

Cells(i, 3).Value = y

Cells(i, 5).Value = z

x = x + h

i = i + 1

Loop Until x > b + h / 2

End Sub

Заметим, что при наборе в редакторе VBA текста программ, подпрограммы желательно отделять друг от друга пустой строкой. При этом, программа легче читается на распечатках. Отметим, что в окне редактора подпрограммы будут разделены серой линией.

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

Результаты счета предложенной программы имеют вид:

x   y   Z
         
-0,5   -0,6   0,291457
-0,4   -1,68   0,591686
-0,3   -2,52   0,64733
-0,2   -3,12   0,55788
-0,1   -3,48   0,334892
-1,6E-08   -3,6   5,9E-08
0,1   -3,48   -0,33489
0,2   -3,12   -0,55788
0,3   -2,52   -0,64733
0,4   -1,68   -0,59169
0,5   -0,6   -0,29146
0,6   0,719999   0,407784
0,7   2,28   1,011071
0,8   0,875469   0,610978
0,9   0,993252   0,72945
  1,098612   0,832353
1,1   1,193923   0,920019
1,2   1,280934   0,994023
1,3   1,360977   1,056354
1,4   1,435085   1,108966
1,5   1,504077   1,153579

 


<== предыдущая лекция | следующая лекция ==>
Парамагнетики. | Анатомия и физиология щитовидной железы.




Дата добавления: 2015-08-14; просмотров: 637;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.031 сек.