게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
극악의 C언어 문제 : 카르노맵 & abs()대용수식 버젼
게시물ID : programmer_12850짧은주소 복사하기
작성자 : 내맘의눈
추천 : 0
조회수 : 2452회
댓글수 : 4개
등록시간 : 2015/08/20 00:36:23
뭐... 
떱밥 일 수도 있지만...

어차피 심심풀이로 들어 오는 오유에서 이정도 떱밥은 물어 주는 것이 예의죠...

땜쟁이의 옛추억을 살려서 카르노맵을 적용 해 봤습니다..ㅎㅎ

----------------------------------------------------------------------
P.S
결국 언어학자님의 요건을 충족 시킬려면 if문이나 함수를 사용하지 않고
좌우 대칭적 루프문을 만들어야 하는 것이 관건인 것 같네요...

물론 printf("%c", ... )를 허용한다면 1개의 for문으로 구현을 할 수도 있지만...
(직관력을 요하는 카르노맵 보다는 Quine-McCluskey  알고리즘을 사용한다면 불가능하지는 않습니다.)

그렇지 않다면 대칭적 루프문을 만드는 방법은 연산식으로 abs() 함수를 구현하는 것 밖에 없지 않을까 싶네요...
연산식에 의한 abs()함수가 만들어지면 갯수에도 크게 제한을 받지 않을 것 같구요...

암튼 뒷부분에 연산식에 의한 abs()를 추가 해 봤습니다.

문제 자체는 황당하지만 다른 분들의 댓글처럼 재미있는 아이디어들이 많이 나오는 것 같아서
그것을 살펴 보는 재미가 쏠쏠하네요...^^;
(물론 뒷목을 잡으시는 분들도 계시지만...ㅎㅎ)

//-------------------------------------------------------------------
// Karnaugh map 버젼
//-------------------------------------------------------------------
int main()
{
    int    LP01;
    int    LP02;

    for(LP01=0;LP01<5;LP01++)
        {

        for(LP02=0;LP02<((((~LP01&0x00000002)&&(~LP01&0x00000001))<<1)|(LP01&0x00000001));LP02++)
            {
            printf(" ");
            }

        for(LP02=0;LP02<(5-(((((~LP01&0x00000002)&&(~LP01&0x00000001))<<1)|(LP01&0x00000001))<<1));LP02++)
            {
            printf("*");
            }

        for(LP02=0;LP02<((((~LP01&0x00000002)&&(~LP01&0x00000001))<<1)|(LP01&0x00000001));LP02++)
            {
            printf(" ");
            }

        printf("\n");
        }
  return 0;
}


//-------------------------------------------------------------------
// 연산식에 의한 abs()대용 수식버젼
//  abs()함수 대용수식 : ((LP01-((LP01&0x80000000)>>31)) ^ (((LP01&0x80000000)>>31)*0xFFFFFFFF))
//-------------------------------------------------------------------
void    DrawLine(int iNum);

int    main(void)
{
    DrawLine(20);
    return(0);
}

void    DrawLine(int iNum)
{
    int    LP01,LP02;
    for(LP01=iNum*-1;LP01<=iNum;LP01++)
        {
        for(LP02=0;LP02<((LP01-((LP01&0x80000000)>>31)) ^ (((LP01&0x80000000)>>31)*0xFFFFFFFF)); LP02++)
            {
            printf("#");
            }

        for(LP02=0;LP02<( ((iNum<<1)+1) - (((LP01-((LP01&0x80000000)>>31)) ^ (((LP01&0x80000000)>>31)*0xFFFFFFFF))<<1)); LP02++)
           {
            printf("*");
            }

        for(LP02=0;LP02<((LP01-((LP01&0x80000000)>>31)) ^ (((LP01&0x80000000)>>31)*0xFFFFFFFF)); LP02++)
            {
            printf("$");
            }
        printf("\n");
        }
}

---[ OUTPUT ]-----------------------------------------
####################*$$$$$$$$$$$$$$$$$$$$ ###################***$$$$$$$$$$$$$$$$$$$ ##################*****$$$$$$$$$$$$$$$$$$ #################*******$$$$$$$$$$$$$$$$$ ################*********$$$$$$$$$$$$$$$$ ###############***********$$$$$$$$$$$$$$$ ##############*************$$$$$$$$$$$$$$ #############***************$$$$$$$$$$$$$ ############*****************$$$$$$$$$$$$ ###########*******************$$$$$$$$$$$ ##########*********************$$$$$$$$$$ #########***********************$$$$$$$$$ ########*************************$$$$$$$$ #######***************************$$$$$$$ ######*****************************$$$$$$ #####*******************************$$$$$ ####*********************************$$$$ ###***********************************$$$ ##*************************************$$ #***************************************$ ***************************************** #***************************************$ ##*************************************$$ ###***********************************$$$ ####*********************************$$$$ #####*******************************$$$$$ ######*****************************$$$$$$ #######***************************$$$$$$$ ########*************************$$$$$$$$ #########***********************$$$$$$$$$ ##########*********************$$$$$$$$$$ ###########*******************$$$$$$$$$$$ ############*****************$$$$$$$$$$$$ #############***************$$$$$$$$$$$$$ ##############*************$$$$$$$$$$$$$$ ###############***********$$$$$$$$$$$$$$$ ################*********$$$$$$$$$$$$$$$$ #################*******$$$$$$$$$$$$$$$$$ ##################*****$$$$$$$$$$$$$$$$$$ ###################***$$$$$$$$$$$$$$$$$$$ ####################*$$$$$$$$$$$$$$$$$$$$

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호