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)

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

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

몇가지 최적화 방법이 떠오르나.... 뭐.... 그건 차차 공부하시면 될듯...
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
67367 C언어 코딩한것좀 봐주세요 .. [5] 제로스2009 09/11/09 2009
67366 [수능]외국어영역풀때 너무 떨어요.. [11] StepByStep1870 09/11/09 1870
67365 윈도우7 정품을 샀는데 질문드립니다. [1] GoThree2152 09/11/09 2152
67364 30분후면 시작하는 맨유vs첼시전에서요 [3] ace_creat2434 09/11/09 2434
67363 컴퓨터에서 소리가 안나네요 ;; [1] 제르1722 09/11/08 1722
67361 기브스 이후 피부 변화에 따른 질문입니다. -털등 [2] JHfam2135 09/11/08 2135
67360 신종플루, 타미플루 복용 관련해서 질문 드립니다. [5] ComeAgain2444 09/11/08 2444
67358 MSN 이 자꾸 자동으로 로그아웃 하네요. [2] 화이트데이2472 09/11/08 2472
67356 남산타워 주차관련 질문입니다 ^^; [2] gL4874 09/11/08 4874
67355 SKT로 신규 하려는데 애니콜 터치폰으로 추천부탁드립니다. [6] 정태영2473 09/11/08 2473
67353 가격 대비 성능 좋은 노트북회사는 어딘가요? [3] 비내리는밤2250 09/11/08 2250
67351 정장 관련 질문입니다. [6] 히로하루2742 09/11/08 2742
67350 작은 차량 접촉 사고에 관한 질문입니다. [1] 날씨1983 09/11/08 1983
67349 워크래프트 3 레더 토너먼트 질문!! [2] A.ra.shi2273 09/11/08 2273
67347 인터넷 동영상 재생 질문입니다. 스카이_워커2089 09/11/08 2089
67346 노래방 도우미는 불법 아닌가요? [25] 핸드레이크15291 09/11/08 15291
67345 이런 프로그램을 짜고 싶은데요. [6] 오만과나태1983 09/11/08 1983
67344 H1N1 백신 안정성 문제 [8] MoreThanAir1969 09/11/08 1969
67343 외국에 사는 친구가, 사진 밑에 리플로, sup, bro! [7] 선미남편1948 09/11/08 1948
67341 공대대학원-군대문제 [6] FlyZerg2259 09/11/08 2259
67339 유럽 유학 관련 질문입니다. [1] 바카닉테란1708 09/11/08 1708
67338 윈도우 관련 질문입니다. [1] 화살표1725 09/11/08 1725
67337 리니지 해킹에 관련문의입니다. luvsic2109 09/11/08 2109
목록 이전 다음
댓글

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