プププププププププ( 2プ) プ5プ http://www.fit.ac.jp/~matsuki/ PEB1.html
Jan 10, 2016
プログラミング演習( 2 組)第 5 回
http://www.fit.ac.jp/~matsuki/PEB1.html
今日の内容• 前回の課題の解説• 今日の課題
S-Class
順位 4/24 5/11 位 松本 君 Hello World
2 位 シャイニングp ・・・何でもない
真・喰人王
3 位 無名 松川 君4 位 真・喰人王 ↑ 一体何者
だ!5 位 Mat 下田 君
A-Class
順位 4/24 5/11 位 P ストーン アージェン2 位 柊百合 衝撃の白い稲妻3 位 金子 柊百合4 位 がっちゃん 安武 君5 位 kpvy 中村 君
B-Class
順位 4/24 5/11 位 忍者 清水 君2 位 WALLY ガンデル3 位 toshi 竹中 君4 位 ふでばこ 園田 君5 位 JUN 江口 君がんばったで賞: 向日葵
タイピング• 喰人王を使用して結果を記録する• ステージ:第一の店(中華)• Excel のシートにスコアを毎回記録してい
く– 残り時間⇒ FeedBack ページで報告– 総タイプ数– ミスタイプ数– 正確さ⇒ FeedBack ページで報告– 喰いっぷり ⇒ FeedBack ページで報告
前回の課題(締切: 5/14 )(1)車の速さ speed と、目的地までの距離
distance を入力させて、目的地までの所要時間を求めるプログラムを作成せよ。
(2) 2 次方程式 a x2 + b x + c = 0 の解を求める
プログラムを作成せよ( a,b,c は入力させよ)x の平方根を求めるプログラムを参考にせよ。
課題1(解答例)#include<stdio.h>int main(){
// 変数の宣言int height=50; // 縦の長さ [cm]int base=30; // 底辺の長さ [cm]int area; // 面積 [cm^2]
// プログラムの処理内容を画面表示printf(" 以下のような三角形の面積を求めます \n");printf(" 縦の長さ: %d[cm]\n",height);printf(" 横の長さ: %d[cm]\n",base);
// 面積の長さを計算area=base*height/2;
// 結果の表示printf("\n この三角形の面積は %d[cm^2] です \n\n",area);
return 0;}
int speed;int distance;int time;
printf(" 車の速さ ");scanf("%d",&speed);printf(" 目的地までの距離 ");scanf("%d",&distance);
time = distance / speed;
printf(" 目的地までの所要時間 ");printf("%d 分 \n", time);
int 型で宣言
時間の単位に注意
入力処理
計算処理
出力処理
課題1(計算処理)
time= distance / speed;計算処理
整数型と整数型の計算 ⇒ 整数型
問題:distance 、 speed が int 型のとき,distance = 18 、 speed = 10 ならば,distance / speed は,いくらになるか?
答え:1
課題1(計算処理)所要時間を実数で求めるためには…?(1)「 distance / speed 」を実数型として計算 実数型と整数型の計算 ⇒ 実数型
(格上げという)実数型と実数型の計算 ⇒ 実数型
(double)distance / speed; → distance をdouble 型として計算する。
int distance;
int speed;
double distance;
double speed;
課題1(計算処理)所要時間を実数で求めるためには…?(2)所要時間を格納する変数 time を実数型として宣言
int time; double time;
課題1(解答例:下田君)double speed; // 車の速さ [km/h]double distance; // 目的地までの距離 [km]double time; // 所要時間 [h]
// プログラムの処理内容を画面表示// 車の速さ設定printf(" 以下の計算で車での目的地までの所要時間を求めます \
n");
printf(" 車の速さを入力してください -----");scanf("%lf",&speed);printf(" 車の速さ :%lf[km/h]\n",speed);
課題1(解答例:下田君)// 目的地までの距離を設定
printf(" 目的地までの距離を入力してください -----");scanf("%lf",&distance);printf(" 目的地までの距離 :%lf[km]\n",distance);
// 所要時間を計算time = distance/speed;
// 結果の表示printf("\n 到着までの所要時間は %3.2lf[h] です \n\
n",time);
課題22 次方程式 a x2 + b x + c = 0 の解を求めるプログラムを作成せよ( a,b,c は入力させ
よ)x の平方根を求めるプログラムを参考にせよ。
課題2の解く手順(1) 2 次方程式の係数 a, b, c を入力させる(入力処理)
(2) 2 次方程式の解の公式を利用して,2つの解を計算する(計算処理)
(3)2つの解を表示する(出力処理)
a
acbbx
a
acbbx
2
4
2
4
2
2
2
1
課題2(解答例 黒武者さん)int a, b, c; // 入力用double kai1, kai2, y, root; // 「 kai1 」「 kai2 」は解 y はルートの中身 root は yをルートに変換
// 画面表示printf("2 次方程式 ax^2 + bx + c = 0 の解を求める計算をします \n");
//a の値入力printf("a の値を入力してください \n"); scanf("%d", &a);//b の値入力printf("b の値を入力してください \n"); scanf("%d", &b);//c の値入力printf("c の値を入力してください \n"); scanf("%d", &c);
使用する変数を宣言
プログラムの目的を表示
入力処理
課題2(解答例 黒武者さん)// ルートの中身y = b*b - 4*a*c;
// ルート変換root = sqrt(y);
// 解の計算kai1 = (-b + root)/(2 * a);kai2 = (-b - root)/(2 * a);
// 結果表示printf(" 求める解は %.2lf %.2lf\n", kai1, kai2);
計算処理
y (判別式)の計算
sqrt(y) の計算
解1,2を計算
出力処理
解答例(惜しい!)解の計算部分において、
x1=(-b+sqrt(b*b-4*a*c))/2*a; x2=(-b-sqrt(b*b-4*a*c))/2*a;
問題:どこが、まずいのか?
( 分子 ) / 2 * a1. 分子を計算2. 上記結果 / 23. 上記結果 * a
解答例(惜しい!)解の計算部分において、
x1=(-b+sqrt(b*b-4*a*c))/2*a; x2=(-b-sqrt(b*b-4*a*c))/2*a;
( 分子 ) / 2 * a; ( 分子 ) / (2 * a);
x1=(-b+sqrt(b*b-4*a*c))/( 2*a ); x2=(-b-sqrt(b*b-4*a*c))/( 2*a );
課題(締切: 5/21 )【課題1】 車の速さ speed と、目的地までの距離
distance を入力させて、目的地までの所要時間を以下のような表示形式で求めるプログラムを作成せよ。
車の速さ (km/h) : 100距離 (km) : 250所要時間は、 2 時間 30 分 00 秒です
今回の課題【課題2】
今までの知識を使って、自分で問題を設定し、その問題を解決するプログラムを作成せよ。ただし、以下の機能を盛り込むこと。メール本文に問題についての説明を書くこと。
1. int 型変数の使用2. double 型変数の使用3. +、ー、*、/を用いた演算(すべて使うこと)4. sqrt, sin, cos, tan のいずれかを用いた計算5. printf を用いた整数の表示6. printf を用いた実数の表示7. scanf を用いた整数の入力8. scanf を用いた実数の入力
課題のヒント1double Speed_kmph = 50; // 時速 [km/h]doulbe Speed_mps; // 秒速 [m/s]
// 時速 [km/h] を秒速 [m/s] に変換Speed_mps = Speed_kmph / 3.6;LEVEL 1
課題のヒント2int Hour = 2; // 時int Minute = 45; // 分int Second = 10; // 秒int AllSecond; // 秒単位に換算
// 時・分・秒の値から,秒単位の経過時間に変換
AllSecond = Hour * 3600 + Minute * 60 + Second;LEVEL 2
課題のヒント3int AllSecond = 7680; // 秒単位の時間int Hour;// 時int Minute; // 分int Second; // 秒
// 秒単位の経過時間を,時・分・秒に分割Hour = AllSecond / 3600; //1 時間は 3600 秒
Minute = ( AllSecond % 3600 ) / 60; //1 分は 60 秒
Second = AllSecond - Hour*3600 – Minute*60; LEVEL 4
LEVEL 5
平方根を求めるプログラム#include <stdio.h>#include <math.h>
int main(){
double x = 2;double y;y = sqrt(x);printf(“ x の平方根は %f です” ,y);
}
三角関数
y = sin(x); printf(“ sin(x) は %f です” ,y); printf(“ cos(x) は %f です” ,cos(x)); printf(“ tan(x) は %f です” ,tan(x));}
三角関数三角関数 sin(x) , cos(x) , tan(x) について• x は double 型でなければならない.• x は rad 単位( 180°= 2π [rad] )• 計算結果は, double 型になる
tan(π/4) を計算するとき,
double pi = 3.141592;double result;result = tan(pi / 4);
注意事項• ソースファイルについて
ソースファイルの名前は,半角のみ使用
• メールについて件名は,学籍番号(半角)+半角スペース+氏名
(例) S09F2099 松木裕二
本文にも短いカバーレター(説明)をつける
オフィス・アワーのお知らせ• オフィス・アワーを以下の要領で開講–日時:毎週月曜日、 5 時限目(16:20~)–場所: A棟7階 研究実験室11(松木研究室)–内容:プログラミング関連科目
その他• 講義に関する質問・課題提出など:
• Feed back page :http://www.fit.ac.jp/~matsuki/cgi-bin/newpage11.htmlメールアドレスの入力は不要ですニックネームを決めてください( Ranking表示に使います)