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 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
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 write(,) 'Entra el component numero ',i,' : ' read(,) v(i) Calcula el modul xmodul=0.0e0 xmodul=xmodul+v(i)2 xmodul=sqrt(xmodul) Ensenya el resultat write(,) 'El modul del vector ' write(,) (v(i),i=1,n) write(,) 'val ',xmodul 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 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 write(,) 'Entra el component numero ',i,' : ' read(,) v(i) Calcula el modul xmodul=0.0d0 xmodul=xmodul+v(i)2 xmodul=sqrt(xmodul) Ensenya el resultat write(,) 'El modul del vector ' write(,) (v(i),i=1,n) write(,) 'val ',xmodul 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.500000000000000 0.500000000000000 1.00000000000000 val 1.22474487139159
program que_carai_fa 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 write(,) ' Definicio del vector V:' write(,) 'Entra el component numero ',i,' : ' read(,) v(i) write(,) ' Definicio del vector W:' write(,) 'Entra el component numero ',i,' : ' read(,) w(i) Calcula x=0.0e0 x=x+v(i)w(i) Ensenya el resultat write(,) 'El resultat es : ',x 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 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 do j=1,n write(,) 'Entra el component de la fila ',i write(,) ' read(,) A(i,j) Calcula la traça tra=0.0e0 tra=tra+a(i,i) Ensenya el resultat write(,) ' La traça de la matriu ' write(,) (A(i,j),j=1,n) write(,) 'val ',tra i de la columna ',j,' : ' Entra la dimensio de la matriu QUADRADA A : 3 i de la columna 1 : 1 i de la columna 2 : 2 i de la columna 3 : 3 i de la columna 1 : 4 i de la columna 2 : 5 i de la columna 3 : 6 i de la columna 1 : 7 i de la columna 2 : 8 i de la columna 3 : 9 La traça de la matriu 1.00000000000000 2.00000000000000 3.00000000000000 4.00000000000000 5.00000000000000 6.00000000000000 7.00000000000000 8.00000000000000 9.00000000000000 val 15.0000000000000
program transposicio 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 do j=1,n write(,) 'Entra el component de la fila ',i write(,) ' read(,) A(i,j) Defineix la matriu At() com la transposta d'a do j=1,n At(i,j)=A(j,i) Ensenya el resultat write(,) ' La matriu transposta de ' write(,) (A(i,j),j=1,n) write(,) 'es ' write(,) (At(i,j),j=1,n) i de la columna ',j,' : ' Entra la dimensio de la matriu QUADRADA A : 3 i de la columna 1 : 1 i de la columna 2 : 2 i de la columna 3 : 3 i de la columna 1 : 4 i de la columna 2 : 5 i de la columna 3 : 6 i de la columna 1 : 7 i de la columna 2 : 8 i de la columna 3 : 9 La matriu transposta de 1.00000000000000 2.00000000000000 3.00000000000000 4.00000000000000 5.00000000000000 6.00000000000000 7.00000000000000 8.00000000000000 9.00000000000000 es 1.00000000000000 4.00000000000000 7.00000000000000 2.00000000000000 5.00000000000000 8.00000000000000 3.00000000000000 6.00000000000000 9.00000000000000
program matrix product! Programa que calcula C=AB 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 Entra les matrius write(,) ' Entra la matriu A :' a do j=1,ma write(,) 'Entra el component de la fila ',i write(,) ' i de la columna ',j,' : ' read(,) A(i,j) write (,) write(,) ' Entra la matriu B :' b do j=1,mb write(,) 'Entra el component de la fila ',i write(,) ' read(,) B(i,j) Ara calcula el producte a 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) Ensenya el resultat write(,) ' El producte de la matriu : ' a write(,) (A(i,j),j=1,ma) write(,) 'per ' b write(,) (B(i,j),j=1,mb) write(,) 'es ' a write(,) (C(i,j),j=1,mb) i de la columna ',j,' : '
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 : i de la columna 1 : 1 i de la columna 2 : 2 i de la columna 3 : 3 i de la columna 1 : 4 i de la columna 2 : 5 i de la columna 3 : 6 Entra la matriu B : i de la columna 1 : 1 i de la columna 2 : 2 i de la columna 3 : 3 i de la columna 1 : 4 i de la columna 2 : 5 i de la columna 3 : 6 i de la columna 1 : 7 i de la columna 2 : 8 i de la columna 3 : 9 El producte de la matriu : 1.00000000000000 2.00000000000000 3.00000000000000 4.00000000000000 5.00000000000000 6.00000000000000 per 1.00000000000000 2.00000000000000 3.00000000000000 4.00000000000000 5.00000000000000 6.00000000000000 7.00000000000000 8.00000000000000 9.00000000000000 es 30.0000000000000 36.0000000000000 42.0000000000000 66.0000000000000 81.0000000000000 96.0000000000000
program descomposicio_de_txolesky_2x2 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(,) ' read(,) S(i,j) S(j,i)=S(i,j) i de la columna ',j,' : ' 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) write(,) ' admet la descomposicio de Txolesky.' write(,) ' La matriu triangular superior T es : ' do i=1,2 write(,) (T(i,j),j=1,2) Entra la matriu S (2x2). Nomes cal donar el triangle inferior. i de la columna 1 : 1.00 i de la columna 1 : 0.50 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 ( Utilitzant el programa del producte de matrius es pot comprobar que S=T t T)
program matrix product! Programa que calcula C=AB 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 Entra les matrius write(,) ' Entra la matriu A :' a do j=1,ma write(,) 'Entra el component de la fila ',i write(,) ' i de la columna ',j,' : ' read(,) A(i,j) write (,) write(,) ' Entra la matriu B :' b do j=1,mb write(,) 'Entra el component de la fila ',i write(,) ' read(,) B(i,j) i de la columna ',j,' : ' Ara calcula el producte call producte_de_matrius(a,b,c,na,ma,mb) Ensenya el resultat write(,) ' El producte de la matriu : ' a write(,) (A(i,j),j=1,ma) write(,) 'per ' b write(,) (B(i,j),j=1,mb) write(,) 'es ' a write(,) (C(i,j),j=1,mb) ----------------------------------------------------------------------- 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 ----------------------------------------------------------------------- parameter (maxdim=50) dimension A(maxdim,maxdim),B(maxdim,maxdim),C(maxdim,maxdim) a 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)
( 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] ----------------------------------------------------------------------- solucio=bolzano(0.0d0,1.0d0) write(,'('' La solucio es : X='',g14.6)') solucio ----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION bolzano(a,b) fa=valor_funcio(a) fb=valor_funcio(b) if (fafb.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 (fafc.lt.0.0d0) then b=c fb=fc else if (fbfc.lt.0.0d0) then a=c fa=fc ----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION valor_funcio(x) valor_funcio=dexp(-x)-x ----------------------------------------------------------------------- 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)) ----------------------------------------------------------------------- real8 integral integral=simpson(-1.0d0,1.0d0,1000) write(,'('' La integral val : I='',g14.6)') integral ----------------------------------------------------------------------- - ----------------------------------------------------------------------- real8 function simpson(x0,xn,n) implicit double precision (a-h,o-z) if (n/22.ne.n) n=n+1! Cal nombre de punts parell h=(x0-xn)/n f=valor_funcio(x0)+valor_funcio(xn),2 xi=x0+hi f=f+4valor_funcio(x) do i=2,npunts-2,2 xi=x0+hi f=f+2valor_funcio(x) simpson=fh/3 end ----------------------------------------------------------------------- - ----------------------------------------------------------------------- DOUBLE PRECISION FUNCTION valor_funcio(x) valor_funcio=dexp(-x2/2)0.3989422 ----------------------------------------------------------------------- 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 ----------------------------------------------------------------------- - ----------------------------------------------------------------------- integer function ntipic(n) ntipic=1 if (n.eq.1.or.n.eq.0) return! Casos especials do i=2,n ntipic=ntipici ----------------------------------------------------------------------- - ----------------------------------------------------------------------- integer function nrecur(n) if (n.eq.1.or.n.eq.0) then nrecur=1 return else nrecur=nnrecur(n-1)! Aixi: n! = n (n-1)! ----------------------------------------------------------------------- SORTIDA DEL PROGRAMA: Entra el numero : 5 El factorial iteratiu val 120 El factorial recursiu val 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 j=1,n write(,) i,j,' : ' read(,) A(i,j) 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 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 is=-is 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 ------------------ Determinant ------------------ determinant=is determinant=determinanta(i,i) 88 write(,) determinant end