Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2009, 21:54   #1
Diez
 
Регистрация: 03.02.2009
Сообщений: 6
По умолчанию Прошу помощи. Снова Матрицы

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

На данный момент есть матрицы: 3(colum)*2(rows) и 3*3

Данные матрицы нужно программно умножить в среде Delphi. Искал на форумах, в частности и здесь по критерию: "Умножение матриц", но из найденного ничего не понял.

Если Вас не затруднит, то не могли бы Вы помочь мне кодом и комментариями к нему.

Заранее благодарен, Артем.
Diez вне форума Ответить с цитированием
Старый 03.02.2009, 21:55   #2
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
но из найденного ничего не понял.
Так зачем Вам еще один код?
puporev вне форума Ответить с цитированием
Старый 03.02.2009, 22:06   #3
Diez
 
Регистрация: 03.02.2009
Сообщений: 6
По умолчанию

Возможно он будет прокомментирован...

Допустим есть:

mat1:array[1..10, 1..10] of real; //первая матрица

mat2:array[1..10, 1..10] of real; //вторая матрица

mat3:array[1..10, 1..10] of real; //результирующая матрица

stolb1,strok1: integer // кол-во столбцов и строк для первой матрицы

Вторая матрица квадратная.

Вот как умножить эти матрицы?
Diez вне форума Ответить с цитированием
Старый 03.02.2009, 22:29   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Выкладывать полный код не буду.. Остальное сами напишите.
Код:
var
mat1:array[1..10, 1..10] of real; {первая матрица}
mat2:array[1..10, 1..10] of real; {вторая матрица  }
mat3:array[1..10, 1..10] of real; {результирующая матрица       }
stolb1,strok1,strok2,stolb2: integer;
i,j,k : integer;

.........................
ввод матриц
.........................

for i:=1 to strok1 do
 begin
 for j:=1 to stolb2 do
  begin
  mat3[i,j] := 0;
  for k:=1 to strok2 do
   mat3[i,j] := mat3[i,j] + mat1[i,k]*mat2[k,j];
  end;
 end;

...............
вывод. Размерность конечной матрицы - mat3[strok1,stolb2]
...............
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 03.02.2009, 22:48   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
const k=3;
      l=2;
var a:array[1..k,1..l]of integer;//первая матрица 3*2
    b,c:array[1..k,1..k]of integer;//вторая и результирующая матрицы 3*3
    i,j,p:integer;
begin
randomize;
writeln('Matrica A:'); //создаем первую
for i:=1 to k do
   begin
     for j:=1 to l do
       begin
         a[i,j]:=random(9)+1;
         write(a[i,j]:3);
       end;
     writeln;
   end;
readln;
writeln('Matrica B:');//создаем вторую
for i:=1 to l do
   begin
     for j:=1 to k do
       begin
         b[i,j]:=random(9)+1;
         write(b[i,j]:3);
       end;
     writeln;
   end;
readln;
for p:=1 to k do//процесс умножения прочитай в учебнике математики, или в Википедии
for j:=1 to k do
   begin
     c[k,j]:=0;
     for i:=1 to k do
       begin
         c[p,j]:=c[p,j]+a[p,i]*b[i,j];
       end;
   end;
writeln('Matrica C=A*B:');//вывод итога
for i:=1 to k do
    begin
      for j:=1 to k do
      write(c[i,j]:5);
      writeln;
    end;
readln;
end.
Ну и чего тут сложного?
puporev вне форума Ответить с цитированием
Старый 03.02.2009, 23:04   #6
Diez
 
Регистрация: 03.02.2009
Сообщений: 6
По умолчанию

Код:
var a:array[1..k,1..l]of integer;//первая матрица 3*2
    b,c:array[1..k,1..k]of integer;//вторая и результирующая матрицы 3*3
Получается, что у результирующей матрицы размерность 3*3, хотя должно быть 3*2. Или я что-то не понимаю? =)
Diez вне форума Ответить с цитированием
Старый 03.02.2009, 23:12   #7
alex_fcsm
Участник клуба
 
Аватар для alex_fcsm
 
Регистрация: 10.11.2008
Сообщений: 1,502
По умолчанию

Посмотри тут
Нормальное состояние техники - нерабочее, все остальное частный случай.
alex_fcsm вне форума Ответить с цитированием
Старый 03.02.2009, 23:57   #8
Diez
 
Регистрация: 03.02.2009
Сообщений: 6
По умолчанию

Что-то у меня теперь все нули выводит в результирующей матрице..
Diez вне форума Ответить с цитированием
Старый 04.02.2009, 00:04   #9
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Diez вот на мой исходник. Думаю разберешся, там нечего сложного нету.
Вложения
Тип файла: rar matrica.rar (198.4 Кб, 61 просмотров)
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Старый 05.02.2009, 16:12   #10
spamer
Software Developer
Старожил
 
Аватар для spamer
 
Регистрация: 19.12.2008
Сообщений: 2,070
По умолчанию

Хотя бы отписался - разобрался или нет?
Будь проще и люди к тебе потянутся
spamer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помощи!!! Oksana Общие вопросы Delphi 3 03.03.2007 12:51