Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)

Ответить
Настройки темы
Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)

Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


ПОмогите пожалуйста составить программу для вычисения произведения матриц A,B,C каждая из которых имеет размерность nxn

ВОт составленная мною часть проги, где вводятся сами матрицы, проверьте пожалуйста
program ABC;
var
matrA: array[1..500,1..500] of integer;
matrB: array[1..500,1..500] of integer;
matrC: array[1..500,1..500] of integer;
i: integer;
j: integer;

begin
for i:=1 to n do
for j:=1 to n do
begin
read matrA[i,j];
end;
begin
read matrB[i,j];
end;
begin
read matrC[i,j];
end;

Отправлено: 13:45, 01-10-2010

 

Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


в принципе правильно, вот только нет ввода n и вместо оператора read лучше использовать readln imho, неплохо бы было выводить приглашение на ввод данных. размерность матриц лучше задавать через константу
Код: Выделить весь код
const
R=500;
var
matrA: array[1..R,1..R] of integer;
ввод матриц я бы организовал процедурой
p. s. используйте тег CODE

-------
Information must be free!
Нет границ, есть только препятствия

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:55, 01-10-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
program ABC;
var
const
R=500;
matr1,matr2,matr3,matr4: array[1..R,1..R] of real;
i,j,m,n,p,s,g: integer;
S:real;

Begin
   read (g)                     {размерность матрицы gxg}
   for i:=1 to g do
   for j:=1 to g do
        begin
        read(matr1[i,j]);
        end;
   for m:=1 to g do
   for n:=1 to g do 
        begin
        read(matr2[m,n]);
        end;
   for p:=1 to g do
   for s:=1 to g do
        begin
        read(matr3[p,s]);
        end;

D[i,j] := D[i,j] + (A[i,j]*B[j,i])*C[j,i];
Вот формула

Значит матрицы мною заданны, как теперь задать их перемножение?

Последний раз редактировалось dasha131, 01-10-2010 в 14:56.


Отправлено: 14:02, 01-10-2010 | #3


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Сами матрицы точно правильно введутся?!

Отправлено: 18:19, 01-10-2010 | #4


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


Цитата dasha131:
D[i,j] := D[i,j] + (A[i,j]*B[j,i])*C[j,i];
Вот формула »
судя по формуле это не перемножение матриц, а просто алгоритм вычисления значения элемента матрицы D на основании соответствующих элементов предыдущих 3 матриц, тогда просто это надо выполнить в цикле

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 18:38, 01-10-2010 | #5


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Это не данная формула)) Значит моя ошибка(
МОжет поможете дальше с программой?

Отправлено: 04:57, 02-10-2010 | #6


Аватара для lxa85

Необычный


Contributor


Сообщения: 4462
Благодарности: 994

Профиль | Сайт | Отправить PM | Цитировать


Цитата dasha131:
блок const не надо смешивать с блоком var.
Код: Выделить весь код
program ABC;
const
R=500;
var
matr1,matr2,matr3,matr4: array[1..R,1..R] of real;
i,j,m,n,p,s,g: integer;
S:real;
Begin
   read (g) {размерность матрицы gxg}
   for i:=1 to g do
   for j:=1 to g do
   begin
     read(matr1[i,j]);
   end;
   for m:=1 to g do
   for n:=1 to g do 
   begin
     read(matr2[m,n]);
   end;
   for p:=1 to g do
   for s:=1 to g do
   begin
     read(matr3[p,s]);
   end;
»
Решение простое, "в лоб" можно конечно улучшить, но работать будет без проблем.
Цитата dasha131:
Может поможете дальше с программой? »
Посмотри здесь
И вид общей формулы тут
Результирующую матрицу получать в 2 этапа. Сначала 1*2, затем получившее*3;
Процедуры и функции проходили? Они бы сейчас очень пригодились.

-------
- Я не разрешаю тебе быть плохой! Потому что плохие люди совершают плохие поступки. А это нехорошо!
(Из наставлений 5 летней девочки своей младшей сестре)


Отправлено: 14:23, 02-10-2010 | #7


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
1.program AB;
2.const NMax = 10;{можно увеличить}
3.type Matrix = array [1..NMax, 1..NMax] of Real;  
 
4.procedure MulMatrix(var a, b, c: Matrix; n: Integer);
5.var  i, j, k: Integer;
6.  s: Real;
7.begin
8.     for i := 1 to n do
9.     for j := 1 to n do
10.     begin
11.         s := 0;
12.          for k := 1 to n do
13.          s := s + a[i, k]*b[k, j];
14.          c[i, j] := s
15.     end
 
16.end;
 
17.var  a, b, c: Matrix;
18.    i, j, n: Integer;
19.begin
20.     WriteLn('Введите порядок матрицы');
21.     Write('n = '); ReadLn(n);
 
22.     WriteLn('Введите первую матрицу');
23.     for i := 1 to n do
24.     for j := 1 to n do
25.     Read(a[i, j]);
 
26.     WriteLn('Введите вторую матрицу');
27.     for i := 1 to n do
28.     for j := 1 to n do
29.     Read(b[i, j]);
 
30.     MulMatrix(a, b, c, n);
 
31.     for i := 1 to n do
32.     begin
33.          for j := 1 to n do
34.          Write(c[i, j]:0:6, ' ');
35.          WriteLn
36.     end;
37.     ReadLn
38.end.
Благодарю за помощь) А можно по подробнее разобрать цикл с 4-15строчки, почему вконце 14 и 15й строчек не ставится ";" ? Почему так записали 31-33ю строчки, почему begin между? И еще непонятно значение строчек 35,37...

Отправлено: 15:51, 02-10-2010 | #8


Аватара для Hector

Misanthrope


Сообщения: 474
Благодарности: 38

Профиль | Отправить PM | Цитировать


Цитата dasha131:
Почему так записали 31-33ю строчки, почему begin между? »
это вывод матрицы, внешний цикл выбирает номер строки, а в его теле внутренний выводит значение элементов, а пустой writeln переводит каретку (чтоб красиво было )
Цитата dasha131:
И еще непонятно значение строчек 35,37 »
37 строка просто задержка, чтобы программа после выполнения сразу не закрывалась
Цитата dasha131:
почему вконце 14 и 15й строчек не ставится ";" ? »
код тестировали? imho просто ошибка, забыли поставить
Цитата dasha131:
разобрать цикл с 4-15строчки »
это реализация математического метода умножения матриц

-------
Information must be free!
Нет границ, есть только препятствия


Отправлено: 19:55, 03-10-2010 | #9


Новый участник


Сообщения: 40
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Hector:
код тестировали? imho просто ошибка, забыли поставить »
ВОт это то самое и интересное, все тестировалось, и работало прекрасно без ";" ну и как это объяснить?

А чтобы перемножать три матрицы, нужно новый цикл писать "MulMatrix(var c, d, e: Matrix; n: Integer)" ??

Отправлено: 07:30, 04-10-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - [решено] Помогите с программой для Turbo Pascal (умножение матриц)

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Всё о TURBO PASCAL (обсуждение, помощь в написание программ, ошибки, Pascal ABC) Loading Программирование и базы данных 41 20-05-2015 15:28
Разное - [решено] Помогите плииз с программой для Turbo Pascal dasha131 Программирование и базы данных 17 04-12-2010 14:06
Прочие - Turbo Pascal 7 Sniper Программное обеспечение Windows 30 01-12-2008 16:04
Turbo Pascal, Помогите написать пару программ kirillsp Программирование и базы данных 11 20-11-2006 23:34
Borland Turbo Pascal 7.0 Guest Программирование и базы данных 4 21-09-2004 18:44




 
Переход