예전에 마름모 출력 post를 작성한 내용이 C언어 마무리 단계에서 문득 떠오르네요. 그때는 그냥 마름모 출력 코딩을 작성만하고 올렸는데 이번에는 별표가 어떻게 모양을 만드는지를 소개하고 또 다른 관점으로 다양한 표현을 해보는 실험을 하도록 하겠습니다. 코딩이 어떻게 상상력을 더해서 코딩하는지 전반적이 과정을 post로 담았습니다.
별표의 모양을 만들려면 2차 배열을 이용합니다. 2차 배열의 구조는 다음과 같습니다.
2차 배열 전체에 별표를 찍어 볼까요.
#include
#include
int main(int argc, char *argv[]) {
int i,j;
int a;
printf("별표(*)의 수를 입력하시오?");
scanf("%d",&a);
for(i = 0; i < a; i++) { //세로
for(j = 0; j < a; j++) printf("*"); //가로
printf("\n");
}
system("pause");
return 0;
}
위와 같이 i(x)은 가로이고 j(y)은 세로 입니다. 위와 같이 코딩하면 2차 배열 전체에 별표가 찍힙니다.
[결과]
삼각형 별표를 만들어 볼까요.
#include
#include
int main(int argc, char *argv[]) {
int i,j;
int a;
printf("별표(*)의 수를 입력하시오?");
scanf("%d",&a);
for(i = 0; i < a; i++) {
for(j = 0; j < i+1; j++) printf("*");
printf("\n");
}
system("pause");
return 0;
}
수정 된 부분은 for문 j입니다. 별표는 i행의 숫자만큼 열로 별표가 찍히도록 하는 코딩이지요.
[결과]
직삼각형인데 정삼각형을 만들어 볼까요. 어떻게 해야 할까요.
#include
#include
int main(int argc, char *argv[]) {
int i,j;
int a;
printf("별표(*)의 수를 입력하시오?");
scanf("%d",&a);
for(i = 0; i < a; i++) {
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("*");
printf("\n");
}
system("pause");
return 0;
}
위 코딩을 보면 for문 i에서 두개의 for문 j가 있습니다. 2개의 for문 j의 움직임을 살펴 보세요.
[결과]
정삼각형을 만들었다면 거꾸로 모양을 만들어 내면 마름모 모양이 됩니다.
#include
#include
int main(int argc, char *argv[]) {
int i,j;
int a;
printf("마름모 *의 수를 입력하시오:");
scanf("%d",&a);
printf("\n");
a = a/2+1;
for(i = 0; i < a; i++) { //정삼각형 모양
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("*");
printf("\n");
}
for(i =a-2; i >= 0; i--) {//역삼각형 모양
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("*");
printf( "\n" );
}
system("pause");
return 0;
}
보시면 for문 i을 역순으로 하면 됩니다.
for(i = 0; i < a; i++) {
}
for(i =a-2; i >= 0; i--) {
}
이렇게 말이죠.
[결과]
정삼각형 for문과 역삼각형for을 통해 마름모가 만들어 졌습니다. 이 두개의 순서를 바꾸면 어떤 모양이 나올까요.
[결과]
이건 위 코딩을 수정해보셔서 위와 같이 이미지를 만드세요.
별표를 숫자로 변경해서 마름모 숫자를 만들어 봅시다.
#include
#include
/*
int main(int argc, char *argv[]) {
int i,j;
int a;
printf("별표(*)의 수를 입력하시오?");
scanf("%d",&a);
for(i = 0; i < a; i++) {
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("*");
printf("\n");
}
system("pause");
return 0;
}
*/
int main(int argc, char *argv[]) {
int i,j;
int a;
int ch=1;
printf("마름모 *의 수를 입력하시오:");
scanf("%d",&a);
printf("\n");
a = a/2+1;
for(i = 0; i < a; i++) {
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("%2d",ch++);
printf("\n");
}
for(i =a-2; i >= 0; i--) {
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("%2d",ch++);
printf( "\n" );
}
system("pause");
return 0;
}
이렇게 별표 대신에 ch변수의 숫자를 printf()문으로 출력하도록 했네요.
좀 이쁘게 출력하게 하기 위해서 출력 서식글자범위를 2칸으로 지정했습니다. ' %2d'로 말이죠.
printf(" ") 함수도 공백칸수도 2칸으로 해서 크기를 맞췄네요.
[결과]
별표 대신에 문자를 넣으면 됩니다. 65='A'입니다. 그래서 65라는 값에서 순차적으로 1씩 증가하면 됩니다.
#include
#include
/*
int main(int argc, char *argv[]) {
int i,j;
int a;
printf("별표(*)의 수를 입력하시오?");
scanf("%d",&a);
for(i = 0; i < a; i++) {
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("*");
printf("\n");
}
system("pause");
return 0;
}
*/
int main(int argc, char *argv[]) {
int i,j;
int a;
char ch=1;
printf("마름모 *의 수를 입력하시오:");
scanf("%d",&a);
printf("\n");
a = a/2+1;
for(i = 0; i < a; i++) {
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("%c",ch++);
printf("\n");
}
for(i =a-2; i >= 0; i--) {
for(j = i+1; j < a; j++) printf(" ");
for(j = 0; j <= i*2; j++) printf("%c",ch--);
printf( "\n" );
}
system("pause");
return 0;
}
보시면 ch 문자변수를 선언하고 65값을 기준으로 1씩 증가하여 문자형 서식문자로 출력 하면 됩니다. 문자는 한칸이니 기존의 공백2칸을 다시 1칸으로 수정해야 정상적으로 출력 됩니다. 참고로 역삼각형은 1씩 감소해서 문자가 증가하다가 다시 감소하게 수정해 봤네요.
[결과]
마름모 별표를 출력하는 코딩이 어떻게 만들어졌는지 그 과정을 post에 담아 보았습니다. 그리고 마름모에서 끝나면 코딩의 실력이 늘지 않습니다. 모양 형태를 간단히 바꿔보거나 별표가 아닌 다른 숫자 or 문자로 재밌는 규칙의 형태로 모양을 만들어 보았습니다. 이렇게 하나의 실험 코딩에서도 다양한 실험을 추가로 계속 만들어 갈 수 있습니다. 이게 상상력이고 응용력입니다. 위 코딩은 일부에 지나지 않습니다. 위 코딩을 기준으로 또다른 모양과 상상력을 동원하여 다양한 결과물들을 만들어 보세요.