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
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
32428 [질문]도대체 이 c언어는 무엇을 말하는 걸까요? [23] Lonelyjuni4126 07/10/22 4126 0
32427 [FreeBBS][Photo]검은 밤을 하얗게 지새고 있는 요즘... [10] BluSkai3721 07/10/22 3721 0
32424 [freeBBS] ㅇㅇ/의 독백(3) - 대한민국은 나아가는가 [2] ㅇㅇ/3837 07/10/21 3837 0
32423 괴물의 VS나다전과 그외 테테전... [25] 정테란4022 07/10/21 4022 0
32422 MSL, 저그 vs 테란 숙명의 다전제 전쟁 역사 [7] 리콜한방4138 07/10/21 4138 0
32421 [질문]저그 각각의 빌드에관한 질문입니다 [5] 한번말할때천3966 07/10/21 3966 0
32420 IEST 대회, 워크와 스타 부문이 모두 마무리가 되었습니다. [16] 벨리어스4271 07/10/21 4271 0
32419 [질문]맞춤법 질문입니다. [6] 짱머거3911 07/10/21 3911 0
32418 프로토스 VS 마재윤. 4년 6개월간의 전쟁의 결과. [11] Leeka6774 07/10/21 6774 0
32415 [질문]서든어택2차마스터리그 bgm을 알려주세요[첨부파일] 후치5309 07/10/21 5309 0
32414 천재 이윤열. 드디어 십 갑자의 내공을 쌓다. [8] The xian5106 07/10/21 5106 0
32413 이번 MSL 8강중 가장 기대되는 한상봉 VS 김택용 [37] 처음느낌4447 07/10/21 4447 0
32412 김정민해설은 프로리그만 해설 [58] 정테란5518 07/10/21 5518 0
32411 [질문] 축구 하이라이트 동영상 시청 가능한 사이트 [8] gonia9114470 07/10/21 4470 0
32408 2007년 10월 21일자 PP랭킹 [3] 프렐루드4072 07/10/21 4072 0
32407 온게임넷 스타리그도 좀 손을 봐야 하지 않을까요? [44] 정테란5235 07/10/21 5235 0
32406 진영수 이프로 부족했다 [11] 도마뱀4319 07/10/21 4319 0
32405 맵 페르소나 [5] 信主NISSI4718 07/10/21 4718 0
32404 [Free BBS] 네, 대한민국에서 ‘중용’은 불가능합니다. [17] youngwon4604 07/10/21 4604 0
32403 남은 양대리거 [3] D.TASADAR3703 07/10/21 3703 0
32401 MSL, 테란 vs 프로토스의 다전제 전쟁 역사 (수정함) [18] 리콜한방4930 07/10/21 4930 0
32400 몽상가의 Last Battle. [14] SKY923993 07/10/21 3993 0
32399 시대를 따라 변화된 테란의 역사. [7] ISUN4333 07/10/21 4333 0
목록 이전 다음
댓글

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