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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.11.2013, 18:08   #1
dimon198909
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 12
По умолчанию работа с матрицами

помогите пожалуйста. после ввода матриц они перемножаются неварно
Код:
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 50
int main ()
{/* входные данные */
	int n;
 //   int m;
	int r;
	int k;
	float a[N][N]; 
	float b[N][N];
	/*выходные данные*/
	float e[N][N];
	/*вспомогательные данные*/
	int i, j, p;
	float c[N][N]; 
	float d[N][N]; 
	int error; /*код ошибки*/
	/*проверка ограничений*/
do
{ printf("Vvedite kol-vo strok i stolbcov matr\n");
   error = 0;
   scanf("%d %d", &n);
   if ( n <=1 || n > N)
     { 
	   printf("Error, povtorite vvedenie\n");
       error = 1;
     }
 //  if (n!=m)
  // {printf("Error, matr ne kvadrat, m<>n,povtorite vvedenie\n");
 //  error=2;}
}
while(error);

/* введение значиний матрицы A*/
printf("Vvedite znachenie elementov matr A\n");
for (i=0; i<n; i++)
   for (j=0; j<n; j++)
       {printf("\na[%d,%d]=", i+1, j+1);
        scanf("%f", &r);
        a[i][j]= r;
		getch();
		       }
/* введение значиний матрицы B*/
printf("Vvedite znachenie elementov matr B\n");
for (i=0; i<n; i++)
   for (j=0; j<n; j++)
       {printf("\nb[%d,%d]=", i+1, j+1);
        scanf("%f", &k);
        a[i][j]= k;
		getch();
		       }
/* текст програмы */
for (i=0; i<n; i++)
for (j=0; j<n; j++){
 c[i][j]=0;
for (p=0; p<n; p++)
c[i][j]+= (a[i][p]*b[p][j]);
getch();}
	/*выведение элементов по рядам*/
	for (i=0; i<n; i++)
    {printf("%d-ya stroka: ", i+1);
     for (j=0; j<n; j++)
         printf(" %f ", c[i][j]);     /* виведення елементiв рядку */
     printf("\n"); /* перехiд до нового рядка */
	 getch();
    }

}

Последний раз редактировалось Stilet; 09.11.2013 в 18:56.
dimon198909 вне форума Ответить с цитированием
Старый 09.11.2013, 18:45   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Вы не вводите матрицу B (внимательно смотрите на код).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 09.11.2013, 20:10   #3
dimon198909
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 12
По умолчанию

когда запускаю программу, то она вводится....
dimon198909 вне форума Ответить с цитированием
Старый 09.11.2013, 20:40   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Конкретизирую место, куда смотреть:
Код:
/* введение значиний матрицы B*/
printf("Vvedite znachenie elementov matr B\n");
for (i=0; i<n; i++)
    for (j=0; j<n; j++) {
        printf("\nb[%d,%d]=", i+1, j+1);
        scanf("%f", &k);
        a[i][j]= k;
        getch();
    }
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 09.11.2013, 21:15   #5
dimon198909
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 12
По умолчанию

т.е. для того, чтобы ввести элементы матрицы В мне нужно перед вводом заново описать процедуру?
{ printf("Vvedite kol-vo strok i stolbcov matr\n");
error = 0;
scanf("%d %d", &n);
if ( n <=1 || n > N)
{
printf("Error, povtorite vvedenie\n");
error = 1;
}
// if (n!=m)
// {printf("Error, matr ne kvadrat, m<>n,povtorite vvedenie\n");
// error=2;}
}
while(error);
dimon198909 вне форума Ответить с цитированием
Старый 09.11.2013, 21:23   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Ладно, не будем больше играть в угадайку. Чтобы в том цикле считывалась матрица B, а не A, нужно написать b[i][j]= k;, а не a[i][j]= k;. Заметил еще одну ошибку. scanf("%d %d", &n); - что это такое? Поведение такого кода непредсказуемо. Кстати, напишите само задание (вдруг Вам нужно перемножать не только квадратные матрицы).
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 09.11.2013, 22:57   #7
dimon198909
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 12
По умолчанию

мне не только квадратные, мне одинаковые. как я понимаю. задание такое - проверить, будет ли полученная матрица А*В-В*А - единичной?
dimon198909 вне форума Ответить с цитированием
Старый 09.11.2013, 23:12   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

scanf("%d, &n); - считываем один размер (в обработке ошибок не нужно сравнивать с m). Подсчет сразу A*B-B*A (вроде):
Код:
for (i=0; i<n; i++)
    for (j=0; j<n; j++)
        for (p=0,c[i][j]=0; p<n; p++)
            c[i][j] += a[i][p]*b[p][j] - b[i][p]*a[p][j];
Сюда же можно сразу добавить проверку на единичность матрицы.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 09.11.2013, 23:25   #9
dimon198909
Пользователь
 
Регистрация: 09.11.2013
Сообщений: 12
По умолчанию

спасибо, попробую)))
dimon198909 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с матрицами с++ linberg Помощь студентам 3 09.11.2013 18:59
Работа с матрицами Vera_0709 Помощь студентам 1 28.12.2011 05:47
Работа с матрицами на с++ mr_fomin Помощь студентам 0 12.12.2010 20:42
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19