2016-06-03 4 views
-1

Когда я добавляю матрицы, мой добавленный вывод матрицы просто нули вместо добавленных чисел. Мой инструктор говорит, что проблема может заключаться в том, что я передал сумму в виде двойного указателя вместо тройного указателя для ее обновления, но я не знаю, как ее исправить. Что я делаю, чтобы суммы матричных чисел выходили вместо нулей?Почему не добавляются мои матрицы?

#include <stdio.h> 

#include <stdlib.h> 



int** make_matrixA(int num_rows, int num_cols){ 
int** matrixA; 
int row, col; 
int userNum; 


    matrixA = (int**)malloc(num_rows * sizeof(int*)); 
for(row = 0; row < num_rows; ++row){ 
    matrixA[row] = (int*)malloc(num_cols * sizeof(int)); 
} 
for(row = 0; row < num_rows; ++row){ 
    for(col = 0; col < num_cols; ++col){ 
     scanf("%d", &userNum); 
    } 
} 
return matrixA; 
} 

int** make_matrixB(int num_rows, int num_cols){ 
int** matrixB; 
int row, col; 
int userNum; 


    matrixB = (int**)malloc(num_rows * sizeof(int*)); 
for(row = 0; row < num_rows; ++row){ 
    matrixB[row] = (int*)malloc(num_cols * sizeof(int)); 
} 
for(row = 0; row < num_rows; ++row){ 
    for(col = 0; col < num_cols; ++col){ 
     scanf("%d", &userNum); 
    } 
} 
return matrixB; 
} 

int** make_matrixC(int num_rows, int num_cols){ 
int** matrixC; 
int row; 


    matrixC = (int**)malloc(num_rows * sizeof(int*)); 
for(row = 0; row < num_rows; ++row){ 
    matrixC[row] = (int*)malloc(num_cols * sizeof(int)); 
} 
return matrixC; 
} 


int** add_matrix(int num_rows, int num_cols, int** matrixA, int** matrixB, int** matrixC){ 
int row, col; 

for(row = 0; row < num_rows; ++row){ 
    for(col = 0; col < num_cols; ++col){ 
     matrixC[row][col] = matrixA[row][col] + matrixB[row][col]; 
    } 
} 
return matrixC; 
} 

void print_matrix(int num_rows, int num_cols,int** matrixA, int** matrixB, int** matrixC){ 
int row, col; 

printf("A + B = \n"); 
for(row = 0; row < num_rows; ++row){ 
    for(col = 0; col < num_cols; ++col){ 
     matrixC[row][col] = matrixA[row][col] + matrixB[row][col]; 
     printf("%d ", matrixC[row][col]); 
    } 
    printf("\n"); 
} 
} 

void delete_matrixA(int num_rows, int** matrixA){ 
int row; 
for(row = 0; row < num_rows; ++row){ 
    free(matrixA[row]); 
} 
free(matrixA); 
} 

void delete_matrixB(int num_rows, int** matrixB){ 
int row; 
for(row = 0; row < num_rows; ++row){ 
    free(matrixB[row]); 
} 
free(matrixB); 
} 

void delete_matrixC(int num_rows, int** matrixC){ 
int row; 
for(row = 0; row < num_rows; ++row){ 
    free(matrixC[row]); 
} 
free(matrixC); 
} 

int main(){ 
int num_rows, num_cols; 
int** matrixA; 
int** matrixB; 
int** matrixC; 

//get input 
printf("Please enter the number of rows: "); 
scanf("%d", &num_rows); 
printf("Please enter the number of columns: "); 
scanf("%d", &num_cols);  

//make matrix A 
printf("Enter Matrix A\n"); 
matrixA = make_matrixA(num_rows, num_cols); 

//make matrix B 
printf("Enter Matrix B\n"); 
matrixB = make_matrixB(num_rows, num_cols); 

//add the matrices 
matrixC = make_matrixC(num_rows, num_cols); 
matrixC = add_matrix(num_rows, num_cols, matrixA, matrixB, matrixC); 

//print the matrix 
print_matrix(num_rows, num_cols, matrixA, matrixB, matrixC); 

//delete the matrices 
delete_matrixA(num_rows, matrixA); 
delete_matrixB(num_rows, matrixB); 
delete_matrixC(num_rows, matrixC); 

return 0; 
} 
+0

Просто комментарии: почему у вас есть 'make_matrixA' и' make_matrixB', когда код идентичен? Зачем возвращать что-либо из 'add_matrix', когда вы уже указываете в' matrixC', который будет иметь значения? Почему 'print_matrix' также вычисляет суммы, а не только печатает? Что касается проблемы, что вы узнали, отлаживая функцию 'add_matrix'? –

+0

Ваш инструктор должен был сказать вам использовать 2D-массивы aka matrices, и что трехмерный программист C не является комплиментом. Проливает плохой свет. Нет ничего похожего на 2D-массив/матрицу и не может содержать один в вашем коде. – Olaf

+0

Вы действительно должны попытаться обобщить свои функции немного больше ... например, одна функция для выделения матрицы, одна функция для ввода значений и т. Д. Кроме того, вам не нужно передавать * все * матрицы каждой функции , только тот, который функция будет использовать. И почему вы добавляете матрицы внутри своей функции печати, когда вы уже добавили их в свою функцию добавления? – Dmitri

ответ

2

Ваши функции make_matrix() не очень хорошие. Код для чтения номера

for(row = 0; row < num_rows; ++row){ 
    for(col = 0; col < num_cols; ++col){ 
     scanf("%d", &userNum); 
    } 
} 

Вы должны сделать

for(row = 0; row < num_rows; ++row){ 
    for(col = 0; col < num_cols; ++col){ 
     scanf("%d", &matrixA[row][col]); //use matrix to store number 
    } 
} 

Измените функции надлежащим образом использовать правильные переменные. без этого ваш код не сохраняет значения в матрице и складывает случайные числа, которые находятся в матрицах.

+0

Большое вам спасибо! Только это изменило работу! –

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