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
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
33668 밑에 어떤 분이 댓글중에 궁금해 하셨던 팬카페에 쓴 조용호선수 글입니다. [22] 샤라라링7529 08/01/21 7529 0
33666 드디어 악령의 숲에 대한 게임단의 불만이 기사화 되었네요. [79] 행복한 날들9359 08/01/21 9359 0
33665 뮤탈, 당하고만 있을텐가? [114] Akira10174 08/01/21 10174 1
33664 데자뷰 [14] TheNoName5343 08/01/21 5343 2
33663 천재의 발악 [31] 선비테란6174 08/01/21 6174 1
33662 In da PGR. [3] Ace of Base5757 08/01/21 5757 0
33660 그가 떠나간 빈자리... [10] 하성훈5845 08/01/21 5845 0
33659 만두님의 글의 리플을 읽고... 다크아칸에 대한 생각 [43] 피부암통키6112 08/01/21 6112 0
33658 오늘 한상봉 vs 고인규 [35] luvavril6058 08/01/20 6058 0
33657 난데없지만...저그 대 프로토스의 양상에 대해서 질문~ [12] 만두4346 08/01/20 4346 0
33656 한상봉은 저주를 거부했고, 이윤열은 명패를 거부했다. [37] The xian9622 08/01/20 9622 4
33654 MSL 이제 16강이다. 흥미요소는 어떤것이 있는가? [25] 삼삼한Stay5405 08/01/20 5405 0
33653 한상봉선수 시원하네요. [86] SKY927992 08/01/20 7992 1
33652 곰 TV 2007 MSL 시즌4 32강 을 즐기고 있습니다. [24] 하늘하늘4517 08/01/20 4517 0
33651 조만간 E-Sports에도 도핑 테스트가 도입될지도 모르겠군요. [17] Nimphet8841 08/01/20 8841 0
33650 조용호, 기억하고 계십니까 [58] Judas Pain14736 08/01/20 14736 44
33649 서지훈선수가.. CJ 엔트리에 들지못하는.ㅠㅠ 결승전에는 나올수있을려나.. 나름 서지훈 선수 분석 [16] scv역러쉬..6387 08/01/20 6387 0
33648 (사진첨부)2008 년에도 동족전만 봐야하나요? 프로리그운행방식을 협회에서 회의중이라고 합니다. [48] 하늘리차6582 08/01/20 6582 1
33647 CJ 팬도아닌.. MBC게임 팬도아닌.. hyungiloveoov의 프로리그 플레이오프 감상기.. [8] hyungiloveoov5953 08/01/20 5953 0
33646 LECAF VS CJ FINAL 예상엔트리 (삼성칸은 어느팀을 원할지???) [35] 처음느낌6211 08/01/19 6211 0
33645 엠비씨 히어로...과연 고석현 때문에 진것일까? [65] 모짜르트9952 08/01/19 9952 2
33644 CJ, 제 8의 멤버 [21] pianissimo7399 08/01/19 7399 0
33643 승리의 CJ로 함께 달려요~ [24] jgooon4493 08/01/19 4493 0
목록 이전 다음
댓글

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