2009年9月27日日曜日

第13回 for文② 多重ループ

お題:
物体を自由落下させた時に進む距離を求めるプログラムを作成する。
様々な初速度で落下させ、重力によってどれだけ落ちるかを計算する。
①初速度は0,1,2,3,4,5,6,7[m/s]
②重力の加速度は9.8[m/s^2]とする
③落下させてから0秒から1秒ごとの落下距離を表示する。n秒まで表示させる
④nを初めに入力させる

プログラム実行例:

何秒後まで表示させますか?
n=5

初速度  0[m/s],1[m/s],2[m/s],3[m/s],4[m/s],5[m/s]
1秒      4.9[m],5.9[m],6.9[m],7.9[m],8.9[m],9.9[m]
2秒 ・・・
・・・
5秒 ・・・

必須事項:
・for文を2回使う事

注意事項:
・二乗は単純に二回掛けください
・分数を使う場合は数式をよく確認してください

予備知識:

等加速度運動をする物体が進む距離Xは、時間をt、初速度をv、加速度をaとすると、以下の式で表されます

X = v*t + (a*t^2) / 2

for文の中にfor文を入れる事が出来ます。例えば、123456・・・と数字を並べて、1行7つ数字を表示すると改行するようにするには、以下のようなプログラムになります。

#include <stdio.h>

int main () {
    int i,t,y;
    i=0;
    for (t=1;t<=5;t++) {
        for(y=1;y<=7;y++) {
            i++;
            printf("%d ", i);
        }
        printf("\n");
    }
}

(実行結果)
image

このプログラムでは
tが行
yが列
iが数

の変数です。iは青い部分のfor文を抜けても数値は保存されたままなので、カウントアップできます。

解答は9月28日に掲載します。それまでにプログラムを作成し、
・プログラム文
・その実行ファイル
をメールに添付して以下のアドレスに送ってください。

解答、質問はこちらまで
cosmo-cleaner@za.pial.jp

---------------------------------------------------------------

解答例

1

2
3
4
5

6
7
8

9
10
11
12
13

14
15
16
17
18
19
20
21

#include <stdio.h>

int main () {
    int n,t,v;
    double a;
    a=9.8;

    puts("何秒後まで表示させますか?");
    printf("n=");    scanf("%d",&n);
    puts("");

    printf("初速度 ");
    for (v=0;v<=7;v++) {
        printf("%d[m/s], ",v);
    }
    printf("\n");

   for(t=1;t<=n;t++){
        printf("%d秒    ",t);
        for(v=0;v<=7;v++){
            printf("%.1f[m],",v*t+a*t*t/2);
        }
        printf("\n");
    }
}

実行例は次の通りです

image

解説

今回使った変数とその役割

n
t
v

a
求める最大の時間(秒)
時間(秒)
初速度[m/s]
重力の加速度9.8[m/s^2]

赤いfor文が行、青いfor文が列です。
まず、赤いfor文でtを設定し、青いfor文で初速度vを1づつ増やしながらtを代入していきます。青いfor文で初速度v=7[m/s]までいくと一行が完成し、赤いfor文に戻り、tが1秒増え、また青いfor文に入ります。

printf(“\n”)で最後の改行を入れています。

17行目の%.1fは、小数点以下2桁目を四捨五入して小数点以下1桁から上を表示させるという意味です。

答えられる範囲で質問いつでも受け付けます。
cosmo-cleaner@za.pial.jp

0 件のコメント:

コメントを投稿