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
수정 아이콘
아닙니다.;; 저도 시험기간중이라 테스트를 못해봐서 말이죠 ;; 큰 도움 못드려 죄송하네요. 혹시라도 하시다 잘 안되시면
rediori@nate.com 으로 네이트온을 애용해 주세요.;;
클레오빡돌아
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
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
32477 [질문] 저그의 대 테란전 기본적인 빌드좀 가르쳐 주시면 안될까요? [8] EsPoRTSZZang4250 07/10/24 4250 0
32476 [질문]이번에 스타크래프트 리그를 기획하게 됐는데요. [9] 껀후이3987 07/10/24 3987 0
32475 [FreeBBS]ㅇㅇ/의 독백(4) - 현재형 인간 [2] ㅇㅇ/4270 07/10/24 4270 0
32474 [질문]포맷 도중 전원 꺼짐에 블루스크린 Hard error [5] DynamicToss4576 07/10/24 4576 0
32473 [질문]전학에관해 [8] 키스미4113 07/10/24 4113 0
32471 @@ 프로리그 최고의 Starter 는 누구 ? [11] 메딕아빠4941 07/10/24 4941 0
32469 몇몇 오락프로그램에 대한 잡답입니다. [37] 정테란5139 07/10/24 5139 0
32468 [Red]Nada....이제 부활입니다. [47] DarkSide6061 07/10/24 6061 0
32467 괴물이 힘이 없네요.... [25] 아마프로5674 07/10/24 5674 0
32466 가림토! 프로토스의 할아버지가 되어라 [43] 점쟁이6404 07/10/24 6404 0
32464 [yoRR의 토막수필.#36]여담. 두번째. [4] 윤여광4453 07/10/24 4453 0
32463 [질문]정확한 영어해석좀 해주세요 [16] 짱머거4530 07/10/24 4530 0
32461 [질문] 닥터왓슨 오류요~ [12] 라울리스타4530 07/10/23 4530 0
32460 오늘 수영장에 갔는데 왠 츠자가 ;;; [28] Eva0106912 07/10/23 6912 0
32459 여러분들의 뇌리에 남아 있는 역전 경기는 어떤게 있으신가요? [39] DEICIDE5836 07/10/23 5836 0
32458 [FreeBBS] 영화계 두 큰별이 다시 함께 하는군요. [10] 리콜한방4571 07/10/23 4571 0
32457 삼성전자 Khan.. Nostalgia [6] TaCuro4525 07/10/23 4525 0
32456 아 르까프 강하네요 [13] Akira4931 07/10/23 4931 0
32455 '팀플 본좌'의 몰락. [16] 잃어버린기억6865 07/10/23 6865 0
32454 한숨만 나오네요. [24] SKY926188 07/10/23 6188 0
32453 후와.. 이런 역전이 가능이나 한가요? [18] 벨리어스7437 07/10/23 7437 0
32452 맵핵이 필요합니다. [12] 信主NISSI5441 07/10/23 5441 0
32451 스타 2관련) 동영상의 재검토로부터 알 수 있는 유닛정보들 모음. [3] newromancer4094 07/10/23 4094 0
목록 이전 다음
댓글

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