配列と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]

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

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;


を実行されたら


いいような気がします。



もしくは


変数宣言


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に格納されている値1



代入されても


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




ソーラー「お いいね。


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


早速


そのプログラムを実行すると


#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;

a = 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] = hairetu[1];

hairetu[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

hairetu[4] =b;

a = 0;


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;



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;


a = 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;

a = 0;


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[1] = hairetu[2];

hairetu[2] = hairetu[3];

hairetu[3] = hairetu[4];

までを実行したのち


直接


hairetu[4]=1;


を実行されたら


いいような気がします。


変数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[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]に格納される数値を変更する必要がありますが


変数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[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;


a = 0;


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;


a = 0;


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;


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 = 0;


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");

//🌞改行しています


}

}

ビルド実行結果


01234

12340

23401


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


まてよ。


繰り返して実行される


お隣同士の配列変数

に格納されている数値を交換する命令文


たちを


配列と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で共有
  • はてなブックマークでブックマーク

作者を応援しよう!

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

応援したユーザー

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