第12回 中間てすとの復習 (12/15)


テストの復習を行います.および演習をやります
自分のわからない所を復習したり,先生やTAに聞いてテストに備えましょう.

中間テストでの注意点

問1は文字の代入の復習をしてください

問2は関数に配列を渡せていない人がたくさんいました.

問3は構造体の復習が必要です.

全体を通して,復習をしてテストに備えてください.


―中間テスト問題―

問1 キーボードから文字列(100文字以下とする)を入力すると,入力された文字数を画面に表示するプログラムを作成せよ.

問2 下のソースコードを参考に,ファイルminidata.txt(右クリック-->[対象をファイルに保存] )から実数データ10個を読み取り配列dataに格納し,配列と要素数を引数として受け取り最大値を返す関数get_maxを作成し,
下のプログラムを完成させなさい


#include <stdio.h>
 
/* この部分の関数get_maxを考える */

void main()
{
	float data[10];
 
	/* ここを考える */

	printf("最大値は%f ¥n",get_max(data,10));

}

問3 三つの自然数をa,b,cを三辺の長さとする三角形を画面に表示したい.以下の手順にしたがってプログラムを作成せよ.

(1)三つの自然数をキーボードから入力し配列nに格納する部分(自然数かどうかの確認不要)を作成しなさい.

(2)一般にどの二つの辺の長さの和も他の一つの辺の長さより大きければ三角形が存在する.
三つの自然数を関数に渡すと三角形が存在するかどうか確認し,存在する場合「1」,存在しない場合「0」を戻り値とする関数の定義部分を答えなさい.

(3)三角形が存在する場合((2)の関数の結果を用いて確認),三つの頂点のうち一つを原点(0,0)としたとき,他の二つの頂点の座標を求め構造体の配列に格納するプログラムの部分を答えよ.

かつ表示ができるようにしましょう.

(4)座標(x1,y1)からの座標(x2,y2)へ直線を引くとline(x1,y1,x2,y2)関数を用いて三角形を描画したい.グラフィックからの初期化等を考えなくて良いとすると, (3)で求まった座標の格納された構造体から三角形を描画するプログラムの部分を答えよ.

注意:―(4)の問題はコマンドプロントは通らないのでTAに答えを確認してください―

ヒント


#include <stdio.h>
#include <math.h>
 
struct point{
	int x;/*頂点xの座標*/
	int y;/*頂点yの座標*/
};

/* この部分が(2)です */

void main()
{
	int n[3],i;
	float s;
	struct point apex[3];

	/*  この部分が(1)です  */
 
	/*この部分が(3)です*/
 
	/* この部分が(4)です  */
}

―難演習問題―

 上の問題を踏まえて,コンピュータ上で三角形を描画しなさい.

注意1 グラフィックは第9回にある.そのなかのmogla.zipをダウンロードしていない人はしましょう.

注意2 グラフィックの初期化は考えてください.下のサンプルプログラムを参考にしてください.

グラフィックのサンプルプログラム


#include <stdio.h>
#include <math.h>
#include "mogla.f"		/* この行を忘れないこと */

struct point{
	int x;/*頂点xの座標*/
	int y;/*頂点yの座標*/
};

/* この部分が(2)です */
 
void graphic(void)
{
	/*ここに先ほどのmain文をいれる*/
}
 
void main()
{
	gl_int(640, 480);			/* 640*480ピクセルのウインドウを開く  */
 
	gl_displayfunc(graphic);		/* 描画関数の呼び出し */
 
	gl_loop();				/* 再描画処理  */
}


授業終了時までのプログラムと完成した提出用プログラムをoh-meijiシステムを使って提出すること
授業終了時に送るのは出席の確認用である.完成した課題は提出用の回に送ること
(提出期限を厳守し,提出用の回に提出しないと採点を行わない)