情報科学序論

2009年度
情報科学&情報科学演習
~ 世界のナベアツに挑戦 ~
担当教員: 幸山 直人
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム
主要部分を抜粋
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
型の性質を上手く利用
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(1-1)
i=1の場合(ループ1)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
1
1
1
1
1
1
1
1
0
0
0
0
1
1
0
0
0
0
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(1-2)
i=1の場合(ループ2)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
1
0
0
1
1
0
0
0
0
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(3-1)
i=3の場合(ループ1)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
3
3
3
3
3
3
3
0
0
3
3
3
3
3
0
0
0
0
0
1
1
3
3
3
3
1
1
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(13-1)
i=13の場合(ループ1)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
13
13
13
13
13
13
13
0
0
13
13
13
13
13
0
0
0
0
0
1
1
13
13
13
13
1
1
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(16-1)
i=16の場合(ループ1)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
16
16
16
16
16
0
0
16
16
16
0
0
0
0
0
16
16
1
1
0
0
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(16-2)
i=16の場合(ループ2)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
16
16
1
1
0
0
16
16
0
0
0
0
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(16-3)
i=16の場合(ループ3)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
16
0
0
16
16
0
0
0
0
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(35-1)
i=35の場合(ループ1)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
35
35
35
35
35
0
0
35
35
35
0
0
0
0
0
35
35
3
3
0
0
exercise0207.c
2009年度 情報科学&情報科学演習
3の付く数字を表示するプログラム(35-2)
i=35の場合(ループ2)
i
9: for (i = 1; i <= 40; i++) {
10:
flag = 0;
11:
tmp = i;
12:
while (tmp != 0) {
13:
if (((tmp - 3) % 10) == 0) {
14:
flag = 1;
15:
break;
16:
}
17:
tmp = tmp / 10;
18:
}
19:
if (flag == 1) printf("%d\n", i);
20: }
tmp flag
35
35
35
35
3
3
3
3
0
0
1
1
35
35
3
3
1
1
exercise0207.c
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム?
レポートに多く見られた解答
for (i = 1; i <= 40; i++) {
flag = 0;
tmp = i;
while (tmp != 0) {
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
else if ((tmp % 3) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
if (flag == 1) printf("%d\n", i);
}
←3の倍数のとき
flag=1
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム?(検証)
i=68の場合(ループ1)
for (i = 1; i <= 100; i++) {
flag = 0;
tmp = i;
while (tmp != 0) {
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
else if ((tmp % 3) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
if (flag == 1) printf("%d\n", i);
}
i
tmp flag
68
68
68
68
68
68
68
68
0
0
0
0
68
68
0
68
68
6
6
0
0
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム?(検証)
i=68の場合(ループ2)
for (i = 1; i <= 40; i++) {
flag = 0;
tmp = i;
while (tmp != 0) {
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
else if ((tmp % 3) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
if (flag == 1) printf("%d\n", i);
}
i
tmp flag
68
68
6
6
0
0
68
68
68
6
6
6
0
1
1
68
68
6
6
1
1
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム(ベスト)
for (i = 1; i <= 40; i++) {
flag = 0;
if ((i % 3) == 0) {
flag = 1;
}
else {
tmp = i;
while (tmp != 0) {
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
}
if (flag == 1) printf("%d\n", i);
}
3の倍数
3の付く数字
exercise0208.c
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム(1)
for (i = 1; i <= 40; i++) {
flag = 0;
tmp = i;
while (tmp != 0) {
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
else if ((i % 3) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
if (flag == 1) printf("%d\n", i);
}
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム(1’)
for (i = 1; i <= 40; i++) {
flag = 0;
tmp = i;
while (tmp != 0) {
if ((i % 3) == 0) {
flag = 1;
break;
}
else if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
if (flag == 1) printf("%d\n", i);
}
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム(2)
for (i = 1; i <= 40; i++) {
flag = 0;
tmp = i;
while (tmp != 0) {
if ((i % 3) == 0) {
flag = 1;
break;
}
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
if (flag == 1) printf("%d\n", i);
}
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム(3)
for (i = 1; i <= 40; i++) {
flag = 0;
if ((i % 3) == 0) flag = 1;
tmp = i;
while (tmp != 0) {
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
if (flag == 1) printf("%d\n", i);
}
*3の倍数であっても、さらに3の付く数字であるかを評
価しているので無駄が多い
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム(4)
for (i = 1; i <= 40; i++) {
flag = 0;
tmp = i;
while (tmp != 0) {
if (((tmp - 3) % 10) == 0 || (i % 3) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
if (flag == 1) printf("%d\n", i);
}
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム(ベスト)
for (i = 1; i <= 40; i++) {
flag = 0;
if ((i % 3) == 0) {
flag = 1;
}
else {
tmp = i;
while (tmp != 0) {
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
}
if (flag == 1) printf("%d\n", i);
}
3の倍数
3の付く数字
exercise0208.c
2009年度 情報科学&情報科学演習
3の倍数と3の付く数字を表示するプログラム(トレース)
for (i = 1; i <= 40; i++) {
flag = 0;
if ((i % 3) == 0) {
flag = 1;
}
数値をチェック(トレース)
else {
tmp = i;
printf("i=%d: tmp=%d: flag=%d\n", i, tmp, flag);
while (tmp != 0) {
if (((tmp - 3) % 10) == 0) {
flag = 1;
break;
}
tmp = tmp / 10;
}
}
if (flag == 1) printf("%d\n", i);
exercise0208.c
}
2009年度 情報科学&情報科学演習
最大公約数を求めるプログラム
練習:変数 x, y, t をトレースしなさい
5:
6:
7:
8:
9:
10:
11:
12:
13:
int x = 1234, y = 56, t;
printf("gcd(%d,%d)=", x, y);
while (y != 0) {
t = x;
x = y;
y = t % x;
}
printf("%d\n", x);
report0401.c