2014-12-09 2 views
0

Я должен решить проблему с двумя 2D-массивами и вычислить такие вещи, как число шансов, сумму четного числа и добавление двух массивов. Я получаю несколько ошибок. Кто-нибудь может мне помочь? Это то, как я определяю свои массивы, а также говорит, что display_odd является недействительной функцией void. Зачем?Двухмерный массив - функции

#define DIM 50 

#include <stdio.h> 
#include <conio.h> 

void display_odd(int[][DIM]); 
int display_even_sum(int[][DIM], int[][DIM]); 
int display_matrix_sum(int[DIM][DIM], int[DIM][DIM]); 

void main(){ 
int x1, x2, y1, y2, x, y, arr1[DIM][DIM], arr2[DIM][DIM], arr[DIM][DIM]; 

printf("How large do you want the first matrix to be? ('x y') \n"); 
scanf("%d %d", &x1, &y1); 
for (int i = 0; i < x1; i++){ 
    for (int j = 0; j < y1; j++){ 
     printf("A[%d][%d]= ", i + 1, j + 1); 
     scanf("%d", &arr1[i][j]); 
    } 
} 

printf("How large do you want the second matrix to be? ('x y') \n"); 
scanf("%d %d", &x2, &y2); 
for (int i = 0; i < x2; i++){ 
    for (int j = 0; j < y2; j++){ 
     printf("B[%d][%d]= ", i + 1, j + 1); 
     scanf("%d", &arr2[i][j]); 
    } 
} 

if (x1 > x2) 
    x = x1; 
else 
    x = x2; 
if (y1 > y2) 
    y = y1; 
else 
    y = y2; 

//printf("\nThe odd numbers in matrix A are : \n"); 
//void display_odd(arr1[DIM][DIM]); 
//printf("\nThe odd numbers in matrix B are : \n"); 
//void display_odd(arr2[DIM][DIM]); 
printf("\nThe sum of all even elements is : "); 
printf("\nThe sum of the initial matrixes is : \n"); 
arr = display_matrix_sum(arr1[DIM][DIM] ,arr2[DIM][DIM]); 
for (int i = 0; i < DIM; i++){ 
    printf("\n"); 
    for (int j = 0; j < DIM; j++) 
     printf(" %d", arr[i][j]); 
} 

_getch(); //Wait for it 
} 

void display_odd(int arr[][DIM]){ 
for (int i = 0; i < DIM; i++) 
    for (int j = 0; j < DIM; j++) 
     if (arr[i][j] % 2 == 1) 
      printf("[%d][%d]", i, j); 
} 

int display_even_sum(int arr1[DIM][DIM],int arr2[DIM][DIM]){ 
int s = 0; 
for (int i = 0; i < DIM; i++) 
    for (int j = 0; j < DIM; j++) 
     if (arr1[i][j] % 2 == 0) 
      s += arr1[i][j]; 
for (int i = 0; i < DIM; i++) 
    for (int j = 0; j < DIM; j++) 
     if (arr2[i][j] % 2 == 0) 
      s += arr2[i][j]; 
return(s); 
} 

int display_matrix_sum(int arr1[][DIM],int arr2[][DIM]){ 
int arr[DIM][DIM]; 
for (int i = 0; i < DIM; i++) 
    for (int j = 0; j < DIM; j++) 
     arr[i][j] = arr1[i][j] + arr2[i][j]; 
return(arr[DIM][DIM]); 
} 
+2

Вы уверены, что этот тег C++? Похож на меня. – Borgleader

+0

в этой строке: arr = display_matrix_sum (arr1 [DIM] [DIM], arr2 [DIM] [DIM]); вы пытаетесь вставить значение int (возвращаемое из display_matrix_sum) в переменную int [] [], поскольку я видел, что arr объявлен как двумерный массив. – Ariela

+0

'arr1 [DIM] [DIM]' является 'int' (или будет, если бы эти индексы были действительными). Массив называется «arr1», поэтому вы должны перейти к функциям. – molbdnilo

ответ

-1

Когда вы объявляете массив, или когда вы ссылаетесь на конкретный элемент в массиве, можно использовать квадратные скобки:

int array[2][3]; 
array[1][0] = 6; 
int x = array[1][0]; // x is now 6 

, когда вы передаете массив в качестве аргумента, вы просто использовать имя массива;

someFunction(array); // passes the array 
anotherFunction(array[1][0]); // passes 6; 

return array; // returns the array; 
return array[1][0]; // returns 6; 

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

Самая большая проблема заключается в том, что вы, похоже, не понимаете, что массивы - это просто указатели. вы не можете просто передать их, если они не выделены кучей. Каждая функция должна быть переписана, чтобы показать это. Например display_matrix_sum подпись «s должен выглядеть

int** display_matrix_sum(int** A1, int** A2, int rows, int cols); 

и должна вызываться: функция

int cols = 4; // or whatever 
int rows = 4; // or whatever 
int** arr1 = new int*[rows]; // arr1 is now any an array of int arrays 
int** arr2 = new int*[rows]; // arrays work by pointing to the first element 
for(int i = 0; i < rows; i++) 
{ 
    arr1[i] = new int[cols]; // each element in arr1 becomes an int array 
    arr2[i] = new int[cols]; 
} 

/* fill in the values of the arrays */ 

int** out = display_matrix_sum(arr1, arr2, rows, cols, out); 
// output now contains the result of the function 

/* when you are done with arr1 and arr2 and out*/ 

for(int i = 0; i < rows; i++) 
{ 
    delete[] arr1[i]; 
    delete[] arr2[i]; 
    delete[] out[i]; 
} 
delete[] arr1; 
delete[] arr2; 
delete[] out; 
+0

Массивы - это _not_ указатели, и ваш пример не выделяет многомерные массивы, а таблицы поиска, которые плохая практика. См. [Правильное распределение многомерных массивов] (http://stackoverflow.com/questions/42094465/correctly-allocating-multi-dimensional-arrays). – Lundin

0
arr = display_matrix_sum(arr1[DIM][DIM] ,arr2[DIM][DIM]); 

A C не может возвращать массив. Вы можете передать целевой массив в качестве дополнительного аргумента.

void display_matrix_sum(); 
… 
display_matrix_sum(arr1, arr2, arr); 
… 
void display_matrix_sum(int arr1[][DIM], int arr2[][DIM], int arr[][DIM]) 
{ 
… 
// remove this: return(arr[DIM][DIM]); 
} 
Смежные вопросы