ページ 1 / 1
配列の要素の座標を記憶したい
Posted: 2016年12月15日(木) 17:03
by nogu
二次元配列の要素を別の配列へ入れて処理を行ったのち、もともとあった二次元配列の場所へ新しく処理を行った要素を入れたいのですが、あまり適切に処理することができず、困っております。
例えば、i[25][25]という配列に要素が入っており、その要素を新しく作成した二次元配列n[25][25]に昇順になるように入れて、処理を行った後に元の配列i[25][25]の要素があった場所へ処理を行った要素を入れたいというのが大まかですがやりたいと思っていることです。
処理を行う要素の座標を記憶しておきたいのですがうまく考えることができません。
抽象的な質問で申し訳無いのですが、詳しい方宜しければ回答お願い致します。
Re: 配列の要素の座標を記憶したい
Posted: 2016年12月15日(木) 17:39
by akasann
意味があんまり理解できてませんが・・こういうことでしょうかね・・・。
3行3列で、数字入力すると小さいもの順に配列に入っていると思います。何か参考になるといいのですが・・。
コード:
#include<stdio.h>
#define N 3
int main(void){
int a[N][N],n=0,i,j;
int b[N*N],temp;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
scanf("%d",&a[i][j]);
b[n]=a[i][j];
n++;
}
}
for(i=N*N;i>0;i--){
for(j=0;j<i-1;j++){
if(b[j]>b[j+1]){
temp=b[j]; b[j]=b[j+1]; b[j+1]=temp;
}
}
}
n=0;
for(i=0;i<N;i++){
for(j=0;j<N;j++){
a[i][j]=b[n];
n++;
}
}
putchar('\n');
for(i=0;i<N;i++){
for(j=0;j<N;j++){
printf("%d ",a[i][j]);
}
putchar('\n');
}
return 0;
}
Re: 配列の要素の座標を記憶したい
Posted: 2016年12月15日(木) 18:45
by みけCAT
やりたいことがよくわからないですが、要素の座標を記憶したければ要素の座標を記憶すればいいのではないでしょうか?
コード:
#define N 25
#define M 25
typedef struct {
int value;
int y, x;
} elem_t;
int main(void) {
int i[N][M];
elem_t n[N][M];
int y, x;
/* iの各要素を適当に初期化 */
for (y = 0; y < N; y++) {
for (x = 0; x < M; x++) {
n[y][x].value = i[y][x];
n[y][x].y = y;
n[y][x].x = x;
}
}
/* nやiを使ってやりたいことをやる */
}