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.


 

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

7369. Исследование цепи второго порядка. Поиск входной и предаточной характеристики 619.5 KB
  Задание к курсовой работе В курсовой работе необходимо исследовать цепь второго порядка. Для цепи необходимо найти ее входную и передаточную характеристику, определить переходную и импульсную характеристику, написать уравнения цепи через переменные ...
7370. Разработать и отладить программу расчета выражения 121.5 KB
  Разработать и отладить программу расчета выражения Содержание Введение Задание с выбором варианта коэффициентов Описание алгоритма задачи Описание отдельных процедур Листинг программы с комментариями Листинг результатов...
7371. Проектирование и прогнозирование механических свойств однонаправленного слоя из композиционного материала 1.07 MB
  Проектирование и прогнозирование механических свойств однонаправленного слоя из композиционного материала Данное пособие призвано помочь студентам при изучении основ механики, конструирования и изготовления изделий из композиционных материалов. Пред...
7372. Радіозв’язок. Методичні вказівки до виконання лабораторних робіт 142.5 KB
  Лабораторна робота №1 Визначення типу прольоту РРЛ прямої видимості Навчальна мета. Отримати практичні навички побудови профілю прольоту каналу радіозв’язку прямої видимості. Опанувати методику визначення коефіцієнту посла...
7373. Финансовое обеспечение муниципальных услуг дошкольного образования и его совершенствование (по материалам ДОУ 18 города Липецка) 576 KB
  Теоретические основы деятельности и источники финансирования бюджетных учреждений сферы дошкольного образования; проанализировать существующий механизм финансирования дошкольных образовательных учреждений; рассмотреть совершенствование формирования механизма финансирования дошкольных учреждений.
7374. Про що говорить музика 54 KB
  Тема:Про щоговорить музика Мета: формувати уміння сприймати музику як виражальне мистецтво ознайомити з поняттям нотний стан, скрипковий ключ, нота вдосконалювати вокальні, танцювальні навички розвивати ритмічний слух...
7375. Объектно-ориентированное программирование 1.32 MB
  Объектно-ориентированное программирование Введение в объектно-ориентированное программирование Объектно-ориентированное программирование (ООП) - основная парадигма программирования 80-90-х годов, которая по всей видимости сохранится и в т...
7376. Методика организации воспитательного процесса 204.5 KB
  Методика организации воспитательного процесса 1. Организационное строение коллектива Организация коллектива в детских учреждениях происходит по различным принципам. Дети могут разделяться на группы по признаку школы при этой системе в интернатных у...
7377. Разработка бизнес-плана СТО 269 KB
  Разработка бизнес-плана СТО Резюме. Основным назначением первого и второго технических обслуживании является снижение интенсивности изнашивания деталей, выявление и предупреждение отказов и неисправностей путем своевременного выполнения контрольно-...