U E D R , A S I H C RSS

조�준/파스칼삼�형/�전버전

�위 항목� 조�준/파스칼삼�형� �전 코드들입니다.

r2 (2013/04/23)

변경�

  • PTriangle í�´ëž˜ìŠ¤ë¥¼ 갈아 엎었습니다.
    • 왜 바꿨ëƒ�ê³  물어보신다면 r1 ì§  ë‚ ì—� 침대ì—� 누웠는ë�° 너무 야매스러워서 후회후회... 그래서 나름 ì‹ ê²½ì�¨ì„œ 다시 고쳤습니다.
    • PTriangle í�´ëž˜ìŠ¤ë§Œ 똑 떼서 파스칼 삼ê°�형ì�„ 필요로 하는 다른 프로그램ì—�서 쓸 수 있게 ì†�ì�„ 봤습니다.
    • 사실 9시 30ë¶„ì—� 야ì‹� 제공하는ë�° ê·¸ 때 까지 할게 없어서 5피실ì—�서 야매야매.

Program.cs

// 파스칼 삼ê°�형 ìœë ¥
using System;
namespace PascalTriangle
{
    class Program
    {
        static void Main(string[] args)
        {
            string s;
            int lines;
            while (true)
            {
                Console.WriteLine("삼�형� �기를 입력하세요 (0 = exit)");
                s = Console.ReadLine(); //삼�형 �기를 입력받�
                try
                {
                    lines = Convert.ToInt32(s);
                    if (lines < 0)
                    {
                        Exception e = new Exception("유효하지 않� 범위입니다");
                        throw e;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }
                if (lines == 0) return; // 프로그램 종료
                PTriangle pTriangle = new PTriangle(lines);
                Printer printer = new Printer(lines, pTriangle.getMax().ToString().Length+1);

                for (int i = 0; i < lines; i++)
                {
                    printer.print(pTriangle.Next());
                }
            }
        }
    }
}

PTriangle.cs

using System;
namespace PascalTriangle
{
    class PTriangle
    {
        private int[][] _triangle; //파스칼 삼�형
        private int _row; //삼�형� � 줄
        private int _count; //현재 반환중� 줄
        private int _max; //삼�형� 최댓값

        public int[][] triangle { get { return _triangle; } }
        public int row { get { return _row; } }
        public int count { get { return _count; } }
        public int max { get { return _max; } }

        public PTriangle(int row)
        {
            this._row = row;
            _count = 1;
            _triangle = new int[this._row][];
            _triangle[0] = new int[] { 1 };
            if (this._row > 1) _triangle[1] = new int[] { 1, 1 };
            for (int i = 2; i < this._row; i++)
            {
                _triangle[i] = new int[i+1];
                _triangle[i][0] = 1; //줄� 맨 처�
                _triangle[i][i] = 1; //줄� 맨 마지막
                for (int j = 0; j < i - 1; j++)
                {
                    _triangle[i][j+1] = _triangle[i-1][j] + _triangle[i-1][j+1]; //파스칼 삼�형 규칙
                }
            }
            _max = _triangle[row-1][(row-1)/2];
        }
        public int[] next()
        {
            if (_count > _row) return new int[0];
            _count++;
            return _triangle[_count-2];
        }
        public void resetCount()
        {
            _count = 1;
        }
        public int[] getData(int row)
        {
            return _triangle[row-1];
        }
        public int getData(int row, int column)
        {
            return _triangle[row-1][column-1];
        }
    }
}

Printer.cs

using System;
namespace PascalTriangle
{
    class Printer
    {
        private int lines; //ì´� ìœë ¥í•  줄
        private int count; //좌우로 ìœë ¥í•´ì•¼í•  빈 공간ì�˜ 수 (4칸ì�´ 한 단위)
        private int scale; //한 칸당 너비 �수야 한다
        public Printer(int lines, int scale)
        {
            this.lines = lines;
            this.scale = scale;
            if (scale % 2 == 1) this.scale++; //너비가 홀수�면 �수로 변경 
        }
        public void print(int[] nums)
        {
            count = lines - nums.Length;
            if (count % 2 == 1)
            {
                // 빈 공간ì�˜ 수가 홀수ì�¼ 경우 ê·¸ ë°˜ì�„ ìœë ¥
                printEmpty(scale / 2);
                count--;
            }
            for (int i = 0; i < count / 2; i++)
            {
                // 좌측ì�˜ 빈 공간 ìœë ¥
                printEmpty(scale);
            }
            for (int i = 0; i < nums.Length; i++)
            {
                // 빈 ê³µê°� ìœë ¥
                printEmpty(scale - nums[i].ToString().Length);
                // 숫ìž� ìœë ¥
                Console.Write(nums[i]);
            }
            Console.Write("\n");
        }
        private void printEmpty(int size)
        {
            //입력받ì�€ 수 ë§Œí�¼ 빈 칸 ìœë ¥
            for (int i = 0; i < size; i++)
            {
                Console.Write(" ");
            }
        }
    }
}

ê²°ê³¼

삼�형� �기를 입력하세요 (0 = exit)
5
     1
    1 1
   1 2 1
  1 3 3 1
 1 4 6 4 1
삼�형� �기를 입력하세요 (0 = exit)
6
             1
           1   1
         1   2   1
       1   3   3   1
     1   4   6   4   1
   1   5  10  10   5   1
삼�형� �기를 입력하세요 (0 = exit)
0

r1 (2013/04/19)

Program.cs

// 파스칼 삼ê°�형 ìœë ¥
using System;
namespace PascalTriangle
{
    class Program
    {
        static void Main(string[] args)
        {
            string s;
            int lines;
            while (true)
            {
                Console.WriteLine("삼�형� �기를 입력하세요 (0 = exit)");
                s = Console.ReadLine(); //삼�형 �기를 입력받�
                try
                {
                    lines = Convert.ToInt32(s);
                    if (lines < 0)
                    {
                        Exception e = new Exception("유효하지 않� 범위입니다");
                        throw e;
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }
                if (lines == 0) return; // 프로그램 종료
                PTriangle pTriangle = new PTriangle(lines);
                Printer printer = new Printer(lines, pTriangle.getMax().ToString().Length+1);

                for (int i = 0; i < lines; i++)
                {
                    printer.print(pTriangle.Next());
                }
            }
        }
    }
}

PTriangle.cs

using System;
namespace PascalTriangle
{
    class PTriangle
    {
        private int lines; //삼�형� � 줄
        private int count; //현재 반환중� 줄
        private int[] prv; // �전 줄
        private int[] current; // 현재 줄
        
        public PTriangle(int lines)
        {
            this.lines = lines;
            count = 1;
        }
        public int[] Next()
        {
            if (count == 1)
            {
                //삼�형� 머리� 경우
                count++;
                return savePrv(new int[] { 1 });
            }
            current = new int[count];
            current[0] = 1; //줄� 맨 처�
            current[count-1] = 1; //줄� 맨 마지막
            for (int i = 0; i < current.Length - 2; i++)
            {
                current[i + 1] = prv[i] + prv[i + 1]; //파스칼 삼�형 규칙
            }
            count++;
            return savePrv(current);
        }
        public int getMax()
        {
            //파스칼 삼�형� 최대값 반환
            for(int i = 0 ; i < lines ; i++)
            {
                Next();
            }
            count = 1; //초기화
            return prv[lines/2];
        }
        private int[] savePrv(int[] i)
        {
            //리턴과 �시� int[] prv� 저장
            prv = i;
            return i;
        }
    }
}

Printer.cs

using System;
namespace PascalTriangle
{
    class Printer
    {
        private int lines; //ì´� ìœë ¥í•  줄
        private int count; //좌우로 ìœë ¥í•´ì•¼í•  빈 공간ì�˜ 수 (4칸ì�´ 한 단위)
        private int scale; //한 칸당 너비 �수야 한다
        public Printer(int lines, int scale)
        {
            this.lines = lines;
            this.scale = scale;
            if (scale % 2 == 1) this.scale++; //너비가 홀수�면 �수로 변경 
        }
        public void print(int[] nums)
        {
            count = lines - nums.Length;
            if (count % 2 == 1)
            {
                // 빈 공간ì�˜ 수가 홀수ì�¼ 경우 ê·¸ ë°˜ì�„ ìœë ¥
                printEmpty(scale / 2);
                count--;
            }
            for (int i = 0; i < count / 2; i++ )
            {
                // 좌측ì�˜ 빈 공간 ìœë ¥
                printEmpty(scale);
            }
            for (int i = 0; i < nums.Length; i++)
            {
                // 빈 ê³µê°� ìœë ¥
                printEmpty(scale - nums[i].ToString().Length);
                // 숫ìž� ìœë ¥
                Console.Write(nums[i]);
            }
            Console.Write("\n");
        }
        private void printEmpty(int size)
        {
            //입력받ì�€ 수 ë§Œí�¼ 빈 칸 ìœë ¥
            for (int i = 0; i < size; i++)
            {
                Console.Write(" ");
            }
        }
    }
}

ê²°ê³¼

삼�형� �기를 입력하세요 (0 = exit)
5
     1
    1 1
   1 2 1
  1 3 3 1
 1 4 6 4 1
삼�형� �기를 입력하세요 (0 = exit)
6
             1
           1   1
         1   2   1
       1   3   3   1
     1   4   6   4   1
   1   5  10  10   5   1
삼�형� �기를 입력하세요 (0 = exit)
0
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:06
Processing time 0.0054 sec