PGR21.com
- 경험기, 프리뷰, 리뷰, 기록 분석, 패치 노트 등을 올리실 수 있습니다.
Date 2007/10/22 02:14:32
Name Lonelyjuni
Subject [질문]도대체 이 c언어는 무엇을 말하는 걸까요?
/*
다음은 메모리 할당을 이용하여 a,b 행렬의 값을 파일에서 읽어 들이는 프로그램이다.

  a*b의 값을 파일에 출력하는 프로그램을 작성하시오.
*/

#include <stdio.h>
#include <stdlib.h>

void main()
{        
        int *a, *b, *out;
        int c,d,f,k,i,e,j;
        FILE *fa;
        FILE *fb;
        FILE *fc;
        char v='\n';

        fa=fopen("matrix.txt","r");
        fscanf(fa,"%d %d",&c,&d);
        printf("%d X %d\n",c,d);

        a=(int*)malloc(sizeof(int)*c*d); // 메모리 할당

        for(i=0; i<c; i++)
        {
                for(j=0; j<d; j++)
                {
                        fscanf(fa,"%d",&a[i*d+j]);
                        printf("%d ",a[i*d+j]);
                }
        printf("\n");
        }
        printf("\n");

        fb=fopen("matrix1.txt","r");
        fscanf(fb,"%d %d",&e,&f);
        printf("%d X %d\n",e,f);

        b=(int*)malloc(sizeof(int)*e*f);

        for(i=0; i<e; i++)
        {
                for(j=0; j<f; j++)
                {
                        fscanf(fb,"%d",&b[i*f+j]);
                        printf("%d ",b[i*d+j]);
                }
        printf("\n");
        }

        printf("\n");


        free(a);
        free(b); // memory free
        fclose(fa);
        fclose(fb);

}

교수가 포인터에 대한 개념만 대충 설명해주고, 그냥 이렇게 과제를 던져주고는
도망가버렸습니다. 이를 어찌하런지요.

정말 제가 수업시간에 안 들고 놀아서가 아닌,
교수가 스스로 공부하라며 이렇게 던져주고 갑니다.

이 코드에 대한 약간의 해석과 풀이에 대한 힌트라도 주시면 감사하겠습니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
07/10/22 02:20
수정 아이콘
음 일단 저는 프로그래밍 전공자가 아니고 고등학교 수업시간에 C++ 간단히 공부한 사람이구요.
무엇을 위한 프로그램인지는 맨 윗 두 줄에 있는 주석 부분에 잘 나와 있네요.
행렬 정보가 matrix.txt 파일에 있네요. 첫째 줄에는 행숫자 열숫자가 있고 둘째줄부터는 행렬의 성분들이 나열되어 있구요.
두 번째 행렬은 matrix1.txt 파일에 있네요. 형식은 동일합니다.
이 두 행렬의 성분들을 화면에 출력하고 프로그램은 끝나네요.
Lonelyjuni
07/10/22 02:29
수정 아이콘
아, 그렇군요. 약간은 이해할 수 있을 듯 합니다. 그러면 A X B 행렬을 구하려면 어떻게 해야 할까요. 항을 일일히 짝지어 주기에는 너무 복잡한거 같은데;;
07/10/22 02:42
수정 아이콘
<a href=http://en.wikipedia.org/wiki/Matrix_multiplication target=_blank>http://en.wikipedia.org/wiki/Matrix_multiplication</a> 참고하세요. 저도 헷갈려서 그냥 퍼 왔네요.
여기에서는 A행렬 (=(c,d)행렬)과 B행렬 (=(e,f)행렬)을 곱했을 때 (d=e이어야 함)
AB(ij)=Sigma(r from 1 to d)(a(ir)*b(rj))라고 나와 있네요.
for 문을 i,j,r에 관하여 각각 돌려 여차저차하다보면 될 것 같습니다.
07/10/22 02:46
수정 아이콘
일단.. C by F 행렬을 만드셔야 겠네요.
out = (int*)malloc(sizeof(int)*c*f); 로 잡으시고.
fc = fopen("matrix2.txt","w+"); 로 파일을 열어 주시고.
나머지는 행렬의 곱을 구하셔서 하시면 됩니다. for문 중첩 2번이면 해결 됩니다. ^^; 끝까지 알려 드리면 숙제가 안될듯 하니.. 음.
일단 행렬 하나하나를 그리셔서 결과 행렬의 값들이 어떤 연산으로 구해지나 종이에 먼저 써보시는게 큰 도움이 될것 같네요.
Lonelyjuni
07/10/22 02:49
수정 아이콘
제가 3 by 3 행렬을 곱할 때

for(i=0; i<3; i++)
for(j=0; j<3; j++)
for(k=0; k<3; k++)
c[3*i+j] += a[3*i+k]*b[3*k+j];

이 코드를 만들어 냈는데, 바로 이 문제가 나와서 도통 감을 잡을 수가 없네요;; 하..하하..;;
너무 갭이 커..커요.. 위에 숫자 3 을 변수로 바꾸어 주면 되는건가요?
07/10/22 02:54
수정 아이콘
아.. 간단하게하고 싶으시면..for문 중첩 3번이 편할 듯 하네요
그렇죠! 3을 변수로 바꿔 주시면 됩니다. 적절한 변수로요 ^^;
Lonelyjuni
07/10/22 02:56
수정 아이콘
어떻게 변수를 바꿔야 줘야 할지 도통 모르겠네요.
첫번째를 c, 두번째를 f 로 바꾸는게 맞을런지요?
어느정도 노력을 하고 질문하는게 도리라지만, 저..정말 감이 안오는.. 하하..;ㅇ;; (내일이 이 과목 시험&과제체줄인데)
07/10/22 03:08
수정 아이콘
for(i = 0;i<c;i++)

for(j = 0;j<f;j++)
{
for(k = 0;k<e;k++)
{
out[ i*c + j ] = a[ i*c + k] * b[ k*e + j ]

}
}

이런 식으로 해야 할 것 같습니다만 음.. 테스트를 안해봐서 모르겠네요; out[] 초기화 해주시는거 잊지 말아 주시기 바랍니다.;
Lonelyjuni
07/10/22 03:18
수정 아이콘
어어;; 첫번째 행렬을 1 2 3 4 로 하고 두번째 행렬을 1 0 0 1 로 했는데 출력 행렬은 0 2 0 4 가 나와버리네요! 흠-
07/10/22 03:32
수정 아이콘
위 소스에 오타 있네요;; out[ i*c + j ] += a[ i*c + k] * b[ k*e + j ] ; 로 바꿔 주세요
Lonelyjuni
07/10/22 03:33
수정 아이콘
왜 -84215044 이런 값들이 출력되는거죠? 에;;
07/10/22 03:36
수정 아이콘
out 을 초기화를 안해 주셔서 그런거 같습니다만..
Lonelyjuni
07/10/22 03:39
수정 아이콘
out 초기화를 시키려면 어떻게 해야 하는지요. Dark 님께 자꾸 구걸 하는 듯 해서 죄송합니다. 흑흑. out 의 모든 값을 0 으로 놓고 시작하라는 말씀이신가요? out 은 행렬인데 전부 0 으로 놓을 수 있으려나;
07/10/22 03:45
수정 아이콘
아닙니다 ^^; out은 c*f*sizeof(int) 만큼 메모리를 차지 하고 있습니다. 그 메모리에는 전에 쓰던 값들이 남아 있을 수 있기 때문에 초기화를 반드시 해줘야 하지요.
for문 으로 전부 0으로 바꿀 수 있을거에요 . c*f만큼의 인덱스니.. for(i = 0;i<c*f;i++) out[i] = 0; 이면 되지 않을까 싶습니다.
Lonelyjuni
07/10/22 03:47
수정 아이콘
감사합니다. 혼자 해본다고 저는 일일히 c 에 대해서 f 에 대해서 하나씩 for 문을 쓰고 있었는데 간단한 방법이 있었군요.
fc 파일로 추출하는건 혼자 열심히 해 보겠습니다. dark 님 늦은 시각에 도움 말씀 정말정말 감사드려요.
07/10/22 03:48
수정 아이콘
아닙니다.;; 저도 시험기간중이라 테스트를 못해봐서 말이죠 ;; 큰 도움 못드려 죄송하네요. 혹시라도 하시다 잘 안되시면
[email protected] 으로 네이트온을 애용해 주세요.;;
클레오빡돌아
07/10/22 10:18
수정 아이콘
와..;; 전 이거 해석자체가 안되네요;; 많이 부족하다는걸 느껴요;;;

fa=fopen("matrix.txt","r"); <- 이건 뭘 뜻하는거죠?? ;; 라이브러리 함수인가요??;;
higher templar
07/10/22 11:38
수정 아이콘
클레오빡돌아님// 파일 읽으라는 함수 같네요 ^^
MoreThanAir
07/10/22 13:01
수정 아이콘
매트릭스의 곱셈은 원래 n^3의 complexity를 가집니다. for루프 3번 중첩하세요...^^
구경플토
07/10/22 14:57
수정 아이콘
클레오빡돌아님, matrix.txt 파일을 읽기 위해 open하는겁니다.
07/10/22 22:22
수정 아이콘
MoreThanAir님// 참고로 O(n^3)보다 작은 알고리즘도 있습니다 ^^
랑맨 (최일권)
07/10/23 00:56
수정 아이콘
모야... 이거... 무서워... ㅜㅜ
녹차원
07/10/24 14:24
수정 아이콘
모야... 이거... 무서워... ㅜㅜ 2
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
33300 휴....... 마재윤....... [57] SKY9211789 07/12/23 11789 0
33296 [L.O.T.의 쉬어가기] 더 많은 땀을 흘려야... [1] Love.of.Tears.6056 07/12/23 6056 0
33295 2007년 대미를 장식한 저그. 이제동. [18] Akira5593 07/12/23 5593 4
33294 생산력과 물량 [22] 불타는 저글링6548 07/12/23 6548 2
33293 2007 Ever배 스타리그 결승전 사진과 후기 -ㅂ-)/ [16] Eva0106560 07/12/23 6560 4
33292 이 쯤에서 보는 이제동 선수의 전적 분석 [13] 진리탐구자5500 07/12/23 5500 0
33291 07'12'22 에버 07 OSL 결승 감상평 [15] Judas Pain7717 07/12/23 7717 8
33290 이제동 선수가 안겨다준 즐거움. 송병구 선수가 안겨다준 실망감. [6] 이고스트5782 07/12/23 5782 0
33289 송병구, 비수 더블에서 무엇을 간과했나? [29] ArcanumToss8159 07/12/22 8159 6
33288 이제동 선수 별명에 대하여.. [50] 대추나무사람5110 07/12/22 5110 0
33287 LecafOz n Die_Jaedong, 이제동 [14] kama6877 07/12/22 6877 4
33286 김택용의 테란전 송병구의 저그전 [20] 메렁탱크6529 07/12/22 6529 0
33285 김택용선수가 가져왔을줄 알았던 저플전의 변화..... [21] Rush본좌6140 07/12/22 6140 0
33283 2007 에버 스타리그 결승전 이벤트 ... 10만원의 주인공은 ? [15] 메딕아빠5031 07/12/22 5031 0
33282 유한맵만이 스타크래프트다? [34] Arata_Striker6822 07/12/22 6822 0
33281 슈퍼파이트 주최측은 뭐하나!! 갈증을 풀어다오!! [33] 몽달곰팅5451 07/12/22 5451 0
33280 르까프의 2번째 로열로더의 탄생을 축하합니다! [11] SkPJi4917 07/12/22 4917 0
33279 이로써 2007년 온게임넷은 마준동의 것. [11] SKY924749 07/12/22 4749 0
33278 이게 다 김택용때문이다. [52] ISUN7135 07/12/22 7135 0
33277 페르소나에서의 해법은 커세어-리버? [228] 매콤한맛6327 07/12/22 6327 0
33276 재미로 보는 타로카드 - EVER2007 결승전 송병구 VS 이제동 [30] *블랙홀*5884 07/12/22 5884 0
33275 @@ 2007 에버 스타리그 결승전 ... 피지알러들의 예상은 ? [6] 메딕아빠4716 07/12/22 4716 0
33274 곰TV MSL 시즌4 서바이버토너먼트 결산 [5] 프렐루드4469 07/12/22 4469 0
목록 이전 다음
댓글

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