配列変数に格納されている数値データを大きい順に並び変える フラグを用いる場合

マックス「


結局のところ


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に適当に格納されている


数値データ

1

2

3

4

5



配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


配列変数

hairetu[0] =5

hairetu[1] =4

hairetu[2] =3

hairetu[3] =2

hairetu[4] =1

のように


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


大きい数値から順に格納されているように並び変えるには



☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

hairetu[0] とhairetu[1] に格納されている数値の大きさを比較して


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


小さければ


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


次に


hairetu[1] とhairetu[2] に格納されている数値の大きさを比較して


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


小さければ


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



次に


hairetu[2] とhairetu[3] に格納されている数値の大きさを比較して


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


小さければ


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



次に


hairetu[3] とhairetu[4] に格納されている数値の大きさを比較して


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


小さければ


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

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


以上


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


で囲まれた命令を


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

配列変数

hairetu[0] =5

hairetu[1] =4

hairetu[2] =3

hairetu[3] =2

hairetu[4] =1

のように

大きい数値から順に


格納された状態になるまで


何回か繰り返せばよかったんじゃないか?」



以下 エクセレントC言語入門より


そうなの


ただ


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


で囲まれた命令を何回繰り返せば



配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

配列変数

hairetu[0] =5

hairetu[1] =4

hairetu[2] =3

hairetu[3] =2

hairetu[4] =1

のように


大きい数値から順に


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


数値データが格納されているように並び変えることができるかわからないの


たとえば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

1

2

と数値データが格納されていれば


1回だけ


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


で囲まれた命令を


実行すればよく


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

3

4

5

2

1

と数値データが格納されている状態では


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


で囲まれた命令を




2回繰り返せば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

2

1


と数値データが格納されている状態となるの




マックス「


結局


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


で囲まれた命令を何回か繰り返せば



配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

配列変数

hairetu[0] =5

hairetu[1] =4

hairetu[2] =3

hairetu[3] =2

hairetu[4] =1

のように


大きい数値から順に


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


数値データ

5

4

3

2

1


格納されているように並び変えることができるんだが


                🌞何回繰り返せば🌞


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

配列変数

hairetu[0] =5

hairetu[1] =4

hairetu[2] =3

hairetu[3] =2

hairetu[4] =1

のように


大きい数値から順に


数値データ


5

4

3

2

1



格納されているように並び変えることができるかは


そのときの


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

格納されている数値次第ってわけだ」



以下 エクセレントC言語入門より


ねね


折角だから


今さっきの命令の手順

👇



🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

hairetu[0] とhairetu[1] に格納されている数値の大きさを比較して


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


小さければ


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


次に


hairetu[1] とhairetu[2] に格納されている数値の大きさを比較して


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


小さければ


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



次に


hairetu[2] とhairetu[3] に格納されている数値の大きさを比較して


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


小さければ


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



次に


hairetu[3] とhairetu[4] に格納されている数値の大きさを比較して


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


小さければ


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

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


以上


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


で囲まれた命令を


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

配列変数

hairetu[0] =5

hairetu[1] =4

hairetu[2] =3

hairetu[3] =2

hairetu[4] =1

のように

大きい数値

5

4

3

2

1

から順に


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

格納された状態になるまで


何回か繰り返す


🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞


👆

この

🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞


🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞


で囲まれたことを


プログラムで表現してみない?




マックス「そうだな


なんだか


日本語化した文章をみていると


なんかプログラムで表現できそうな気がしてくる


うぅうん・・・


hairetu[0] とhairetu[1] に格納されている数値の大きさを比較して


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


小さければ


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



if (hako[0] <= hako[1]) {

int a = hako[0];

hako[0] = hako[ 1];

hako[1] = a;

}


とあらわされるんじゃないか?



以下 エクセレントC言語入門より


やるわね




マックス「


同様に


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



if (hako[1] <= hako[2]) {

int a = hako[1];

hako[1] = hako[2];

hako[2] = a;

}



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



if (hako[2] <= hako[3]) {

int a = hako[2];

hako[2] = hako[3];

hako[3] = a;

}



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



if (hako[3] <= hako[4]) {

int a = hako[3];

hako[3] = hako[4];

hako[4] = a;

}



となるんじゃないか


一般的には


hairetu[i] とhairetu[i+1] に格納されている数値を交換する


if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}


あらわされるわけだあ


うまく記述できた!




なので


if (hako[0] <= hako[1]) {

int a = hako[0];

hako[0] = hako[ 1];

hako[1] = a;

}



if (hako[1] <= hako[2]) {

int a = hako[1];

hako[1] = hako[2];

hako[2] = a;

}





if (hako[2] <= hako[3]) {

int a = hako[2];

hako[2] = hako[3];

hako[3] = a;

}




if (hako[3] <= hako[4]) {

int a = hako[3];

hako[3] = hako[4];

hako[4] = a;

}



はfor文でまとめて



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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}


とあらわされるわけだ


はははははははは


どうだあぁぁ


この技の切れわあ




以下 エクセレントC言語入門より



すごいじゃない


日本語の文章がもうプログラミング化されている



マックス「


さらに


☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆

☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆  ☆


で囲まれた命令を


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

配列変数

hairetu[0] =5

hairetu[1] =4

hairetu[2] =3

hairetu[3] =2

hairetu[4] =1

のように

大きい数値から順に


格納された状態になるまで


何回か繰り返す


ということは


すなわち

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

適当に


5

4

3

2

1


の数値データが格納されていて


配列変数

hairetu[0] =5

hairetu[1] =4

hairetu[2] =3

hairetu[3] =2

hairetu[4] =1

のように

大きい数値データ5から順に


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

格納された状態になるまで



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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}


を何回か繰り返すことを


プログラミングで表現したらいいんだろう


・・・


??


おやあ・・・?


何回


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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}



繰り返したらいいんだ?


たとえば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

1

2

と数値データが格納されていれば



1回だけ


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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}


で囲まれた命令を


実行すればよく


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

1

2

3

4

5

と数値データが格納されていれば


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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}



4回繰り返せば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

2

1

と数値データが格納されている状態となり



配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

3

4

5

2

1

と数値データが格納されている状態では


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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}



2回繰り返せば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

2

1


と数値データが格納されている状態となり


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

4

5

3

2

1

と数値データが格納されていれば



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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}



1回繰り返せば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

2

1

と数値データが格納されている状態となるわけだ




配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

3

4

5

2

1

と数値データが格納されている場合は



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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}


2回繰り返せば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

2

1


と数値データが格納されている状態となるわけだ



配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

4

5

3

2

1

と数値データが格納されている場合は


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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}


1回繰り返せば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

2

1

と数値データが格納されている状態となるわけだ


じゃあ


適当に一番多い回数4回にでもしておくか?




以下 エクセレントC言語入門より


ええ


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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}


1回繰り返せば


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

2

1

と数値データが格納されている状態にできる場合は



4回も


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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}

繰り返すのは無駄じゃない?



マックス「っていわれてもん・・・・・



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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}


を繰り返すことによって


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

5

4

3

2

1


が格納された場合


もう


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

if (hako[i] <= hako[i + 1]) {

int a = hako[i];

hako[i] = hako[i + 1];

hako[i + 1] = a;

}

}


を繰り返すことがないようにすればいいんだろう


・・・


・・・


・・・



全然わからん・・・わい・・・・・


どうやるの それぇ?」




以下 エクセレントC言語入門



      ここで登場するのが


          今まで学んだ



        😊"フラグをたてる(定められた条件を満たす)"😊



ことなの


マックス「なぜぇ


なんで


        😊"フラグをたてる(定められた条件を満たす)"😊


ことが


 それが関係してくるのか???」




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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る