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 2021-02-07 05:30:33
Processing time 0.0081 sec