情報科学演習
2011.05.30
やはり以下のような処理を考えた人が出てきました.これが,絶対やっちゃダメな処理です.
何が悪いかと言うと,「約数を自分で探している」ことです.そんな面倒臭いこ
とは「計算機にやらせる」のがプログラミングです.もし,問題が以下のような
ものであったらどうするでしょうか?
10桁の整数を乱数で発生させて,その約数を全て表示せよ
上の処理でできますか?
似たようなものに以下のものもありました.
上記のような発想自体を忘れ去らない限り,この授業の単位の取得は難しくなり
ますので,注意してください.
以下のように工夫しているものもありました.が,これもこの問題限定の処理で
すので,一般化できません.10桁の整数の約数には使用できませんので,歓迎で
きません.
switch 文を学習しましたが,前回も言ったようにこれ以後は使う必要
はありません.基本の if 文および else を使って条
件分岐をしっかり考えてください.
for 文は教科書p.39の図4.2の下にあるような形式で使用します.式1
から式3までは初期値,終了条件,増分を表します.これらは必要に応
じて処理のために使用するので,必ずしも書かなくてはいけないもので
はありません.ここが空欄であれば,教科書p.40にあるような無限ルー
プになります.
for 文の式1から式3までの設定では変数 i がよく使用され
ます.これは整数(Integer)の頭文字を取ったものです.for
文ではこのように i を使用しますので,他の場所で i
を使用する場合には注意が必要です.ただし,複数の for
文が一つのプログラム中にあってもこの変数(仮変数)は i
のままで構いません.
教科書p.38で紹介されている複合演算子は非常に重要です.以後,頻繁に使用さ
れる予定です.変数の値を変更する際に利用されますので,よく理解しておいて
ください.本日の実習でも使用します.また,略号の方がよく使用されますので,
そちらも注意してください.
教科書のp.39に出てくるインクリメント演算子(とデクリメント演算子)も非常に
重要です.変数の値を1増やす,もしくは,1減らすという処理ですので,こちら
も頻繁に使用します.
if(a == 10)
printf(" 2 5 10\n\n");
else if(a == 12)
printf(" 2 3 4 6 12\n\n");
else if(a == 14)
printf(" 2 7 14\n\n");
else if(a == 15)
printf(" 3 5 15\n\n");
else if(a == 16)
printf(" 2 4 8 16\n\n");
else if(a == 18)
printf(" 2 3 6 9 18\n\n");
else if(a == 20)
printf(" 2 4 5 10 20\n\n");
else
printf(" %d\n\n", a);
switch(a){
case 10:
printf("Number %d has following measures : 1 2 5 10\n",a);
break;
case 12:
printf("Number %d has following measures : 1 2 3 4 6 12\n",a);
break;
case 14:
printf("Number %d has following measures : 1 2 7 14\n",a);
break;
case 15:
printf("Number %d has following measures : 1 3 5 15\n",a);
break;
case 16:
printf("Number %d has following measures : 1 2 4 8 16\n",a);
break;
case 18:
printf("Number %d has following measures : 1 2 3 6 9 18\n",a);
break;
case 20:
printf("Number %d has following measures : 1 2 4 5 10 20\n",a);
break;
default:
printf("Number %d has following measures : 1 %d\n",a ,a);
}
if(a % 2 == 0)
printf(" 2");
if(a % 3 == 0)
printf(" 3 %d", a / 3);
if(a % 4 == 0){
if(a / 4 == 4)
printf(" 4");
else if(a / 3 != 4)
printf(" 4 %d", a / 4);
}
if(a % 2 == 0)
printf(" %d", a / 2);
printf(" %d\n",a);
次回以降で扱う多重のループの場合には変数は使い分ける必要があります.その
際にはアルファベットの順番で i, j, k, l, m, ... などがよく使用
されます。