ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 다이아몬드 생성 예제
    Programming 2010. 7. 16. 22:21

    프로그래밍을 공부하던 친구와의 대화중 다이아몬드 찍기 예제 코드에 관한 이야기로 얘기를 나누던 도중 친구가 보여준 코드에선 for문을 두번 반복해서 다이아몬드를 찍는걸 보고 이중 포문 한번에 찍어보고 싶어서 한번 짜봤다.
    #include <iostream>
    using namespace std;

    void main()
    {
     int size = 7;
     int center= (size/2);
     int index;
     for(int i=0; i<size; i++)
     {
      index= i;
      if(i>center)
      {
       index= size - i-1;
      }
      for(int j=0; j<size; j++)
      {
       if(abs(center-j)<=index)
       {
        cout<<"*";
       }
       else
       {
        cout<<" ";
       }
      }
      cout<<endl;
     }
     getchar();
    }
    //i가 size/2 보다 커지면 하나씩 더 감소해야함 예) 사이즈가 5이면 3 이상부터 감소해야 하므로 5-4= 4, 5-5=0;
    //다시 말해, 사이즈를 통해 중앙값을 알아내고, 몇번째 행의 j값이 중앙값에서 얼마나 떨어져 있느냐에 따라 * 혹은 띄어쓰기를 실행함
    //즉, ' ', ' ', '*', ' ', ' ' //0번째 행
    //    ' ', '*', '*', '*', ' ' //1번째 행
    //과 같은 순서로 상윗단은 진행이 되어야 하므로
    //0번째 줄이면 중앙값에서 0만큼 떨어져있을때 별
    //1번째 줄이면 중앙값에서 1만큼 떨어져 있을 때 별을 찍는다

    //하단부는 ' ', '*', '*', '*',        //3번쨰 행 
    //         ' ', ' ', '*', ' ', ' '    //4번째 행
    //위와 같은 방식으로 진행이 되어야 하는데, 중앙값에서의 범위가 1, 0으로 줄어야 하므로
    //size- i(행의 숫자) 를 하면 3번째 행의 index는 5-3= 2, 4번째 행의 index는 5-4=1
    //이 된다. 여기서 컴퓨터는 0부터 숫자를 세므로 -1을 추가하면, 1, 0의 범위만큼만 출력한다.



Designed by Tistory.