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.


 

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

81575. Особенности энергетического обмена в мышцах. Креатинфосфат 126.43 KB
  Принято считать что процессом непосредственно связанным с работающим механизмом поперечнополосатого мышечного волокна является распад АТФ с образованием АДФ и неорганического фосфата. Возникает вопрос: каким образом мышечная клетка может обеспечить свой сократительный аппарат достаточным количеством энергии в форме АТФ т. каким образом в процессе мышечной деятельности происходит непрерывный ресинтез этого соединения Прежде всего ресинтез АТФ обеспечивается трансфосфорилированием АДФ с креатинфосфатом. Данная реакция...
81576. Биохимические изменения при мышечных дистрофиях и денервации мышц. Креатинурия 106.28 KB
  Общими для большинства заболеваний мышц прогрессирующие мышечные дистрофии атрофия мышц в результате их денервации тенотомия полимиозит некоторые авитаминозы и т. являются резкое снижение в мышцах содержания миофибриллярных белков возрастание концентрации белков стромы и некоторых саркоплазматических белков в том числе миоальбумина. Наряду с изменениями фракционного состава мышечных белков при поражениях мышц наблюдается снижение уровня АТФ и креатинфосфата.
81577. Химический состав нервной ткани. Миелиновые мембраны: особенности состава и структуры 152.07 KB
  Данилевский впервые разделил белки мозговой ткани на растворимые в воде и солевых растворах белки и нерастворимые белки. которые разделили белки нервной ткани на 4 фракции: извлекаемые водой 45 раствором КСl 01 раствором NOH и нерастворимый остаток. В настоящее время сочетая методы экстракции буферными растворами хроматографии на колонках с ДЭАЭцеллюлозой и дискэлектрофореза в полиакриламидном геле удалось выделить из ткани мозга около 100 различных растворимых белковых фракций.
81578. Энергетический обмен в нервной ткани. Значение аэробного распада глюкозы 129.8 KB
  На долю головного мозга приходится 23 от массы тела. Следовательно 100 г мозга потребляет в 1 мин 37 мл кислорода а весь головной мозг 1500 г 555 млкислорода. Газообмен мозга значительно выше чем газообмен других тканей в частности он превышает газообмен мышечной ткани почти в 20 раз. Интенсивность дыхания для различных областей головного мозга неодинакова.
81579. Биохимия возникновения и проведения нервного импульса. Молекулярные механизмы синаптической передачи 109.17 KB
  Молекулярные механизмы синаптической передачи Большинство исследователей придерживаются мнения что явления электрической поляризации клетки обусловлены неравномерным распределением ионов К и Nпо обе стороны клеточной мембраны. Мембрана обладает избирательной проницаемостью: большей для ионов К и значительно меньшей для ионов N. При определенных условиях резко повышается проницаемость мембраны для ионов N. Объясняется это тем что количество ионов N выкачиваемых из клетки с помощью натриевого насоса не вполне точно уравновешивается...
81580. Медиаторы: ацетилхолин, катехоламины, серотонин, γ-аминомаслянная кислота, глутаминовая кислота, глицин, гистамин 107.74 KB
  γАминомасляная кислота выполняет в организме функцию ингибирующего медиатора центральной нервной системы. Действие ГАМК в ЦНС осуществляется путём её взаимодействия со специфическими ГАМКергическими рецепторам Глутаминовая кислота является нейромедиаторной аминокислотой одним из важных представителей класса возбуждающих аминокислот. Эндогенные лиганды глутаминатных рецепторов глутаминовая кислота и аспарагиновая кислота.
81581. Нарушения обмена биогенных аминов при психических заболеваниях. Предшественники катехоламинов и ингибиторы моноаминооксидазы в лечении депрессивных состояний 108.33 KB
  Предшественники катехоламинов и ингибиторы моноаминооксидазы в лечении депрессивных состояний. Например резерпин понижающее артериальное давление средство специфически тормозит процесс переноса катехоламинов в специальные гранулы нейронов и тем самым делает эти амины доступными действию эндогенной МАО. Многие антидепрессанты вещества снимающие депрессию увеличивают содержание катехоламинов в синаптической щели т. К таким веществам в частности относятся имипрамин блокирует поглощение норадреналина нервными волокнами амфетамин...
81582. Физиологически активные пептиды мозга 109.08 KB
  Нейропептиды осуществляют контроль за экспрессией вторичных клеточных мессенджеров, цитокинов и других сигнальных молекул, а также за запуском генетических программ апоптоза, антиапоптозной защиты, усиления нейротрофического обеспечения. Такие регуляторные (модуляторные) влияния устраняют общую дезинтеграцию во взаимодействии сложных и часто разнонаправленных молекулярно-биохимических механизмов
81583. Предмет и задачи биологической химии. Обмен веществ и энергии, иерархическая структурная организация и самовоспроизведение как важнейшие признаки живой материи 106.91 KB
  Обмен веществ и энергии иерархическая структурная организация и самовоспроизведение как важнейшие признаки живой материи. Она изучает химическую природу веществ входящих в состав живых организмов их превращения а также связь этих превращений с деятельностью клеток органов и тканей и организма в целом. Из этого определения вытекает что биохимия занимается выяснением химических основ важнейших биологических процессов и общих путей и принципов превращений веществ и энергии лежащих в основе разнообразных проявлений жизни. Важнейшим...