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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2010, 21:35   #1
Mila Volkova
Новичок
Джуниор
 
Регистрация: 11.12.2010
Сообщений: 2
По умолчанию умножение матриц

Здравствуйте.
Прошу помощи. Написала (вернее, пыталась написать программу), которая перемножит 2 матрицы, считанных из одного файла и выведет результат на экран. В итоге не смогла даже скомпилировать.

Что получилось:

program soucin_matic;
const X=1000;

var
mx1: array[1..X,1..X] of longint;
mx2: array[1..X,1..X] of longint;
mx3: array[1..X,1..X] of longint;
n1,m1,n2,m2: integer;
i,j,k,s: integer;

procedure OpenFile(Fil1:string);
var
F: text;
il, jl: integer;
s: string;

begin
Assign(F,Fil1);

Reset(F);
Read(F,n1);
Readln(F,m1);
for jl:=1 to m1 do
for il:=1 to n1 do begin
Read(F,mx1[il,jl]);
end;
Close(F);

Assign(F,Fil1);
Reset(F);
end;

Read(F,n2);
Readln(F,m2);
for jl:=1 to m2 do
for il:=1 to n2 do begin
Read(F,mx2[il,jl]);
end;
Close(F);

end;

begin
OpenFile(matice.in);
if n1<>m2 then begin
Writeln('Ошибка!');
for k:=1 to m1 do begin
for i:=1 to n2 do begin
s:=0;
for j:= 1 to m2 do begin
s:=s+mx1[j,k]*mx2[i,j];
end;
mx3[i,k]:=s;
end;
end;
write(i,k);
writeln(s);
end.

В паскале программирую 2 месяц, поэтому просьба не критиковать меня лично, сама знаю, что ума не палата. Но если будут комментарии по делу, буду благодарна.
Mila Volkova вне форума Ответить с цитированием
Старый 24.12.2010, 22:18   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Так получше. По крайней мере компилируется.
Ты обе исходные матрицы из одного файла читаешь ?

Код:
program soucin_matic;
const X=100;
var
mx1: array[1..X,1..X] of longint;
mx2: array[1..X,1..X] of longint;
mx3: array[1..X,1..X] of longint;
n1,m1,n2,m2: integer;
i,j,k,s: integer;

procedure OpenFile(Fil1:string);
var
F: text;
il, jl: integer;
s: string;
begin
Assign(F,Fil1);
Reset(F);
Read(F,n1);
Readln(F,m1);
for jl:=1 to m1 do
for il:=1 to n1 do begin
Read(F,mx1[il,jl]);
end;
Close(F);
Assign(F,Fil1);
Reset(F);
Read(F,n2);
Readln(F,m2);
for jl:=1 to m2 do
for il:=1 to n2 do begin
Read(F,mx2[il,jl]);
end;
Close(F);
end;

begin
OpenFile('matice.in');
if n1<>m2 then Writeln('Ошибка!');
for k:=1 to m1 do begin
for i:=1 to n2 do begin
s:=0;
for j:= 1 to m2 do begin
s:=s+mx1[j,k]*mx2[i,j];
end;
mx3[i,k]:=s;
end;
end;
write(i,k);
writeln(s);
end.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 24.12.2010, 22:39   #3
Mila Volkova
Новичок
Джуниор
 
Регистрация: 11.12.2010
Сообщений: 2
По умолчанию

Спасибо.
Да, нужно, чтобы из одного.
Мда, скомпилировать получается, но тут же ошибка выдаётся. Буду думать дальше. Мне почему-то кажется, что на выводе ошибка.
Mila Volkova вне форума Ответить с цитированием
Старый 25.12.2010, 14:17   #4
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Если из одного, зачем ты его два раза открываешь?
И , хотя это не принципиально, обычно просмотр матрицы с помощью двух циклов делают сначала по строкам, потом по столбцам.
В самой первой теме раздела "Помощь студентам" есть миллион исходников посвященных работе с матрицами.

Код:
program soucin_matic;
const X=100;
var
mx1: array[1..X,1..X] of longint;
mx2: array[1..X,1..X] of longint;
mx3: array[1..X,1..X] of longint;
n1,m1,n2,m2: integer;
i,j,k,s: integer;

procedure OpenFile(Fil1:string);
var
F: text;
il, jl: integer;
s: string;
begin
Assign(F,Fil1);
Reset(F);
Read(F,n1);
Readln(F,m1);
for jl:=1 to m1 do
for il:=1 to n1 do begin
Read(F,mx1[jl,il]);
end;
//Close(F);
//Assign(F,Fil1);
//Reset(F);
Read(F,n2);
Readln(F,m2);
for jl:=1 to m2 do
for il:=1 to n2 do begin
Read(F,mx2[jl,il]);
end;
Close(F);
end;

begin
OpenFile('matice.in');
if n1<>m2 then Writeln('Îøèáêà!');
for k:=1 to m1 do begin
 for i:=1 to n2 do begin
 s:=0;
 for j:= 1 to m2 do begin
  s:=s+mx1[k,j]*mx2[j,i];
 end;
 mx3[k,i]:=s;
 end;
end;
write(i,k);
writeln(s);
// Output
for i:=1 to n1 do
 begin
 for j:=1 to m2 do
  write (mx3[i,j],' ');
 writeln;
 end;
end.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Умножение матриц Си Slame Помощь студентам 4 16.12.2010 14:34
Умножение матриц) Guzal Общие вопросы C/C++ 1 26.10.2010 21:56
Умножение матриц Alyonka_v Помощь студентам 2 18.08.2009 21:51