2016-04-08 22 views
0

これは低眉の質問と考えられます。しかし、私はコードを見つけられませんでした。あるいは、私のプログラミング言語でこれをどうやって解決するかについて議論しているフォーラムです.C。多くの試みが行われましたが、最終的に新しい配列を実際に "ハードコーディング"します。2次元配列を垂直/水平に反転する

私は垂直方向にしようとしていて、2次元配列を水平方向に反転しようとしています。 それは簡単に思えました、単に体系的に行って各行と列の値を操作しました。しかし、基本的な3x3アレイではない配列について検討したい場合はどうすればよいでしょうか。 11x11、または15x15など?

**CODE SNIPPET:** 

int array[3][3]= { {1,2,3}, 
        {4,5,6}, 
        {7,8,9} }; 

int vertFlip[3][3], 
    horzFlip[3][3]; 

for(i = 0; i < rows; i++) 
{ 
    for(j = 0; j < cols; j++) 
    { 
    vertFlip[0][i]= array[2][i]; 
    vertFlip[1][i]= array[1][i]; 
    vertFlip[2][i]= array[0][i]; 
    } 
} //and so on for horizontal, obviously my nested for loop was different. 

しかし

、この配列は、はるかに大きな何か、(123x123サイズの配列を)だったものならば、誰でもこのタスクを達成するための効果的な方法を知っていますか?

+0

サイズ「N」の配列を反転する方法について考えてみましょう。それが完了すると、マリックスを反転させることはほぼ同じです。 –

+0

参照してください、私は例としてそれを使用しようとしましたが、純粋に水平方向に配列を反転しています。もう少し考えてみましょう。 – DancingDylan

+0

あなたのコードは 'i'を列インデックスとして使用しており、' j'をまったく使用していません。 – user3386109

答えて

0

私は簡単な方法で始めます。左右反転の場合:上記のコードは、入力の内容を変更することを

// Reuse swap 
void FlipColumn(int **array, int column, int rows) 
{ 
    // Flip column 'column' of an array that has n rows. 
    for (int row = 0; row < rows/2; row++) 
    { 
     swap(array[row]+column, array[rows-1-row]+column); 
    } 
} 

void VFlipArray(int **array, int columns, int rows) 
{ 
    for (int column = 0; column < columns; column++) 
    { 
     FlipColumn(array, column, rows); 
    } 
} 

int swap(int *a, int *b) 
{ 
    int temp = *a; 
    *a = *b; 
    *b = temp; 
} 

void FlipRow(int *row, int columns) 
{ 
    // A row is a simple one dimensional array 
    // just swap item 0 with item n-1, 1 with n-2, ... 
    for (int index = 0; index < columns/2; index++) 
    { 
     swap(row+index, row+columns-1-index); 
    } 
} 

void HFlipArray(int **array, int columns, int rows) 
{ 
    for (int row = 0; row < rows; row++) 
    { 
     FlipRow(array[row], columns); 
    } 
} 

垂直反転のために、同様のアプローチを使用します。それが望ましくない場合は、宛先配列とソース配列を渡すようにコードを変更し、それに応じてループを調整することができます。

+0

作成したVFlipArray関数内で、FlipColumn(array、column、rows);私に互換性のないポインタ型を与えています。これは(**配列**)がコンパイラエラーを出していることを示しています。なぜこれができますか? **これを無視**固定、私はエラーを見た。ヘルプマンのおかげで、私は基本としてこのコードを使用し、論理の例は、私が元来間違っていたことを明確にします。これを必ず覚えておいてください。 – DancingDylan

-1

こんにちはそこにあなたの2次元配列を反転するための簡単なアプローチを試すことができます: -

int ar[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; 
int i,j,ar1[3][3]; 
for(i = 0;i<3;i++) 
{ 
    for(j=0;j<3;j++) 
    { 
     ar1[i][j] = ar[j][i]; 
    } 
} 

あなたはちょうどあなたの配列の長さにしてar1[i][j] = ar[j][i]はフリップ操作を実行するループにループを反復する必要があり見ることができるように。

+0

あなたは配列を反転していないので、代わりに配列を転置しています – ijverig

関連する問題