1 / 29 / 0
Регистрация: 21.08.2013
Сообщений: 379
1

Написал процедуру

03.10.2013, 08:38. Показов 512. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал процедуру хотелось бы узнать правильно ли происходит умножение матрицы
Pascal
1
2
3
4
5
6
7
8
9
10
11
procedure MulOfMatrix(m1, m2: Matrix; var res: Matrix; n, m: integer);
var
  i, j, k: integer;
begin
  for i:=1 to m do
  for j:=1 to m do begin
  res[i,j]:=0;
  for k:=1 to n do
  res[i,j] := m1[i,j]*m2[i,k];
  end;
end;
весь код думаю смыла нет выкладывать
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2013, 08:38
Ответы с готовыми решениями:

Вписать 4 подпрограммы: процедуру без параметров, процедуру с параметрами-значениями (параметром переменной), функцию
var i, N: integer; A, P, S: real; begin writeln('Введите вещественное число:'); ...

Правильно ли написал программу?
Всем привет.Вот решиль задачу но не знаю правильно.Зарнее спасибо.Вот задачка. Даны четыре точки...

Правильно ли написал программу?
Всем привет.Вот решиль задачу но не знаю правильно.Зарнее спасибо.Вот задачка. Даны четыре точки...

Правильно написал программу?ошибку выдает
uses GraphABC; var i,x0,y0,x1,y1,k,a: integer; x,y: real; procedure Draw(x0,y0,k:...

10
696 / 570 / 414
Регистрация: 31.03.2013
Сообщений: 1,029
03.10.2013, 08:54 2
TT_TT,
Pascal
1
2
3
4
5
6
7
for i := 1 to m do
  for j := 1 to m do
    begin
      c[i, j] := 0;
      for k := 1 to m do
        c[i, j] := c[i, j] + a[i, k] * b[k, j]
    end;
0
1 / 29 / 0
Регистрация: 21.08.2013
Сообщений: 379
03.10.2013, 09:07  [ТС] 3
Хм.. в таком случае если я захочу произвести вычитание Еденичной матрицы:
1 0 0
0 1 0
0 0 1

то это должно выглядеть так?

Pascal
1
res[i,j] := m1[i,k]*m2[k,j]-m3[i,j];
Добавлено через 1 минуту
Естественно завадемо написать для Ед матрицы процедуру и т.д.
0
696 / 570 / 414
Регистрация: 31.03.2013
Сообщений: 1,029
03.10.2013, 09:21 4
Цитата Сообщение от TT_TT Посмотреть сообщение
произвести вычитание Еденичной матрицы
Цитата Сообщение от TT_TT Посмотреть сообщение
res[i,j] := m1[i,k]*m2[k,j]-m3[i,j];
А зачем Вы умножаете?
Можно даже не создавать единичную матрицу, а просто вычесть 1 по диагонали.
Pascal
1
2
3
4
5
for i:=1 to m do
  for j:=1 to m do
    begin
       if i=j then c[i, j]:=c[i, j]-1;
    end;
0
1 / 29 / 0
Регистрация: 21.08.2013
Сообщений: 379
03.10.2013, 09:31  [ТС] 5
Дак само задание C=a*b-e
a,b матрицы 3х3
е - ед. матрица

Добавлено через 2 минуты
Цитата Сообщение от Samhain Посмотреть сообщение
Pascal
1
2
3
4
5
 for i:=1 to m do
 for j:=1 to m do
 begin
 if i=j then c[i, j]:=c[i, j]-1;
 end;
к тому же куда щас этот код вставить не пойму
0
696 / 570 / 414
Регистрация: 31.03.2013
Сообщений: 1,029
03.10.2013, 09:34 6
TT_TT,
Цитата Сообщение от Samhain Посмотреть сообщение
for i := 1 to m do
for j := 1 to m do
begin
c[i, j] := 0;
for k := 1 to m do
c[i, j] := c[i, j] + a[i, k] * b[k, j]
end;
и чем же Вам не понравился этот алгоритм умножения матриц?
возьмите ручку и листочек и попробуйте умножить матрицы Вашим способом.
0
1 / 29 / 0
Регистрация: 21.08.2013
Сообщений: 379
03.10.2013, 09:44  [ТС] 7
да нет это я понял в чём была ошибка и посмотрел как умножаются матрицы я имею ввиду что ведь ничего если я написал такой код

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
program m3;
uses crt;
type
  Matrix = array [1..10, 1..10] of real;
var
  matr1, matr2,matr3: Matrix;
  resmatr: Matrix;
  n, m: integer;
  min, max: real;
  ask: char;
 
procedure EnterMatrixSize(var x,y: integer);
begin
x:=3; y:=3;
end;
 
procedure EnterMatrix (x,y: integer; var M: Matrix);
var
  i,j: integer;
begin
  for i:=1 to x do
  for j:=1 to y do begin
  write('M[',i,',',j,'] = ');
  readln(M[i,j]);
  end;
end;
 
procedure GenerateMatrix (x,y: integer; var M: Matrix);
var
  i,j: integer;
begin
  for i:=1 to x do
  for j:=1 to y do
  M[i,j] := random*(max-min)+min;
end;
 
Procedure EdenMatrix(x,y:integer; var M:Matrix);
          var i,j:integer;
          begin
          for i:=1 to x do
          for j:=1 to y do
          if i=j then M[i,j]:=1 else M[i,j]:=0;
end;
 
procedure PrintMatrix(x,y: integer; M: Matrix);
var
  i,j: integer;
begin
  for i:=1 to x do begin
  for j:=1 to y do
  write(M[i,j]:6:1);
  writeln;
  end;
end;
 
procedure MulOfMatrix(m1, m2,m3: Matrix; var res: Matrix; n, m: integer);
var
  i, j, k: integer;
begin
  for i:=1 to m do
  for j:=1 to m do begin
  res[i,j]:=0;
  for k:=1 to n do
  res[i,j] := m1[i,k]*m2[k,j]-m3[i,j];
  end;
end;
 
begin
  EnterMatrixSize(n,m);
   randomize;
  write('Ââåäèòå íèæíþþ ãðàíèöó ìàòðèöû ');
  readln(min);
  write('Ââåäèòå âåðõíþþ ãðàíèöó ìàòðèöû ');
  readln(max);
  GenerateMatrix(n, m, matr1);
  GenerateMatrix(m, n, matr2);
  EdenMatrix(n, m, matr3);
  writeln('Ïåðâàÿ ìàòðèöà ');
  PrintMatrix(n, m, matr1);
  writeln('Âòîðàÿ ìàòðèöà ');
  PrintMatrix(m, n, matr2);
  writeln('Òðåòüÿ ìàòðèöà ');
  PrintMatrix(m, n, matr3);
  MulOfMatrix(matr1, matr2, matr3, resmatr, n, m);
  writeln('Âîò òèïî îòâåò ');
  PrintMatrix(n, n, resmatr);
  end.
Добавлено через 3 минуты
Если можно написать покороче хотелось бы посмотреть как.Вот само задание
Составить программу, которая выводит на экран элементы матрицы С:
где А и В – матрицы размерности ,3х3
Е – единичная матрица.
и как я понял "выводит на экран элементы матрицы С:" то надо выводить все матрицы a,b,e и сам ответ с?

Добавлено через 31 секунду
или только с?

Добавлено через 1 минуту
и если в программе есть ошибки хотелось бы если возможно на них указали и поправили.
0
696 / 570 / 414
Регистрация: 31.03.2013
Сообщений: 1,029
03.10.2013, 10:19 8
TT_TT,
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
const n=3;
type
  Matrix = array [1..n, 1..n] of real;
var
  matr1, matr2,matr3: Matrix;
  resmatr: Matrix;
  min, max: real;
 
procedure EnterMatrix(var M: Matrix);
var i,j: integer;
begin
  for i:=1 to n do
    for j:=1 to n do
      begin
        write('M[',i,',',j,'] = ');
        readln(M[i,j]);
      end;
end;
 
procedure GenerateMatrix(max,min:real; var M:Matrix);
var i,j: integer;
begin
  randomize;
  for i:=1 to n do
    for j:=1 to n do
      M[i,j] := random*(max-min)+min;
end;
 
Procedure EdenMatrix(var M:Matrix);
var i,j:integer;
begin
  for i:=1 to n do
    for j:=1 to n do
      if i=j then M[i,j]:=1 else M[i,j]:=0;
end;
 
procedure PrintMatrix(M: Matrix);
var i,j: integer;
begin
  for i:=1 to n do
    begin
      for j:=1 to n do
        write(M[i,j]:6:1);
      writeln;
    end;
end;
 
procedure MulOfMatrix(m1,m2:Matrix; var res:Matrix);
var i, j, k: integer;
begin
  for i:=1 to n do
    for j:=1 to n do
      begin
        res[i,j]:=0;
        for k:=1 to n do
          res[i,j] := res[i,j]+m1[i,k]*m2[k,j]
      end;
end;
 
procedure subtr(m1,m2:matrix;var m3:matrix);
var i,j:integer;
begin
  for i:=1 to n do
    for j:=1 to n do
       m3[i, j]:=m1[i, j]-m2[i, j];
end;
 
begin
  write('Введите нижнюю границу матрицы ');
  readln(min);
  write('Введите верхнюю границу матрицы ');
  readln(max);
  GenerateMatrix(max,min,matr1);
  GenerateMatrix(max,min,matr2);
  EdenMatrix(matr3);
  writeln('A');
  PrintMatrix(matr1);
  writeln('B');
  PrintMatrix(matr2);
  writeln('E');
  PrintMatrix(matr3);
  MulOfMatrix(matr1, matr2, resmatr);
  writeln('AxB =');
  PrintMatrix(resmatr);
  writeln('AxB - E =');
  subtr(resmatr,matr3,resmatr);
  PrintMatrix(resmatr);
  readln;
end.

Не по теме:

Правила форума п.3.6. Если какой-либо пост на форуме показался вам полезным, то вы можете выразить свою благодарность, нажав кнопку "Спасибо" внизу самого поста.

1
1 / 29 / 0
Регистрация: 21.08.2013
Сообщений: 379
03.10.2013, 10:24  [ТС] 9
Эмм и ещё всё же хотелось бы узнать ведь тот код который написал я правильный? хоть и большой?.
0
696 / 570 / 414
Регистрация: 31.03.2013
Сообщений: 1,029
03.10.2013, 10:28 10
Цитата Сообщение от TT_TT Посмотреть сообщение
тот код который написал я правильный?
процедура MulOfMatrix умножает не правильно, и соответственно вычитание единичной матрицы тоже.
1
1 / 29 / 0
Регистрация: 21.08.2013
Сообщений: 379
03.10.2013, 10:39  [ТС] 11
Ясно спс за объяснение буду дальше практиковаться)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2013, 10:39
Помогаю со студенческими работами здесь

Написал програмку. Криво работает сортировка.
program n19; uses crt; const n=4; m=5; o=5; var name :string; i,j,max,sor : integer; a:...

Написал задачу по егэ, но баллов получил не много
Здравствуйте! Пришли результаты по егэ, и за одну самую тяжелую задачу получил только 1 из 4...

Написал массив и нашел максимум. Оформить функцией
Здравствуйте, помогите пожалуйста. Написал массив и нашел максимум. Помогите оформить функцией....

Опишите процедуру сложения матриц А и В. Опишите процедуру транспонирования матрицы А
Опишите процедуру добавления матриц А и В. опишите процедуру транспонирования матрицы А. Опишите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru