      program prod_matvet
C  Programma che legge una matrice e un vettore e poi ne calcola il
C  prodotto utilizzando la subroutine matvet
      implicit none
      integer  n,i,j
      real*8   A(40,40),x(40),y(40)
C  Apertura delle unita' di Input/Output
      open(5,file='mat.dat')
      open(6,file='risul.ris')
C  Lettura della dimensione
      read(5,*) n
      write(6,*) n
C  Lettura di A e stampa sul file di Output
      write(6,*) 'A:'
      do i = 1,n
         read(5,*) (A(i,j),j=1,n)
         write(6,1) (A(i,j),j=1,n)
      enddo
C  Lettura di x e stampa sul file di Output
      read(5,*) (x(i),i=1,n)
      write(6,*) 'x:'
      write(6,*) (x(i),i=1,n)
C  Esecuzione del prodotto matrice vettore con la subroutine matvet
      call matvet(n,A,x,y)
C  Stampa del risultato
      write(6,*) 'y:'
      write(6,1) (y(i),i=1,n)
1     format(5e15.6)
      stop
      end
C
      subroutine matvet(m,B,z,r)
      implicit none
      integer  m,i,j
      real*8   B(40,40),z(40),r(40)
      do i = 1,m
         r(i) = 0.0
         do j = 1,m
            r(i) = r(i) + B(i,j)*z(j)
         enddo
      enddo
      return
      end