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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.11.2011, 16:13   #1
sys*.12
 
Регистрация: 01.11.2011
Сообщений: 9
По умолчанию Транспонирование матрицы

Доброго времени суток господа .. в общем необходимо составить программу вычисления и преобразования матрицы P=f(A,B,C), где P=f(A,B,C) – матричное выражение; A, B, C – исходные матрицы, размер и значения элементов которых выбираются произвольно.(A^T+B^2\2) - C
Получилось возвести в квадрат матрицу B и поделить на 2, но вот возник вопрос как транспортировать матрицу A?Помогите пожалуйста кто знает ибо в ассемблере я нуб.
Вот текст:
Код:
program kursach; 
const 
maxn=10; 
var 
matrA,matrB,matrC:array[1..maxn,1..maxn] of shortint; 
matrP,tempmatrP:array[1..maxn,1..maxn] of shortint; 
i,j,k,n,m,p,f:integer; 
s:shortint; 
baseA,baseB,baseC,baseP:integer; 
begin 
write('Vvedite kolichestvo strok matrici A:'); 
readln(m); 
write('Vvedite kolichestvo stolbcov matrici A:'); 
readln(p); 
writeln('Vvedite elementi matrici A:'); 
for i:=1 to m do 
for j:=1 to p do 
begin 
write('matrA[',i,',',j,']='); 
readln(matrA[i,j]); 
end; 
 
begin 
write('Vvedite kolichestvo strok matrici B:'); 
readln(m); 
write('Vvedite kolichestvo stolbcov matrici B:'); 
readln(p); 
writeln('Vvedite elementi matrici B:'); 
for i:=1 to m do 
for j:=1 to p do 
begin 
write('matrB[',i,',',j,']='); 
readln(matrB[i,j]); 
end; 
end;
 
asm 
mov i,0 
mov baseP,0 
@@cicli: 
 
mov j,0 
@@ciclj: 
 
mov s,0 
mov k,0 
mov baseB,0 
@@ciclk: 
 
mov dl,2 
mov bx,baseP 
mov si,j 
mov al,byte ptr matrB[bx+si] 
mov ah,0 
imul byte ptr matrB[bx+si] 
div dl 
 
add s,al 
add al,byte ptr matrB[bx+si] 
 
mov bx,baseP 
mov si,j 
mov al,s 
mov byte ptr matrP[bx+si],al 
 
inc j 
mov ax,p 
cmp j,ax 
jl @@ciclj 
 
inc i 
add baseP,maxn 
mov ax, m 
cmp i,ax 
jl @@cicli 
 
mov i,0 
mov j,0 
mov bx,i 
mov si,j 
mov al, byte ptr matrA[bx+si] 
end; 
 
writeln('ASM result Matrica P:'); 
for i:=1 to m do 
begin 
for j:=1 to p do 
write(matrP[i,j],' '); 
writeln; 
end; 
writeln('ASM result Matrica A:'); 
for i:=1 to m do 
begin 
for j:=1 to n do 
write(matrA[i,j],' '); 
writeln; 
end; 
 
end.


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 01.11.2011 в 16:41.
sys*.12 вне форума Ответить с цитированием
Старый 02.11.2011, 05:43   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Svikator он же sys*.12
Не стоит засирать все ассемблерные форумы...
Mikl___ вне форума Ответить с цитированием
Старый 02.11.2011, 12:23   #3
Ang15
Пользователь
 
Регистрация: 02.07.2011
Сообщений: 38
По умолчанию

Если нужен алгоритм транспонирования матрицы, то это уже больше с математикой, а не с ассемблером.
Ang15 вне форума Ответить с цитированием
Старый 02.11.2011, 12:28   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Ang15
для транспонирования матрицы происходит обмен A[i,j]<-->A[j,i], элементы главной диагонали остаются на своих местах, просто требуется два цикла, и ТС об этом уже написали
Mikl___ вне форума Ответить с цитированием
Старый 02.11.2011, 13:44   #5
sys*.12
 
Регистрация: 01.11.2011
Сообщений: 9
По умолчанию

Получилось вывести транспонированную матрицу как результат.Так же получилось всё остальное уравнение(A^T+B^2\2)-C.Но в самом уравнении матрица всё равно считаеться как обычная.Незнаю как уже поменять местами строки и столбцы.
sys*.12 вне форума Ответить с цитированием
Старый 02.11.2011, 13:45   #6
sys*.12
 
Регистрация: 01.11.2011
Сообщений: 9
По умолчанию

Код:
program kursach;
const
 maxn=10;
var
 matrA,matrB,matrC,matrX:array[1..maxn,1..maxn] of shortint;
 matrP,tempmatrP:array[1..maxn,1..maxn] of shortint;
 i,j,k,n,m,p,f:integer;
 s:shortint;
 baseA,baseB,baseC,baseP:integer;
begin
 write('Vvedite kolichestvo strok matrici A:');
 readln(n);
 write('Vvedite kolichestvo stolbcov matrici A:');
 readln (m);
 writeln('Vvedite elementi matrici A:');
 for i:=1 to n do
  for j:=1 to  m do
   begin
   write('matrA[',i,',',j,']=');
   readln(matrA[i,j]);
 end;

begin
 write('Vvedite kolichestvo strok matrici B:');
 readln(m);
 write('Vvedite kolichestvo stolbcov matrici B:');
 readln(p);
 writeln('Vvedite elementi matrici B:');
 for i:=1 to m do
  for j:=1 to p do
   begin
   write('matrB[',i,',',j,']=');
   readln(matrB[i,j]);
 end;
 begin
 write('Vvedite kolichestvo strok matrici C:');
 readln(m);
 write('Vvedite kolichestvo stolbcov matrici C:');
 readln(p);
 writeln('Vvedite elementi matrici C:');
 for i:=1 to m do
  for j:=1 to p do
   begin
   write('matrC[',i,',',j,']=');
   readln(matrC[i,j]);
 end;
 END;

asm
mov i,0
mov baseC,0
@@cicls:

mov j,0
@@ciclr:

mov f,0
mov bx,j
mov si,baseC
mov al,byte ptr matrA[bx+si]
mov ax,j
xchg ax,i
mov j,ax


mov i,0
mov baseP,0
@@cicli:

mov j,0
@@ciclj:

mov s,0
mov dl,2
mov bx,baseP
mov si,j
mov al,byte ptr matrB[bx+si]
mov ah,0
imul byte ptr matrB[bx+si]
div dl
add al,byte ptr matrA[bx+si]
sub al,byte ptr matrC[bx+si]

add s,al
add al,byte ptr matrB[bx+si]

mov bx,baseP
mov si,j
mov al,s
mov byte ptr matrP[bx+si],al

inc j
mov ax,p
cmp j,ax
jl @@ciclj

inc i
add baseP,maxn
mov ax, m
cmp i,ax
jl @@cicli

inc j
add baseC,maxn
mov ax,n
cmp j,ax
jl @@ciclr

inc i
mov ax,m
cmp i,ax
jl @@cicls

end;

writeln('ASM result Matrica (A^T+B^2\2)-C:');
for i:=1 to  m do
 begin
 for j:=1 to p do
  write(matrP[i,j],' ');
  writeln;
 end;
writeln('ASM result Matrica A^T:');
for i:=1 to m do
 begin
 for j:=1 to n do
  write( matrA[j,i],' ');
  writeln;
 end;

end;
end.
sys*.12 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транспонирование матрицы Stasiksis Общие вопросы C/C++ 3 24.09.2011 17:11
транспонирование матрицы Ислам Помощь студентам 3 08.06.2011 19:02
транспонирование матрицы JS dropacid Помощь студентам 1 03.04.2010 22:14
транспонирование матрицы 6*6 на си fatefighter Общие вопросы C/C++ 1 17.03.2010 21:12