C언어 마름모
#include <stdio.h>
void ex1();
void ex2();
void main()
{
printf("마름모출력 \n");
ex1();
printf("\n모래시계 \n");
ex2();
}
void ex1(){
/*변수선언
cnt: 출력할 배열의 열의 시작값결정
cnt1: cnt로부터 열의 시작값을 받아서 값을 증감하여 차례대로 배열방을 방문
cnt2: 출력의 횟수결정을 위한변수
m: row값 i와 cnt2값을 계산하여 출력횟수를 결정한다.*/
int i,j,k,mat[5][5];
int cnt =2, cnt1=0, cnt2=0, m;
/*배열값 초기화*/
for(i=0; i<5; i++){
for(j=0; j<5; j++){
mat[i][j] = ++cnt1; //여기서 cnt1은 배열의 초기화를 위해사용
}
}
cnt1=0; //다시 cnt1값을 초기화
//여기서부터 마름모 반을 갈라 위에 삼각형 만들기
for(i=0; i<3; i++){ //0~2행
for(j=3; i<j; j--){ //공백출력
printf(" \0");
}
cnt1 = cnt; //맨처음 출력할 위치는 (0,2)다 cnt값이 현재 2 이값을 cnt1에 넣는다.
m = i+cnt2; //출력횟수 계산
for(k=0; k<=m; k++){
printf("%3d",mat[i][cnt1]);
++cnt1;
}
cnt--; //위에 삼각형은 출력할 열의 시작점이 (0,2) (1,1) (2,0) 2,1,0 순으로 값이 줄어든다.
cnt2++;
printf("\n");
}
//여기서부턴 마름모 나머지 역삼각형 만들기
cnt=1; //아래 삼각형은 출력할 열의 시작점이 (3,1) (4,2) 1, 2 순으로 값이 늘어난다.
cnt2=0;
for(i=3; i<5; i++){ // 3~4행
for(j=1; j<i; j++){
printf(" \0");
}
cnt1 = cnt;
m = 5-i-cnt2;
for(k=0; k<=m; k++){
printf("%3d",mat[i][cnt1]);
++cnt1;
}
cnt++;
cnt2++;
printf("\n");
}
}
void ex2(){
int i,j,k,mat[5][5];
int cnt =0, cnt1=0, cnt2=0, m;
/*배열값 초기화*/
for(i=0; i<5; i++){
for(j=0; j<5; j++){
mat[i][j] = ++cnt1;
}
}
/*모래시계 첫번째 삼각형은 0행에서 열의 출력순서가 0번째에서 시작한다. (0,0) (1,1) (2,2) 열이 0,1,2 순으로 증가한다.*/
for(i=0; i<3; i++){
for(j=0; j<=i; j++){
printf(" \0");
}
cnt1=cnt;
m= 5-i-cnt2; // (5 - 0 - 0 ) ( 5 - 1 - 1 ) ( 5 - 2 - 2) => 5 , 3 , 1
for(k=0; k<m; k++){ //m은 출력횟수를 결정한다.
printf("%3d",mat[i][cnt1]);
cnt1++;
}
cnt++;
cnt2++;
printf("\n");
}
/*모래시계 아래 삼각형은 3행에서 열의 출력순서가 1번째에서 시작한다. (3,1) (4,0) 열이 1, 0 순으로 감소한다.*/
cnt=1; cnt2=0; //변수들 초기화
for(i=3; i<5; i++){
for(j=i; j<5; j++){
printf(" \0");
}
cnt1=cnt;
m = i+cnt2; // ( 3 + 0 ) ( 4 + 1 ) => 3 , 5
for(k=0; k<m; k++){
printf("%3d",mat[i][cnt1]);
cnt1++;
}
cnt--;
cnt2++;
printf("\n");
}
}