配列とfor文を用いて配列変数に格納されているデータを前の配列変数へずらしてみましょう🌻💖💖


ソーラー「配列とfor文を用いた基本的なプログラムが3つ登場してきたね


みんな 大分レベルアップしたんじゃないかな😊


さあ


次に


登場する配列とfor文を用いた4つ目の基本的なプログラムは


          配列とfor文を用いて



    お隣同士の配列変数に格納されているデータを交換



するプログラムです。



まずは


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


👇


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化したあとすぐに


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/

printf("\n");

//🌞改行しています 理由はじきにわかります😊

return 0;

}


ビルド実行結果


01234


ソーラー「


このプログラムでは


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

数値

0

1

2

3

4

が代入されています。


ここで


配列変数同士で格納されている数値を交換するプログラムを実行してみたいと思います。


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


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化したあとすぐに配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4] = hairetu[0];


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


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


}


printf("\n");

//🌞改行しています


return 0;

}



ビルド実行結果


01234

12341


ソーラー「みんな


このプログラムのポイントは


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4] = hairetu[0];


なんだよ。


hairetu[0] = hairetu[1];


では


配列変数hairetu[0]に配列変数hairetu[1]


が代入されています。


このとき


配列変数hairetu[0]には


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


が代入されることになります。」



アレサ「


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値が


0

1

2

3

4

から

1

2

3

4

1


に変更されています」


ソーラー「本当は


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


0

1

2

3

4

から

1

2

3

4

0

のように


ビルド実行結果が

01234

12340

となるように


循環しているように


華麗に変更したいんだけど・・・



配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値が

0

1

2

3

4

から

1

2

3

4

1

に変更されているね。


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4] = hairetu[0];


の方法では


hairetu[0] = hairetu[1];


を実行したときに


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


0から1に変更されているため


hairetu[4] = hairetu[0];



実行しても


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



0ではなく

1になっているわけだね。


う~ん


どうしたら


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


0にすることができるかな?」



アレサ「

hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

までを実行したのち


直接


hairetu[4]に0を代入する


hairetu[4]=0;


を実行されたら


いいような気がします。



もしくは


変数宣言


int b;


を実行し


生成される変数bに


b=hairetu[0];



hairetu[0]に格納されている数値0をあらかじめ代入して確保しておいて


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

までを実行したのち


hairetu[4]=b;


を実行し


hairetu[4]に変数bに格納されている元のhairetu[0]の値0



代入されても


いいような気がします。」




ソーラー「お いいね。


そのアイデア(´▽`*)


早速


直接


hairetu[4]=0;


が記述されたプログラムを実行すると


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化にしたあとすぐに配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/

printf("\n");

//🌞改行しています


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4] = 0;

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


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

}

printf("\n");

//🌞改行しています

return 0;

}


ビルド実行結果

01234

12340


ソーラー「うまくいったね(^_-)-☆


もう1つ(^_^)/


変数bを用いた場合のプログラムは

👇」


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています


int b;


b=hairetu[0];//👈hairetu[0]の値を変数bに代入しました

hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4] =b;


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


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

}


printf("\n");

//🌞改行しています


return 0;

}


ビルド実行結果

01234

12340



ソーラー「やったね!


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


0

1

2

3

4

から

1

2

3

4

0

に変更することができたね。


う~ん


なんだかプログラムが長いかな?



ここで


これらのプログラムを配列とfor文を使って


短く書き換えてみたいと思います。


まず最初に登場したプログラムのこの部分

👇

hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4] = 0;



int i = 0;


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


hairetu[i] = hairetu[i+1];


}


hairetu[4] = 0;


に変更してみます。


すると


プログラムは次のようになります。


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています

int i = 0;


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


hairetu[i] = hairetu[i + 1];


}


hairetu[4] = 0;


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


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

}


/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を表示しています*/



printf("\n");

//🌞改行しています

return 0;

}


ビルド実行結果

01234

12340


ソーラー「もう1つ(^_^)/


変数bを用いた場合のプログラムは

👇」


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています


int b;


b=hairetu[0];


int i = 0;


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


hairetu[i] = hairetu[i + 1];


}


hairetu[4]=b;


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


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

}

printf("\n");

//🌞改行しています

return 0;

}


ビルド実行結果


01234

12340



ソーラー「いい感じだね。」


ソーラー「ここで


さらに


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


1

2

3

4

0


から


2

3

4

0

1

に変更してみたいんだ。


そのためには・・・・・


どうしよっかな


アレサ」


アレサ「はいっ ソーラーさん


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

に格納されている数値を


1

2

3

4

0


から


2

3

4

0

1


に変更するには


また再び


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

までを実行したのち


直接


hairetu[4]=1;


を実行されたら


いいような気がします。


変数bを用いる場合は


もっと簡単でhairetu[4]に格納される数値はどうしよう・・・と


考える必要はなく


再び


以下の命令文を


繰り返せばよいとおもわれます。


つまり


b=hairetu[0];


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];


までを実行したのち


hairetu[4]=b;


を実行すればいいと思います。


いかがですか


😊   😊   😊   😊   😊   😊



となると


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]


に格納されている数値を


0

1

2

3

4

から


1

2

3

4

0


さらに


2

3

4

0

1


に変更したい場合



変数bを用いない場合は


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4]=0;


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4]=1;




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

次は

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


変更する必要がありますが


変数bを用いる場合は


int b;

ののち


b=hairetu[0];


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];


hairetu[4]=b;


b=hairetu[0];


hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];


hairetu[4]=b;



同じ命令文

hairetu[0] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];


hairetu[4]=b;


を繰り返せばよく


hairetu[4]に格納される数値を自分で選び手動で変更する手間が


省けることになります


😊   😊   😊   😊   😊   😊


ソーラー「おっと上👆のアイデア ナイス! いいね。


では


そのプログラムを構成し実行してみたいと思います。


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています


int i = 0;


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


hairetu[i] = hairetu[i + 1];


}


hairetu[4] = 0;


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


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

}


printf("\n");

//🌞改行しています


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


hairetu[i] = hairetu[i + 1];


}


hairetu[4] = 1;


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


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

}


printf("\n");

//🌞改行しています


return 0;

}


ビルド実行結果


01234

12340

23401



ソーラー「変数bを用いる場合は


#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています


int b;


b=hairetu[0];


int i = 0;


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


hairetu[i] = hairetu[i + 1];


}


hairetu[4] = b;


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


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

}


printf("\n");

//🌞改行しています


b=hairetu[0];


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


hairetu[i] = hairetu[i + 1];


}


hairetu[4] = b;


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


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

}


printf("\n");

//🌞改行しています


return 0;

}


ビルド実行結果


01234

12340

23401



🌞   🌞   🌞   🌞   🌞   🌞


01234

12340

23401

をよくみると

左へ数値が1つずつ移動しているのがわかります

🌞   🌞   🌞   🌞   🌞   🌞



ソーラー「配列とfor文を使って


配列変数同士で格納されている数値を変更することができたね。


ところで


変数bを用いた場合のプログラムは


同じ命令文が


繰り返されているような気がする


そんな気がするんだけど・・・」


アレサ


「あっ・・・


はい


プログラム内で


b = hairetu[0];


int i = 0;


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


hairetu[i] = hairetu[i + 1];


}


hairetu[4] = b;



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


printf("%d\n", hairetu[a]);

}


printf("\n");


が2回くりかえされています。


配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

格納されている数値を


2回入れ替えたので


b = hairetu[0];


int i = 0;//👈変数宣言は1回です


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


hairetu[i] = hairetu[i + 1];


}


hairetu[4] = b;



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


printf("%d\n", hairetu[a]);

}


printf("\n");


が2回繰り返されていますね。


ということは


繰り返しの命令文を実行することのできる


for文を用いて


プログラムの


今この部分を


短く書き換えることができます。


そのプログラムは


こちら(^_-)-☆となります。

👇

#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

/*👆

配列変数

hairetu[0]

hairetu[1]

hairetu[2]

hairetu[3]

hairetu[4]

を初期化すると同時に配列変数に格納された数値

0

1

2

3

4

printf出力表示するようにしています*/


printf("\n");

//🌞改行しています


int b;


int i ;


int c;


for (c = 0; c < 2; c++) {


b = hairetu[0];


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

hairetu[i] = hairetu[i + 1];

}


hairetu[4] = b;



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


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

}

printf("\n");

//🌞改行しています


}


return 0;

}


ビルド実行結果


01234

12340

23401


ソーラー「おおっ うまくまとめることができたね。


👇この部分が2回繰り返されているので


b=hairetu[0];



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


hairetu[i] = hairetu[i + 1];


}


hairetu[4] = b;


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


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

}


printf("\n");

//🌞改行しています


👆


for文を用いて


以下のように書き換えたわけなんだね


for (c = 0; c < 2; c++) {


b = hairetu[0];


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

hairetu[i] = hairetu[i + 1];

}


hairetu[4] = b;



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


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

}

printf("\n");

//🌞改行しています


}



まてよ。




配列変数

hairetu[0]に

hairetu[1]に格納されている数値データを代入する


hairetu[1]に

hairetu[2]に格納されている数値データを代入する


hairetu[2]に

hairetu[3]に格納されている数値データを代入する


hairetu[3]に

hairetu[4]に格納されている数値データを代入する


hairetu[4]に

hairetu[0]に格納されている数値データを代入する


これらが繰り返されるんだね




前の配列変数


次の配列変数に格納されている数値を代入する命令文


たちが


          😊繰り返し😊



実行されるなら


配列とfor文でまとめて短く記述することができる・・


ということは


前の配列変数


次の配列変数に格納されている数値を代入する命令文


たち



10回


              繰り返し


実行されていても


配列とfor文でまとめて短く記述することができるということだよね。


ということは


前の配列変数


次の配列変数に格納されている数値を代入する命令文たち



10回


まともに記述しなくても


配列とfor文を用いて


前の配列変数

に格納されている数値を


次の配列変数に格納されている数値に


簡単に


10回


入れ替えることができるってことじゃないかな😊」


アレサ「ソーラーさん そうです。そういうことになりますの」


ソーラー「よ~し(^_^)/


それでは


配列とfor文を用いて


前の配列変数

に格納されている数値を


次の配列変数


に格納されている数値に


10回入れ替えて


入れ替えるたび


配列変数

に格納されている数値を


表示してみたいとおもいます。



#include <stdio.h>


int main(void) {


int hairetu[5];


int a = 0;


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


hairetu[a] = a;


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

}

printf("\n");


int b;


int i = 0;


int c;


for (c = 0; c <10; c++) {



b = hairetu[0];



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

hairetu[i] = hairetu[i + 1];

}


hairetu[4] = b;



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


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

}


printf("\n");


}


return 0;

}


ビルド実行結果


01234

12340

23401

34012

40123

01234

12340

23401

34012

40123

01234



ソーラー「いい感じだね(*^▽^*)


ところで


前の配列変数


次の配列変数に格納されている数値を代入するプログラム


言い換えると


前の配列変数に格納されている数値を


次の配列変数に格納されている数値に


入れ替えるプログラムは


どんなものにつかわれているのかな?」


アレサ「前の配列変数


次の配列変数に格納されている数値を代入するプログラム


言い換えると


前の配列変数に格納されている数値を


次の配列変数に格納されている数値に


入れ替えるプログラムは


配列変数に格納されている


数値の中で


どの配列変数


に格納されている数値が1番小さいか


どの配列変数


に格納されている数値が1番大きいか


を判定するときや


あるいは


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


小さい順から


表示する


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


大きい順から


表示するときなど


幅広く用いられて


とても重要なプログラムとなっています。」


ソーラー「え~ そうなんだ~」

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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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