반응형

소수점 이하를 올림하거나 내림하는 함수 입니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#include <math.h>
 
int main(void)
{
    double x = 1.5;
    printf("ceil(%f) =%f\n", x, ceil(x));
    printf("floor(%f) =%f\n", x, floor(x));
    return 0;
}
 
//결과값
// ceil(1.5) = 2
// floor(1.5) = 1
cs


ceil은 올림 함수 이고

floor은 내림 함수입니다.


유용하게 사용할 수 있습니다.


반응형
반응형

예전에 n승을 구하기 위해 재귀함수를 만들어 호출했던 기억이 남니다.


1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
double pow(int x, int n)
{
    if(0 <= n)
        return n? (n * pow(x, n - 1)) : 1;
    else
        return x? (double)1 / (double)pow(x, (-1* n) : 0;
}
 
cs


이런식으로 함수를 만들어서 n이 0이 될 때까지 재귀호출하는 방식

아니면 다른 방법으로는 반복문을 만들어서 돌리는 방식도 있습니다.

2가지 같은 방식이라고 보셔도 됩니다. 


좀 더 편해진 방식이 비트 연산자를 이용한 방식이죠 

1
= 1 << n;
cs

위와 같이 간단하게 구할 수도 있습니다.


마지막으로 가장 간단한 방법인데 

math.h에 pow 함수가 이미 만들어져 있습니다.


1
2
3
4
5
6
7
8
#include <math.h>
int main(){
    int n = 2;
    int x = 2;
    
    k = pow(x,n);
    return 0;
}
cs


간다하게 사용하시면 됩니다.

모두 결과는 같습니다.

반응형
반응형

저는 개인적으로 for문을 사용할 때 ++i 를 사용 합니다.

신입시절 사수에게 이렇게 배웠고 아무 생각없이 코딩 스타일 이구나 생각 했습니다.


요즘 들어 궁금한 것이 많은 20대들이 자꾸 무슨 차이냐고 질문을 하길래

++i 써 그냥 했더니 점점 많은 것을 질문 하더군요 ^^


for문에서 ++i 와 i++ 의 가장큰 차이? 라고 하면 속도라고 할 수 있습니다.


C / C++ Code


1. ++i 의 경우


for( int i = 0; i < 10; ++i ) {

printf( "num: %d", i );

}


operator 코드

int int::operator++() {

this = this + 1;

return this;

}


2. i++ 의 경우

for( int i = 0; i < 10; i++ ) {

printf( "num: %d", i );

}


operator 코드
int int::operator++() {
int returnval = this;
i = i + 1;
return returnval;
}


operator코드를 보시면 둘의 차이점을 알 수 있습니다.

i++ 이 ++i 보다 한줄 더 많죠? 

임시 변수를 생성하기 때문에 그렇 습니다.


반면 ++i의 경우는 자신값에 바로 더해 리턴을 해주죠.

그래서 속도 측면에서 ++i가 더 빠르다고 볼 수 있는 거죠.


예전에야 하드웨어 성능 낮고 컴파일러도 최적화 되기 전에는 차이가 났겠지만

요즘 컴파일러도 최적화 되고 하드웨어 성능도 만만치 않은데 차이가 날까요 ? ^^


거의 없다고 보셔도 될겁니다. 


그냥 저는 코딩 스타일이라고 생각 합니다. 

아무거나 쓰셔도 무방 합니다!

반응형
반응형

게임 개발을 하다보면 랜덤 함수는 거의 필수라 할 수 있다.

3Match 게임을 만들 때에도 랜덤으로 블록을 배치하기 위해 사용해야한다.

이 때 블록 타입을 랜덤으로 가져오는데 우연의 일치로 모든 랜덤 값이 동일하게 나온다면

모든 블록이 동일해지고 참으로 재미없는 일이 발생 할 것이다.


이러한 경우 원하는 블록타입을 하나씩 배치하기 위해서 중복없이 랜덤 값을 가져와야 한다.


C / C++ Function (shffle 라는 함수를 하나 만든다.)


void shuffle(int *data, int size)

{

    int temp = 0;

    for (int i = 0; i < size; ++i) {

        int randNum = getRandomNumber(0, size - 1);

        

        temp = data[randNum];

        data[randNum] = data[i];

        data[i] = temp;

    }

}


사용 예


// 10개의 블록 타입이 있다고 가정하고 0 ~ 9 까지 담고 있는 배열을 만든다.

#define MAX_BLOCK_TYPE 10

int arrayBlockNum[MAX_BLOCK_TYPE] = {0, };

for (int i = 0; i < MAX_BLOCK_TYPE; ++i) 

{

arrayBlockNum[i] = i + 1;

}


// 블록 타입을 담은 배열과 사이즈를 함수에 파라메터로 넘긴다.

shuffle(arrayBlockNum, MAX_BLOCK_TYPE);


위와 같이 해주면 배열안에 값들을 서로 바꿔주는 셔플 기능이기때문에 

0번째 배열부터 순차적으로 사용해도 배열안에 값들은 무엇이 나올지 모른다.


0~9번 배열까지 하나씩만 사용할 경우 중복 없이 랜덤 값을 가져올 수 있다.


1씩 증가하는 정수가 아니더라도 랜덤으로 뽑을 수를 배열에 넣고 셔플을 하면 

중복 없이 가져 올 수 있다. 


[주의]

셔플을 한다고 해도 0번 배열에 값을 여러번 사용 하면 중복 값이 되니 한번 사용한 배열의 값은 필요한 경우가 아니라면

사용하지말자!! ^^

반응형
반응형

게임을 개발하다 보면 정수를 정렬해야 할 때가 있습니다.

예를 들어 Best Score 같이 높은 수 부터 차례대로 보여 줘야 할 때 

정렬 해서 저장하는 것도 하나의 방법 이지만 불러 왔을 때 검수를 해야 할 때도 있습니다.


STL 라이브러리에 sort함수가 있어 이것을 이용해도 되지만 STL 사용 불가능 한 경우

(궁금하신 분들은 std::sort 검색 해보세요. ^^)


개인적으로 간단하게 정수 정도 오름/내림 차순으로 정렬을 해야 할 때는 아래 코드를 사용 합니다.


C / C++ Code


void insertion_sort(int *data, int size)

{

    int i, j, temp;

    

    for ( i = 1; i < size; ++i )

    {

        j = i;

        temp = data[j];

        

/*     

내림 차순 코드이며 오름 차순으로 할 경우

temp > data[j] 이 부분만 변경하시면 됩니다.

temp < data[j] 오름 차순 코드 입니다.

*/

        while ( --j >= 0 && temp > data[j] ) {

            data[j+1] = data[j];

        }

        

        data[j+1] = temp;

    }

}


사용방법


int array[3] = { 1, 3, 2 };

insertion_sort( array, 3 );


결과


for( int i = 0; i < 3; ++i ) {

printf("result: %d \n", array[i]);

}


출력


result: 3

result: 2

result: 1


간단하게 사용하는 삽입 정렬에 대해서 공유 해봤습니다.



반응형

+ Recent posts