program el_meu_primer_programa write(*,*) 'Hello, cruel world !' end -------------------------------------------------------------------program segon_programa read(*,*) a write(*,*) 'Has entrat el numero ',a end -------------------------------------------------------------------program jaja read(*,*) a read(*,*) b read(*,*) c write(*,*) 'Has entrat els numeros ',a,b,c end -------------------------------------------------------------------- program dim dimension a(9) read(*,*) a(1) read(*,*) a(2) read(*,*) a(3) write(*,*) 'Has entrat els numeros ',a(1),a(2),a(3) end -------------------------------------------------------------------- program dim_and_do implicit double precision (A-H,O-Z) dimension a(9) * * Entrada de dades * do i=1,3 read(*,*) a(i) enddo * * Ara les ensenya * write(*,*) 'Has entrat els numeros :' do i=1,3 write(*,*) a(i) end do * end program modul parameter (maxdim=9) dimension v(maxdim) * * Entrada de dades * 1 write(*,*) ' Entra la dimensio del vector : ' read(*,*) n if (n.gt.maxdim.or.n.lt.1) then write(*,*) ' Entra la dimensio correctament ! c...' goto 1 end if do i=1,n write(*,*) 'Entra el component numero ',i,' : ' read(*,*) v(i) end do * * Calcula el modul * xmodul=0.0e0 do i=1,n xmodul=xmodul+v(i)**2 end do xmodul=sqrt(xmodul) * * Ensenya el resultat * write(*,*) 'El modul del vector ' write(*,*) (v(i),i=1,n) write(*,*) 'val ',xmodul END Entra la dimensio del vector : 3 Entra el component numero 1 : 0.5 Entra el component numero 2 : 0.5 Entra el component numero 3 : 0.5 El modul del vector 0.500000 0.500000 1.00000 val 1.22474 -------------------------------------------------------------------program modul implicit double precision (A-H,O-Z) parameter (maxdim=9) dimension v(maxdim) * * Entrada de dades * 1 write(*,*) ' Entra la dimensio del vector : ' read(*,*) n if (n.gt.maxdim.or.n.lt.1) then write(*,*) ' Entra la dimensio correctament ! c...' goto 1 end if do i=1,n write(*,*) 'Entra el component numero ',i,' : ' read(*,*) v(i) end do * * Calcula el modul * xmodul=0.0D0 do i=1,n xmodul=xmodul+v(i)**2 end do xmodul=sqrt(xmodul) * * Ensenya el resultat * write(*,*) 'El modul del vector ' write(*,*) (v(i),i=1,n) write(*,*) 'val ',xmodul END Entra la dimensio del vector : 3 Entra el component numero Entra el component numero Entra el component numero El modul del vector 1 2 3 : 0.5 : 0.5 : 0.5 val 0.500000000000000 1.22474487139159 0.500000000000000 1.00000000000000 program que_carai_fa implicit double precision (A-H,O-Z) parameter (maxdim=9) dimension v(maxdim) dimension w(maxdim) * * Entrada de dades * 1 write(*,*) ' Entra la dimensio dels vectors V i W: ' read(*,*) n if (n.gt.maxdim.or.n.lt.1) then write(*,*) ' Entra la dimensio correctament ! c...' goto 1 end if * write(*,*) ' Definicio del vector V:' do i=1,n write(*,*) 'Entra el component numero ',i,' : ' read(*,*) v(i) end do write(*,*) ' Definicio del vector W:' do i=1,n write(*,*) 'Entra el component numero ',i,' : ' read(*,*) w(i) end do * * Calcula * x=0.0e0 do i=1,n x=x+v(i)*w(i) end do * * Ensenya el resultat * write(*,*) 'El resultat es : ',x END Entra la dimensio dels vectors V i W: 3 Definicio del vector V: Entra el component numero 1 : 0.5 Entra el component numero 2 : 0.5 Entra el component numero 3 : 0.5 Definicio del vector W: Entra el component numero 1 : 1.0 Entra el component numero 2 : 2.0 Entra el component numero 3 : 0.33333333333 El resultat es : 1.66666666666650 program traça implicit double precision (A-H,O-Z) parameter (maxdim=9) dimension A(maxdim,maxdim) * * Entrada de dades * 1 write(*,*) ' Entra la dimensio de la matriu QUADRADA A : ' read(*,*) n if (n.gt.maxdim.or.n.lt.1) then write(*,*) ' Entra la dimensio correctament !' goto 1 end if do i=1,n do j=1,n write(*,*) 'Entra el component de la fila ',i write(*,*) ' i de la columna ',j,' : ' read(*,*) A(i,j) end do end do * * Calcula la traça * tra=0.0e0 do i=1,n tra=tra+A(i,i) end do * * Ensenya el resultat * write(*,*) ' La traça de la matriu ' do i=1,n write(*,*) (A(i,j),j=1,n) end do write(*,*) 'val ',tra END Entra la dimensio de la matriu QUADRADA A : 3 Entra el component de la fila 1 i de la columna 1 : 1 Entra el component de la fila 1 i de la columna 2 : 2 Entra el component de la fila 1 i de la columna 3 : 3 Entra el component de la fila 2 i de la columna 1 : 4 Entra el component de la fila 2 i de la columna 2 : 5 Entra el component de la fila 2 i de la columna 3 : 6 Entra el component de la fila 3 i de la columna 1 : 7 Entra el component de la fila 3 i de la columna 2 : 8 Entra el component de la fila 3 i de la columna 3 : 9 La traça de la matriu 1.00000000000000 2.00000000000000 4.00000000000000 5.00000000000000 7.00000000000000 8.00000000000000 val 15.0000000000000 3.00000000000000 6.00000000000000 9.00000000000000 program transposicio implicit double precision (A-H,O-Z) parameter (maxdim=9) dimension A(maxdim,maxdim) dimension At(maxdim,maxdim) * * Entrada de dades * 1 write(*,*) ' Entra la dimensio de la matriu QUADRADA A : ' read(*,*) n if (n.gt.maxdim.or.n.lt.1) then write(*,*) ' Entra la dimensio correctament !' goto 1 end if do i=1,n do j=1,n write(*,*) 'Entra el component de la fila ',i write(*,*) ' i de la columna ',j,' : ' read(*,*) A(i,j) end do end do * * Defineix la matriu At() com la transposta d'A * do i=1,n do j=1,n At(i,j)=A(j,i) end do end do * * Ensenya el resultat * write(*,*) ' La matriu transposta de ' do i=1,n write(*,*) (A(i,j),j=1,n) end do write(*,*) 'es ' do i=1,n write(*,*) (At(i,j),j=1,n) end do END Entra la dimensio de Entra el component de i de la Entra el component de i de la Entra el component de i de la Entra el component de i de la Entra el component de i de la Entra el component de i de la Entra el component de i de la Entra el component de i de la Entra el component de i de la La matriu transposta 1.00000000000000 4.00000000000000 7.00000000000000 es 1.00000000000000 2.00000000000000 3.00000000000000 la matriu QUADRADA A : 3 la fila 1 columna 1 : 1 la fila 1 columna 2 : 2 la fila 1 columna 3 : 3 la fila 2 columna 1 : 4 la fila 2 columna 2 : 5 la fila 2 columna 3 : 6 la fila 3 columna 1 : 7 la fila 3 columna 2 : 8 la fila 3 columna 3 : 9 de 2.00000000000000 5.00000000000000 8.00000000000000 4.00000000000000 5.00000000000000 6.00000000000000 3.00000000000000 6.00000000000000 9.00000000000000 7.00000000000000 8.00000000000000 9.00000000000000 program matrix product ! Programa que calcula C=AB implicit double precision (A-H,O-Z) parameter (maxdim=50) dimension A(maxdim,maxdim),B(maxdim,maxdim),C(maxdim,maxdim) * * Entrada de les dimensions de les matrius * 1 write(*,*) ' Entra la dimensio de la matriu A : ' read(*,*) na,ma write(*,*) ' Entra la dimensio de la matriu B : ' read(*,*) nb,mb if (ma.ne.nb) then write(*,*) ' Les dues matriu han de ser conformes.' write(*,*) ' Entra de nou les seves dimensions.' go to 1 else write(*,*) ' Les dimensions son correctes.' write(*,*) ' La dimensio de la matriu producte es:' write(*,*) na,mb end if * * Entra les matrius * write(*,*) ' Entra la matriu A :' do i=1,na do j=1,ma write(*,*) 'Entra el component de la fila ',i write(*,*) ' i de la columna ',j,' : ' read(*,*) A(i,j) end do end do write (*,*) write(*,*) ' Entra la matriu B :' do i=1,nb do j=1,mb write(*,*) 'Entra el component de la fila ',i write(*,*) ' i de la columna ',j,' : ' read(*,*) B(i,j) end do end do * * Ara calcula el producte * do i=1,na do j=1,mb C(i,j)=0.0d0 do k=1,ma C(i,j)=C(i,j)+A(i,k)*B(k,j) end do end do end do * * Ensenya el resultat * write(*,*) ' El producte de la matriu : ' do i=1,na write(*,*) (A(i,j),j=1,ma) end do write(*,*) 'per ' do i=1,nb write(*,*) (B(i,j),j=1,mb) end do write(*,*) 'es ' do i=1,na write(*,*) (C(i,j),j=1,mb) end do END Entra la dimensio de la matriu A : 2 3 Entra la dimensio de la matriu B : 3 3 Les dimensions son correctes. La dimensio de la matriu producte es: 2 3 Entra la matriu A : Entra el component de la fila i de la columna Entra el component de la fila i de la columna Entra el component de la fila i de la columna Entra el component de la fila i de la columna Entra el component de la fila i de la columna Entra el component de la fila i de la columna 1 1 1 2 1 3 2 1 2 2 2 3 : 1 : 2 : 3 : 4 : 5 : 6 Entra la matriu B : Entra el component de la fila 1 i de la columna 1 : 1 Entra el component de la fila 1 i de la columna 2 : 2 Entra el component de la fila 1 i de la columna 3 : 3 Entra el component de la fila 2 i de la columna 1 : 4 Entra el component de la fila 2 i de la columna 2 : 5 Entra el component de la fila 2 i de la columna 3 : 6 Entra el component de la fila 3 i de la columna 1 : 7 Entra el component de la fila 3 i de la columna 2 : 8 Entra el component de la fila 3 i de la columna 3 : 9 El producte de la matriu : 1.00000000000000 2.00000000000000 4.00000000000000 5.00000000000000 per 1.00000000000000 2.00000000000000 4.00000000000000 5.00000000000000 7.00000000000000 8.00000000000000 es 30.0000000000000 36.0000000000000 66.0000000000000 81.0000000000000 3.00000000000000 6.00000000000000 3.00000000000000 6.00000000000000 9.00000000000000 42.0000000000000 96.0000000000000 program descomposicio_de_txolesky_2x2 implicit double precision (A-H,O-Z) dimension S(2,2),T(2,2) * * Entrada de la matriu S * write(*,*) 'Entra la matriu S (2x2).' write(*,*) 'Nomes cal donar el triangle inferior.' do i=1,2 do j=1,i write(*,*) 'Entra el component de la fila ',i write(*,*) ' i de la columna ',j,' : ' read(*,*) S(i,j) S(j,i)=S(i,j) end do end do * * Ara calcula els elements de la matriu T * T(2,1)=0.0d0 * t(1,1)=sqrt(s(1,1)) * t(1,2)=s(1,2)/t(1,1) * x=s(2,2)-t(1,2)**2 if (x.lt.0.0d0) stop ' La matriu S no es definida positiva.' t(2,2)=sqrt(x) * * Ensenya el resultat * write(*,*) ' La matriu simetrica S: ' do i=1,2 write(*,*) (S(i,j),j=1,2) end do write(*,*) ' admet la descomposicio de Txolesky.' write(*,*) ' La matriu triangular superior T es : ' do i=1,2 write(*,*) (T(i,j),j=1,2) end do END Entra la matriu S (2x2). Nomes cal donar el triangle inferior. Entra el component de la fila 1 i de la columna 1 : 1.00 Entra el component de la fila 2 i de la columna 1 : 0.50 Entra el component de la fila 2 i de la columna 2 : 1.00 La matriu simetrica S: 1.00000000000000 0.500000000000000 0.500000000000000 1.00000000000000 admet la descomposicio de Txolesky. La matriu triangular superior T es : 1.00000000000000 0.500000000000000 0.000000000000000 0.866025403784439 t ( Utilitzant el programa del producte de matrius es pot comprobar que S=T T) program matrix product ! Programa que calcula C=AB implicit double precision (A-H,O-Z) parameter (maxdim=50) dimension A(maxdim,maxdim),B(maxdim,maxdim),C(maxdim,maxdim) * * Entrada de les dimensions de les matrius * 1 write(*,*) ' Entra la dimensio de la matriu A : ' read(*,*) na,ma write(*,*) ' Entra la dimensio de la matriu B : ' read(*,*) nb,mb if (ma.ne.nb) then write(*,*) ' Les dues matriu han de ser conformes.' write(*,*) ' Entra de nou les seves dimensions.' go to 1 else write(*,*) ' Les dimensions son correctes.' write(*,*) ' La dimensio de la matriu producte es:' write(*,*) na,mb end if * * Entra les matrius * write(*,*) ' Entra la matriu A :' do i=1,na do j=1,ma write(*,*) 'Entra el component de la fila ',i write(*,*) ' i de la columna ',j,' : ' read(*,*) A(i,j) end do end do * write (*,*) * write(*,*) ' Entra la matriu B :' do i=1,nb do j=1,mb write(*,*) 'Entra el component de la fila ',i write(*,*) ' i de la columna ',j,' : ' read(*,*) B(i,j) end do end do * * Ara calcula el producte * call producte_de_matrius(A,B,C,na,ma,mb) * * Ensenya el resultat * write(*,*) ' El producte de la matriu : ' do i=1,na write(*,*) (A(i,j),j=1,ma) end do write(*,*) 'per ' do i=1,nb write(*,*) (B(i,j),j=1,mb) end do write(*,*) 'es ' do i=1,na write(*,*) (C(i,j),j=1,mb) end do END *----------------------------------------------------------------------subroutine producte_de_matrius(A,B,C,na,ma,mb) *----------------------------------------------------------------------* Subrutina que calcula el producte de matrius C=AB * Les dimensions de les matrius A i B son naxma i maxmb. respectivament *----------------------------------------------------------------------implicit double precision (A-H,O-Z) parameter (maxdim=50) dimension A(maxdim,maxdim),B(maxdim,maxdim),C(maxdim,maxdim) do i=1,na do j=1,mb C(i,j)=0.0d0 do k=1,ma C(i,j)=C(i,j)+A(i,k)*B(k,j) end do end do end do END ( La sortida es identica a la del programa del producte de matrius de mes amunt ) *----------------------------------------------------------------------* Resolucio per Bolzano de l'equacio exp(-x)=x en [0,1] *----------------------------------------------------------------------implicit double precision (A-H,O-Z) solucio=bolzano(0.0d0,1.0d0) write(*,'('' La solucio es : X='',g14.6)') solucio END *----------------------------------------------------------------------DOUBLE PRECISION FUNCTION bolzano(a,b) implicit double precision (A-H,O-Z) * fa=valor_funcio(a) fb=valor_funcio(b) if (fa*fb.gt.0.0d0) STOP ' Potser no hi ha solucio en aquest inter +val' * do while (.true.) c=(a+b)/2 fc=valor_funcio(c) if (abs(fc).lt.1.0d-10) then bolzano=c return else if (fa*fc.lt.0.0d0) then b=c fb=fc else if (fb*fc.lt.0.0d0) then a=c fa=fc end if end do END *----------------------------------------------------------------------DOUBLE PRECISION FUNCTION valor_funcio(x) implicit double precision (A-H,O-Z) valor_funcio=dexp(-x)-x END *----------------------------------------------------------------------- SORTIDA DEL PROGRAMA: La solucio es : X= 0.567143 *----------------------------------------------------------------------* Integracio per la formula de simpson * * I = h/3 ( f(xo)+4f(x1)+2f(x2)+4f(x3)+2f(x4)+...+4f(xn-1)+f(xn)) *----------------------------------------------------------------------implicit double precision (A-H,O-Z) real*8 integral * integral=simpson(-1.0d0,1.0d0,1000) write(*,'('' La integral val : I='',g14.6)') integral END *----------------------------------------------------------------------*-* *----------------------------------------------------------------------real*8 function simpson(x0,xn,n) implicit double precision (a-h,o-z) * if (n/2*2.ne.n) n=n+1 ! Cal nombre de punts parell * h=(x0-xn)/n f=valor_funcio(x0)+valor_funcio(xn) do i=1,n,2 xi=x0+h*i f=f+4*valor_funcio(x) end do do i=2,npunts-2,2 xi=x0+h*i f=f+2*valor_funcio(x) end do simpson=f*h/3 end *----------------------------------------------------------------------*-* *----------------------------------------------------------------------DOUBLE PRECISION FUNCTION valor_funcio(x) implicit double precision (A-H,O-Z) valor_funcio=dexp(-x**2/2)*0.3989422 END *----------------------------------------------------------------------- SORTIDA DEL PROGRAMA: La integral val : I= 0.682689 *----------------------------------------------------------------------* Calcul del factorial d'un numero *----------------------------------------------------------------------write(*,*) ' Entra el numero : ' read(*,*) n * nfac_tipic=ntipic(n) nfac_recur=nrecur(n) * write(*,'('' El factorial iteratiu val '',i12)') nfac_tipic write(*,'('' El factorial recursiu val '',i12)') nfac_recur END *----------------------------------------------------------------------*-* *----------------------------------------------------------------------integer function ntipic(n) * ntipic=1 if (n.eq.1.or.n.eq.0) return ! Casos especials * do i=2,n ntipic=ntipic*i end do END *----------------------------------------------------------------------*-* *----------------------------------------------------------------------integer function nrecur(n) * if (n.eq.1.or.n.eq.0) then nrecur=1 return else nrecur=n*nrecur(n-1) ! Aixi: n! = n (n-1)! end if END *----------------------------------------------------------------------- SORTIDA DEL PROGRAMA: Entra el numero : 5 El factorial iteratiu val El factorial recursiu val 120 120 ************************************************************************ * * * DETERMINANT of a matrix. GAUSS method. * * * * N = Matrix dimension * * W = Matrix * * A = Auxiliary matrix * * * ************************************************************************ program gauss ************************************************************************ implicit double precision (a-h,o-z) integer fil,col parameter (zero=0.0d0,one=1.0d0,maxd=99) dimension a(maxd,maxd) * if (n.gt.maxd) stop 'Dimension exceeded in function DETERMINANT.' * * Defines matrix * read(*,*) n do i=1,n do j=1,n write(*,*) i,j,' : ' read(*,*) A(i,j) end do end do is=1 *----------------------* DIAGONALIZATION *----------------------do col=1,n if (a(col,col).eq.zero) then ind=col iv=0 do while (iv.eq.0) ind=ind+1 if (ind.gt.n) THEN determinant=zero goto 88 end if if (a(ind,col).ne.zero) then iv=1 do j=col,n aux=a(col,j) a(col,j)=a(ind,j) a(ind,j)=aux end do is=-is end if end do end if * do fil=col+1,n if (a(fil,col).ne.zero) then z=a(fil,col)/a(col,col) do icol=col+1,n a(fil,icol)=a(fil,icol)-a(col,icol)*z end do end if end do end do *-----------------* Determinant *-----------------determinant=is do i=1,n determinant=determinant*a(i,i) end do 88 write(*,*) determinant * end ***************************************************************************