配列変数の中に適当に格納されている数値を最も大きな数値から順に配列変数に入れ替えるプログラムを実行してみよう。💖💖💖

ソーラー「今日のお題は


配列変数の中に格納されている数値のなかで最も大きな数値を表示するプログラムの仲間の


配列変数の中に適当に格納されている数値を最も大きな数値から順に配列変数に入れ替えるプログラムを実行してみよう。


となっています。


アレサ「・・・??それはどのようなことが行われるプログラムになるのですの?」


ソーラー「例えば


配列宣言


int hairetu[5];

により


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


が用意されていたとして


hairetu[0]に格納されている数値は0

hairetu[1]に格納されている数値は1

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は3

hairetu[4]に格納されている数値は4


と数値が代入されているとします


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


に数値が代入されている状態の1例だね。


この状態から


hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0



数値の大きな順に


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


入れ替えるプログラムなんだよ。」


アレサ「そんなことができるのですか?」


ソーラー「そうなんだよ。


では

配列宣言

int hairetu[5];

により

生成される

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


hairetu[0]に格納されている数値は0

hairetu[1]に格納されている数値は1

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は3

hairetu[4]に格納されている数値は4


と数値が代入されている状態から


hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


と数値が代入されている状態に入れ替えるプログラムを実行してみたいと思います


いきなりですが


そのプログラムをご用意いたしました(´▽`*)


次のプログラムをご覧ください」


#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 0;

hairetu[1] = 1;

hairetu[2] = 2;

hairetu[3] = 3;

hairetu[4] = 4;


int i;


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");

//🌞改行しています


int k;


for (k = 0; k< 4; k++) {


if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}


return 0;

}


ビルド実行結果


01234

10234

12034

12304

12340


ソーラー「このプログラムは


配列変数

hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ


hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムなんだよ。


😊😊


配列変数

hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムについては


2つ前のエピソードをご覧ください


                            solarplexussより

                                😊😊


for (k = 0; k< 4; k++) {


if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}



for (k = 0; k< 4; k++)文ののブロック{}内の


if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");



kの値を

1

2

3

4

と変化させながら


4回繰り返すプログラムなんだ


具体的には


k=0のとき


hairetu[0] <= hairetu[1]


なら


hairetu[0]と hairetu[1]に格納されている数値を交換し


そのときの


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


をつかって横に並べて表示し


k=1のとき


hairetu[1] <= hairetu[2]


なら


hairetu[1]と hairetu[2]に格納されている数値を交換し


そのときの


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


をつかって横に並べて表示し


k=2のとき


hairetu[2] <= hairetu[3]


なら


hairetu[2]と hairetu[3]に格納されている数値を交換し


そのときの


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


をつかって横に並べて表示し


k=3のとき


hairetu[3] <= hairetu[4]


なら


hairetu[3]と hairetu[4]に格納されている数値を交換し


そのときの


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


をつかって横に並べて表示するというわけなんだ



まず


このプログラムでは


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

数値

0

1

2

3

4

が代入されています。


そして


まず


k=0のとき


hairetu[0]に格納されている数値0

hairetu[1]に格納されている数値1


より


小さいので


hairetu[0] <= hairetu[1]


が成立し


hairetu[0]に格納されている数値0

hairetu[1]に格納されている数値1


が交換されて


hairetu[0]に格納されている数値が1

hairetu[1]に格納されている数値が0


になり


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値

1

0

2

3

4

になります


そして


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を横に並べて表示する命令文


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


が実行されることにより


10234


が表示されています。



ビルド実行結果のこの部分

👇

01234

10234


をみても


hairetu[0]に格納されている数値0

hairetu[1]に格納されている数値1


が交換されて


hairetu[0]に格納されている数値が1

hairetu[1]に格納されている数値が0


になっているのがわかります。


次に


k=1のとき


hairetu[1]に格納されている数値0

hairetu[2]に格納されている数値2


より


小さいので


hairetu[1] <= hairetu[2]


が成立し


hairetu[1]に格納されている数値0

hairetu[2]に格納されている数値2


が交換されて


hairetu[1]に格納されている数値が2

hairetu[2]に格納されている数値が0


になります


そして


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を横に並べて表示する命令文


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


が実行されることにより


12034


が表示されます。



ビルド実行結果のこの部分

👇

01234

10234👈

12034👈


をみても


hairetu[1]に格納されている数値0

hairetu[2]に格納されている数値2


が交換されて


hairetu[1]に格納されている数値が2

hairetu[2]に格納されている数値が0


になっているのがわかります。



次に


k=2のとき


hairetu[2]に格納されている数値0

hairetu[3]に格納されている数値3


より


小さいので


hairetu[2]に格納されている数値0

hairetu[3]に格納されている数値3


が交換されて


hairetu[2] <= hairetu[3]


が成立し


hairetu[2]に格納されている数値が3

hairetu[3]に格納されている数値が0


になります


そして


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を横に並べて表示する命令文


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


が実行されることにより


12304


が表示されます。



ビルド実行結果のこの部分

👇

01234

10234

12034👈

12304👈

をみても


hairetu[2]に格納されている数値0

hairetu[3]に格納されている数値3


が交換されて


hairetu[1]に格納されている数値が3

hairetu[2]に格納されている数値が0


になっているのがわかります。



次に


k=3のとき



hairetu[3]に格納されている数値0

hairetu[4]に格納されている数値4


より


小さいので


hairetu[3]に格納されている数値0

hairetu[4]に格納されている数値4


が交換されて


hairetu[3] <= hairetu[4]


が成立し


hairetu[3]に格納されている数値が4

hairetu[4]に格納されている数値が0


になります


そして


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を横に並べて表示する命令文


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


が実行されることにより


12340


が表示されます。


ビルド実行結果のこの部分

👇

01234

10234

12034

12304👈

12340👈

をみても


hairetu[3]に格納されている数値0

hairetu[4]に格納されている数値4


が交換されて


hairetu[1]に格納されている数値が4

hairetu[2]に格納されている数値が0


になっているのがわかります。



このようにして


このプログラムを実行することにより


4回数値交換が行われて


1番小さな数値0を1番右端に移動させて表示することができました


このとき

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値は


0

1

2

3

4

から

1

2

3

4

0

になっています。


少し変化したね(´▽`*)


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値が


1

2

3

4

0

と格納されている


この状態で


今のと同じプログラムを実行すると


ビルド実行結果は


さて さて


どのように表示されるかな?😊」



#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 1;

hairetu[1] = 2;

hairetu[2] = 3;

hairetu[3] = 4;

hairetu[4] = 0;


int i;


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");

//🌞改行しています


int k;


for (k = 0; k< 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}


return 0;

}

ビルド実行結果


12340

21340

23140

23410

23410


ソーラー「


2回目の


hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ


hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムが実行されています。


まず


このプログラムでは


k=0のとき


hairetu[0]に格納されている数値1

hairetu[1]に格納されている数値2


より


小さいので


hairetu[0]<=hairetu[1]


が成立し


hairetu[0]に格納されている数値1

hairetu[1]に格納されている数値2


が交換されて


hairetu[0]に格納されている数値が2

hairetu[1]に格納されている数値が1


になっているのが


ビルド実行結果のこの部分

👇

12340👈

21340👈

23140

23410

23410

をみてもわかります。


次に


k=1のとき


hairetu[1]に格納されている数値1

hairetu[2]に格納されている数値3


より


小さいので


hairetu[1]<=hairetu[2]


が成立し


hairetu[1]に格納されている数値1

hairetu[2]に格納されている数値3


が交換されて


hairetu[1]に格納されている数値が3

hairetu[2]に格納されている数値が1


になっているのが


ビルド実行結果のこの部分

👇

12340

21340👈

23140👈

23410

23410


をみてもわかります。


次に


k=2のとき


hairetu[2]に格納されている数値1

hairetu[3]に格納されている数値4


より


小さいので


hairetu[2]<=hairetu[3]


が成立し


hairetu[2]に格納されている数値1

hairetu[3]に格納されている数値4


が交換されて


hairetu[2]に格納されている数値が4

hairetu[3]に格納されている数値が1


になっているのが


ビルド実行結果のこの部分

👇

12340

21340

23140👈

23410👈

23410

をみてもわかります。


このとき


配列変数

hairetu[0]に格納されている数値は2

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は4

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


となっています


次に


k=3のとき


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


を比較してみると


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


より小さくないので


hairetu[3]<=hairetu[4]は成立せず


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


は交換されません。


ですので


配列変数

hairetu[0]に格納されている数値は2

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は4

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する命令文


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります


ビルド実行結果は


12340

21340

23140

23410👈

23410👈


となっていますね。


確かに


配列変数

hairetu[0]に格納されている数値は2

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は4

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


のまま変化していませんね。


先ほどのプログラムでは


1番小さな数値0を


1番右端に移動させることができましたが




今度のプログラムでは


0につづいて


2番目に小さな数値1を


右端から2番目に


移動させて表示することができました


このとき

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値は


2

3

4

1

0

になっています。


う~ん


まだまだかな(( ̄ー ̄)ニヤリ)


この


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値が


2

3

4

1

0

の状態で


先ほどと同じプログラムを実行すると


ビルド実行結果は


どのように表示されるかな?😊」



#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 2;

hairetu[1] = 3;

hairetu[2] = 4;

hairetu[3] = 1;

hairetu[4] = 0;


/*配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

2

3

4

1

0

が代入されています。*/


int i;


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");

//🌞改行しています


int k;


for (k = 0; k< 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}


return 0;

}

ビルド実行結果


23410

32410

34210

34210

34210


ソーラー「3回目の


hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ


hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムですね


まず


このプログラムでは


k=0のとき


hairetu[0]に格納されている数値2

hairetu[1]に格納されている数値3


より


小さいので


hairetu[0]<=hairetu[1]


が成立し


hairetu[0]に格納されている数値2

hairetu[1]に格納されている数値3


が交換されて


hairetu[0]に格納されている数値が3

hairetu[1]に格納されている数値が2


になっているのが


ビルド実行結果のこの部分

👇

23410👈

32410👈


をみてもわかります。


次に


k=1のとき


hairetu[1]に格納されている数値2

hairetu[2]に格納されている数値4


より


小さいので


hairetu[1]<=hairetu[2]


が成立し


hairetu[1]に格納されている数値2

hairetu[2]に格納されている数値4


が交換されて


hairetu[1]に格納されている数値が4

hairetu[2]に格納されている数値が2


になっているのが


ビルド実行結果のこの部分

👇

23410

32410👈

34210👈


をみてもわかります。


このとき


配列変数

hairetu[0]に格納されている数値は3

hairetu[1]に格納されている数値は4

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


となっています


次に


k=2のとき


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


を比較してみると


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


より小さくないので


hairetu[2]<=hairetu[3]


が成立せず


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


は交換されません。


ですので


配列変数hairetu[0]に格納されている数値は3

配列変数hairetu[1]に格納されている数値は4

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する命令文


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります


ビルド実行結果は


23410

32410

34210👈

34210👈


となっていて


配列変数hairetu[0]

配列変数hairetu[1]

配列変数hairetu[2]

配列変数hairetu[3]

配列変数hairetu[4]


に格納されている数値は変化していませんね


このとき


配列変数hairetu[0]に格納されている数値は3

配列変数hairetu[1]に格納されている数値は4

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


となっています


次に


hairetu[3]に格納されている数値2

hairetu[4]に格納されている数値1


を比較してみると


hairetu[3]に格納されている数値2

hairetu[4]に格納されている数値1


より小さくないので


hairetu[3]に格納されている数値2

hairetu[4]に格納されている数値1


は交換されません。


ですので


配列変数hairetu[0]に格納されている数値は3

配列変数hairetu[1]に格納されている数値は4

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0



のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する命令文


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります


ビルド実行結果は


23410

32410

34210

34210👈

34210👈


となっていますね


配列変数hairetu[0]

配列変数hairetu[1]

配列変数hairetu[2]

配列変数hairetu[3]

配列変数hairetu[4]


に格納されている数値は


3

4

2

1

0


のまま変化していないことがわかります


1回目のプログラムの実行では


1番小さな数値0を1番右端に移動させることができました。


そののち


2回目のプログラムの実行では


2番目に小さな数値1を


0の左隣の


右端から2番目に移動させることができました。


そののち


3回目のプログラムの実行では


3番目に小さな数値2を


1の左隣の


右端から3番目に


移動させて

表示することができました


このとき

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値は


3

4

2

1

0

になっています。


ふふっ


おやおや~?


だんだん


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


大きな数値から順に数値が格納されだしているとおもいませんか?


きのせいかな?


ふふつ


さて


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

3

4

2

1

0

が格納されている


この状態から


先ほどと同じプログラムを実行してみます。


ビルド実行結果は


どのように表示されるかな?😊」



#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 3;

hairetu[1] = 4;

hairetu[2] = 2;

hairetu[3] = 1;

hairetu[4] = 0;

/*配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に数値

3

4

2

1

0

が代入されています*/



int i;


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");

//🌞改行しています


int k;


for (k = 0; k< 4; k++) {


if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}


return 0;

}


ビルド実行結果


34210

43210

43210

43210

43210



ソーラー「4回目の


hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ


hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムが


実行されています。


まず


このプログラムでは


k=0のとき


hairetu[0]に格納されている数値3

hairetu[1]に格納されている数値4


より


小さいので


hairetu[0]<=hairetu[1]


が成立し


hairetu[0]に格納されている数値3

hairetu[1]に格納されている数値4


が交換されて


hairetu[0]に格納されている数値が4

hairetu[1]に格納されている数値が3


になっているのが


ビルド実行結果のこの部分

👇

34210👈

43210👈


をみてもわかります。


____________________________________________________

この時点で

配列変数

hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値が3

hairetu[2]に格納されている数値が2

hairetu[3]に格納されている数値が1

hairetu[4]に格納されている数値が0

なっています。


4回


hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ


hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラム


を実行して


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


配列変数hairetu[0]に格納されている数値は0

配列変数hairetu[1]に格納されている数値は1

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は3

配列変数hairetu[4]に格納されている数値は4


と数値が格納されている状態から


配列変数hairetu[0]に格納されている数値は4

配列変数hairetu[1]に格納されている数値は3

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


と数値が格納されている状態へ


数値の大きな順に


配列変数に格納されている数値を入れ替えることができました。

____________________________________________________



ソーラー「おおっと


1番小さな数値0を1番右端に

つづいて

2番目に小さな数値1を右端から2番目に

つづいて

3番目に小さな数値2を右端から3番目に

つづいて

4番目に小さな数値3を右端から4番目に

つづいて

5番目に小さな数値4を右端から5番目に


移動させて


表示することができました


言い換えると


1番大きな数値4を1番左端に

つづいて

2番目に大きな数値3を左端から2番目に

つづいて

3番目に大きな数値2を左端から3番目に

つづいて

4番目に大きな数値1を左端から4番目に

つづいて

5番目に大きな数値0を左端から5番目に


移動させて

表示することができました・・・


といえるのかな?


とりあえず


目的だった

               

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


hairetu[0]に格納されている数値は0

hairetu[1]に格納されている数値は1

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は3

hairetu[4]に格納されている数値は4


と数値が代入されている状態から


hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


と数値が格納されている状態に


               4回



hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ


hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラム


を実行することにより



入れ替えることができました



             このようにひたすら😊😊😊😊😊


hairetu[k] hairetu[k + 1]


hairetu[k]hairetu[k + 1]



配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


hairetu[0]に格納されている数値は0

hairetu[1]に格納されている数値は1

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は3

hairetu[4]に格納されている数値は4


と数値が格納されている状態から



          いつかは😊😊😊


hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


と数値が格納されている状態になるというわけなんだね


もちろん


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


hairetu[0]に格納されている数値は0

hairetu[1]に格納されている数値は1

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は3

hairetu[4]に格納されている数値は4


と数値が格納されていない状態


例えば


hairetu[0]に格納されている数値は1

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は4

hairetu[4]に格納されている数値は0


のように数値が格納されている状態でも





hairetu[k] hairetu[k + 1]


hairetu[k]hairetu[k + 1]




          いつかは😊😊😊


hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


と数値が格納されている状態になるというわけなんだね












                        お・し・ま・い💖」


ソーラー「ああ、よかった よかった


帰ろっか アレサ」



アレサ「はい、ソーラーさん😊」



スタコラサッサ~~~~~~


       

 🌹🌺🌹🌺🌹🌺🌹🌺🌹🌺🌹🌺🌹



solarplexuss「ああっ・・・・・・なんか


微妙なところで行ってしまった~~~」








solarplexuss「じゃあ続きは


うちが引き継いでみます


次に


hairetu[1]に格納されている数値3

hairetu[2]に格納されている数値2


を比較してみると


hairetu[1]に格納されている数値3

hairetu[2]に格納されている数値2


より小さくないので


hairetu[1]に格納されている数値3

hairetu[2]に格納されている数値2


は交換されません。


ですので


配列変数

hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります



ビルド実行結果は


34210

43210👈

43210👈


となっています


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


に格納されている数値は変化していません。


このとき


hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0



となっています



次に


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


を比較してみると


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


より小さくないので


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


は交換されません。


ですので


配列変数

hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0

のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する



for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります


34210

43210

43210👈

43210👈


となっていますね


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


に格納されている数値は変化していません。



このとき


配列変数

hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


となっています


次に


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


を比較してみると


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


より小さくないので


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


は交換されません。


ですので


配列変数

hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります


ビルド実行結果は


34210

43210

43210

43210👈

43210👈


となっていますね


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


に格納されている数値に変化なしです




配列変数

hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


となった時点で


常に


プログラムの中のif文


if (hairetu[k] <= hairetu[k + 1]) {


int a=1;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


の条件式


hairetu[k] <= hairetu[k + 1]



成立することはないので


int a=1;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;


が実行されることはなく


配列変数に格納されている数値は入れ替わることはないというわけです


さらにそのことを追確認するために


おまけで


この状態で


先ほどと同じプログラムを実行すると


ビルド実行結果は


どのように表示されるか試してみますか?😊


🌞5回目🌞


#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 4;

hairetu[1] = 3;

hairetu[2] = 2;

hairetu[3] = 1;

hairetu[4] = 0;


int i;


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");

//🌞改行しています


int k;


for (k = 0; k< 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}


return 0;

}


ビルド実行結果


43210

43210

43210

43210

43210



solarplexuss「このプログラムも


hairetu[k]に格納されている数値が hairetu[k + 1]より小さければ


hairetu[k]とhairetu[k + 1]に格納されている数値を交換するプログラムですね。


まず


このプログラムでは


hairetu[0]に格納されている数値4

hairetu[1]に格納されている数値3


が比較されていますが


hairetu[0]に格納されている数値4

hairetu[1]に格納されている数値3


より小さくないので


hairetu[1]に格納されている数値4

hairetu[2]に格納されている数値3


は交換されません。


ですので


配列変数hairetu[0]に格納されている数値は4

配列変数hairetu[1]に格納されている数値は3

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する



for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります


ビルド実行結果は


43210👈

43210👈



となっていますね


次に


hairetu[1]に格納されている数値3

hairetu[2]に格納されている数値2


を比較してみると


hairetu[1]に格納されている数値3

hairetu[2]に格納されている数値2


より小さくないので


hairetu[1]に格納されている数値3

hairetu[2]に格納されている数値2


は交換されません。


ですので


配列変数hairetu[0]に格納されている数値は4

配列変数hairetu[1]に格納されている数値は3

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります



43210

43210👈

43210👈




となっていますね


このとき


配列変数hairetu[0]に格納されている数値は4

配列変数hairetu[1]に格納されている数値は3

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


となっています



次に


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


を比較してみると


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


より小さくないので


hairetu[2]に格納されている数値2

hairetu[3]に格納されている数値1


は交換されません。


ですので


配列変数hairetu[0]に格納されている数値は4

配列変数hairetu[1]に格納されている数値は3

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0

のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります


ビルド実行結果は


43210

43210

43210👈

43210👈



となっていますね


このとき


配列変数hairetu[0]に格納されている数値は4

配列変数hairetu[1]に格納されている数値は3

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


となっています



次に


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


を比較してみると


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


より小さくないので


hairetu[3]に格納されている数値1

hairetu[4]に格納されている数値0


は交換されません。


ですので


配列変数hairetu[0]に格納されている数値は4

配列変数hairetu[1]に格納されている数値は3

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


のまま変化しないことが


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


の実行結果をみてもわかります


ビルド実行結果は


43210

43210

43210

43210👈

43210👈


となっていますね


つまり


以下のプログラムを5回実行しましたが→」

👇

#include <stdio.h>


int main(void) {


int hairetu[5];


hairetu[0] = 3;

hairetu[1] = 4;

hairetu[2] = 2;

hairetu[3] = 1;

hairetu[4] = 0;


int i;


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");

//🌞改行しています


int k;


for (k = 0; k< 4; k++) {



if (hairetu[k] <= hairetu[k + 1]) {


int a;


a = hairetu[k];


hairetu[k] = hairetu[k + 1];


hairetu[k + 1] = a;

}


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


printf("\n");


}


return 0;

}


solarplexuss「5回目のプログラムの実行は


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


hairetu[0]に格納されている数値は0

hairetu[1]に格納されている数値は1

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は3

hairetu[4]に格納されている数値は4


と数値が代入されている状態から


hairetu[0]に格納されている数値は4

hairetu[1]に格納されている数値は3

hairetu[2]に格納されている数値は2

hairetu[3]に格納されている数値は1

hairetu[4]に格納されている数値は0


と数値が格納されている状態に入れ替えるのに必要はないというわけです





ふぅぅ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


満足、満足したぁ



何はともあれ


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]



配列変数hairetu[0]に格納されている数値は0

配列変数hairetu[1]に格納されている数値は1

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は3

配列変数hairetu[4]に格納されている数値は4

と数値が代入されている状態から


大きな数値から順に


配列変数hairetu[0]に格納されている数値は4

配列変数hairetu[1]に格納されている数値は3

配列変数hairetu[2]に格納されている数値は2

配列変数hairetu[3]に格納されている数値は1

配列変数hairetu[4]に格納されている数値は0


と数値が格納されている状態に


変更することができました


この状態で


配列変数hairetu[0]に格納されている数値

配列変数hairetu[1]に格納されている数値

配列変数hairetu[2]に格納されている数値

配列変数hairetu[3]に格納されている数値

配列変数hairetu[4]に格納されている数値


を並べて表示する命令文


for (i = 0; i< 5; i++) {


printf("%d", hairetu[i]);

}


を実行すれば


大きな数値から順に


43210


が表示されるというわけです


ところで


この


配列変数に適当に格納されている数値を


大きな数値から順に


配列変数にいれかえて


大きな数値から順に


数値を表示するプログラムは


どのようなときにもちいられるとおもいますか



例えば


皆さんがインターネットで


スマホを購入する際


サイトには


発売日が古い順から


20170110発売のスマホの画像データ

20170808発売のスマホの画像データ

20171120発売のスマホの画像データ

20180222発売のスマホの画像データ

20181010発売のスマホの画像データ

20181220発売のスマホの画像データ

20190120発売のスマホの画像データ

20190227発売のスマホの画像データ


ならんでいるとします


ですが


新しく発売されたスマホからチェックしてみたいので


発売日が


新しいものから順に


スマホの画像データを


サイトに表示させたいとします


たいてい


検索エンジンには


発売日の新しい順

値段の高い順

値段の安い順

など・・・

の項目が設定されていますね


そのとき


発売日の新しい順


で検索すると


発売日の新しい順



20190227のスマホの画像データ

20190120のスマホの画像データ

20181220のスマホの画像データ

20181010のスマホの画像データ

20180222のスマホの画像データ

20171120のスマホの画像データ

20170808のスマホの画像データ

20170110のスマホの画像データ

のように


スマホの画像データが


並び変えて


表示されるはずです


このとき


このエピソードで学んだプログラムが使用されています


この


20170110発売のスマホの画像データ

20170808発売のスマホの画像データ

20171120発売のスマホの画像データ

20180222発売のスマホの画像データ

20181010発売のスマホの画像データ

20181220発売のスマホの画像データ

20190120発売のスマホの画像データ

20190227発売のスマホの画像データ

についている


20170110

20170808

20171120

20180222

20181010

20181220

20190120

20190227


20170110発売のスマホの画像データ

20170808発売のスマホの画像データ

20171120発売のスマホの画像データ

20180222発売のスマホの画像データ

20181010発売のスマホの画像データ

20181220発売のスマホの画像データ

20190120発売のスマホの画像データ

20190227発売のスマホの画像データ

呼び出すことができるように設定されています


まるで


アスキーコードとそのアスキーコードに対応する文字の画像データのような


関係ですね。



そのように設定されているとどのようなりてんがあるのでしょうか?


例えば


ふつうに


20170110

20170808

20171120

20180222

20181010

20181220

20190120

20190227

のように

発売日の古い順番で

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[5]

hairetu[6]

hairetu[7]

hairetu[8]

数値データが

格納されていると


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[5]

hairetu[6]

hairetu[7]

hairetu[8]

とfor文を用いて


簡単に


一挙に


発売日の古い順から


20170110発売のスマホの画像データ

20170808発売のスマホの画像データ

20171120発売のスマホの画像データ

20180222発売のスマホの画像データ

20181010発売のスマホの画像データ

20181220発売のスマホの画像データ

20190120発売のスマホの画像データ

20190227発売のスマホの画像データ

表示することができます


このことはふつうのことかな?


これでも


配列の仕組みはすごいです


配列を使わなければ


発売日に対応するスマホの画像データを


1つずつ表示するプログラムを


記述しなければなくなります


さらにすごいことに


このとき


発売日の新しい順


で検索すると


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[5]

hairetu[6]

hairetu[7]

hairetu[8]

には


発売日の新しい順


つまり


大きな数値から順に


20190227

20190120

20181220

20181010

20180222

20171120

20170808

20170110


数値が入れ替えて格納されることになります


このとき


このエピソードで学んだプログラムのシステムが用いられています


そして


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

hairetu[5]

hairetu[6]

hairetu[7]

hairetu[8]

とfor文を用いて


発売日の新しい順に


簡単に


一挙に


20190227のスマホの画像データ

20190120のスマホの画像データ

20181220のスマホの画像データ

20181010のスマホの画像データ

20180222のスマホの画像データ

20171120のスマホの画像データ

20170808のスマホの画像データ

20170110のスマホの画像データ

が表示されるというわけですね


めでたし めでたし😊/」


👇













👇















👇














👇












🌹🌺🌹🌺🌹🌺🌹🌺🌹🌺🌹🌺🌹🌹🌺🌹🌺🌹🌺🌹🌺🌹🌺🌹🌺🌹


ソーラー「いらっしゃい


さあ



ここからが本番だよ



                 to be continued  つづく


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます