program el_meu_primer_programa write(*,*) `Hello, cruel world

Anuncio
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
***************************************************************************
Descargar