2016-11-23 13 views
-5

行列は、n x軸とm y軸のようにする必要があります。このコード行列の説明に誰かが必要です。

for(int z = 0; z < m; z++){ 
    for(int x = 0; x < n; x++){ 
     transB[x * m + z] = B[z*n + x]; 
    } 
} 

コードに従ってトランスポンディング前後に説明することはできますか?私は、それがどのように見えるか、苦労している。

+1

私はこの質問はこのサイトのトピックではないと思います。 [ツアー](http://stackoverflow.com/tour)をチェックし、[ヘルプページ](http://stackoverflow.com/help)をよく読んでください。特に、ここで? "(http://stackoverflow.com/help/on-topic)、["どのような種類の質問を避けるべきですか? "](http://stackoverflow.com/help/dont-ask)、[ "私はどのように良い質問をするのですか?"](http://stackoverflow.com/help/how-to-ask)と[最小限で完全で検証可能なサンプルを作成する方法](http:// stackoverflow .com/help/mcve)。 –

+1

ペンと紙を手に入れて描く。 – schil227

+0

私はこのコードが1次元配列として表された正方行列に対してのみ機能すると思います。 –

答えて

1

これはあなた(または他の誰か)が意図したものですか? 改訂:プログラム出力

#include <stdio.h> 

#define WIDTH 3 
#define DEPTH 4 

int main(void) 
{ 
    int array[WIDTH*DEPTH] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }; 
    int trans[DEPTH*WIDTH]; 

    for(int i = 0; i < WIDTH * DEPTH; i++) { 
     printf("%-3d", array[i]); 
     if((i + 1) % WIDTH == 0) { 
      printf("\n"); 
     } 
    } 
    printf("\n"); 

    for(int z = 0; z < DEPTH; z++) { 
     for(int x = 0; x < WIDTH; x++) { 
      trans[x * DEPTH + z] = array[z * WIDTH + x]; 
     } 
    } 

    for(int i = 0; i < WIDTH * DEPTH; i++) { 
     printf("%-3d", trans[i]); 
     if((i + 1) % DEPTH == 0) { 
      printf("\n"); 
     } 
    } 

    return 0; 
} 
(ジョナサン・レフラーから):

1 2 3 
4 5 6 
7 8 9 
10 11 12 

1 4 7 10 
2 5 8 11 
3 6 9 12 

あなたは1次元配列内の位置を見つけるために、マトリックスの幅を使用してポイントされています。ピクセルデータを1次元配列として読み取る画像ファイルを処理するときにも同様の手法を使用できます。

通常、1次元配列は、幅と深さを入れ替えたときに読みにくくなりますが、(row * width) + columnで2-Dとしてアクセスされます。

+0

問題のコードは、3x7入力配列などの非正方配列ではうまく動作し、7x3出力のarayを生成します。 –

+0

@JonathanLeffler確かにはい、私は答えを改訂しましたありがとうございます。 –

+0

@WeatherVaneありがとう!私は自分の論文でforループを実行しようとし、あなたの出力と同じ結果を引き出すことができるかどうかを見ます! –

関連する問題