PGR21.com
이전 질문 게시판은 새 글 쓰기를 막았습니다. [질문 게시판]을 이용바랍니다.
Date 2008/03/30 23:50:58
Name Haru
Subject 마방진 C 소스인데요 뭐가 문제인지 좀...
#include <stdio.h>
void main()
{
        int bae[10][10];
        int so, i, j, x, y;
        do
        {
                printf("몇행의 마방진을 만들겠습니까? ( 1~9사이 홀수만 입력) ");
                scanf("%d", &so);
        } while(so % 2 == 0 || so < 1 && so >= 10);
        for(i=0; i<so; i++)
        {
                for(j=0; j<so; j++)
                {
                        bae[i][j] = 0;
                }
        }
        x = 0;
        y = so/2;
        for(i=1; i<=so*so; i++)
        {
                bae[x][y] = i;
                x--;
                y++;
                for( ; x<0; )
                        x+=5;
                for( ; y>so-1; )
                        y-=5;
                if(bae[x][y] != 0)
                {
                        y = y-1;
                        x = x+2;
                }
        }
        for(i=0; i<so; i++)
        {
                for(j=0; j<so; j++)
                {
                        printf("3%d", bae[i][j]);
                }
                printf("\n");
        }
}

** 입력 데이터 다시 받는건 되는데 홀수 입력하면 그냥 튕기네요. 어디가 문제인가요?

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
상어이빨
08/03/30 23:54
수정 아이콘
while문 안이 짝수만 들어오게 되어있는 것 같은데..? OR니 또 이상하구.. while 문 안의 조건문이??

pgr 에는 C 언어 고수님들 많으시니 곧 답을 얻으실겁니다. ^^
하루빨리
08/03/30 23:54
수정 아이콘
so < 1 && so >= 10 이 구문이 문제내요. or 처리하세요. 그 어떤 정수도 1보다 작으면서 10보다 같거나 클 수 없잖아요.
하루빨리
08/03/30 23:56
수정 아이콘
근데 고친다고 해도 팅기는건 해결 안되네 ㅡ.ㅡ;;
08/03/31 00:03
수정 아이콘
While문 안은 수정 해봤는데, 튕기는걸 어떻게 해야 할지...뭐가 문제죠??
디버깅 하니까 중간에 데이터 넣다가 튕기는데;;
와후-만세
08/03/31 00:03
수정 아이콘
[수정] 윽.. 잘못된 답변 달았습니다
08/03/31 00:20
수정 아이콘
초기화 하고 다시 해도 데이터 입력이 에러나네요. 데이터 입력부분에 오류 좀 찾아봐 주세요.
하루빨리
08/03/31 00:23
수정 아이콘
일단 제 컴퓨터에서는 배열값 초기화를 하든 안하든 9에서만 팅기고 나머지는 값이 출력 됩니다. 근데 마방진이 안만들어지네요. 값도 30 이상들만 출력되고... 처리부분에 문제가 있는거 같습니다.
08/03/31 00:38
수정 아이콘
아.. 중간쯤에 데이터 이미 차지하고 있는 공간일 경우 입력이 이상해 지네요..;; x가 so값보다 2 더 클때도 있고..;;
어렵네요..;;
하루빨리
08/03/31 00:51
수정 아이콘
#include <stdio.h>

void main()

int bae[10][10];
int so, i, j, p;
do
{
printf("몇행의 마방진을 만들겠습니까? ( 1~9사이 홀수만 입력) ");
scanf("%d", &so);
while(so % 2 == 0 || so < 1 || so >= 10);





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

for (j=0; j<so; j++)
{
bae[i][j] = 0;

}

i = 0;
j = (int)(so/2);
bae[i][j] = 1;

for (p=2; p<= so * so; p++)

i = i - 1;
j = j + 1;
if ((i<0) && (j >= so))
{
i = i + 2;
j = j - 1;

if (i < 0)

i = so - 1;

if (j >= so)

j = 0;

if (bae[i][j] != 0)

i = i + 2;
j = j - 1;

bae[i][j] = p;
}

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

for(j=0; j<so; j++)
{
printf ("%d\t",bae[i][j]);

printf ("\n");
}
}

일단은 다음에서 PHP소스로 되어있는걸 C언어로 바꿨습니다. ㅡ.ㅡ;;
이건 제대로 작동하네요. 참고만 하세요.
하루빨리
08/03/31 00:52
수정 아이콘
그리고 30이상만 출력되는것은 printf("3%d", bae[i][j]); 이거 때문이네요 ㅡ.ㅡ; printf("%d\t", bae[i][j]); 이걸로 바꾸세요.
08/03/31 01:14
수정 아이콘
옛날에 비주얼베이직으론 마방진 만들어 봤는데 C언어는 명령어 자체를 하나도 모른다는...
꿀호떡a
08/03/31 01:29
수정 아이콘
x+=5, y-=5가 아니라 x+=so, y-=so구요. y=y-1에 의해서 y가 음수가 되거나, x=x+2에 의해서 x가 so를 넘어가버릴수가 있으니까 한번 더 체크해줘야 해요

for( ; x<0; )
x+=so;
for( ; y>so-1; )
y-=so;
if(bae[x][y] != 0)

y = y-1;
x = x+2;

for( ; y<0; )
y+=so;
for( ; x>so-1; )
x-=so;

가운데 부분을 위처럼 바꾸시면 됩니다
08/03/31 01:42
수정 아이콘
아~~ 마방진 중에 가장 오른쪽 가장 위칸이 x<0, y>=so 이거를 둘다 만족해서 잘 안되는 거였네요.
기존에 데이터가 있는 바람에 y가 -1이 되버리게 된다는..-_-;;
하루빨리님 올려주신 소스처럼 x<0, y>=so 둘다 만족할 때 대처를 따로 지정해야 겠네요.
그럼 늦은 밤인데 도와주신 분들 감사드립니다. 좋은 꿈 꾸세요~~
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
35343 주식매매방법좀갈켜주세요 [1] dd111884 08/03/31 1884
35342 동방신기 VS SS501,슈퍼주니어 & 천상지희VS소녀시대 가창력말인데요. [11] 넌좀굶어임마2184 08/03/31 2184
35341 이명박 대통령이 월급까지 기부한다고 했는데.. [9] 모십사2218 08/03/31 2218
35340 cpu최고작동온도에 대해 질문합니다.. [5] jinhosama1866 08/03/31 1866
35339 M.T 조장을 맡게 되었습니다. [2] 잔다르크2528 08/03/31 2528
35338 친박연대에 대해서... [8] 게레로1912 08/03/31 1912
35337 영어중에서 보어에 대한 질문입니다.. [5] worcs1887 08/03/31 1887
35336 페네르바체(축구)에 대해 자세히 아시는 분..? [3] 리틀세브첸코1937 08/03/31 1937
35335 북유럽신화에 대해 잘 나온 인터넷 싸이트.. 호랑이잡자1980 08/03/31 1980
35332 윈도우xp 오류보고 해결 방안 없나요?? 모르니~1847 08/03/31 1847
35331 mp3 추천좀 해주세요... [3] 에프마린2178 08/03/31 2178
35330 마방진 C 소스인데요 뭐가 문제인지 좀... [13] Haru2695 08/03/30 2695
35329 표 질문입니다. [1] buffon1793 08/03/30 1793
35328 휴대폰 관련 질문입니다! [3] 탈로맨티스트2112 08/03/30 2112
35327 인터넷강의 추천좀해주세요~~ [3] Juan1926 08/03/30 1926
35326 각 나라의 의료제도 관련 질문입니다^^:; [2] ElaN1619 08/03/30 1619
35325 교회다니는분께 질문요.. [6] 아레스2140 08/03/30 2140
35324 폰이 이상하네요... [3] 제갈공명토스1923 08/03/30 1923
35323 아버지께서 교통사고를 내셨습니다. [3] 하나더!2109 08/03/30 2109
35322 여의도 벚꽃 피는시기요~ snut1721 08/03/30 1721
35321 운전면허와 관련해서 법적 지식을 여쭙고 싶습니다. 起秀1518 08/03/30 1518
35320 이명박 대통령과 운전면허시험. [2] 핫타이크2111 08/03/30 2111
35319 파이썬 12시,2시 PvsP 6시,8시 PvsP 질문좀드릴게요! [1] 이상범2118 08/03/30 2118
목록 이전 다음
댓글

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