第7回(5月29日)

プログラミング演習(2組)
第7回
http://www.fit.ac.jp/~matsuki/PEB1.html
今日の内容
• 前回の課題の解説
• DEBUG機能の使い方
– break point
– step実行
– watch機能
• 乱数の使い方
• 今回の課題の説明
タイピング
• 喰人王を使用して結果を記録する
• ステージ:第一の店(中華)
• Excelのシートにスコアを毎回記録していく
– 残り時間⇒ FeedBackページで報告
– 総タイプ数
– ミスタイプ数
– 正確さ⇒ FeedBackページで報告
– 喰いっぷり ⇒ FeedBackページで報告
今日の課題
課題1:三角形の3辺の長さを入力させて,その
大小関係からどのような三角形かを判定する
プログラムを作れ.
一つ目の辺の長さは? 3
二つ目の辺の長さは? 5
三つ目の辺の長さは? 4
この三角形は,直角三角形です!
課題2:3つの値を入力させて,その中で最も大
きい値を表示するプログラムを作れ.
一つ目の値は? 3
二つ目の値は? 8
三つ目の値は? -1
この中で一番大きいのは,8です!
課題1の考え方
• 三角形を分類する
①
②
③
④
三角形が作れない
正三角形
二等辺三角形
直角三角形
課題1の考え方
三角形が作れない条件
c
b
a
a >= b + c
c
a
b
b >= a + c
a
b
c
c >= b + a
上記の3つの条件のいずれかであれば,三角形は作れない
課題1の考え方
• 正三角形であるための条件
c
b
a
a == bかつb==c
課題1の考え方
• 二等辺三角形であるための条件
c
b
a
a == bまたはb==cまたはc==b
(正三角形でなければ,)
課題1の考え方
• 直角三角形であるための条件
c
b
a
a*a == b*b + c*c
b*b == a*a + c*c
c*c == b*b + a*a
いずれか満たす
課題1(解答例 木野君)
if((x+y <=z)||(y+z<=x)||(z+x<=y)) {
printf("\n出来ない\n");
} else if(x==y && y==z){
printf("\n正三角形です\n");
} else if((x==y)||(y==z)||(z==x)){
printf("\n2辺辺三角形です\n");
} else
if((x*x+y*y==z*z)||(y*y+z*z==x*x)||(z*z+x*x==y*y)){
printf("\n直角三角形です\n");
} else {
printf("\n三角形です\n");
}
課題1(解答例 近藤君)
printf("入力した辺の長さより、角形の種類を判別します。\n\n");
printf("3角形の各辺の値を入力してください。\n\n");
printf("※もしも、根号を使う場合は「0」と入力してEnterを押し\n");
printf("改行を確認した後根号内の数値を入力してください。\n\n");
printf(“A = ”);
scanf(“%lf”,&A_length);
if (A_length == 0) {
A_root = 1;
scanf("%lf",&A_length);
}
A_length: 辺の長さ
A_root: 平方根であるかどうか
A=0
2
A_lengthをsqrt(2)として計算
課題1(解答例 左山君)
cosA = sqrt((b*b+c*c-a*a)/(2*b*c));
cosB = sqrt((c*c+a*a-b*b)/(2*c*a));
cosC = sqrt((a*a+b*b-c*c)/(2*a*b));
三角形の角度を計算
if(cosA==0||cosB==0||cosC==0) {
printf("この三角形は直角三角形です。\n\n");
}
cosが0 ⇒ その角度が90°
今日の課題
課題2:3つの値を入力させて,その中で最も大
きい値を表示するプログラムを作れ.
一つ目の値は? 3
二つ目の値は? 8
三つ目の値は? -1
この中で一番大きいのは,8です!
課題1(解答例 松川君)
if((a<b+c)&&(b<a+c)&&(c<a+b)) {
if((a==b)&&(a==c)) {
printf("正三角形です。\n");
} else if((a*a==b*b+c*c)||(b*b==a*a+c*c)||(c*c==a*a+b*b)) {
if((a==b)||(a==c)||(b==c)) {
printf("直角二等辺三角形です。\n");
} else {
printf("直角三角形です。\n");
}
} else if((a==b)||(a==c)||(b==c)) {
printf("二等辺三角形です。\n");
} else {
printf("三角形です。\n");
}
} else {
printf("三角形ではありません。\n");
}
課題1(解答例 黒武者さん)
• 鋭角三角形 および 鈍角三角形の判定
課題2の考え方(1)
• 3つの値の大小を「お互いに」比較する
条件
最大値
a >= bかつa >= c
a
b >= aかつb >= c
b
c >= aかつc >= b
c
if (a >= b)
課題2の解答例(西田君)
{
if (a >= c)
{
printf("1番大きな数字は%dです\n",a);
}
}
if(b >= c)
{
if (b >= a)
{
printf("1番大きな数字は%dです\n",b);
}
}
if(c >= a)
{
if (c >= b)
{
printf("1番大きな数字は%dです\n",c);
}
課題2の解答例(西田君)
if ((a >= b) && (a>=c))
{
printf("1番大きな数字は%dです\n",a);
}
if ((b >= c)&&(b>=a))
{
printf("1番大きな数字は%dです\n",b);
}
if ((c >= a)&&(c>=b))
{
printf("1番大きな数字は%dです\n",c);
}
課題2の考え方(2)
• 3つの値を「暫定最大値」と比較する
max
a
c
b
課題2の解答例(別方法)
max = a; //暫定的に0を最大とする
if(b > max) max = b;
if(c > max) max = c;
乱数
• 乱数とは,ランダムに出現する値
• コンピュータに,ランダムに値を選んでもらう
ことが可能
乱数を得るプログラム例
#include <stdio.h>
#include <time.h>
int main()
{
int N = 10;
//乱数の上限
int x;
srand(time(NULL));
//乱数を使うための準備
// while (1) {
x = rand() % N; //0からN-1までの範囲の乱数を取得
printf(“乱数は%d\n”,x);
// }
return 0;
}
今回の課題(1)
【課題1】
① 演算をメニューから数値で選ばせる(switch
文を使うこと)。
② 必要な数値を入力させる。
③ 演算を実行し、結果を出力する
今回の課題(1)
【課題1の実行画面例1】
---- MENU ---1) 足し算
2) 引き算
3) かけ算
4) 割り算
5) 平方根
-------------------実行する演算を番号で選択してください 3
かけ算を計算します。2つの値を入力してください。
一つ目の値は? 8
二つ目の値は? -2
演算結果は,-16です。
今回の課題(1)
【課題1の実行画面例2】
---- MENU ---1) 足し算
2) 引き算
3) かけ算
4) 割り算
5) 平方根
-------------------実行する演算を番号で選択してください 5
平方根を計算します。値を一つ入力してください。
値は? 2
演算結果は,1.41421356です。
今回の課題(2)
【課題2】
今までの知識を使って、自分で問題を設定し、そ
の問題を解決するプログラムを作成せよ。ただし、
以下の機能を盛り込むこと。メール本文に問題に
ついての説明を書くこと。
1.
2.
3.
4.
5.
6.
演算(四則演算、平方、三角関数など)
乱数を用いた処理
printfによる表示(出力)
scanfを用いた入力
if文
switch文
注意事項
• ソースファイルについて
ソースファイルは添付ファイルで送る
ソースファイル以外は送らない
ソースファイルの名前は,半角のみ使用
• メールについて
件名は,学籍番号+半角スペース+氏名
(例)S09F2099 松木裕二
本文にも短いカバーレター(説明)をつける
その他
• 講義に関する質問・課題提出など:
[email protected]
• Feed back page:
http://www.fit.ac.jp/~matsuki/lecture.html
メールアドレスの入力は不要です
ニックネームを決めてください(Ranking表示に使います)