소연의_개발일지
article thumbnail

 

저번 C언어 삼각형 별찍기 과제에 이어서 이번에는 피라미드를 만들어 보았다.

 

 

1. 피라미드 만들기

(1, 2, 3.. 순서대로 피라미드 만들기)

별 뒤에 공백을 넣어서 하나씩 증가하는 피라미드를 만들었다.

#include <stdio.h>
int main(void)
{
	int num, i, j;
//	printf("정수를 입력하세요: ");	
//	scanf("%d",num);
	for(i=0;i<10;i++) 
	//외부 for문: 개행의 역할. i는 0부터 10까지 반복한다. 반복할 때마다 1씩 증가한다.  
	 
	{
		for(j=0;j<10-i;j++) //내부 for문 첫번째. j는 0부터 10-i번까지 1씩 증가하며 반복한다.  
		{
			printf(" "); //공백을 출력해 준다.  
		}
		for(j=0;j<i+1;j++) //내부 for문 두번째. j는 0부터 i+1번까지 1씩 증가하며 반복한다.  
		{
			printf("* "); //별을 출력해 준다. 
		}
		printf("\n");   
	}
	
	return 0;
}
 

1-2 홀수 피라미드 만들기

홀수는 2*n +1 순서로 별이 증가해서 1,3, 5, ... 순으로 증가할 수 있게 해 준다.

#include <stdio.h>
int main(void)
{
	int num, i, j;
//	printf("정수를 입력하세요: ");	
//	scanf("%d",num);
	for(i=0;i<10;i++) 
	//외부 for문: 개행의 역할. i는 0부터 10까지 반복한다. 반복할 때마다 1씩 증가한다.  
	 
	{
		for(j=0;j<10-i;j++) //내부 for문 첫번째. j는 0부터 10-i번까지 1씩 증가하며 반복한다.  
		{
			printf(" "); //공백을 출력해 준다.  
		}
		for(j=0;j<2*i+1;j++) //내부 for문 두번째. j는 0부터 2*i+1번까지 1씩 증가하며 반복한다.  
		{
			printf("*"); //별을 출력해 준다. 
		}
		printf("\n"); //개행한다. 
	}
	
	return 0;
}
 

2. 다이아몬드

다이아몬드는 피라미드 밑에 역삼각형 붙여서 만들어줬다.

#include <stdio.h>
int main(void)

{
	int num, i, j, m, n; //정의  
	printf("정수를 입력하세요: ");
	scanf("%d", &num); //num으로 사용자 입력 정수 받아줌  
	
	for(i=0;i<num;i++) //i는 0부터 시작, num까지 1씩 증가시켜줌  
	{
		for(j=0;j<num-i;j++) 
		/*내행 for문 첫번째. 공백을 하나씩 감소시켜야 한다.  
		j는 0부터 시작, num-i까지 순서대로 공백을 입력시킨다. 
		-> 즉 i가 증가할수록  j의 값은 감소하므로, 공백의 수는 점점줄어든다.*/  
		{
			printf(" "); //공백 출력  
		}
		for(j=0;j<i+1;j++)
		/*내행 for문 두번째. 별을 하나씩 증가시켜야 한다. 
		j는 0부터 시작, i+1까지 순서대로 별을 입력시킨다.
		-> 즉 외부for문의 i가 1씩 증가할수록 j의 값은 1씩 커지므로 = 별의 수는 1씩 늘어난다. */
		{
			printf("* "); //별 출력  
		}
		printf("\n"); //for문이 반복될 때마다 개행시켜준다. 
	}

	for(m=num;m>0;m--) //m은 입력받은 숫자부터 시작, m이 0보다 클 때까지 하나씩 감소시키기  
	{
		
		for(n=0;n<num-m+2;n++)
		/* 내부for문 n은 0부터 시작. 공백은 하나씩 늘어나야 하니까 5-5 5-4 5-3..이 순서가 되야 한다. 
		-> 그래서 num-m해준다. m은 하나씩 줄어드니까! 
		그리고 다이아몬드 모양이 비뚫어지면 안되니까 숫자 두개를 더 추가시켜 준다. */
		{
			printf(" "); //공백 출력  
		}
		for(n=0;n<m-1;n++) 
		/* 내부for문 두번째는 0부터 시작. 별을 출력하는 코드이다. 별은 하나씩 줄어들어야 한다. 
		m이 하나씩 줄어들기 때문에 m을 넣어 준다. 그런데 모양이 조금 이상해서 -1해줬다.  */
		{
			printf("* "); //별 출력  
		}
		printf("\n");
	}
	return 0;
}
 

3. 리본

리본은 어떻게 만들어야 할 지 몰라서

다이아몬드 -> 뒤집자 -> 모래시계 -> 그럼 모래시계 반전 시켜서 빈공간에 별 채우면 되겠네 하고 해봤더니

안된다

그래도 어쩌저찌 하니까 되었다. 구현해놓고 이해가 안 된다 ㅋ

그래서 이건 일단 고민을 더 해봐야겠음.

 

풍차 만들기에서 그냥 리본 모양으로 채웠다. 위의 고민은 더 해볼 생각이다.

//리본 만들기
#include <stdio.h>
int main(void)
{
	int num, i, j, k, l, m, n;
	for(i=0;i<5+1;i++)
	{
		for(j=0;j<i;j++)
		{
			printf("*");
		}
		for(k=0;k<5-i;k++)
		{
			printf(" ");
		}
		for(l=0;l<(5-i);l++)
		{
			printf(" ");
		}
		for(m=0;m<i;m++)
		{
			printf("*");
		}
		printf("\n");
	}
	for(i=0;i<5+1;i++)
	{
		for(j=0;j<5-i;j++)
		{
			printf("*");
		}
		for(k=0;k<i;k++)
		{
			printf(" ");
		}
		for(l=0;l<i;l++)
		{
			printf(" ");
		}
		for(m=0;m<5-i;m++)
		{
			printf("*");
		}
		printf("\n");
	}
	
	
	
	return 0;
 }
 

4. 풍차 만들기

 

풍차를 만들기 너무 어려워서 삼각형 8개로 쪼갰다. 이게 맞게 하는건가..? 의구심이 들지만 그래도만들었는데 괜찮지않을까요 핫

 

숫자 8개 모음집

먼저 이것을 만들고 풍차와 리본을 만들었다.

//숫자풍차  
#include <stdio.h>
int main(void)
{
	int num, i, j, k, l, m, n;
	for(i=0;i<5+1;i++)
	{
		for(j=0;j<i;j++)
		{
			printf("1");
		}
		for(k=0;k<5-i;k++)
		{
			printf("2");
		}
		for(l=0;l<(5-i);l++)
		{
			printf("3");
		}
		for(m=0;m<i;m++)
		{
			printf("4");
		}
		printf("\n");
	}
	for(i=0;i<5+1;i++)
	{
		for(j=0;j<5-i;j++)
		{
			printf("5");
		}
		for(k=0;k<i;k++)
		{
			printf("6");
		}
		for(l=0;l<i;l++)
		{
			printf("7");
		}
		for(m=0;m<5-i;m++)
		{
			printf("8");
		}
		printf("\n");
	}
	
	
	
	return 0;
 }
 

첫번째 풍차

//리본 만들기
#include <stdio.h>
int main(void)
{
	
	int num, i, j, k, l, m;
	printf("정수를 입력하세요: ");
	scanf("%d", &num);
	
	for(i=0;i<num+1;i++)
	{
		for(j=0;j<i;j++)
		{
			printf(" ");
		}
		for(k=0;k<num-i;k++)
		{
			printf("*");
		}
		for(l=0;l<(num-i);l++)
		{
			printf(" ");
		}
		for(m=0;m<i;m++)
		{
			printf("*");
		}
		printf("\n");
	}
	for(i=0;i<num+1;i++)
	{
		for(j=0;j<num-i;j++)
		{
			printf("*");
		}
		for(k=0;k<i;k++)
		{
			printf(" ");
		}
		for(l=0;l<i;l++)
		{
			printf("*");
		}
		for(m=0;m<num-i;m++)
		{
			printf(" ");
		}
		printf("\n");
	}
	
	
	
	return 0;
 }
 

두번째 풍차

//풍차2
#include <stdio.h>
int main(void)
{
	
	int num, i, j, k, l, m;
	printf("정수를 입력하세요: ");
	scanf("%d", &num);
	
	for(i=0;i<num+1;i++)
	{
		for(j=0;j<i;j++)
		{
			printf("*");
		}
		for(k=0;k<num-i;k++)
		{
			printf(" ");
		}
		for(l=0;l<(num-i);l++)
		{
			printf("*");
		}
		for(m=0;m<i;m++)
		{
			printf(" ");
		}
		printf("\n");
	}
	for(i=0;i<num+1;i++)
	{
		for(j=0;j<num-i;j++)
		{
			printf(" ");
		}
		for(k=0;k<i;k++)
		{
			printf("*");
		}
		for(l=0;l<i;l++)
		{
			printf(" ");
		}
		for(m=0;m<num-i;m++)
		{
			printf("*");
		}
		printf("\n");
	}
	
	
	
	return 0;
 }
 

 

5. 보석

하는 중...

내 생각은 기울어진 별 삼각형 + 밑에 사각형 + 밑에 긴 삼각형 + 별 삼각형

하면 분명히 할 수 있을 듯 하다

근데 안됨 ㅎ

 

했다 ㅎㅎ

참내 이 별이 뭐라구 너무 예뻐보인다.

 

해결과정은 이렇게 그려서 유추해 보았다.

그림은 조잡하지만 도움이 많이 되었다.

회색 1 3 4 는 빈칸이고

노랑 2 5는 별이다.

이걸 숫자대로 쌓아갈 거다.

#include <stdio.h>
int main(void)
// 비스듬한 보석 만들기
{
int i, j, k;
// scanf("%d", &k);
for(i=0;i<10+1;i++) //i는 높이를 의미. 10이 될 때까지 하나씩 증가한다. 1부터 출력되게 하고 싶어서 1 더해줬다. 
{
    for(j=0;j<2*i;j++) //첫번째 삼각형 만들기. 삼각형은 경사가 좀 있게 *2로 설정. 공백은 2배씩 늘어난다.
    {
        printf(" "); //공백 출력
    }
    for(j=0;j<2*i-1;j++) //두번째 삼각형 만들기. 이 삼각형은 홀수 크기로 늘어나게 2*i-1만큼 늘어나게 했다.
    {
        printf("*"); //별 출력
    }
    printf("\n"); //개행
}
for(i=0;i<10;i++) //i는 높이를 의미. 10이 될 때까지 하나씩 증가한다.
{
    for(j=0;j<2*10;j++) //세번째 사각형 만들기. 이 사각형 세로는 i이고 가로는 위에서 설정한 2*i만큼 해야 하므로 2*10을 넣는다.
    {
        printf(" "); //공백 출력
    }
    for(j=0;j<4*i+1;j++) 
    /*네번째 삼각형 만들기. 이 삼각형 밑변은 위에 1,2번 삼각형 가로합과 같으므로(그림에서 파란선)
    (2*i) + (2*i-1) + 1 을 해 준다. +1을 하는 이유는 =이 안 붙기 때문이다. 하나 더 더해준다. */
    {
        printf(" "); //공백 출력
    }
    for(j=0;j<2*10-(2*i+1);j++) 
    /*다섯번째 삼각형 만들기. j는 점점 줄어들어야 하는데, 
    처음 시작하는 별의 갯수가 위의 마지막 별 갯수와 같으면 된다. 그러니까 19,17,15,,,3,1 순이다.
    그럼 (짝수인 가로 - 홀수) 하면 계속 홀수의 값이 나온다. 두번째 외부for문에서 i는 계속 늘어나니까
    여기서 2*i+1해주면 별이 점점 줄어들게 할 수 있다. 2*i-1을 하지 않은 이유는 별 하나까지 출력시키기 위해서~
    (사실 하나씩 때려박아봄. 그래도 개념은 이해했으니 된 거 아닌가요? 하 -하 )
    */
    {
        printf("*"); //별 출력
    }
    printf("\n"); //개행
}
    
    return 0;
}
 

 

 

 

 

 

+ 트리 만들기

삼각형 두개랑 사각형 하나 붙여서 만들었다.

귀엽다.

 

// 크리스마스 트리 만들기  
#include <stdio.h>
int main(void)
{
	int i, j, k, l, m, n;
	for(i=0;i<10;i++)
	{
 		for(j=i-1;j<11;j++)
		{
			printf(" ");
		}
		for(j=i;j<2*i+1;j++)
		{
			printf("* ");
		}	
		printf("\n");
	}
	for(k=5;k<13;k++)
	{
 		for(l=k;l<12;l++)
		{
			printf(" ");
		}
		for(l=k;l<2*k+1;l++)
		{
			printf("* ");
		}	
		printf("\n");
	}
	for(m=0;m<7;m++)
	{
 		for(n=0;n<9;n++)
		{
			printf(" ");
		}
		for(n=0;n<6;n++)
		{
			printf("*");
		}	
		printf("\n");
	}
	
	return 0;
}
 

 

만들면서 든 생각

: 난 바보가 틀림없다. 이 돌아가지 않는 머리를 어쩌면 좋단 말인가

 

profile

소연의_개발일지

@ssoyxon

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!