| 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; /* 文字列のポインタを返す */
}
|