Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика Никитин

.pdf
Скачиваний:
8
Добавлен:
29.03.2016
Размер:
398.65 Кб
Скачать

51

For i = 1 To n

x(i) = Cells(i1, j1).Value If i Mod k0 = 0 Then

i1 = i1 + 1

j1 = j0 Else

j1 = j1 + 1 End If Next i

End Sub

Public Sub wywodvec(ByVal i0, j0, k0, n As Integer, _ ByRef ww As String, x() As Single)

Dim i1, j1, i As Integer i1 = i0

j1 = j0

Cells(i1, j1).Value = ww i1 = i0 + 2

j1 = j0

For i = 1 To n

Cells(i1, j1).Value = x(i) If i Mod k0 = 0 Then

i1 = i1 + 1

j1 = j0 Else

j1 = j1 + 1 End If Next i

End Sub

Public Sub aa(ByVal nx, ny As Integer, _ ByRef nz As Integer, _

x() As Single, y() As Single, _ z() As Single)

Dim i As Integer nz = 0

For i = 1 To nx If x(i) > 1.3 Then nz = nz + 1

z(nz) = Log(x(i)) End If

Next i

For i = 1 To ny

52

If y(i) > 1.3 Then nz = nz + 1

z(nz) = Log(y(i)) End If

Next i

End Sub

Public Sub sort(ByVal n As Integer, _ ByRef x() As Single)

Dim i, k, m As Integer Dim r As Single

For k = n To 2 Step -1 m = 1

For i = 2 To k

If x(i) > x(m) Then m = i

End If

Next i r = x(k)

x(k) = x(m) x(m) = r Next k

End Sub

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

Замечание

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

то в операторе:

If x(i) > x(m) Then

53

процедуры сортировки sort необходимо смысл неравенства заменить на противоположный:

If x(i) < x(m) Then .

Работу процедуры вывода вектора wywodvec студенту предлагается разобрать самостоятельно.

Задача 4

Для матрицы A 8 , 5 найти сумму квадратов ее элементов, лежащих на четных колонках.

Предположим, что исходные данные элементов матрицы расположены в таблице Excel следующим образом:

Результат счета будем выводить в ячейки A12 и B12. Тогда программа может иметь следующий вид:

Private Sub Workbook_Open()

Const m = 8, n = 5

Dim s As Single

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

Call wwodmatr(3, 1, m, n, a())

54

Call aa(m, n, s, a())

Cells(12, 1).Value = "S="

Cells(12, 2).Value = s

End Sub

Public Sub wwodmatr(ByVal i0, j0, m, n As Integer, _ ByRef X() As Single)

Dim i, j, ii, jj As Integer Dim ww As Single

For i = 1 To m

For j = 1 To n

ii= i0 + i – 1

jj= j0 + j – 1

ww = Cells(ii, jj).Value X(i, j) = ww

Next j

Next i

End Sub

Public Sub aa(ByVal m, n As Integer, _ ByRef s, X() As Single)

Dim i, j As Integer Dim ss As Single ss = 0

For i = 1 To m

For j = 2 To n Step 2 ss = ss + X(i, j) ^ 2 Next j

Next i s = ss End Sub

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

вид:

55

В процедуре ввода матрицы: wwodmatr параметры i0 и j0

указывают на адрес ячейки Excel – таблицы , в которой записывается левый верхний элемент матрицы. Алгоритм процедуры ввода матрицы студенту предлагается разобрать самостоятельно.

Задача 5

 

 

 

 

 

 

A = A 9 , 7 получить вектор

 

, координаты которого

Из матрицы

b

равны

среднему

геометрическому

положительных

элементов

соответствующих строк матрицы A .

Предположим, что исходные данные элементов матрицы расположены в таблице Excel следующим образом:

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

начиная с ячейки I1 (с первой строки, с девятой колонки и по одному элементу вектора в строку). Тогда программа может иметь следующий вид:

Private Sub Workbook_Open() Const m = 9, n = 7

Dim a(1 To m, 1 To n) As Single Dim b(1 To m) As Single

Call wwodmatr(3, 1, m, n, a()) Call aa(m, n, a(), b())

Call wywodvec(1, 9, 1, m, "Вектор b", b()) End Sub

56

Public Sub wywodvec(ByVal i0, j0, k0, n _

As Integer, ByRef ww As String, _ x() As Single)

Dim i1, j1, i As Integer i1 = i0

j1 = j0

Cells(i1, j1).Value = ww i1 = i0 + 2

j1 = j0

For i = 1 To n

Cells(i1, j1).Value = x(i) If i Mod k0 = 0 Then

i1 = i1 + 1

j1 = j0 Else

j1 = j1 + 1 End If Next i

End Sub

Public Sub wwodmatr(ByVal i0, j0, m, n As Integer, _ ByRef X() As Single)

Dim i, j, ii, jj As Integer Dim ww As Single

For i = 1 To m

For j = 1 To n

ii= i0 + i – 1

jj= j0 + j – 1

ww = Cells(ii, jj).Value X(i, j) = ww

Next j

Next i

End Sub

Public Sub aa(ByVal m, n As Integer, ByRef x() _ As Single, ByRef y() As Single)

Dim i, j, k As Integer Dim p As Single

For i = 1 To m p = 1

k = 0

For j = 1 To n

If x(i, j) > 0 Then k = k + 1

p = p * x(i, j) End If

Next j

p = p ^ (1 / k) y(i) = p

Next i

57

End Sub

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

Задача 6

Из матрицы A 9 , 7 получить матрицу B 9 , 7 , элементы которой равны

корням квадратным из модулей соответствующих элемент матрицы A .

Предположим, что исходные данные элементов матрицы А располо-

жены в таблице Excel как и в задаче 5. Результаты счета – матрицу В будем располагать с ячейки А15 (пятнадцатая строка и первая колонка).

Тогда программу можно представить в следующем виде:

Private Sub Workbook_Open() Const m = 9, n = 7

Dim a(1 To m, 1 To n) As Single Dim b(1 To m, 1 To n) As Single Call wwodmatr(3, 1, m, n, a()) Call aa(m, n, a(), b())

Call wywodmatr(15, 1, m, n, "Матрица В", b()) End Sub

Public Sub wywodmatr(ByVal i0, j0, m, n As Integer, _ ByRef ww As String, x() As Single)

Dim i1, j1, i, j As Integer i1 = i0

j1 = j0

Cells(i1, j1).Value = ww For i = 1 To m

58

i1 = i0 + i + 1 For j = 1 To n j1 = j0 + j – 1

Cells(i1, j1).Value = x(i, j) Next j

Next i

End Sub

Public Sub wwodmatr(ByVal i0, j0, m, n As Integer, _ ByRef x() As Single)

Dim i1, j1, i, j As Integer For i = 1 To m

For j = 1 To n i1 = i0 + i – 1 j1 = j0 + j – 1

x(i, j) = Cells(i1, j1).Value Next j

Next i

End Sub

Public Sub aa(ByVal m, n As Integer, _

ByRef x() As Single, ByRef y() As Single) Dim i, j As Integer

For i = 1 To m

For j = 1 To n

y(i, j) = Abs(x(i, j)) ^ 0.5 Next j

Next i

End Sub

Результат счета задачи имеет вид:

59

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

В контрольных работах исходные данные и результаты счета необходимо распечатать. В Excel – таблицах выбираем в Меню: Вид Масштаб Произвольный и устанавливаем с точностью до 1% такой масштаб, при котором исходные данные или результаты счета видны на весь экран монитора. На клавиатуре щелкаем клавишей Print Screen. При этом,

рисунок, имеющийся на экране монитора пересылается, в буфер обмена. Сворачиваем или закрываем Excel и на Рабочем столе Windows в

последовательности Пуск Программы Стандартные Графический редактор Paint входим в графический редактор, в Меню которого выбираем: Правка Вставить. На экране графического редактора появится изображение перенесенной таблицы Excel. В Меню

выбираем: Рисунок Растянуть / наклонить По горизонтали и По вертикали устанавливаем масштаб с точностью до 1% так, чтобы нужная часть рисунка таблицы Excel была видна в поле экрана. На панели инструментов выбираем вначале произвольную клавишу, затем клавишу выделить. Выделяем прямоугольным пунктиром необходимый фрагмент рисунка таблицы и отправляем его в буфер обмена, используя: Меню: Правка Копировать. В редакторе Word вставляем из буфера обмена рисунок (Меню: Правка Вставить) и распечатываем его. Простейший же способ распечатки результатов счета состоит в том, что, находясь в Excel

– таблицах, выделяем необходимую область и переходим в Меню.

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

При распечатках программ входим в редактор VBA. Затем в Меню

выбираем: Файл Печать . Полученные распечатки вклеиваем в контрольную работу.

60

При наличии навыков у студента контрольную работу можно оформить

в редакторе Word.

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

Находясь в Excel – таблице, в которой расположены исходные данные,

результаты счета (предполагается, что под эту таблицу в редакторе VBA

составлена работающая программа), входим в Меню . Выполняем: ФайлСохранить как. В появившемся окне в поле Имя файла записываем: A:\Задача 1 . Для других задач меняем ее номер. При этом предполагается,

что чистая дискета вставлена в дисковод A.

Библиографический список

1.Санно Пол. Visual Basic для приложений в подлиннике. – СПб.: БХВ-

Петербург, 1997.

2.Гарнаев А.Ю. Самоучитель VBA. - СПб.: БХВ-Петербург, 2003.

3.Стив Каммингс. VBA для «чайников», 3-е издание. – М.: Изд. дом

«Вильямс», 2001.