More actions
imported>skywave No edit summary |
(Repair batch-0007 pages from live compare) |
||
| (One intermediate revision by one other user not shown) | |||
| Line 1: | Line 1: | ||
상위 항목인 | 상위 항목인 조영준/파스칼삼각형의 이전 코드들입니다. | ||
== 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) == | == r1 (2013/04/19) == | ||
=== Program.cs === | === Program.cs === | ||
| Line 8: | Line 175: | ||
class Program | class Program | ||
{ | { | ||
static void Main(string | static void Main(string[] args) | ||
{ | { | ||
string s; | string s; | ||
| Line 49: | Line 216: | ||
private int lines; //삼각형의 총 줄 | private int lines; //삼각형의 총 줄 | ||
private int count; //현재 반환중인 줄 | private int count; //현재 반환중인 줄 | ||
private int | private int[] prv; // 이전 줄 | ||
private int | private int[] current; // 현재 줄 | ||
public PTriangle(int lines) | public PTriangle(int lines) | ||
| Line 57: | Line 224: | ||
count = 1; | count = 1; | ||
} | } | ||
public int | public int[] Next() | ||
{ | { | ||
if (count == 1) | if (count == 1) | ||
| Line 63: | Line 230: | ||
//삼각형의 머리일 경우 | //삼각형의 머리일 경우 | ||
count++; | count++; | ||
return savePrv(new int | return savePrv(new int[] { 1 }); | ||
} | } | ||
current = new int | current = new int[count]; | ||
current | current[0] = 1; //줄의 맨 처음 | ||
current | current[count-1] = 1; //줄의 맨 마지막 | ||
for (int i = 0; i < current.Length - 2; i++) | for (int i = 0; i < current.Length - 2; i++) | ||
{ | { | ||
current | current[i + 1] = prv[i] + prv[i + 1]; //파스칼 삼각형 규칙 | ||
} | } | ||
count++; | count++; | ||
| Line 83: | Line 250: | ||
} | } | ||
count = 1; //초기화 | count = 1; //초기화 | ||
return prv | return prv[lines/2]; | ||
} | } | ||
private int | private int[] savePrv(int[] i) | ||
{ | { | ||
//리턴과 동시에 int | //리턴과 동시에 int[] prv에 저장 | ||
prv = i; | prv = i; | ||
return i; | return i; | ||
| Line 107: | Line 274: | ||
if (scale % 2 == 1) this.scale++; //너비가 홀수이면 짝수로 변경 | if (scale % 2 == 1) this.scale++; //너비가 홀수이면 짝수로 변경 | ||
} | } | ||
public void print(int | public void print(int[] nums) | ||
{ | { | ||
count = lines - nums.Length; | count = lines - nums.Length; | ||
| Line 124: | Line 291: | ||
{ | { | ||
// 빈 공각 출력 | // 빈 공각 출력 | ||
printEmpty(scale - nums | printEmpty(scale - nums[i].ToString().Length); | ||
// 숫자 출력 | // 숫자 출력 | ||
Console.Write(nums | Console.Write(nums[i]); | ||
} | } | ||
Console.Write("\n"); | Console.Write("\n"); | ||
| Line 158: | Line 325: | ||
삼각형의 크기를 입력하세요 (0 = exit) | 삼각형의 크기를 입력하세요 (0 = exit) | ||
0 | 0 | ||
Latest revision as of 01:32, 27 March 2026
상위 항목인 조영준/파스칼삼각형의 이전 코드들입니다.
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
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
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