상위 항목인 조영준/파스칼삼각형의 이전 코드들입니다.
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(" "); } } } }