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
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회 추천
32449 2007시즌 송병구의 대테란전 분석. [19] Leeka5022 07/10/23 5022 0
32448 스타크래프트 2 Q&A 18번째 분량 [2] Tail4236 07/10/23 4236 0
32447 최근 10경기 Force 그래프 [4] 프렐루드4089 07/10/23 4089 0
32446 [질문] 유용한 윈도우 유틸리티 프로그램 추천해 주세요~ [13] 질럿을사랑한4242 07/10/23 4242 0
32445 기적의 게이머, 단 한 발자국만을 남긴채 쓰러져버린 슬픈 로망에 대하여. [11] legend6286 07/10/23 6286 0
32443 김택용의 자기완성 [32] Judas Pain8534 07/10/23 8534 1
32442 [질문]노트북 추천좀 부탁드립니다. [7] cherry4037 07/10/23 4037 0
32440 [War3]AWL 선전은.... 아니구요.... World of Lip Warc 재밌네요(계층유머?) [18] 프렐루드3939 07/10/22 3939 0
32439 [Free BBS]한국 시리즈 1차전 보셨나요? [53] pritana4800 07/10/22 4800 0
32438 [질문] 공군의 잇따른 패배... 다른 스포츠의 상무의 실력은 어떻습니까? [20] 노력의천재5165 07/10/22 5165 0
32437 [질문] BIS규제에 대해서 질문이요~ [6] Vermouth4009 07/10/22 4009 0
32436 [질문] Z vs P 에서 프토가 투게이트 했을때 [16] Espio4675 07/10/22 4675 0
32435 IEST 2007 결승전 4, 5경기 진영수선수 개인화면 [60] 연합한국7683 07/10/22 7683 0
32434 [관전평] OSL EVER 2007 스타리그 16강 3주차 [5] ls4351 07/10/22 4351 0
32433 스타챌린지 2007 시즌 2 일정 [25] 회전목마5625 07/10/22 5625 0
32432 ALCS 7차전- 보스턴 vs 클리블랜드 [38] 지포스24284 07/10/22 4284 0
32430 [질문] 옵저버 질문요! [16] cald4619 07/10/22 4619 0
32429 카스퍼스키 비명소리에 깜짝놀라신 분들 봐주세요 [7] Mal_rA5369 07/10/22 5369 0
32428 [질문]도대체 이 c언어는 무엇을 말하는 걸까요? [23] Lonelyjuni4141 07/10/22 4141 0
32427 [FreeBBS][Photo]검은 밤을 하얗게 지새고 있는 요즘... [10] BluSkai3733 07/10/22 3733 0
32424 [freeBBS] ㅇㅇ/의 독백(3) - 대한민국은 나아가는가 [2] ㅇㅇ/3850 07/10/21 3850 0
32423 괴물의 VS나다전과 그외 테테전... [25] 정테란4036 07/10/21 4036 0
32422 MSL, 저그 vs 테란 숙명의 다전제 전쟁 역사 [7] 리콜한방4149 07/10/21 4149 0
목록 이전 다음
댓글

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