Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

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


Ответ
 
Опции темы
Старый 22.03.2010, 15:29   #1
Витас
 
Регистрация: 05.03.2010
Сообщений: 6
Вопрос какой будет код вычисления для D

Даны две матрицы А размера n*m B размера m*n, состоящие из целых елементов. Если количество z(A) нулевых элементов матрицы А, больше количества z(B) нулевых элементов матрицы B, то вычислить новую матрицу С по формуле C=z(A)*A*B^T(транспонированная) +z(B)*(A*B^T)^2, иначе вычислить новую матрицу D по формуле D по формуле D=z(B)*((A^T)*B)^2+(A^T)*B*z(A)

type matrix = array[1..100,1..100] of integer;
{нахождение количества 0}
function z(a:matrix;k,l:integer):integer;
var c,i,j:integer;
begin
c:=0;
for I := 1 to k do
for J := 1 to l do
if a[i,j]=0 then c:=c+1;
end;
{умножение матрицы на число }
function scmult(a:matrix;k,l:integer;sc:inte ger) :matrix;
var i,j:integer;
b:matrix;
begin
for I := 1 to k do
for J := 1 to l do
b[i,j]:=a[i,j]*sc;
end;
{ввод матрицы}
procedure Vvod(var mt:matrix;x,y:byte);
var i,j:byte;
begin
for i:=1 to x do
for j:=1 to y do
mt[i,j]:=random(x*y);
end;
{вывод матриц на экран}
procedure Vyvod(var mt:matrix;x,y:byte;
var i,j:byte;
begin
for i:=1 to x do
begin
for j:=1 to y do
write(mt[i,j]:4);
writeln;
end;
end;
{траеспонирование матриц}
procedure Trans(m1:matrix;x,y:byte;var m2:matrix);
var i,j:byte;
begin
for i:=1 to y do
for j:=1 to x do
m2[i,j]:=m1[j,i];
end;
{умножение матриц}
procedure Umn(m1,m2:matrix;x,y:byte;var m3:matrix);
var i,j,k:byte;
begin
for k:=1 to x do
for j:=1 to x do
begin
m3[k,j]:=0;
for i:=1 to y do
m3[k,j]:=m3[k,j]+m1[k,i]*m2[i,j];
end;
end;
{возведение матриц в квадрат}
procedure Umn2(m1:matrix;x,y:byte;var m3:matrix);
var i,j,k:byte;
begin
for k:=1 to x do
for j:=1 to x do
begin
m3[k,j]:=0;
for i:=1 to y do
m3[k,j]:=m3[k,j]+m1[k,i]*m1[i,j];
end;
end;
VAR
za, zb : Integer;
m, n : Integer;
A, B, C, D, E : Matrix;
BEGIN
n:=4;
m:=5;
Vvod(A,n,m);
Vvod(B,n,m);
WriteLn('Matrix A:');
Vyvod(A,n,m);
WriteLn('Matrix B:');
Vyvod(B,n,m);
za:=z(A, n, m);
zb:=z(B, n, m);
WriteLn('z(A)=', za);
WriteLn('z(B)=', zb);
if za>zb
then begin
{C:=za*(A*B^T)+zb*(A*B^T)^2}
{D:=(A*B^T)}
Trans(B,n,m, C);
Umn(A,C,m,n, D);
{C:=za*D}
scmult(D,n,n,za, C);
{E:=D^2}
Umn2(D,n,n, E);
{D:=zb*E}
scmult(E,n,n,zb, D);
{C:=C+D}
SumMatr(C, D, n,n, C);
WriteLn('Матрица C');
Vyvod(C, n,n);
end
else begin
Витас вне форума Ответить с цитированием
Старый 22.03.2010, 15:37   #2
sllh_111
Форумчанин
 
Регистрация: 10.02.2010
Сообщений: 137
По умолчанию

сорри, но для чего вообще нужна эта прога??? чё-то я из условия вообще ничего не понял?
sllh_111 вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Какой код клавиши?? RAVAL)) Общие вопросы Delphi 10 28.10.2015 12:24
составить функцию для вычисления значения y=P(x) многочлена для заданного аргумента x KASPEER Помощь студентам 2 12.01.2010 15:03
Если y – вещественная переменная, а n – целая, то оператор присваивания какой будет иметь вид? Naruto63 Помощь студентам 6 23.11.2009 16:30
Имеется ли у вас какой ассемблерный код? rusell Помощь студентам 5 04.11.2009 16:11
Что будет собой прдставлять этот код: Pirotexnik Общие вопросы Delphi 3 27.03.2009 13:30


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS