Другие языки программирования и технологии
"Работа с матрицами,использование подпрограмм" TurboPascal
Помогите пожалуйста... Написать программу перемножения двух матриц. В программе должна быть предусмотрена проверка возможности умножения одной матрицы на другую в виде функции,возвращающей логический результат. Размер матриц указывается пользователем. Чем проще код программы тем лучше...
Доброго времени суток.
Условием, когда возможно умножение матриц является равенство числа столбцов первой матрицы и строк второй. Проверить не сложно. А само умножение делается в четыре строчки
for i:=1 to M do {цикл по строкам матрицы А}
for j:=1 to K do {цикл по столбцам матрицы В}
for s:=1 to N do {цикл по столбцам А и строкам В}
C[i,j] := C[i,j] + A[i,s]*B[s,j];
Здесь С результирующая матрица, которая до начала выполнения этого куска должна быть обнулена.
Остальное сами.
Удачи!
Условием, когда возможно умножение матриц является равенство числа столбцов первой матрицы и строк второй. Проверить не сложно. А само умножение делается в четыре строчки
for i:=1 to M do {цикл по строкам матрицы А}
for j:=1 to K do {цикл по столбцам матрицы В}
for s:=1 to N do {цикл по столбцам А и строкам В}
C[i,j] := C[i,j] + A[i,s]*B[s,j];
Здесь С результирующая матрица, которая до начала выполнения этого куска должна быть обнулена.
Остальное сами.
Удачи!
ето сверх-сложно, если делать обобщенно =) если взять конкретный случай и множить 3*3 на 3*3 или 2*2 на 2*2, то впринцыпе не сложно. Дай запрос в тот же гугл на "перемножение матриц pascal", когда я учил его, у нас на курсовую один чел ето здавал.
procedure calculation(m1,n1,m2,n2:integer); {m1,n1,m2,n2 - размерности двух матриц}
var i,j,l,k:integer;
mul:real;
begin
if (n2<>m1) then {проверка на возможность перемножения}
begin
showmessage('Нельзя перемножить');
exit;
end;
SetLength(res,m1,n2);
for i:=0 to (m1-1) do
begin
for j:=0 to (n1-1) do
begin
a[i,j]:=StrToFloat(Child.StringGrid1.Cells[j,i]);
end;
end;
for i:=0 to (m2-1) do
begin
for j:=0 to (n2-1) do
begin
b[i,j]:=StrToFloat(Child.StringGrid2.Cells[j,i]);
end;
end;
for i:=0 to (m1-1) do
begin
for j:=0 to (n2-1) do
begin
for l:=0 to (n1-1) do
begin
res[i,j]:=res[i,j]+(a[i,l]*b[l,j]); {матрица результата}
end;
end;
end;
end;
end;
Вам осталось только вычленить в отдельную процедуру проверку на возможность перемножения и, по необходимости, передавать процедуре сами перемножаемые матрицы. У меня они читаются непосредственно с формы.
var i,j,l,k:integer;
mul:real;
begin
if (n2<>m1) then {проверка на возможность перемножения}
begin
showmessage('Нельзя перемножить');
exit;
end;
SetLength(res,m1,n2);
for i:=0 to (m1-1) do
begin
for j:=0 to (n1-1) do
begin
a[i,j]:=StrToFloat(Child.StringGrid1.Cells[j,i]);
end;
end;
for i:=0 to (m2-1) do
begin
for j:=0 to (n2-1) do
begin
b[i,j]:=StrToFloat(Child.StringGrid2.Cells[j,i]);
end;
end;
for i:=0 to (m1-1) do
begin
for j:=0 to (n2-1) do
begin
for l:=0 to (n1-1) do
begin
res[i,j]:=res[i,j]+(a[i,l]*b[l,j]); {матрица результата}
end;
end;
end;
end;
end;
Вам осталось только вычленить в отдельную процедуру проверку на возможность перемножения и, по необходимости, передавать процедуре сами перемножаемые матрицы. У меня они читаются непосредственно с формы.
Похожие вопросы
- Программирование на языке СИ с использованием подпрограммы-функции
- С++ Работа с матрицей
- TURBOPASCAL 7.0 модуль dos помогите пожалуйста с подпрограммой
- TurboPascal. Дана матрица целых чисел. Возвести её во вторую степень, вывести исходную и полученную матрицы
- Красивый вывод информации в TurboPascal
- Помогите !!!С++Работа с одномерными и двумерными массивами. В каждой строке матрицы F(k, k) элемент. лежащий на главной
- FASM. Замена символов в строке, используя подпрограммы.
- Кто омжет написать пподпрограмму на паскале и чем программа отличается от подпрограммы ?
- Помогите с подпрограммой в с++.
- Изучение системы команд Ассемблера. Подпрограммы и прерывания. Помогите с задачами