Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- PROGRAM LAB
- IMPLICIT NONE
- COMMON/size/x,n,m
- INTEGER x,n,m
- REAL array(100000)
- CALL GetSize()
- CALL ReadMatrix(array(1))
- CALL ReadVector(array(n*2+m+1))
- CALL Mult(array(1),array(n+1),array(n*2+1),
- *array(n*2+m+1),array(n*2+m+x+1))
- CALL OutMatrix(array(1),array(n+1),array(n*2+1))
- CALL Output(array(n*2+m+x+1))
- PAUSE
- STOP
- END
- SUBROUTINE GetSize()
- IMPLICIT NONE
- COMMON/size/x,n,m
- INTEGER n,m,r,x
- OPEN(1,FILE='size.txt',ERR=1)
- READ(1, *) x,n,m
- CLOSE(1)
- GOTO 2
- 1 PAUSE 'Error reading file.'
- STOP
- 2 CONTINUE
- END
- SUBROUTINE ReadMatrix(Xi)
- IMPLICIT NONE
- REAL Xi(*)
- COMMON/size/x,n,m
- INTEGER n,m,i,x,k
- OPEN(2,FILE='an.bin',access='direct',recl=4,err=1)
- k=1
- DO i=1,n,1
- READ(2,rec=k) Xi(i)
- k=k+1
- END DO
- k=1
- OPEN(3,FILE='ja.bin',access='direct',recl=4,err=1)
- DO i=1,n,1
- READ(3,rec=k) Xi(n+i)
- k=k+1
- END DO
- k=1
- OPEN(4,FILE='ia.bin',access='direct',recl=4,err=1)
- DO i=1,m
- READ(4,rec=k) Xi(n*2+i)
- k=k+1
- END DO
- GOTO 2
- 1 PAUSE 'Error reading file.'
- STOP
- 2 CONTINUE
- END
- SUBROUTINE ReadVector(Xi)
- IMPLICIT NONE
- COMMON/size/x,n,m
- INTEGER n,m,i,x,k
- REAL Xi(*)
- OPEN(5,FILE='vector.bin',access='direct',recl=4,err=1)
- k=1
- DO i=1,x,1
- READ(5,rec=k,END=2) Xi(i)
- k=k+1
- END DO
- CLOSE(6)
- GOTO 2
- 1 PAUSE 'Error reading file.'
- STOP
- 2 CONTINUE
- END
- SUBROUTINE Mult(an, ja, ia, v, result)
- IMPLICIT NONE
- COMMON/size/x,n,m
- INTEGER n,m,lim1,lim2,prom,i,j,x
- REAL an(n), ja(n), ia(m), v(x), result(x),k
- DO i=1,m,1
- lim1 = ia(i)
- lim2 = ia(i+1) - 1
- DO j=lim1,lim2,1
- prom=ja(j)
- result(i)=result(i)+v(prom)*an(j)
- k = result(i)
- END DO
- END DO
- RETURN
- END
- SUBROUTINE OutMatrix(an, ja, ia)
- IMPLICIT NONE
- COMMON/size/x,n,m
- INTEGER n,m,i,j,x,q,c,w
- REAL an(n), ja(n), ia(m)
- OPEN (7,FILE='outMatrix.txt')
- q = 1
- DO j=1,x,1
- IF(ia(j) .LT. ia(j+1)) THEN
- c = 1
- ELSE
- c = 0
- ENDIF
- w = ia(j+1) - ia(j)
- DO i=1,x,1
- IF(ja(q).EQ.i.AND.c.EQ.1.AND.w.GT.0) THEN
- WRITE (7,30) an(q)
- q = q + 1
- w = w - 1
- ELSE
- WRITE (7,30) 0.0
- ENDIF
- ENDDO
- WRITE (7,20)
- ENDDO
- CLOSE(7)
- 20 FORMAT (A1, ' ')
- 30 FORMAT (E10.4, ' ' \)
- END
- SUBROUTINE Output(Xi)
- IMPLICIT NONE
- COMMON/size/x,n,m
- REAL Xi(*)
- INTEGER n,m,i,x
- OPEN (6,FILE='output.txt')
- DO i=1,x,1
- WRITE (6,20) Xi(i)
- END DO
- CLOSE(6)
- 20 FORMAT (E10.4)
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement