「14歳から始めるC言語ゲームプログラミング」という本で勉強をしているものです。
九つの要素を定義して隣接する値の大小関係を比較して並び替えるというところですが
交換の関数の考え方があまりよく分かりません。詳しく説明していただける方がいらっしゃいましたら
ご教示お願い申し上げます。
int main(void)`
int hako[9]={8,4,2,3,1,9,5,7,6};
int irekaeta;
do{
irekaeta=0
for(int i=0;i<8;i=i+1){
if(hako>hako[i+1]){
int a=hako;
[color=Red" size="2]hako=hako[i+1];
hako[i+1]=a;
irekaeta=1;[/color]
}
}
for(int i=0;i<9;i=i+1){
printf("%d",hako);
}
printf("\n");
}while(irekaeta==1)
}
赤い部分が分かりません。aをhakoであると定義して、さらにhakoがhako[i+1]であると定義して
hako[i+1]がaであると定義すると入れ替わるのは何故でしょうか。
説明お願いします。
C言語の並び替えについての質問です。
Re:C言語の並び替えについての質問です。
こういう感じですね。
int a=hako; まず、iの配列の中身をaにいれる。
hako=hako[i+1]; iの配列の中身は次の配列の中身とする
hako[i+1]=a; aの中身をi+1の配列に入れる。
aはiの配列の中身を預かってi+1の配列に代入しているということです。
iの配列の中身はもとのi+1の中身です。
int a=hako; まず、iの配列の中身をaにいれる。
hako=hako[i+1]; iの配列の中身は次の配列の中身とする
hako[i+1]=a; aの中身をi+1の配列に入れる。
aはiの配列の中身を預かってi+1の配列に代入しているということです。
iの配列の中身はもとのi+1の中身です。
Re:C言語の並び替えについての質問です。
定義ではなく代入です。例えば、
int a,b; //aとbを宣言 (aの中身は「不定」、bの中身は「不定」)
a = 5; //aに5を代入 (aの中身は「5」になり、bの中身は「不定」のまま)
b = a; //bにaを代入 (aの中身は「5」のまま、bの中身は「5」になります) ← 『b は a だ』ではありません。
a = 10; //aに10を代入 (aの中身は「10」になり、bの中身は「5」のまま)
このような感じです。
Donさんが例に挙げたソースでは、最初は i は 0 なので、i を 0 としてその一回だけ流れを追ってみます。
hako[0] は 8 で hako[1] は 4 です。
int a = hako[0];
hako[0] = hako[0+1];
hako[0+1] = a;
これは↓のような事をしています。
int a = 8;
hako[0] = 4;
hako[0+1] = 8;
hako[0] が 4 に、 hako[1] が 8 になりました。
int a,b; //aとbを宣言 (aの中身は「不定」、bの中身は「不定」)
a = 5; //aに5を代入 (aの中身は「5」になり、bの中身は「不定」のまま)
b = a; //bにaを代入 (aの中身は「5」のまま、bの中身は「5」になります) ← 『b は a だ』ではありません。
a = 10; //aに10を代入 (aの中身は「10」になり、bの中身は「5」のまま)
このような感じです。
Donさんが例に挙げたソースでは、最初は i は 0 なので、i を 0 としてその一回だけ流れを追ってみます。
hako[0] は 8 で hako[1] は 4 です。
int a = hako[0];
hako[0] = hako[0+1];
hako[0+1] = a;
これは↓のような事をしています。
int a = 8;
hako[0] = 4;
hako[0+1] = 8;
hako[0] が 4 に、 hako[1] が 8 になりました。