U E D R , A S I H C RSS

이차함수그리기/조현태

느낀점

요즘 들어 부쩍 일이 늘어서 잠을 3-4시간씩 밖에 못잤더니..
코딩을 못하겠다는..
잠온다.. 졸고 한줄작성하고,, 뭐작성했는지 까먹고.. 위에보고..다시한줄 작성하고..
그래서 소스가 엉망인듯..
그런데 모니터가 이상한지 앞이 안보여서 어떻게 못하겠다는..
아우.. 잠온다.
그런데 어제 하루 그냥잤다공.. 왜 문제 답이 안올라 오는겨?ㅎ

소스 내용안의 말인데.
일단 그래프가 너무 길어서(y값이 25나 나오오. 세로 25면 일반 콘솔창을 넘어버리는.. 앞으로 조그맣게 하자궁..ㅎㅎ)tab을 넣어 줄이기로함.
원래 모습을 보고싶으면 TAB_Y의 값을 1로 해주면 됨.
tab값을 1이외의 값으로 할때, 일단 반올림을 하게 해두었으나, 원래 축소 연산을 할때는 일부 값을 손실시켜야 하는데, 귀찮아서 놔두었더니 1이하로 내려갈때는 그래프에 점이 중복되는 현상이 생긴다는..
축소연산 가급적 금지!ㅎ(특히 X값..ㅎ)

근데 그래프 그리는거 파이썬으로 하면 금방 되자너.;

소스

~cpp 
#include <iostream>
#include <windows.h>

using namespace std;

const int MIN_X=-5;
const int MAX_X=5;
const float TAB_X=1;
const float TAB_Y=0.5;

int banollim(float number)
{
	//반올림하는 함수
	float temp_sosu=number-(int)number;
	if (temp_sosu<=-0.5 || temp_sosu>=0.5)
		++number;
	return number;
}

void gotoxy(int x, int y) 
{ 
	COORD Pos = {x - 1, y - 1}; 
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos); 
}

float function_x_to_y(float x)
{
	//이번에 그림 함수
	float y=x*x;
	return y;
}

void make_image(int where_x, int where_y, float min_x, float max_x, float tab_x, float tab_y)
{
	//앞에서 부터 그리기 시작할 x좌표, y좌표, x최소값, x최대값, x간격, y간격
	////초기화.
	int max_y=0;
	int min_y=function_x_to_y(min_x);
	//y의 최대 최소 구함
	for (register float x=min_x; x<=max_x; x+=tab_x)
	{
		if (max_y<function_x_to_y(x))
			max_y=function_x_to_y(x);
		else if (min_y>function_x_to_y(x))
			min_y=function_x_to_y(x);
	}
	////x,y축 생성
	for (register float x=min_x; x<=max_x; ++x)
	{
		gotoxy(banollim(x-min_x+1+where_x),(where_y+max_y*tab_y));
		printf (".");
	}
	for (register float y=min_y; y<=max_y; ++y)
	{
		gotoxy(banollim(-min_x+1+where_x),(where_y-banollim(y)*tab_y+max_y*tab_y));
		printf (".");
	}
	////그래프 작성
	for (register float x=min_x; x<=max_x; x+=tab_x)
	{
		gotoxy(banollim(x-min_x+1+where_x),(where_y-banollim(function_x_to_y(x))*tab_y+max_y*tab_y));
		printf ("*");//(%.1f,%.1f)",x,function_x_to_y(x));
	}
}

void main()
{
	system("CLS");
	cout << "2차함수 출력 프로그램.";
	make_image( 10 , 5 , MIN_X, MAX_X,TAB_X,TAB_Y);
	gotoxy(30,5);
	cout << "x      y";
	for (register int i=0; i<MAX_X-MIN_X+1;i+=1)
	{
		gotoxy(30,i+6);
		printf ("%3d  ->  %3.0f",i+MIN_X,function_x_to_y(i+MIN_X));
	}
}

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-05-27 07:09:19
Processing time 0.1808 sec