Перемножение матрицы на массив

Предыдущая тема Следующая тема Перейти вниз

Перемножение матрицы на массив

Сообщение  Замабувараев в Вт Ноя 20, 2012 9:08 pm

По программированию задали задачу перемножить двумерную матрицу (то есть двумерный массив) из n строк и m стролбцов на массив. Массив можно представить как матрицу из одного столбца размером m. В результате перемножения получается тоже матрица из одного столбца размером в n. Итак, исходный код:
Код:

   ' Перемножение матриц
   
   Dim a() As Integer ' матрица
   Dim b() As Integer ' массив
   Dim x() As Integer ' результат
   Dim n As Integer, m As Integer ' размер матрицы
   Dim i As Integer, j As Integer
   Print("Введи размер матрицы (кол-во строк)(кол-во столбцов)")
   Input n, m
   
   ' Инициализация
   Redim a(n, m)
   Redim b(m)
   Redim x(n)
   
   Print("Введи матрицу строки -> стролбцы")
   For i = 0 To n
      For j = 0 To m
         Input a(i,j)
      Next j
   Next i
   Print("Введи массив")
   For i As Integer = 0 To m
      Input b(i)
   Next i

   ' Перемножение
   For i = 0 To n
      For j = 0 To m
         x(i) += a(i,j) * b(j)
      Next j
   Next i
   
   ' распечатать
   For i = 0 To n
      Print(Str(x(i)) & " ")
   Next i
   ' очистка
   Erase(a)
   Erase(b)
   Erase(x)
Если сохранить в кодировке utf8, то на сонсоль выходят русские буквы.
В скором времени усовершенствую программу для перемножения двух матриц.
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: Перемножение матрицы на массив

Сообщение  trew в Вт Ноя 20, 2012 9:26 pm

А на FB решение преподаватель примет? Или придется переписывать на какой другой язык?

trew

Сообщения : 331
Дата регистрации : 2010-10-14

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: Перемножение матрицы на массив

Сообщение  Замабувараев в Ср Ноя 21, 2012 8:23 am

Не примет, потому что мы си проходим.
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: Перемножение матрицы на массив

Сообщение  Замабувараев в Ср Ноя 21, 2012 8:29 am

Ещё нашёл не ошибку, но некоторую тонкость: так как массивы нумеруются с нуля и верхняя граница входит в массив, то элементов в матрице получается больше.
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: Перемножение матрицы на массив

Сообщение  Замабувараев в Ср Ноя 21, 2012 2:52 pm

Доработал программу, чтобы она перемножала матрицу n1*m1 на n2*m2. При этом m1 должно быть равно n2.
Код:

   Print("Умножение матриц")
   
   Dim a() As Integer ' матрица1
   Dim b() As Integer ' матрица2
   Dim x() As Integer ' результат
   Dim As Integer n1, m1 ' размер первой матрицы
   Dim As Integer n2, m2 ' размер второй матрицы
   Print("Введи размер первой матрицы (кол-во строк)(кол-во столбцов)")
   Input n1, m1
   Print("Введи размер второй матрицы (кол-во строк)(кол-во столбцов)")
   Input n2, m2
   n1-=1 ' Уменьшаем на единицу размеры, так как массивы нумеруются с нуля
   m1-=1
   n2-=1
   m2-=1
   ' Проверки
   If n1 >= 0 AndAlso m1 >= 0 AndAlso n2 >= 0 AndAlso m2 >= 0 Then
      If m1 = n2 Then
         Dim As Integer i, j, k
         ' Инициализация
         Redim a(n1,m1), b(m1,m2), x(n1,m2)
         
         Print("Введи первую матрицу: строки -> стролбцы")
         For i = 0 To n1
            For j = 0 To m1
               Input a(i,j)
            Next j
         Next i
         Print("Введи вторую матрицу: строки -> стролбцы")
         For i = 0 To n2
            For j = 0 To m2
               Input b(i,j)
            Next j
         Next i

         ' Перемножение
         For i = 0 To n1
            For j = 0 To m2
               For k = 0 To m1
                  x(i,j) += a(j,k) * b(k,j)
               Next k
            Next j
         Next i
         
         ' распечатываем полученную матрицу
         Print("В результате получена матрица")
         For i = 0 To n1
            For j = 0 To m2
               ' ставим запятую в конце, чтобы форматировать вывод
               Print Str(x(i,j)),
            Next j
            ' Чтобы перейти на новую строку
            Print("")
         Next i
         ' очистка
         Erase a, b, x
      Else
         Print("Количество строк во второй матрице должно совпадать с количеством столбцов в первой матрице")
      End If
   Else
      Print("Матрицы не могут иметь нулевые размеры")
   End If
avatar
Замабувараев

Сообщения : 99
Дата регистрации : 2008-08-20
Возраст : 33
Откуда : Красноярск

Посмотреть профиль http://www.freebasic.su

Вернуться к началу Перейти вниз

Re: Перемножение матрицы на массив

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения