第12回演習:解答例


演習課題

STEP1~STEP4


#include <stdio.h>

void read(float *V,int *T)
{
	int i;
	FILE *fp;

	fp=fopen("ktype.txt","r");
	if(fp==NULL){
		printf("ファイルを開くことができません¥n");
		return;
			}
	for(i=0;i<21;i++){
		fscanf(fp,"%f",V+i);
		*(T+i) = 10*i;
				}
}

void output(float *V,int *T)
{
	int i;
	for(i=0;i<21;i++){
		printf("[%d]¥t%.3f %d¥n",i,*(V+i),*(T+i));
			}
}

void input(float *E)
{
	printf("入力電圧[mV]:");scanf("%f",E);
}

void search_number(float *V,int *T,float E,float *V0,float *V1,int *T0,int *T1)
{
	int i;
	
	for(i=0;i<21;i++){
		if(*(V+i)<=E && E<*(V+i+1)){
			*V0=*(V+i);
			*V1=*(V+i+1);
			*T0=*(T+i);
			*T1=*(T+i+1);
			printf("入力電圧は%d番目と%d番目の間の電圧値です.¥n",i,i+1);
					}
			}
}

float linear_interpolation(float E,float V0,float V1,int T0,int T1)
{
	float T;

	T = T0+(E-V0)/(V1-V0)*(T1-T0);
	
	return T;
}
	
void main()
{
	int T[21],T0,T1;
	float V[21],E,V0,V1;

	read(V,T);
	output(V,T);
	input(&E);
	search_number(V,T,E,&V0,&V1,&T0,&T1);
	printf("温度は%f",linear_interpolation(E,V0,V1,T0,T1));
}

 

STEP5


#include <stdio.h>
#include "mogla.f"

void read(float *V,int *T)
{
	int i;
	FILE *fp;

	fp=fopen("ktype.txt","r");
	if(fp==NULL){
		printf("ファイルを開くことができません¥n");
		return;
			}
	for(i=0;i<21;i++){
		fscanf(fp,"%f",V+i);
		*(T+i) = 10*i;
				}
}

void graphic(void)
{
	int T[21],i;
	float V[21];
	read(V,T);

	gl_clearbuffer();

	for(i=0;i<20;i++){
		pset(V[i]*25,T[i],12);			/* プロット表示 */
		line(V[i]*25,T[i],V[i+1]*25,T[i+1],14);
			}
	line(-320,0,320,0,10);
	line(0,240,0,-240,10);
	
	gl_flush();
}
	
void main()
{	
	gl_int(640, 480);			/* 640*480ピクセルのウインドウを開く  */
	gl_displayfunc(graphic);		/* 描画関数の呼び出し */
	gl_loop();				/* 再描画処理  */
}