| kadai56a.c | 
| 
/*
** プログラム名: kadai56a
** 動作: ボール投げ(メイン)
** 作者: 自分の名前、学籍番号
** 日付: 今日の日付
*/
#include <stdio.h>
#include "kadai56.h"
#define LENGTH 100
int width;
int main(void)
{
    int i;
    do {
        printf("高さを入力してください(1〜%dの間):", MAXWIDTH);
        scanf("%d", &width);
    }
    while (width < 1 || width > MAXWIDTH);
    for (i = 0; i < LENGTH; i++) {
        printf("%s*\n", bar(bound(i)));
    }
    return 0;   
}
 | 
| kadai56b.c | 
| 
/*
** プログラム名: kadai56b
** 動作: ボール投げ(サブ)
** 作者: 自分の名前、学籍番号
** 日付: 今日の日付
*/
#include "kadai56.h"
#define G 0.5 /* 加速度 */
#define D 0.9 /* 減衰率 */
/*
** 位置を計算する
*/
float bound(int i)
{
    static float v0 = 1.0;      /* 初速度         */
    static int t0 = 0;          /* 基準時間        */
    float t = (i - t0) * 0.1;
    float x = (v0 - 0.5 * G * t) * t;
    if (x < 0.0) {
        v0 *= D;
        t0 = i;
        x = 0.0;
    }
    return x;
}
/*
** 長さ x 文字の棒グラフを作成する
*/
char *bar(float x)
{
    static char line[MAXWIDTH]; /* 空白を格納する配列   */
    int n = x * width + 0.5;    /* 小数点以下を四捨五入  */
    int i;
    for (i = 0; i < n; i++) {
        line[i] = '=';
    }
    line[i] = '\0';             /* 文字列の最後      */
    return line;                /* 文字列のポインタを返す */
}
 |