2013-03-20 3 views
-2

Я учусь использовать последовательную память для матриц. Я сделал следующую программу, но она дает неверный результат. Может ли кто-нибудь сказать мне, где я ошибся. Я вставляю обе программы, где я использую последовательную память, и тот, в котором я не использовал и правильно. Я получаю неверные результаты в последовательном порядке.Неправильный результат при умножении матрицы в C

#include <stdio.h> 
#include <stdlib.h> 
int main() 
{ 
    int i, m, n, p, q, c, d, k, sum = 0; 
    int *first, *second, *multiply; 
    printf("Enter the number of rows and columns of first matrix\n"); 
    scanf("%d%d", &m, &n); 
    printf("Value entered %d%d \n",m,n); 
    first = malloc(m*n*sizeof(int*)); 
    printf("Enter the number of rows and columns of second matrix \n"); 
    scanf("%d%d", &p,&q); 
    printf("value entered %d%d \n",p,q); 
    second = malloc(p*q*sizeof(int)); 
    multiply = malloc(m*n*sizeof(int)); 
    printf("Enter the elements of first matrix\n"); 
    for(c = 0 ; c < m ; c++) 
     for (d = 0 ; d < n ; d++) 
     scanf("%d", &first[c*m+d]); 
     if (n != p) 
    printf("Matrices with entered orders can't be multiplied with each other.\n"); 
    else { 
     printf("Enter the elements of second matrix\n"); 
    for (c = 0 ; c < p ; c++){ 
     for (d = 0 ; d < q ; d++) 
     scanf("%d", &second[c*p+d]); 
    } 

for (c = 0 ; c < m ; c++) { 
    for (d = 0 ; d < q ; d++) { 
    for (k = 0 ; k < p ; k++) { 
     sum = sum + first[c*m+k]*second[k*p+d]; 
    } 
    multiply[c*m+d] = sum; 
    sum = 0; 
    } 

    } 

    printf("Product of entered matrices:-\n"); 
    for (c = 0 ; c < m ; c++) { 
     for (d = 0 ; d < q ; d++) 
    printf("%d\t", multiply[c*m+d]); 
    printf("\n"); 
    } 

    free(second); 

    free(multiply); 
} 

    free(first); 
    return 0; 
} 
+0

Пробовали ли вы проверить его на наличие ошибок, пытались ли вы отладки это? –

+0

Я удалю свой нижний предел, если вы исправите отступ. – kay

+5

«Эй, смотри, стена кода. Исправь это переполнение стека!» <- не как этот сайт предназначен для работы. –

ответ

3
sum = sum + first[c*m+k]*second[k*p+d]; 

должен быть

sum = sum + first[c*n+k]*second[k*q+d]; 

так как длина строк first является n, а длина строк second является q.

0
for(c = 0 ; c < m ; c++) 
    for (d = 0 ; d < n ; d++) 
    scanf("%d", &first[c*m+d]); // error 
         ^n // fix 

Та же ошибка много раз

Смежные вопросы