U E D R , A S I H C RSS

파스칼삼각형/허아영

소 감

05/7/11
역시 원시적이게 코드를 짰다 ㅠ
다르게 짤 생각중..
처음에 포인터 에러가 나서, 혼났다 ㅠ

헉 !! 행, 열에 해당하는 숫자만 출력하는 것이었다.
ver.2 만들어야겠다.

ver.3 파스칼삼각형 코딩한다니까. 보창오빠가 흘려가는 말로 "재귀함수로 짜면 되지 않냐" 고 했던 말이 생각나서
짜봤다. 메모리 낭비없이 깔끔하긴 한데, 제대로 짠건지 모르겠다. 재귀함수는 어쩔 땐 헷갈린다.

소 스

ver.1 - 파스칼 삼각형 전체 출력

~cpp 
#include <stdio.h>

void pascal_tri(int pascaltri[][100], int row);
void main()
{
	int pascaltri[100][100]; 
	int row;
	printf("행을 입력 :");
	scanf("%d", &row);
	pascal_tri(pascaltri, row);
}

void pascal_tri(int pascaltri[][100], int row)
{
	int i,j;
	for(i = 0; i < row; i++)
	{
		pascaltri[i][0] = 1;
		pascaltri[i][i] = 1;
	}
	for(i = 2; i < row; i++)
	{
		for(j = 1; j < i; j++)
		{
			pascaltri[i][j] = pascaltri[i-1][j-1] + pascaltri[i-1][j];
		}
	}
	for(i = 0; i < row; i++)// print
	{
		for(j = row; j > i; j--)
		{
			printf(" ");
		}
		for(j = 0; j <= i; j++)
		{
			printf("%d ", pascaltri[i][j]);
		}
		printf("n");
	}
}

ver.2 행,열에 해당하는 숫자

~cpp 
#include <stdio.h>

void pascal_tri(int pascaltri[][100], int row, int col);
void main()
{
	int pascaltri[100][100]; // 이 부분을 어떻게 더 효율적으로 바꿀 것인가..->ver.3
	int row, col;
	while(1)
	{
		printf("찾고자 하는 열, 행을 차례로 입력 :");
		scanf("%d %d", &col, &row);
		if(col >= row){
			break;
		}else{
			printf("다시 입력해 주세요...n");
		}
	}
	pascal_tri(pascaltri, col, row);
}

void pascal_tri(int pascaltri[][100], int col, int row)
{
	int i,j;
	for(i = 0; i < 100; i++)
	{
		pascaltri[i][0] = 1;
		pascaltri[i][i] = 1;
	}
	for(i = 2; i < 100; i++)
	{
		for(j = 1; j < i; j++)
		{
			pascaltri[i][j] = pascaltri[i-1][j-1] + pascaltri[i-1][j]; // 이 for 문들 역시 ver.3에서 더 나아져야 함.
		}
	}
	printf("%d열 %d행 = %dn", col, row, pascaltri[col-1][row-1]);
}

ver.3 - 더 나은 소스

~cpp 
#include <stdio.h>

int pascal_tri(int row, int col);
void main()
{
	int row, col, result;
	while(1)
	{
		printf("찾고자 하는 열, 행을 차례로 입력 :");
		scanf("%d %d", &col, &row);
		if(col >= row){
			break;
		}else{
			printf("다시 입력해 주세요...n");
		}
	}
	result = pascal_tri(col, row);
	printf("%d열 %d행 = %dn", col, row, result);
}

int pascal_tri(int col, int row)
{
	if(row == 1 || col == row){
		return 1;
	}else{
		 return pascal_tri(col-1, row-1) + pascal_tri(col-1, row);
	}
}

나한테 할 말


입력받아서 동적할당을 해보는게 어때.. 저렇게 하면 메모리 낭비 또는 초과가 생길듯..
그리고 문제가 '파스칼 삼각형을 출력하시오.' 가 아니었던거 같은데?? 다시 보는게..
ㅎㅎ 난 잠시 겜방에 온거니 다시 일하러 가야 되서 말야.. 자세히는 못보겠어.
그러니 자세한 사항은 필요할때 '자기야'에게 물어보라구^^ - 조현태
지금 나의 머리는 터질 듯 아프단다. ^^; 포인터 때문에 데여갖고-.ㅠ 소스를 아예 바꾸는 큰 공사를 치뤘기 때문에 ㅠ
좀 있다 생각해보마 ㅋㅋ 그리고 소감 읽어주길.. 문제 잘못 푼것을 나중에 알았단다 ㅋ--아영
ㅎㅎㅎ 소감 위의 세줄은 읽고 기억했는데, 밑의 두줄은 못봤어.ㅎㅎ
2차 이상의 배열을 포인터로 넘기는건 고생인데 말야.^^
고생했겠네..^^ 포인터..ㅎㅎㅎ 그래도 즐거운 하루. 즐거운 코딩 되라구.. 진짜 일하러 가야겠다 뱌뱌~~ - 조현태
엇~ 아영이 누나도 처음엔 원시적으로 짜셨네요~^^;; 후후.. 재귀함수로 이렇게 짤수있는거군요 센스 =ㅅ=b - 김준석

----
LittleAOI 파스칼삼각형
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:23
Processing time 0.0181 sec