Произведение матриц. Требуется написать программу, вычисляющую произведение матриц A и B. Как исходные матрицы A и B, так и результат (матрица C=AxB) находятся в текстовых файлах (это могут быть, например, файлы ‘Input.txt’ и ’Output.txt’). Формат файла ‘Input.txt’ следующий: 2 3 1 2 0 4 5 1 3 4 1 0 2 3 3 0 9 2 3 4 3 1 Здесь описаны две матрицы. В первой строке файла записано число строк и столбцов для первой матрицы, затем приводятся ее элементы. Далее (строки 4-7) описана вторая матрица. Аналогичный формат имеет выходной файл (одна матрица). При объявлении типов файлов используйте указатель Text.
Алексей
19.05.2004 11:06
Приветик. Эта задача считает произведение матрицы на строку. Эта простенькая задача позволяет решить твою задачу. А вывод и чтение текстовых документов - всего лишь цикл. Думай...
procedure TForm1.Button1Click(Sender: TObject); begin close; end;
procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); begin value:='0000;1; '; end;
procedure TForm1.StringGrid2GetEditMask(Sender: TObject; ACol, ARow: Integer; var Value: String); begin value :='00000;1; '; end;
procedure TForm1.FormActivate(Sender: TObject); var i,j: byte; begin
with stringgrid1 do for i:=0 to Colcount-1 do for j:=0 to RowCount-1 do cells[i,j]:='0'; with stringGrid2 do for i:=0 to rowcount-1 do cells[0,i]:='0';
end;
function Tform1.MyStrToInt (s: string): integer; var k,code: integer; begin while (s<>'') and (s[length(s)]=' ') do delete (s,length(s),1); if s<>'' then begin Val (s,k,code); if code=0 then MYSTRTOINT:=k else MyStrToInt:=0; end else MyStrToInt:=0; end;
procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); var i,j,sum: integer; begin for j:=0 to stringGrid1.RowCount-1 do begin sum:=0; for i:=0 to StringGrid1.ColCount-1 do begin sum:=sum+mystrtoint (stringgrid1.cells[i,j])*mystrtoint (stringgrid2.cells[0,i]); end; stringgrid3.Cells[0,j]:=inttostr(sum); end; end;
procedure TForm1.StringGrid2SetEditText(Sender: TObject; ACol, ARow: Integer; const Value: String); var i,j,sum: integer; begin for j:=0 to stringGrid1.RowCount-1 do begin sum:=0; for i:=0 to StringGrid1.ColCount-1 do begin sum:=sum+mystrtoint (stringgrid1.cells[i,j])*mystrtoint (stringgrid2.cells[0,i]); end; stringgrid3.Cells[0,j]:=inttostr(sum); end; end;
end.
Пожалуйста, заключайте код в соответствующий тег! Oleg_Z
APAL
19.05.2004 13:08
Про работу с матрицами в разделе "Задачи" есть соответствующая тема "Важно: решения: МАТРИЦЫ, МАССИВЫ. задачи"
APAL
19.05.2004 13:11
to Алексей Этот раздел для TP, а не для Delphi... ;)
Алексей
19.05.2004 17:54
Sorry. Ошибся.
plafon
26.05.2004 4:10
пожалуйста всё таки помогите решить
Altair
26.05.2004 10:46
Значит вот код, он работает. "Перемножение матриц" лабораторная работа.
Цитата
Эта простенькая задача позволяет решить твою задачу. А вывод и чтение текстовых документов - всего лишь цикл. Думай...
Ну здесь тоже нет чтение из файла.
{ ”б«(r)ўЁҐ:
‚лзЁб«Ёвм Їа(r)Ё§ўҐ¤ҐЁҐ Єў ¤а вле ¬ ваЁж
}const
Count = 3; {Є(r)«-ў(r) бв(r)«Ўж(r)ў Ё бва(r)Є ¬ ваЁжл}var
Mat1, Mat2, {ўў(r)¤Ё¬лҐ ¬ ваЁжл}
ResMat1 : array[1..Count, 1..Count] of integer; {१г«мвЁагой п}
i, x, y, R : integer;
flag : boolean;
begin
Writeln('‚ў(r)¤ ЇҐаў(r)(c) ¬ ваЁжл (жҐ«лҐ зЁб« )');
for y := 1to Count dofor x := 1to Count dobegin
Write('Mat1[', x, ',', y,'] : ');
Readln(Mat1[x, y]);
end;
Writeln('‚ў(r)¤ ўв(r)а(r)(c) ¬ ваЁжл (жҐ«лҐ зЁб« )');
for y := 1to Count dofor x := 1to Count dobegin
Write('Mat2[', x, ',', y,'] : ');
Readln(Mat2[x, y]);
end;
{Ї(r)¤бзҐв ¬ ваЁжл AxB}for y := 1to count do{бЇгбЄ Ґ¬бп ўЁ§ Ї(r) бва(r)Є ¬}for x := 1to Count do{Ё¤Ґ¬ Ї(r) н«Ґ¬Ґв ¬ бва(r)Є ўЇа ў(r)}begin
R := 0; {(r)Ўг«пҐ¬ б㬬㠯а(r)Ё§ўҐ¤ҐЁ(c)}for i := 1to Count do{Ё¤Ґ¬ Ї(r)¤ Ј(r)аЁ§(r)в «Ё Mat1 Ё Ї(r) ўҐавЁЄ «Ё}
r := R + mat1[i, y]*Mat2[x, i]; {Mat2; г¬(r)¦ Ґ¬ Ё ¤(r)Ў ў«пҐ¬ ў R}
ResMat1[x, y] := R; {Resmat1[x, y] = १г«мв в = R}end;
Writeln('AxB='); {ўлў(r)¤Ё¬ нЄа }for y := 1to Count dobeginfor x := 1to Count do
Write(ResMat1[x, y]:4);
Writeln;
end;
END. {Є(r)Ґж Їа(r)Ја ¬¬л}
Текст в кодировке DOS (кодовая страница 866)
Guest
20.11.2005 22:33
народ все конечно круто, а не кто на поможет решить задачу с перемножение к матриц размером MxN за время nlogn ? помогите очень надо!!! и желательно поскорее!!! пасиба.
p.s. говорят както через динамичесоке програмирование решается!!! Вот хотелось бы узнать ка!!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.