PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2009/11/09 01:46:39
Name 제로스
Subject C언어 코딩한것좀 봐주세요 ..
4x4배열을 선언하고 배열요소들을 90도씩 이동하는 프로그램인데요 ..
제가 보기에도 조잡(?)하게 짠거같아서 .. 짜놓고봐도 뭔가 찜찜한데요 ..
C언어 고수분들이 보기엔 어떠신가요?;

#include <stdio.h>

int main(){
        int arr[4][4]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
        int arr1[4][4];
        int i,j,n;

        for(i=0;i<4;i++){
                for(j=0;j<4;j++)
                        printf("%3d",arr[i][j]);
                printf("\n");
        }
        
        for(n=0;n<3;n++){
                for(i=0;i<4;i++){
                        for(j=0;j<4;j++)
                                arr1[i][j]=arr[i][j];
                }
                for(i=0;i<4;i++){
                        arr[i][3]=arr1[0][i];
                        arr[i][2]=arr1[1][i];
                        arr[i][1]=arr1[2][i];
                        arr[i][0]=arr1[3][i];
                }        
                printf("\n");

                for(i=0;i<4;i++){
                        for(j=0;j<4;j++)
                                printf("%3d",arr[i][j]);
                        printf("\n");
                }
        }
        
        return 0;
}

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
고지를향하여
09/11/09 02:01
수정 아이콘
지적해드리자면, 배열에 숫자를 넣어서 선언하기 보다는 #define SIZE 4 이런씩으로 해주고
int arr[SIZE][SIZE] 이런 식으로 처리하는게 좋습니다. 후에 프로그램 4*4 뿐만 아니라 3*3 5*5 변환도 쉽게 되고요

처음 대입할때 =
1,2,3,4,5,6,7,8,9... 이런씩보다는
이중 for문 돌려서 arr[i][j] = i*SIZE + j+1; 이런씩으로 깔끔하게 대입하는게 좋겠죠

for(i=0;i<4;i++){
arr[i][3]=arr1[0][i];
arr[i][2]=arr1[1][i];
arr[i][1]=arr1[2][i];
arr[i][0]=arr1[3][i];


이 구문도 이중 포문 쓰시면 arr[i][SIZE-j-1] = arr[j][i]; 머 이런씩으로 훨씩 깔끔하게 처리 가능합니다. 그외에는 굳이 눈에 띄는 부분은 없네요.
제로스
09/11/09 02:02
수정 아이콘
고지를향하여님// 감사합니다!
09/11/09 02:47
수정 아이콘
여,여긴 어디??
09/11/09 03:11
수정 아이콘
동일한 코드가 2번 사용되었네요.
printMatrix()와 같은 별도의 함수로 빼주시는 것도 좋지 않을까 싶네요.

for(i=0;i<4;i++)

for(j=0;j<4;j++)
printf("%3d",arr[i][j]);
printf("\n");
09/11/09 09:54
수정 아이콘
로직은 안봐서 모르겠지만...... 두번째 for 가 왜 들어간는지 모르겠네요.

for(n=0;n<3;n++)
... 요게...

그리고 요 코드는

for(i=0;i<4;i++){
for(j=0;j<4;j++)
arr1[i][j]=arr[i][j];


아마 arr1 을 임시로 사용하기 위해서 일듯 한데....

현실적으로
arr = 회전 (arr)
보다는
arr1 = 회전(arr)

이렇게 사용하는 것이 좋을 듯 합니다.

따라서 저 부분은 없어져도 될듯. 그렇게 되면 변환 루프가 반대가 되겠죠.

몇가지 최적화 방법이 떠오르나.... 뭐.... 그건 차차 공부하시면 될듯...
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
67368 이런 상태를 간단하게 뭐라고 말하죠? [8] 모모홍차2425 09/11/09 2425
67367 C언어 코딩한것좀 봐주세요 .. [5] 제로스2003 09/11/09 2003
67366 [수능]외국어영역풀때 너무 떨어요.. [11] StepByStep1862 09/11/09 1862
67365 윈도우7 정품을 샀는데 질문드립니다. [1] GoThree2144 09/11/09 2144
67364 30분후면 시작하는 맨유vs첼시전에서요 [3] ace_creat2425 09/11/09 2425
67363 컴퓨터에서 소리가 안나네요 ;; [1] 제르1713 09/11/08 1713
67361 기브스 이후 피부 변화에 따른 질문입니다. -털등 [2] JHfam2124 09/11/08 2124
67360 신종플루, 타미플루 복용 관련해서 질문 드립니다. [5] ComeAgain2436 09/11/08 2436
67358 MSN 이 자꾸 자동으로 로그아웃 하네요. [2] 화이트데이2461 09/11/08 2461
67356 남산타워 주차관련 질문입니다 ^^; [2] gL4864 09/11/08 4864
67355 SKT로 신규 하려는데 애니콜 터치폰으로 추천부탁드립니다. [6] 정태영2466 09/11/08 2466
67353 가격 대비 성능 좋은 노트북회사는 어딘가요? [3] 비내리는밤2242 09/11/08 2242
67351 정장 관련 질문입니다. [6] 히로하루2730 09/11/08 2730
67350 작은 차량 접촉 사고에 관한 질문입니다. [1] 날씨1972 09/11/08 1972
67349 워크래프트 3 레더 토너먼트 질문!! [2] A.ra.shi2263 09/11/08 2263
67347 인터넷 동영상 재생 질문입니다. 스카이_워커2077 09/11/08 2077
67346 노래방 도우미는 불법 아닌가요? [25] 핸드레이크15265 09/11/08 15265
67345 이런 프로그램을 짜고 싶은데요. [6] 오만과나태1973 09/11/08 1973
67344 H1N1 백신 안정성 문제 [8] MoreThanAir1959 09/11/08 1959
67343 외국에 사는 친구가, 사진 밑에 리플로, sup, bro! [7] 선미남편1938 09/11/08 1938
67341 공대대학원-군대문제 [6] FlyZerg2245 09/11/08 2245
67339 유럽 유학 관련 질문입니다. [1] 바카닉테란1696 09/11/08 1696
67338 윈도우 관련 질문입니다. [1] 화살표1720 09/11/08 1720
목록 이전 다음
댓글

+ : 최근 6시간내에 달린 댓글
+ : 최근 12시간내에 달린 댓글
맨 위로