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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 22:21   #1
F1remaster
 
Регистрация: 31.05.2009
Сообщений: 5
По умолчанию перемножение не квадратных матриц

Запутался в последней функции перемножения матрицы А 3х4 на матрицу транспонированную АТ 4х3. Должна получится матрица 3х3, первые 3 числа считает норм потом не совпадает.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define ma 3
#define na 4
#define mc 4
#define nc 3
void at(double *A, int m, int n,double *AT);
void mult (double *A,double *AT, int m, int n,int p,double *M );
main()
{static double A[ma][na]=
{{ 2., 4., 5., 7. },
{ 9., 7., 7., 3. },
{-8., -7., -8., -4.}};
double C[mc][nc],AT[na][ma],M[ma][ma];
int i,j;
/*printf("\n Input C[%d][%d] by rows: \n",mc,nc);

for (i=0; i<mc; i++) {printf("\n");
for (j=0; j<nc; j++)
scanf("%lf", &C[i][j]); }
//Ввод матрицы  C
printf("\n C[%d][%d]: \n",mc,nc);
for (i=0; i<mc; i++){ printf("\n");
for (j=0; j<nc; j++)
printf("%11.4g",C[i][j]); } //end i, j */
printf("\n");
at(*A,na,ma,*AT);
//вывод матрицы АТ:
printf("\n AT[%d][%d]: \n",na,ma);
for (i=0; i<na; i++) {printf("\n");
for (j=0; j<ma; j++)
printf("%11.4g",AT[i][j]); } 
printf("\n");
mult (*A,*AT,ma,ma,na,*M); // ма=3 на=4
//вывод перемножения
printf("\n M[%d][%d]: \n",ma,ma);
for (i=0; i<ma; i++) {printf("\n");
for (j=0; j<ma; j++)
printf("%11.4g",M[i][j]); } 
printf("\n");
getch();
return 0; } 
// функция транспонирования матрицы А
void at(double *A,int m,int n,double *AT) //m=na=4 ; n=na=3;
{ int i,j;
for (i=0; i<n; i++) for (j=0; j<m; j++)
*(AT+j*n+i) =*(A+i*m+j);
}
//Вот тут косяк начинается
void mult(double *A, double *AT, int m, int n,int p,double *M)
{ int i,j,k,;


for (i=0; i<m; i++) //m=3
for (j=0; j<n; j++) //n=3
  {
*(M+i*n+j)=0;
for (k=0; k<p; k++) //p=4
*(M+i*n+j)+=*(A+i*n+k)*(*(AT+k*m+j));
  
  }
}
F1remaster вне форума Ответить с цитированием
Старый 18.05.2012, 00:21   #2
F1remaster
 
Регистрация: 31.05.2009
Сообщений: 5
По умолчанию

все разобрался =)
Код:
void mult(double *A, double *AT, int m, int n,int p,double *M)
{ int i,j,k,;


for (i=0; i<m; i++) //m=3
for (j=0; j<n; j++) //n=3
  {
*(M+i*n+j)=0;
for (k=0; k<p; k++) //p=4
*(M+i*n+j)+=*(A+i*p+k)*(*(AT+k*m+j));
F1remaster вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
составить программу умножения двух квадратных матриц gnom 62 Помощь студентам 15 06.05.2012 14:52
Перемножение двух введенных с клавиатуры квадратных матриц 4 порядка Alex Miheev Microsoft Office Excel 3 16.04.2012 19:34
Перемножение матриц superkot Общие вопросы C/C++ 4 13.04.2010 20:55
Сложение двух квадратных матриц Bastino Общие вопросы C/C++ 3 29.03.2010 16:29
Сравнение 2-ух квадратных матриц размер 3*3 Artem1987 Помощь студентам 2 23.03.2008 16:16