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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.04.2016, 10:44   #1
CoWeR
 
Регистрация: 09.04.2016
Сообщений: 3
По умолчанию Произведение матриц произвольного размера

Помогите решить задачу по Курсовой
Нужно сделать:
Произведение матриц привольного размера (должна проводить проверка на возможность умножения матриц)
CoWeR вне форума Ответить с цитированием
Старый 10.04.2016, 13:25   #2
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Вы не подскажете, в какой среде программирования вам это нужно сделать?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 11.04.2016, 10:10   #3
CoWeR
 
Регистрация: 09.04.2016
Сообщений: 3
По умолчанию TASM

В программе TASM(Assembler)
CoWeR вне форума Ответить с цитированием
Старый 11.04.2016, 17:12   #4
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Матрицы типа float или double или int?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 12.04.2016, 10:57   #5
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,601
По умолчанию

Поставил tasm. Программы, откомпилированные в нем, у меня не работают (примеры в википедии взял). Написал для примера вот такой код для целочисленных матриц на C/C++ с ассемблерной вставкой.

У меня есть вопросы:
1. откуда берутся размерности матриц? Произвольный размер ограничивается возможностями компьютера, операционной системы, компилятора и другими факторами.
2. В данном коде размерности жестко зафиксированы
3. Программа нужна для DOS или как вы ее будете сдавать?

Код:
#include <stdio.h>

void main()
{
int temp;
int m[3][4]; int mi = 3; int mj = 4; 
int n[4][3]; int ni = 4; int nj = 3; 
int p[3][3]; int pi = 3; int pj = 3; 
m[0][0] = 5;m[0][1] = 1;m[0][2] = 3;m[0][3] = 4; 
m[1][0] = 2;m[1][1] = 3;m[1][2] = 4;m[1][3] = 5; 
m[2][0] = 6;m[2][1] = 7;m[2][2] = 8;m[2][3] = 6; 
n[0][0] = 5;n[0][1] = 1;n[0][2] = 3; 
n[1][0] = 2;n[1][1] = 3;n[1][2] = 4; 
n[2][0] = 6;n[2][1] = 7;n[2][2] = 8; 
n[3][0] = 1;n[3][1] = 2;n[3][2] = 4; 
int i,j,k, res; 


__asm
{
mov eax,mi
cmp eax,nj
jnz exit;  // mi == nj

mov eax,mj
cmp eax,ni
jnz exit;  //mj == ni

mov eax,mi
mov pi,eax  // pi=mi

mov eax,nj
mov pj,eax  //pj=nj

mov eax,0
mov i,eax // i = 0

extcycle:  // for(i=0;i<mi;i++) // mi < i

mov eax,0
mov k,eax // k = 0

kcycle: //  for(k=0;k<nj;k++) // nj < k

mov eax,0
mov res,eax // res = 0

mov eax,0
mov j,eax // j = 0

jcycle: // for(j=0;j<mj;j++) // mj < j

// res = 0; for(j=0;j<mj;j++) res += m[i][j]*n[j][k]; p[i][k] = res;

lea ecx,m
mov eax,i
mul mj
mov edx, eax
mov eax,j
add edx,eax
mov edx,[ecx+edx*4] 
mov temp, edx // ? edx = 0

lea ecx,n
mov eax,j
mul nj
mov ebx,eax
mov eax,k
add ebx,eax
mov eax, [ecx+ebx*4] 
mul temp

// res 
mov ebx,res
add ebx,eax
mov res,ebx

// j++
mov eax,j
add eax,1
mov j,eax

mov eax,mj
cmp eax,j  
jne jcycle;

lea ecx,p // p[i][k] = res;
mov eax,i
mul pi
mov ebx,eax
mov eax,k
add ebx,eax
mov eax,res
mov dword ptr [ecx+ebx*4], eax

// k++
mov eax,k
add eax,1
mov k,eax

mov eax,nj
cmp eax,k 
jne kcycle;

// i++
mov eax,i
add eax,1
mov i,eax

mov eax,mi
cmp eax,i
jne extcycle;

exit:

}
for(i=0;i<pi;i++) { for(j=0;j<pj;j++) printf("%d ", p[i][j]); printf("\n"); } // printfm // printfn // printf p

for(i=0;i<mi;i++)
 for(k=0;k<nj;k++)
 {
  res = 0; for(j=0;j<mj;j++) res += m[i][j]*n[j][k]; p[i][k] = res;
 }
 for(i=0;i<pi;i++){ for(j=0;j<pj;j++) printf("%d ", p[i][j]); printf("\n");}


}
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 12.04.2016, 21:03   #6
CoWeR
 
Регистрация: 09.04.2016
Сообщений: 3
По умолчанию

Float но можно и int
CoWeR вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двумерные массивы произвольного размера Dimaska Помощь студентам 0 31.03.2012 16:21
Поиск и суммирование данных в таблице произвольного размера Darkdog Microsoft Office Excel 26 16.02.2010 10:47
Нахождение обратной матрицы произвольного размера Widow Maker Помощь студентам 0 10.05.2009 12:09
Печать произвольного размера HP6720 Помощь студентам 6 04.02.2009 18:38
Задача:поиск и сортировка.(файл произвольного размера) xxxBITxxx Помощь студентам 3 11.01.2009 19:48