2016-03-25 10 views
-1

アレイの角の部分を考慮しながら、私のコードに記載されている配列の1を特定する方法を考え出すのに問題があります。アレイの隣人

#include <stdio.h> 
/* define grid size */ 
#define SIZE 7 
int grid[SIZE][SIZE]; 
/* function to find the number of occupied adjacent cells */ 
int neighbors (int i, int j); 
void main() 
{ 
    int i, j, n; 
/* initialize the entire grid to be zero */ 
for (i = 0; i < SIZE; i++) 
    for (j = 0; j < SIZE; j++) 
     grid[i][j] = 0; 
/* introduce a few ones */ 
    grid[1][2] = 1; 
    grid[2][2] = 1; 
    grid[1][4] = 1; 
    grid[2][4] = 1; 
    grid[3][2] = 1; 
    grid[3][3] = 1; 
    grid[3][4] = 1; 
    grid[5][3] = 1; 
    grid[6][2] = 1; 
for (i = 0; i < SIZE; i++) 
    for (j = 0; j < SIZE; j++) { 
     n = neighbors(i,j); 
     printf ("Number of neighbors to element %d,%d =%d\n",i,j,n); 
} 
return; 
} 
/* function to compute the neighbors */ 
int neighbors (int i, int j) 

私は文がI = 0またはI = 6、同様かのようにJ = 0またはJ = 6、私はどのようにわからない場合は、コードを実行する方法を変更する場合は、私が使用できることを理解続行します。任意の助けが大いに評価されるでしょう

+1

は、あなたの質問にあなたのコードをインデントしてください。 – jdarthenay

+0

また、すでに7はあなたの行列の境界から外れています。最後の文章では、 "i == 1またはi == 6、j == 1またはj == 6の場合と同様です" – jdarthenay

+0

@jdarthenay適切な編集が行われました –

答えて

0

抽象レイヤーの配列への直接アクセスをラップすることは可能です。このレイヤーは、アクセスロジックと追加のチェックを隠すことができます。 ような何か:

int get_grid(int i, int j) 
{ 
    if (i>=0 && i<SIZE) 
     return grid[i][j]; 
    return 0; 
} 

、呼び出し機能:

int neighbors (int i, int j) 
{ 
    return get_grid(i-1, j-1) + get_grind(i-1, j) + ... 
} 
0

は、私がお勧め:

int neighbors (int i0, int j0) 
{ 
    int imax = (i0 < SIZE) ? (i0 + 1) : SIZE; 
    int jmax = (j0 < SIZE) ? (j0 + 1) : SIZE; 
    int result = 0; 

    for (int i = (i0 > 0) ? (i0 - 1) : 0; i <= imax; i++) 
    { 
     for (int j = (j0 > 0) ? (j0 - 1) : 0; j <= jmax; j++) 
     { 
      if ((i != i0 || j != j0) && grid[i][j] != 0) 
      { 
       result++; 
      } 
     } 
    } 

    return result; 
} 
+0

C99モードとは何ですか?私はまだそれを学んでいないし、コードをテストするためにコンパイルする方法がわからない –

+0

@Christian Littnerなぜあなたは私の答えにコメントとしてこれを尋ねるのだろうか。 C99はより最近の標準であり、 '-std = C99'コンパイルオプションで有効にすると、古い標準では有効にならないいくつかのコードが有効になります。 – jdarthenay

関連する問題