아까질문한건 알아서 자체 해결하고 조금더 심화과정으로 들어가서 서브루틴+파일에서 읽어 오기를 추가했는데<br>교수님이 주신 프린터+인터넷 검색을 해봐도 물음표가 가시질 않네요.<br>물론 에러 메시지도요....ㅜ<br><br><br> program arrmtp<br>c 행렬 A와 B를 곱한 결과물을 도출하기 위한 식입니다.<br> <br> integer ia, ja, ib, jb, n, m, multi, q1<br>c i와 j는 A,B행렬의 열과 행의 크기를 위한 변수입니다.<br>c n,m은 A,B에 직접 행렬값을 입력시 루프문을 위한 변수이자 multi와 함께 곱셈계산에 사용됩니다.<br>c q1은 키보드 입력값과 비교를 통해 1이면 행렬값 직접입력, 미입력시 행렬값을 파일에서 읽어옵니다.<br> real a(10,10), b(10,10), C(10,10) ,adat, bdat<br>c 행렬 A, B, C는 실수값으로 최대10X10의 크기를 갖도록 지정했습니다.<br> n=0<br> m=0<br> <br> open(100,file='output.dat')<br> open(200,file='input.dat')<br> open(300,file='input2.dat')<br>c 아웃풋은 최종적인 결과물이 저장되 파일로 오픈합니다.<br>c 인풋은 행렬A값이 기록되어 있을 파일이며 파일내 저장형태는 다음과 같습니다.<br><div style="text-align:left;"><img width="641" height="303" src="http://thimg.todayhumor.co.kr/upfile/201503/1427463300MPy9MTWciDsyea5aRtE.png" alt="인풋.PNG" style="border:medium none;"></div>c 인풋2는 행렬B값이 기록되어 있을 파일이며 파일내 저장형태는 인풋과 동일합니다.<br> <br> write(*,*) 'Array i and j maximum is 10'<br><br> write(*,*) 'Array A is i size, ia ='<br> read (*,*) ja<br> write(*,*) 'Array A is j size, ja ='<br> read (*,*) ia<br>c 행렬A의 행과 열의 크기를 입력받는 란입니다.<br>c 출력과 입력 변수가 일치하지 않는 것은 추후 출력 형태를 1행을 먼저 출력하고 다음열로 넘어가게 하기 위해서 입니다. <br><br> write(*,*) 'Array B is i size, ib ='<br> read (*,*) jb<br> write(*,*) 'Array B is j size, jb ='<br> read (*,*) ib<br> <br> if(ia .NE. jb) then<br>c 행렬의 곱셈을 위해 필요한 기본 조건을 만족하지 않는 경우 계산 불가능을 출력하도록 했습니다.<br> write(*,*) 'Array A and B is not multiply'<br><br> else<br> write(*,*) 'input : data typing=1, file load=x'<br> read(*,*) q1<br>c 계산이 가능한 경우 변수 q1을 입력받아 행렬값을 타이핑, 또는 파일에서 읽어오는 조건을 지정했습니다.<br> <br> if(q1 .Eq. 1) then<br>c 단순하게 q1이 1이면 타이핑, 그외는 몽땅 파일로드로 하기 위한 조건문입니다.<br> do 10 n = 1,ia,1<br> m=0<br> do 20 m = 1,ja,1<br> write(*,400) 'Array A(i,j) adat', m, n<br> 400 format (A,I2,I2)<br> read(*,*) adat<br> a(n,m) = adat<br> 20 continue<br> 10 continue<br>c 타이핑을 선택한 경우 A행렬의 값을 앞에서 입력한 행렬의 크기에 따라 입력하는 루프문입니다.<br> <br> n=0<br> m=0<br><br> do 30 n = 1,ib,1<br> m=0<br> do 40 m = 1,jb,1<br> write(*,500) 'Array B(i,j) bdat', m, n<br> 500 format (A,I2,I2)<br> read(*,*) bdat<br> b(n,m) = bdat<br> 40 continue<br> 30 continue <br>c 타이핑을 선택한 경우 B행렬의 값을 앞에서 입력한 행렬의 크기에 따라 입력하는 루프문입니다. <br> <br> call amtlb<br>c 행렬의 곱셈을 서브루틴으로 계산하고 불러올때 쓴다는데 모르겠습니다.(도와주세요ㅜㅜ)<br><br> write(100,600) 'Array C is =', c<br> write(200,600) 'Array A is =', a<br> write(300,600) 'Array B is =', b<br> 600 format (A,/,10(F4.1,X,X))<br>c 최종적으로 3행렬을 오픈되어있는 파일에 기록하기 위한 출력문입니다.<br>c 원래는 goto문으로 보내려 했는데 안 되서 필요한 곳마다 붙여 넣었습니다. <br> <br> else<br> <br> write(*,*) 'input.dat=a, input2.dat=b'<br> read(200,*) ((a(i, j), j=1,10), i=1,10)<br> read(300,*) ((b(i, j), j=1,10), i=1,10)<br>c 파일에서 불러 올때라고 찾아서 보는데 이게 맞는 걸까요???<br><br> call amtlb<br>c 타이핑때와 마찬가지로 서브루틴으로부터 행렬곱을 받아오기 위함입니다.<br><br> write(100,600) 'Array C is =', c<br> write(200,600) 'Array A is =', a<br> write(300,600) 'Array B is =', b<br> 600 format (A,/,10(F4.1,X,X))<br> <br> endif <br><br> endif <br><br> stop<br> end<br> <br> <br> subroutine amtpb<br>c 행렬 A와 B의 곱셈을 서브루틴으로 따로 빼낸 부분입니다.<br> <br> integer ib, ja, m, n, multi<br> real c(10,10)<br> m=0<br> n=0<br> mult=0<br>c 서부루틴의 변수는 가변수 어쩌고가 있는데 그걸 어떻게 사용하는지를 모르는 관계로<br>c 기존과 동일한 변수를 사용하였습니다.<br><br> do 50 m = 1,ib,1<br> n=0<br> do 60 n = 1,ja,1<br> multi=0<br> do 70 multi = 1,ia,1<br> c(m,n)=c(m,n)+b(m,multi)*a(multi,n)<br> 70 continue<br> 60 continue<br> 50 continue<br> <br> return<br> end<br><br>...여기까지 제가 아는데까진 다 쓴거 같아요.<br>솔직히 교수님이 뭐 가르쳐 주신것도 없고 서브루틴으로 해봐라고 해서 못해가도 상관은 없는데<br>시간을 투자할 수록 오기가 생겨서요.<br>꼭 해가고 싶습니다. 도와주세요!!!<br>
댓글 분란 또는 분쟁 때문에 전체 댓글이 블라인드 처리되었습니다.