본문 바로가기

강의자료/C/C++

028. 자주사용되는 수학함수를 알아보자.

◈ 이 글은 강의를 위하여 제가 직접 작성한 내용입니다. 따라서 퍼가실 경우, 출처를 명확히 해주시기 바랍니다!!
◈ This ariticle was written by me for teaching. So if you want to copy this article, please clarify the source!!


#include 
#include 	// sqrt함수.
using namespace std;

/*
25/1 = 25
25/2 = 12.xxx
25/3 = 8.xxx
25/4 = 6.xxx
25/5 = 5
25/6 = 4.xxx
25/7 = 3.xxx
25/8 = 3.xxx
25/9 = 2.xxx
25/10 = 2.xxx
25/11 = 2.xxx
25/12 = 2.xxx
25/13 = 1.xxx
...
25/24 = 1.xxx
*/

int isPrime(int num, int& count);
int isnotPrime(int num, int& count); 

void main()
{
	for(int i=1; i < 101; i++)
	{ 
		if(i==1) continue;

		int ret=0, cnt=0;
		ret = isnotPrime(i, cnt);

		if(!ret)
		{
			cout << i << "는 소수, 찾아낸 횟수 : " << cnt << endl;
		}
		else
		{
			cout << i << "는 " << ret << "로 나누어 떨어진다." << endl;
		}
	}
	cout << endl;
}

int isPrime(int num, int& count)
{
	for(int i=2; i < num; i++)
	{
		count++;
		if(num%i==0) 
			return i;
	}

	return 0;
}

int isnotPrime(int num, int& count)
{
	//sqrt(double) 1.0을 곱해서 double
	int sq = int( sqrt(num*1.0) );
	for(int i=2; i <= sq; i++)
	{
		count++;
		if(num%i==0)
			return i;
	}

	return 0;
}

#include 
#include 

// 절대값 구하기 : fabs(double), abs(int)
// 거듭제곱 구하기 : pow(x,2) -> x의2승.

using namespace std;

//평형과 수직 이동만 가능할 때 
double lengthxy(double x1, double y1, double x2, double y2)
{
	double x=fabs(x1-x2);
	double y=fabs(y1-y2);
	return (x+y);
}

//직선 거리 : 두 점 사이의 최단 거리
double length(double x1, double y1, double x2, double y2)
{
	double x=fabs(x1-x2);
	double y=fabs(y1-y2);
	double len=sqrt(pow(x,2)+pow(y,2));
	return len;
}

void main()
{
	cout << "평형과 수직 이동만 가능할 떄 두 점 사이의 최단 거리 :" << endl; 
	cout << lengthxy(4,6,1,2) << endl; 
	cout << "두 점 사이의 최단 거리 :" << endl; 
	cout << length(1,2,4,6) << endl;	
}

// 1라디안이란? 반지름과 동일한 길이의 호를 나타내는 각도 
// -> 이는 언제나 일정하기 때문에 60분법과 함께 각도를 표현하는 하나의 수단이 된다.
// 원주는 2*PI*R이므로 360도를 라디안으로 표현하면 2*PI 라디안이 된다.
// 즉, 2*PI라디안 = 360도 이므로...
// 1라디안은 = 360/(2*PI) = 180/PI도 이다.
// 1도는 = 2*PI/360 = PI/180 라디안이다.

#include 
#define _USE_MATH_DEFINES
#include 
#define PI 3.141592
using namespace std;

// 각도 = 라디안 * (180/PI)
// 라디안 = 각도 * (PI/180)

void main()
{
	double rad = 0;
	cout << left;
	cout.width(10);
	cout << "각도";
	cout.width(15);
	cout << "sin값";
	cout.width(15);
	cout << "cos값";
	cout.width(15);
	cout << "tan값" << endl;
	for(int i=0; i <= 180; i++)
	{
		rad = i * (M_PI/180);
		cout.width(10);
		cout << i;
		cout.width(15);
		cout << sin(rad);
		cout.width(15);
		cout << cos(rad);
		cout.width(15);
		cout << tan(rad) << endl;
	}
}

// 방향과 거리를 랜덤하게 10회 구한 후 
// 이동하기 위한 x,y 좌표를 화면에 출력하세요.
#include 
#define _USE_MATH_DEFINES
#include 
#include 
using namespace std;

#define PI 3.141592

/*
각도 : 0~359, 거리 : 10~50
304도 방향으로 33만큼 이동하려면 X축으로 18, Y축으로 -27만큼 이동해야 한다.
226도 방향으로 16만큼 이동하려면 X축으로 -11, Y축으로 -11만큼 이동해야 한다.
309도 방향으로 17만큼 이동하려면 X축으로 10, Y축으로 -13만큼 이동해야 한다.
272도 방향으로 31만큼 이동하려면 X축으로 1, Y축으로 -30만큼 이동해야 한다.
71도 방향으로 17만큼 이동하려면 X축으로 5, Y축으로 16만큼 이동해야 한다.
151도 방향으로 27만큼 이동하려면 X축으로 -23, Y축으로 13만큼 이동해야 한다.
87도 방향으로 47만큼 이동하려면 X축으로 2, Y축으로 46만큼 이동해야 한다.
72도 방향으로 24만큼 이동하려면 X축으로 7, Y축으로 22만큼 이동해야 한다.
354도 방향으로 39만큼 이동하려면 X축으로 38, Y축으로 -4만큼 이동해야 한다.
309도 방향으로 21만큼 이동하려면 X축으로 13, Y축으로 -16만큼 이동해야 한다.
*/

void main()
{
	srand((unsigned)time(NULL));

	double DEGTORAD = M_PI/180;

	for(int i=0; i < 10; i++)
	{
		int distance = rand()%41 + 10;		// 10~50
		int degree = rand()%360;			// 0~359

		int dist_x = distance * cos(degree*DEGTORAD);
		int dist_y = distance * sin(degree*DEGTORAD);

		cout.width(3);
		cout << degree << "도 방향으로 " << distance << "만큼 이동하려면 "
			<< "X축으로 " << dist_x << ", Y축으로 " << dist_y 
			<< "만큼 이동해야 한다." << endl;
	}
	
}