第9回演習の解答例


(1)y = x2 および y = 1/x のグラフを表示するプログラムを作成せよ.


/*y=x*xのグラフ*/
#include<stdio.h>
#include"mogra.f"

void main()
{
	int x,y;

	g_int(640,480);
	
	for(x=0;x<640;x++){
		y=480-x*x/1000;
		pset(x,y,0);
	}
	gend();
}

/*y=1/xのグラフ*/
#include<stdio.h>
#include"mogra.f"

void main()
{
	int x,y;

	g_int(640,480);
	
	for(x=1;x<640;x++){
		y=240+1/(float)x*10000.0;
		pset(x,y,0);
	}
	gend();
}

(2)y = sin(x) および y = cos(x) のグラフを表示するプログラムを作成せよ.


/*y=sinxのグラフ*/
#include <stdio.h>
#include <math.h>
#include "mogra.f"

void main()
{
    int x, y;
    g_int(640,480);

    for(x=0; x<640; x++){
            y = 240 - 100 * sin(3.1415*x/180);
            pset(x, y, 0);
    }

        gend();
}

/*y=cosxのグラフ*/
#include <stdio.h>
#include <math.h>
#include "mogra.f"

void main()
{
    int x, y;
    g_int(640,480);

    for(x=0; x<640; x++){
            y = 240 - 100 * cos(3.1415*x/180);
            pset(x, y, 0);
    }

        gend();
}

(3)前々回に作成した,sin, cos の値を計算して保存するプログラムの結果をファイルから読み込んで,y = sin(x),y = cos(x),のグラフを表示するプログラムを作成せよ.


/*sinのみ*/
#include<stdio.h>
#include<math.h>
#include"mogra.f"
void main()
{
	int i,x,y;
	float a[360];

	FILE *fp;
	fp=fopen("sin.csv","r");

	if(fp==NULL){
		printf("ファイルがありませんでした¥n");
		return;
	}
	
	g_int(640,480);

	for(i=0;i<=360;i++){
		fscanf(fp,"%f",&a[i]);
		printf("%f¥n",a[i]);
	}

	for(x=0;x<360;x++){
		y=240-a[x]*100;
		pset(x,y,0);
	}
	gend();
	
	fclose(fp);
}

(4)16×16の2次元配列に配色のデータを書いてあります.配列をファイルから読み込み,グラフィックスを用いて画面に表示するプログラムを作成せよ.


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

/*16×16の行列をファイルから読み込む関数*/
void read_color_data(char filename[],int mat[16][16])
{
	int i,j;
	FILE* fp;
	
	fp=fopen(filename,"r");
	
	if(fp==NULL) {
		printf("ファイルを開くことが出来ませんでした.¥n");
		return;
	}
	
	for(i=0;i<16;i++){
		for(j=0;j<16;j++){
			fscanf(fp,"%d",&mat[i][j]);
		}
	}
	
	fclose(fp);

}


void main()
{
	int x,y,c,color_data[16][16];
	char filename[]="color_data.txt";
	read_color_data(filename,color_data);

    g_int(16,16);      

	for(x=0;x<16;x++){
		for(y=0;y<16;y++){
			pset(x,y,color_data[y][x]);
		}
	}
    gend(); 
}