C言語で席替え
私自身はもう、席替えをする機会がなさそうなのですが、最近Twitterでプログラムで席替えをする動画を見たので、私も作ってみました。
是非、クラスで取り入れてみてはいかがでしょう?
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
#include<stdio.h> #include<time.h> #include<stdlib.h> #include <windows.h> void main() { int schooler = 0; //生徒人数 int box[255]; //番号格納配列 int chear[255]; //席順格納配列 int x = 0; //席の列数 int ans = 0; //ランダム変数 printf("生徒人数:"); scanf("%d", &schooler); printf("席の列数:"); scanf("%d", &x); for (int i = 0; i < schooler; i++) box[i] = i + 1; srand((unsigned)time(NULL)); for (int i = schooler; i > 0; i--) { ans = rand() % i; chear[i] = box[ans]; for (int j = ans;j<i; j++) { box[j] = box[j + 1]; } } printf("Are you ready ?\n"); getchar(); for (int i = 0; i < x - 1; i++) printf(" "); printf("| +++ |"); for (int i = 1; i <= schooler; i++) { if (i % x == 1 && i != 0) printf("\n|"); printf(" %3d |", chear[i]); Sleep(300); } printf("\n"); } |
といった感じです。
解説
そこまで高度な内容ではないので軽く解説します。
本プログラムの流れとしては、
- 配列/変数宣言
- 数値(生徒数/座席列数)を入力
- 席順を確定
- 出力
という流れです。
配列や変数に関してはコメントアウトしてある通りの内容です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
for (int i = 0; i < schooler; i++) box[i] = i + 1; srand((unsigned)time(NULL)); for (int i = schooler; i > 0; i--) { ans = rand() % i; chear[i] = box[ans]; for (int j = ans;j<i; j++) { box[j] = box[j + 1]; } } |
この部分が席順を決定するプログラムになります。
boxという配列に「1~生徒数」までの数値を名簿番号として格納した配列から、ランダムに番号を取り出して、取り出した配列の分は前に詰めます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
for (int i = 0; i < x - 1; i++) printf(" "); printf("| +++ |"); for (int i = 1; i <= schooler; i++) { if (i % x == 1 && i != 0) printf("\n|"); printf(" %3d |", chear[i]); Sleep(300); } |
続いて出力についてです。
最初に表示した「| +++ |」の部分は黒板の位置を表しています。
また、Sleep(300); を使ったのはゆっくり表示されるドキドキ感を味わうためという演出です。
要らない方は消してしまって大丈夫です。
因みに、動作結果はこんな感じになります。
是非ご活用ください!
サムネイルについて
今回のサムネイルの椅子はFusion360で作りました。
学生時代の椅子を思い出しながら作ったのですが、なかなか再現できたと思います笑
今回のブログ曲
今回投稿中に聴いていた曲はこちら