DisplayLCD

Programing/알고리즘 2011.12.07 09:29 |


// DisplayLCD.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"
#include <iostream>

using namespace std;

 

char* StrMallocToNum(int num) //반환된 문자열 릴리스 필요!
{
 //
 int temp = num;
 
 int length = 0;
  
 int flag = 1;
 //length 구하기.
 while(1)
 {

  int  OneNum = num % flag;

  if(num < flag)
   break;

  flag *= 10;  

  length++;
 }


 char* tempStr = new char[length+1];
 memset( tempStr, 0x00 ,  length+1 );
 
 // 문자열에 대입
 flag = 10;
 int strCnt = 0;
 while( strCnt != length+1)
 {
  int  OneNum = num % flag;

  OneNum = OneNum / (flag/10);

  *(tempStr + (length -1 - strCnt)) = OneNum + 48;

  strCnt++;

  flag *= 10;  

  if(num < flag/10)
   break;
 }
 

 return tempStr;
}


void printLCD( int fontSize, char* str)
{
 int length =strlen( str);

 char* screenArr = new char[ (fontSize + 2) * ((2*fontSize)+3) *length ]; // 가로행수* 세로행수.
 memset( screenArr , ' ', sizeof(char)* ((fontSize + 2) * ((2*fontSize)+3) *length));


 int flagCnt = 0;

 while( flagCnt != length)
 {
  
  char tempC = *(str + flagCnt);

  switch ( tempC )
  {
  case '0':
   {
   
    for(int i = 0; i < fontSize; ++i)
    {

     //상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + i + 1 )  = '-';

     //좌상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1) *  ((fontSize + 2)*length)) )  = '|';
     //좌하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1 +fontSize +1 ) *  ((fontSize + 2)*length)) )  = '|';

     //우상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';
     //우하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

     //하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +( (i+1)  +  ((fontSize +2 )* length)*((fontSize+1)*2)  ))  = '-';

    }
    
   }
   break;
  case '1':
   {

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

    //우상단 짝대기
    *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';
    //우하단 짝대기
    *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

    }
   }
   break;

  case '2':
   {

    for(int i = 0; i < fontSize; ++i)
    {
    //상단 짝대기
    *(screenArr + ( flagCnt *  (fontSize + 2)) + i + 1 )  = '-';
    //중간 짝대기
    *(screenArr + ( flagCnt *  (fontSize + 2)) + ( (i+1)  +  ((fontSize +2 )* length)*(fontSize+1)  ))   = '-';
    //하단 짝대기
    *(screenArr + ( flagCnt *  (fontSize + 2)) +( (i+1)  +  ((fontSize +2 )* length)*((fontSize+1)*2)  ))  = '-';

    //우상단 짝대기
    *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

    //좌하단 짝대기
    *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1 +fontSize +1 ) *  ((fontSize + 2)*length)) )  = '|';

    }
   }
   break;

  case '3':
   {
    for(int i = 0; i < fontSize; ++i)
    {

     //상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + i + 1 )  = '-';

     //우상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';
     //우하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

     //중간 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + ( (i+1)  +  ((fontSize +2 )* length)*(fontSize+1)  ))   = '-';
     //하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +( (i+1)  +  ((fontSize +2 )* length)*((fontSize+1)*2)  ))  = '-';

    }
   }

   break;

  case '4':
   {
    for(int i = 0; i < fontSize; ++i)
    {

     //좌상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1) *  ((fontSize + 2)*length)) )  = '|';
     
     //우상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';
     //우하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

     //중간 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + ( (i+1)  +  ((fontSize +2 )* length)*(fontSize+1)  ))   = '-';
    
    }
   }

   break;

  case '5':
   {
    for(int i = 0; i < fontSize; ++i)
    {

     //상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + i + 1 )  = '-';

     //좌상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1) *  ((fontSize + 2)*length)) )  = '|';
    
     //우하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

     //중간 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + ( (i+1)  +  ((fontSize +2 )* length)*(fontSize+1)  ))   = '-';
     //하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +( (i+1)  +  ((fontSize +2 )* length)*((fontSize+1)*2)  ))  = '-';

    }
   }

   break;
  case '6':
   {
    for(int i = 0; i < fontSize; ++i)
    {

     //상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + i + 1 )  = '-';

     //좌상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1) *  ((fontSize + 2)*length)) )  = '|';
     //좌하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1 +fontSize +1 ) *  ((fontSize + 2)*length)) )  = '|';

     //우하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

     //중간 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + ( (i+1)  +  ((fontSize +2 )* length)*(fontSize+1)  ))   = '-';
     //하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +( (i+1)  +  ((fontSize +2 )* length)*((fontSize+1)*2)  ))  = '-';

    }
   }
   break;

  case '7':
   {
    for(int i = 0; i < fontSize; ++i)
    {

     //상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + i + 1 )  = '-';

     
     //우상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';
     //우하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

    }
   }
   break;
  case '8':
   {
    for(int i = 0; i < fontSize; ++i)
    {

     //상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + i + 1 )  = '-';

     //좌상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1) *  ((fontSize + 2)*length)) )  = '|';
     //좌하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1 +fontSize +1 ) *  ((fontSize + 2)*length)) )  = '|';

     //우상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';
     //우하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

     //중간 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + ( (i+1)  +  ((fontSize +2 )* length)*(fontSize+1)  ))   = '-';
     //하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +( (i+1)  +  ((fontSize +2 )* length)*((fontSize+1)*2)  ))  = '-';

    }
   }
   break;
  case '9':
   {
    for(int i = 0; i < fontSize; ++i)
    {

     //상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + i + 1 )  = '-';

     //좌상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2))  + ((i+1) *  ((fontSize + 2)*length)) )  = '|';
     
     //우상단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';
     //우하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +  (( (i+1 + fontSize+1) *  ((fontSize + 2)*length)) + fontSize+1 ))  = '|';

     //중간 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) + ( (i+1)  +  ((fontSize +2 )* length)*(fontSize+1)  ))   = '-';
     //하단 짝대기
     *(screenArr + ( flagCnt *  (fontSize + 2)) +( (i+1)  +  ((fontSize +2 )* length)*((fontSize+1)*2)  ))  = '-';

    }
   }
   break;
  }
  flagCnt++;
 }

 
 for(int i = 0; i< (2*fontSize)+3 ; ++i)
 {
  for(int j = 0; j< (fontSize + 2) * length ; ++j)
  {
   //cout<< screenArr

   char tempC = *(screenArr + ( j  + ( i * ((fontSize + 2) * length )) ) );

   cout<< tempC;

  }

  cout <<endl;
 }


 delete [] screenArr;

}

int _tmain(int argc, _TCHAR* argv[])
{

 int fontSize = 0;
 int num = 0;


 cin >> fontSize >> num ;

 char* tt = StrMallocToNum(num);

 cout<< tt<<endl;

 printLCD( fontSize, tt );

 delete [] tt;


 return 0;
}

 

'Programing > 알고리즘' 카테고리의 다른 글

Crypt Kicker  (0) 2011.12.07
Jolly Jumpers  (0) 2011.12.07
DisplayLCD  (0) 2011.12.07
The Trip  (0) 2011.12.05
알고리즘 트레이닝 북 지뢰찾기  (0) 2011.12.05
알고리즘 트레이닝 북 3n+1 문제  (0) 2011.12.05
Posted by 패스맨

댓글을 달아 주세요