8315

Сложение элементов столбцов матрицы и нормирование вектора

Практическая работа

Информатика, кибернетика и программирование

Сложение элементов столбцов матрицы и нормирование вектора Часть 1. Сложение элементов в столбцах матрицы. Задача 1: Просуммировать элементы столбцов заданной матрицы размером mхn. Результат получить в одномерном массиве размером n Задача была выпол...

Русский

2013-02-09

215.5 KB

13 чел.

Сложение элементов столбцов матрицы и нормирование вектора

Часть 1. Сложение элементов в столбцах матрицы.

Задача 1: Просуммировать элементы столбцов заданной матрицы размером mхn. Результат получить в одномерном массиве размером n

Задача была выполнена с помощью следующей программы написанной на языке VBA.

Программа 1:

Option Explicit

Sub StolbElementSum()

   'должны быть заданы две соседние ячейки ,

   'в которые вводится размерность матрицы

   'текущей ячейкой должна быть ячейка с текстом  "m= "

   'и она не должна быть в первом столбце

   

   'вычисление m

   Dim r, m&, n&

   Dim str As String

   str = ActiveCell.Value

   r = Left(str, 1)

   If Not (r = "m") Then   'необходимо. чтобы ячейка "m="

                           'была активной

       MsgBox "выделите ячейку m= или введите в пустую ячейку"

       Exit Sub

       End If

   r = Right(str, 2)

   r = IIf(IsNumeric(Left(r, 1)), r, Right(r, 1))

   m = IIf(IsNumeric(r), CInt(r), 0)

   

   

   'запомним координаты ячейки с текстом "m= "

   'в переменных Row0 и Col0

   Dim Row0&, Col0&

   Row0 = CInt(ActiveCell.Row)

   Col0 = CInt(ActiveCell.Column)

   

   'вычислим n

   str = CStr(Cells(Row0, Col0 + 1).Value)

   r = Right(str, 2)

   If Len(r) = 0 Then

       MsgBox "Введите  n !" 'ячейка не должна быть пустой

       Exit Sub

   End If

   r = IIf(IsNumeric(Left(r, 1)), r, Right(r, 1))

   n = IIf(IsNumeric(r), CInt(r), 0)

   'исключаем недопустимые значения m и n"

   If m = 0 Or n = 0 Then

       MsgBox "m и n не равны 0"

       Exit Sub

   End If

   'задаём строку и столбец с номерами

   Dim rng As Range

   Dim rng2 As Range

   

   

   Set rng = Cells(Row0 + 1, 1)

   rng.Activate

   Set rng = Range(rng, rng.SpecialCells(xlLastCell))

   rng.ClearContents

   rng.Delete

  

   'записываем в столбец числа 1,...,m

   Dim Rw&, Cl&    ' Rw, Cl - текущие значения Row, Column

   Rw = Row0 + 3

   Cl = Col0 - 1

   Set rng = Range(Cells(Rw, Cl), Cells(Rw + m - 1, Cl))

   rng.Interior.Color = RGB(20, 220, 220)

   'Заполнение значениями 1...m

   Dim i&, rn As Range

   i = 1

   For Each rn In rng

       rn.Cells.Value = i

       i = i + 1

   Next rn

   

   'записываем в строчку числа 1,...,n

   Rw = Row0 + 2

   Cl = Col0

   Set rng = Range(Cells(Rw, Cl), Cells(Rw, Cl + n - 1))

   rng.Interior.Color = RGB(20, 220, 220)

   i = 1

   For Each rn In rng

       rn.Cells.Value = i

       i = i + 1

   Next rn

   

   'Заполняем матрицу произвольными числами

   Rw = Row0 + 3

   Cl = Col0

   Set rng = Range(Cells(Rw, Cl), _

                   Cells(Rw + m - 1, Cl + n - 1))

   Dim j&

   Randomize

   For i = 1 To m

       For j = 1 To n

           rng.Cells(i, j) = Int((10 * Rnd) + 1)

       Next j

   Next i

   Cells(Row0, Col0).Activate

   

   'Считаем сумму элементов в строках

   Rw = Row0 + 3

   Cl = Col0

   'обозначим массив из сумм элементов столбцов

   Set rng2 = Range(Cells(Rw + m + 2, Cl), Cells(Rw + m + 2, Cl + n - 1))

   

   Dim s&

   s = 0

   For j = 1 To n

       For i = 1 To m

           s = s + rng.Cells(i, j)

       Next i

       rng2.Cells(j) = s

       s = 0

   Next j

   rng2.Interior.Color = RGB(256, 256, 20) 'выделяем цветом массив с результатом

   Dim sum As Range

   Set sum = Cells(Rw + m + 2, Cl - 1)

   sum = "суммы элементов в столбцах"

   sum.Interior.Color = RGB(256, 206, 56)

   

   sum.Select                           'форматируем ячейку

   With Selection                       'задаём горизонтальное выравнивание

        .HorizontalAlignment = xlGeneral 'по ширине

       .VerticalAlignment = xlDistributed 'вертикальное выравнивание-

       .WrapText = False                   'распределённый

       .Orientation = 0

       .AddIndent = False

       .IndentLevel = 0

       .ShrinkToFit = False

       .ReadingOrder = xlContext

       .MergeCells = False

   End With

End Sub

  

Для запуска данной программы создадим специальную кнопку на рабочем листе. Для этого зайдём в меню: вид  – панели инструментов – элементы управления – кнопка. Создадим кнопку нужного размера с надписью:

«Создать матрицу и посчитать сумму элементов в столбцах».

Для того чтобы при нажатии на кнопку выполнялась наша программа на листе 1 в редакторе visual basic введём следующий код:

Option Explicit

Private Sub CommandButton1_Click ()

   Call StolbElementSum

End Sub

Пример 1: ( См. Рисунок 1)

1. Откроем приложение Microsoft Office Excel.

2.На рабочем листе  «лист 1» введём значение «m=10» в ячейку C2 и «n=10» в ячейку D2.

3.Выделим ячейку С2 и нажмём на кнопку

4.Получим случайно сгенерированную матрицу заданной размерности

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

5.Резултаты вычисления верны. Программа работает.

Примечания:

  •  Если в матрице одна строка, то она и будет результатом вычисления
  •  Если при нажатии на кнопку ячейка с текстом «m=10» не выделена, то пользователь будет уведомлён в специальном окне о необходимости выделить ячейку.(см. Рисунок 3)
  •  Если пользователь введёт значения m или n равные 0, то будет уведомлён о необходимости исправить ошибку.(см. рисунок 2)
  •  Если пользователь ввёл m, но не ввёл n, то он будет уведомлён.
  •  Размерность матрицы можно ввести в любые 2 соседние ячейки на любом листе. Программа всё равно будет работать.

Рисунок 1.

Рисунок 2.

Рисунок 3.

Часть 2. Нормирование вектора.

Задача 2: Нормировать вектор   и найти его длину. Формула

Задача выполнена с помощью следующей программы написанной на VBA.

Программа 2.

Option Explicit

Sub norm()

   'Ячейка "n=" должна быть активной

   'вычисление n

   Dim r, n&

   Dim str As String

   str = ActiveCell.Value

   r = Left(str, 1)

   If Not (r = "n") Then

       MsgBox "выделите ячейку n="

       Exit Sub

   End If

   If Len(r) = 0 Then

       MsgBox "введите размерность вектора"

       Exit Sub

   End If

   r = Right(str, 2)

   r = IIf(IsNumeric(Left(r, 1)), r, Right(r, 1))

   n = IIf(IsNumeric(r), CInt(r), 0)

   

   'запомним координаты ячейки с текстом "n= "

   'в переменных Row0 и Col0

   Dim Row0&, Col0&

   Row0 = CInt(ActiveCell.Row)

   Col0 = CInt(ActiveCell.Column)

   

   If n = 0 Then

       MsgBox "размерность не равна 0"

       Exit Sub

   End If

   

   Dim VEc As Range 'задаём вектор VEC

   

   Set VEc = Cells(Row0 + 1, 1)

   VEc.Activate

   Set VEc = Range(VEc, VEc.SpecialCells(xlLastCell))

   VEc.ClearContents

   VEc.Delete

   

   'Заполняем матрицу произвольными числами

   Rw = Row0 + 3

   Cl = Col0

   Set VEc = Range(Cells(Rw, Cl), _

                   Cells(Rw, Cl + n - 1))

   

   Randomize

   'Чтобы координаты могли быть отрицательными умножаем на -1 в

   'случайной степени

       For i = 1 To n

           VEc.Cells(i) = Int((10 * Rnd) + 0) * (-1) ^ (Int((2 * Rnd) + 0))

       Next i

   VEc.Interior.Color = RGB(234, 234, 56)

   Cells(Row0, Col0).Activate

   

   Dim D          'переменная обозначающая длину вектора

   D = 0           '(сумма квадратов координат)

   For i = 1 To n

   D = D + VEc.Cells(i) ^ 2

   Next i

   

   Dim nVEC As Range     'задаём массив для нормированного вектора

   Set nVEC = Range(Cells(Rw + 2, Cl), _

                   Cells(Rw + 2, Cl + n - 1))

   'нормируем

   For i = 1 To n

   nVEC.Cells(i) = VEc.Cells(i) / D

   Next i

   nVEC.Interior.Color = RGB(11, 200, 11)

   Cells(Row0, Col0).Activate

   End Sub

Для того чтобы пользователю было удобно работать с макросом создадим специальную кнопку с надписью «Создать вектор и нормировать его». Создадим и отформатируем кнопку, как мы это делали при выполнении Задачи  1. На листе 1 в редакторе VBA введём следующий код:

Private Sub CommandButton1_Click()

 Call norm

End Sub

Таким образом мы связали кнопку и наш макрос.

Проверим программу на следующем примере.

Пример 2.: (см. рисунок 4)

1. Откроем приложение Microsoft Office Excel

2.На рабочем листе  «лист 1» введём значение «m=7» в ячейку C3

3.Выделим ячейку С3 и нажмём на кнопку

4.Получим случайно сгенерированный вектор размерности  7(выделен жёлтым)  и нормированный  вектор

5.Резултаты вычисления верны. Программа работает.

Примечания:

  •  Если при нажатии на кнопку ячейка с текстом «n=7» не выделена, то пользователь будет уведомлён в специальном окне о необходимости выделить ячейку (см. рисунок 5)
  •  Если пользователь введёт значения n равное 0, то будет уведомлён о необходимости исправить ошибку.(см рисунок 6)
  •  Размерность вектора можно ввести в любую ячейку на любом листе. Программа всё равно будет работать.

Рисунок 4.

Рисунок 5.

Рисунок 6.


 

А также другие работы, которые могут Вас заинтересовать

25906. Административная ответственность: понятие и виды 35.5 KB
  Административная ответственность это особый вид юридической ответственности которой присущи все признаки последней она наступает на основе норм права за нарушение правовых норм конкретизируется юрисдикционными актами компетентных органов связана с государственным принуждением. Повтор только другими словами можно убрать Как разновидность юридической ответственности административная ответственность обладает всеми признаками присущими юридической ответственности в целом: представляет собой меру государственного воздействия...
25907. Понятие и система государственной службы в РФ 53 KB
  Понятие и система государственной службы в РФ. В зависимости от форм собственности на которой базируются органы объединения учреждения и организации где люди осуществляют служебную деятельность а также характера выполняемых работниками функций служба может быть государственной муниципальной служба в органах местного самоуправления и служба в негосударственных объединениях хозяйственных товариществах и обществах акционерных обществах кооперативах общественных объединениях и т. Под государственной службой в широком смысле понимается...
25908. Правовой статус государственных гражданских служащих и порядок прохождения ими службы 95.5 KB
  На государственного служащего возлагаются следующие общие обязанности: исполнять приказы распоряжения и указания вышестоящих в порядке подчиненности руководителей изданные в пределах их должностных полномочий за исключением явно незаконных; поддерживать уровень квалификации достаточный для исполнения должностных полномочий; соблюдать нормы служебной этики и установленный в государственном органе служебный распорядок; не совершать действий затрудняющих работу органов государственной власти а также приводящих к подрыву авторитета...
25909. Забезпечення подальшого стійкого енергопостачання 161.44 KB
  На Україні прийнято закон про енергозбереження, який вимагає вирішення питань використання енергії з урахуванням економічних аспектів. На підприємствах ефективність заходів стосовно енергозбереження вимагають документи, в яких потребується скорочувати рівень платежів за забруднення навколишнього середовища.