Coding/CPP 삽질기2010. 1. 22. 23:58

/*
 ============================================================================
 Name        : Lotto.c
 Author      : chobocho
 Version     :
 Copyleft
 Description : Lotto
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void lotto(int num, int max_number);

void lotto(int num, int max_number)
{
    int number[100] = {0, };
    int i = 0;
    int prev = 0;
    int next = 0;
    int temp = 0;

    if (num > max_number || max_number < 0 || max_number >= 100)
    {
        return;
     }

    for (i = 0; i < max_number; i++)
    {
        number[i] = i+1;
     }

    srand((time(NULL)));

    for (i = 0; i < 1000; i++)
    {
        prev = rand() % max_number;
        next = rand() % max_number;

        temp = number[prev];
        number[prev] = number[next];
        number[next] = temp;
    }

    for (i = 0; i < num; i++)
    {
         printf ("%d ", number[i]);
     }
     puts("\n");

}

int main(int argc, char **argv) {
    lotto(6, 46);
    return 0;
}

'Coding > CPP 삽질기' 카테고리의 다른 글

[CPP] 파일 분할 프로그램 v0.01  (0) 2010.01.28
[CPP] 폴더내 파일 목록을 보여 주는 코드 조각  (1) 2009.03.24
함수 포인터  (0) 2009.01.08
Posted by chobocho
Coding/CPP 삽질기2009. 3. 24. 22:49

#include <stdio.h>
#include <io.h>

int main(void) {
  _finddatai64_t file;
  intptr_t files;

  files = _findfirsti64("*.*", &file);
  do {
      printf("%s\n", file.name);
  } while(_findnexti64(files, &file) == 0);
  _findclose(files);

  return 0;
}

'Coding > CPP 삽질기' 카테고리의 다른 글

[CPP] Lotto 생성기  (0) 2010.01.22
함수 포인터  (0) 2009.01.08
[CPP] Linux Thread Example Code  (0) 2008.12.14
Posted by chobocho
Coding/CPP 삽질기2009. 1. 8. 22:29

[ 예제 코드 1 ]

     #include <stdio.h>

    void HelloWorld(int num)
    {
       int idx = 0;

       for (idx = 0; idx < num; idx++)
       {
           printf ("Hello World!\n");
       }
    }

    int main(void)
    {
        void (*Fptr)(int);

        Fptr = HelloWorld;
        Fptr(2);

        return 0;
    }

[ 예제 코드 1 실행결과 ]

fptr_screen.png


이 글은 스프링노트에서 작성되었습니다.

Posted by chobocho
Coding/CPP 삽질기2008. 12. 14. 21:49
#include <stdio.h>
#include <pthread.h>

void *Count (void *);

int main(int argc, char **argv)
{
    pthread_t p_thread[2];
    int pthread_status;

    pthread_create(&p_thread[0], NULL, Count, (void *)NULL);
    pthread_create(&p_thread[1], NULL, Count, (void *)NULL);
 
    pthread_join(p_thread[0], (void **)&pthread_status);
    pthread_join(p_thread[1], (void **)&pthread_status);

    return 0;
}


void *Count (void *arg)
{
    pthread_t thread_id = pthread_self();
    int num = 0;
   
    while (num < 10)
    {
        printf ("%x : %d\n", thread_id, num);
        num++;
        sleep(1);
    }
}


'Coding > CPP 삽질기' 카테고리의 다른 글

함수 포인터  (0) 2009.01.08
[CPP] STL에서 List의 sorting 방법  (0) 2008.10.30
Copy & Paste 신공  (0) 2008.03.08
Posted by chobocho
Coding/CPP 삽질기2008. 10. 30. 23:57

#include <iostream>
#include <list>
using namespace std;

class CData {
public:
    CData (int x = 0) { data = x; }
    void set (int x) { data = x; }
    int  get (void)  { return data ; }
    // 방법 1: 비교를 위한 함수를 만든다.
    int operator()( CData &lhv, CData &rhv) const { return (lhv.get() > rhv.get()); }
    // 방법 2: < 연산자를 오버로딩 한다.
    int operator<( CData &rhv) const { return (this->data < rhv.get()); }
 
private:
    int data;       
};

void process(void);
void prinfList( list<CData> myList );


int main (int argc, char **argv)
{

    process();
   
    getchar();
    return 0;   
}


void process (void)
{
     list<CData> myData;

         
     myData.push_front(10);
     myData.push_front(17);
     myData.push_front(11);
     myData.push_front(1);
     myData.push_front(20);

     prinfList( myData );
 
     // STL의 list는 제너릭한 sort를 사용할 수 없다.
     // 멤버함수를 호출하면 < 연산자를 비교 함수로 쓴다.

     myData.sort();         // method 2
     prinfList( myData );
    // 직접 비교 함수를 넣을 수도 있다.
     myData.sort(CData()); // metod 1
     prinfList( myData );
}


void prinfList( list<CData> myList )
{
     list<CData> :: iterator iter;
    
     for (iter = myList.begin(); iter != myList.end(); iter++)
         cout << iter->get() << " ";
     cout << endl;
}

'Coding > CPP 삽질기' 카테고리의 다른 글

[CPP] Linux Thread Example Code  (0) 2008.12.14
Copy & Paste 신공  (0) 2008.03.08
연산자 우선 순위  (0) 2008.01.13
Posted by chobocho
Coding/CPP 삽질기2008. 3. 8. 00:43

정파 계열의 무공은 느리지만 초절정에 이를 수 있다는 장점이 있고,
마공 계열의 무공은 속성으로 익힐 수 있지만 초절정에 이를 수 있다는 단점이 있음을 많은 이들이 알고 있다. 하지만 이런 마공의 무서움에도 많은 이들이 애용하는 신공이 있으니 바로
Copy & Paste 신공이다. 배우지 않아도 자연히 알 수 있으며, 한 번 사용하면 끊을 수 없는 무서운 신공이다.
이미 초절정에 이른 많은 선배 고수들의 비급 부터 시작해서, 입문서에 반드시 나오는 절대 쓰면 안되는 신공으로 분류 되고 있으나, 속성이라는 그 달콤한 유혹은 누구나 떨칠 수 없어, 많은 강호인들이 애용하는 신공이다. 속성의 장점이 있으나 마공으로 분류되는 이유는 치명적 버그의 발생 가능성이 크기 때문이다. 단순 반복적인 초식의 반복으로 변이 강조되어야 하는 초식에 함부로 사용할 경우, 컴파일 오류라는 단순 외상으로 시작해서, 주화입마에 빠져 버릴 가능성이 높은 무서운  신공이다. 이런 단점에도 불구하고 시간이 금인 시기에 속성이라는 유혹은 떨쳐버리기 어려워, 지금도 수많은 이들이 이 시간에도 사용하는 신공이다.

'Coding > CPP 삽질기' 카테고리의 다른 글

[CPP] STL에서 List의 sorting 방법  (0) 2008.10.30
연산자 우선 순위  (0) 2008.01.13
심심풀이 프로그래밍...2  (0) 2007.09.17
Posted by chobocho
Coding/CPP 삽질기2008. 1. 13. 01:33

#include <stdio.h>

int
main(void)
{
    int a = 0;
    int b = 0;
    int c = 0;

    a++ || b++ && c ++ ;
    printf ("a = %d, b = %d, c = %d\n", a, b, c);

    return 0;
}

위 코드를  실행하면 아래와 같이 나온다.
a = 1, b = 1, c = 0

위 와 같은 결과가 나오는 것은 C의 연산자 우선 순위 때문이다.
C 에서는 && 가 || 보다 우선 순위가 높다. 그래서 위의
a++ || b++ && c++ 은 a++ || ( b++ && c++) 와 동일한 문장이다.
Short Circuit에 의해서 먼저 a++이 연산이 되는데,
1) a++이 판단되는데, a = 0 이므로 거짓이 되고, a++ 이 수행되므로  a = 1 이된다.
2) 앞 구문이 거짓이므로 b++ && c++ 가 수행되는데, b = 0 이므로 && 조건에 의해
c++은 수행되지 않는다. 단, b++에 의해서 b = 1 이된다.
그래서 a++ 과 b++만 수행되고, c++은 수행 되지 않으므로
a = 1, b = 1, c = 0 이 된다.

어셈블러로 구현된 코드를 살펴보면 아래와 같다.

    int a = 0;
0040101E  mov         dword ptr [a],0
    int b = 0;
00401025  mov         dword ptr [b],0
    int c = 0;
0040102C  mov         dword ptr [c],0

    a++ || b++ && c ++ ;
00401033  mov         eax,dword ptr [a]
00401036  mov         ecx,dword ptr [a]
00401039  add         ecx,1
0040103C  mov         dword ptr [a],ecx
0040103F  test        eax,eax
00401041  jne         main+5Ch (40105Ch)
00401043  mov         edx,dword ptr [b]
00401046  mov         eax,dword ptr [b]
00401049  add         eax,1
0040104C  mov         dword ptr [b],eax
0040104F  test        edx,edx
00401051  je          main+5Ch (40105Ch)
00401053  mov         edx,dword ptr [c]
00401056  add         edx,1
00401059  mov         dword ptr [c],edx

'Coding > CPP 삽질기' 카테고리의 다른 글

Copy & Paste 신공  (0) 2008.03.08
심심풀이 프로그래밍...2  (0) 2007.09.17
비트 연산자  (0) 2007.04.24
Posted by chobocho
Coding/CPP 삽질기2007. 9. 17. 01:45
// 흐미... 심심해서 해본게 생각보다 시간을 많이 까먹었다.
// TDD는 정말 중요하다.

#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
void process(void);
int main(void)
{
    process();  
    return 0;
}

void process(void)
{
     string alpha = "0123456789";
     int synap = 0;
     int soft = 0;
     int wants = 0;
     int you = 0;
     int result = 0;
     int count = 0;
    
     //'SYNAP + SOFT = WANTS + YOU'
     // 0123456789
     // AFNOPSTUWY
     
     do
     {
           
        if (alpha[5] == '0' || alpha[8] == '0' || alpha[9] == '0')
            continue;
       
        synap = (alpha[5]-'0')*10000 + (alpha[9]-'0')*1000 + (alpha[2]-'0')*100 + (alpha[0]-'0')*10 + (alpha[4]-'0');            
        soft = (alpha[5]-'0')*1000 + (alpha[3]-'0')*100 + (alpha[1]-'0')*10 + (alpha[6]-'0');
        wants = (alpha[8]-'0')*10000 + (alpha[0]-'0')*1000 + (alpha[2]-'0')*100 + (alpha[6]-'0')*10 + (alpha[5]-'0');            
        you = (alpha[9]-'0')*100 + (alpha[3]-'0')*10 + (alpha[7]-'0');
       
        if (synap + soft == wants + you)           
        {
            cout << synap << " + " << soft << " = " << wants << " + " << you << endl;     
            result += wants + you;
            cout << result << endl;
        }
       
     } while (next_permutation(alpha.begin(), alpha.end())  );
    
}

'Coding > CPP 삽질기' 카테고리의 다른 글

연산자 우선 순위  (0) 2008.01.13
비트 연산자  (0) 2007.04.24
별 그려주는 코드  (0) 2006.08.22
Posted by chobocho
Coding/CPP 삽질기2007. 4. 24. 00:49

#include <stdio.h>


void process(void);

void showBit(int n);



int main (int argc, char **argv) {

    process();

    return 0;

}


void process(void) {

    int          nSignNumber   = 0xFFFFFFFF;

    unsigned int nUnSignNumber = 0xFFFFFFFF;

    

    printf ("Original :\n%d %u\n", nSignNumber, nUnSignNumber);

    showBit(nSignNumber);

    showBit(nUnSignNumber);

    

    nSignNumber   <<= 1;

    nUnSignNumber <<= 1;

   

    printf ("<< 1 :\n%d %u\n", nSignNumber, nUnSignNumber); 

    printf ("%d %u\n", nSignNumber, nUnSignNumber);

    showBit(nSignNumber);

    showBit(nUnSignNumber);


    nSignNumber   >>= 1;

    nUnSignNumber >>= 1;

    

    printf (">> 1 :\n%d %u\n", nSignNumber, nUnSignNumber); 

    printf ("%d %u\n", nSignNumber, nUnSignNumber);

    showBit(nSignNumber);

    showBit(nUnSignNumber);    

}


void showBit(int n) {

    for (int i = 31; i >= 0; i--) {

        printf ("%d%s", ((n & 1<<i)?1:0), ((i % 4 == 0)?" ":""));

    } 

    printf ("\n");

}



int에 >> 연산자를 적용할 경우, 제일 왼쪽 비트가 그대로 복사 됨

unsigned int인 경우 0으로 채워짐 



Hi-iMac:CPP chobocho$ ./a.out

Original :

-1 4294967295

1111 1111 1111 1111 1111 1111 1111 1111

1111 1111 1111 1111 1111 1111 1111 1111

<< 1 :

-2 4294967294

-2 4294967294

1111 1111 1111 1111 1111 1111 1111 1110

1111 1111 1111 1111 1111 1111 1111 1110

>> 1 :

-1 2147483647

-1 2147483647

1111 1111 1111 1111 1111 1111 1111 1111

0111 1111 1111 1111 1111 1111 1111 1111


'Coding > CPP 삽질기' 카테고리의 다른 글

심심풀이 프로그래밍...2  (0) 2007.09.17
별 그려주는 코드  (0) 2006.08.22
입력 버퍼비우기  (0) 2006.02.23
Posted by chobocho
Coding/CPP 삽질기2006. 8. 22. 00:35

[CODE]

#include <stdio.h>

int main (void) {   const int max = 19;   char space[] = "                   ";   char star[]  = "*******************";   int  size = 0;   int  idx;       printf ("Input Size : \n");   scanf ("%d", &size);     size = (size % 20) | 0x1;     for ( idx = 1; idx <= size; idx += 2) {        printf ("%s", &space[max- ((max-idx)/2)]);        printf ("%s\n", &star[max-idx]);   }   for ( idx = size-2; idx >= 1; idx -= 2) {        printf ("%s", &space[max- ((max-idx)/2)]);        printf ("%s\n", &star[max-idx]);   }   }

[/CODE]

/* 심심해서 해본 코딩...*/

'Coding > CPP 삽질기' 카테고리의 다른 글

비트 연산자  (0) 2007.04.24
입력 버퍼비우기  (0) 2006.02.23
파이프를 이용한 통신  (0) 2005.11.14
Posted by chobocho