3. ESTRUTURA DE PROGRAMAÇÃO:
IF ( TESTE )
THEN
Programa 1
ELSE
Programa
END IF
DO contador=inicio,fim,passo
Programa
END DO
DO WHILE (TESTE)
Programa
END DO
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
4. COMANDOS ADICIONAIS:
COMANDO DESCRIÇÃO
COMMON/nome/ lista de variáveis Armazenamento de variáveis em memória
INCLUDE ‘nome.ext’ Inclui no programa declarações de variáveis externas
DATA nome/valor1,valor2,.../ Atribuir valores a variáveis
NOME [ ALLOCATABLE] (:,:) Declaração dinâmica de matriz
ALLOCATE (NOME(L,C) Definindo o tamanho da matriz
DALLOCATE (NOME) Desalocar Matriz
(Mat(i,j),i=1,4) Looping sem o DO – Só para Matrizes
5. EXEMPLOS
use msimsl
implicit none
INTEGER KORDER
REAL BGSTEP, DERV, fcn, TOL, X
external fcn
X = 3.0
BGSTEP = 0.2
TOL = 0.01
KORDER = 1
DERV = DERIV(FCN,KORDER,X,BGSTEP,TOL)
WRITE (*,99999) DERV
99999 FORMAT (/, 1X, A primeira derivada é: ', 1PE10.3)
END
Program integral
use msimsl
A = -0.25
B = 0.75
ERRABS = 0.0
ERRREL = 1*e-30
CALL QDAGS (F, A, B, ERRABS, ERRREL, RESULT, ERREST)
3) Executa um programa:
Program executa
USE MSFLIB
ia = runqq('write.exe','readme.doc')
end
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
4) Cálculo de Auto valor e auto vetor:
Program Instabilidade
use msimsl
integer n,ldainv,ldevec
REAL*8 A(3,3), AINV(3,3)
COMPLEX*16 EVAL(3), EVEC(3,3)
n=3
ldainv=3
ldevec=3
! Matriz A
! A = ( 1.0 3.0 3.0)
! ( 1.0 3.0 4.0)
! ( 1.0 4.0 3.0)
DATA A/1.0,1.0,1.0,3.0,3.0,4.0,3.0,4.0,3.0/
!CALCULA A INVERSA DE A
CALL DLINRG (N, A, N, AINV, LDAINV)
!IMPRIME OS RESULTADOS
CALL DWRCRN ('Auto valor', 1, N, EVAL, 1, 0)
CALL DWRCRN ('Auto vetor', N, N, EVEC, LDEVEC, 0)
End
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
5) Operação com textos:
Program textos
character(20) a
end
program character_real
implicit none
end
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
7) Produto interno:
Program produto_interno
use msimsl
implicit none
real*8 x,a(3),b(3),c(2),d(2,3)
x=dot_product(a,b)
write(*,*) x
pause 'reis'
c=sum(d,dim=2)
write(*,*)c(1),c(2),c(2)
pause 'reis'
end
Program Gauss
use MSIMSL
PARAMETER (N=4)
INTEGER I, IWEIGH, NFIX
REAL*8 ALPHA, BETA1, QW(N), QX(N), QXFIX(2)
IWEIGH = 1
ALPHA = 0.0
BETA1 = 0.0
NFIX = 0
QXFIX(1) = -1.0
QXFIX(2) = 1.0
CALL DGQRUL (N, IWEIGH, ALPHA, BETA1, NFIX, QXFIX, QX, QW)
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
End
Program raiz
use msimsl
implicit none
NROOT=2
ALLOCATE(INFO(NROOT))
ALLOCATE(X(NROOT))
ALLOCATE(XGUESS(NROOT))
XGUESS=0D0
EPS = 1.0E-5
ERRABS = 1.0E-5
ERRREL = 1.0E-5
ETA = 1.0E-2
ITMAX = 100
CALL DZREAL (F, ERRABS, ERRREL, EPS, ETA, NROOT, ITMAX, XGUESS,&
X, INFO)
END
END
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
implicit none
A = -10.0 !inicio
B = 0.0 !fim
ERRABS = 0.0
ERRREL = 0.001
MAXFN = 100
END
PROGRAM ORDEM
USE MSIMSL
IMPLICIT NONE
INTEGER N,j
PARAMETER (N=4)
12) Resolução de sistema linear , número aleatório, saída formatada para arquivo:
Program Matriz_aleatorio
use msimsl
implicit none
INTEGER nl,ipath,lda,i,j
Real*8, ALLOCATABLE :: a(:,:),b(:,:),x(:,:)
OPEN(1,FILE='sistema.TXT',status='replace')
a=100*A
b=100*B
ipath=1
lda=nl
Call DLSLRG (nl, A, nl, B, IPATH, X) !Resolução do sistema
do i=1,nl
write(1,'(/,\)')
do j=1,nl
Write(1,10) a(i,j)
10 format (f10.4,\)
enddo
enddo
write(1,'(/)')
write(1,*) 'Matriz B'
write(1,*)
do i=1,nl
Write(1,12) b(i,1)
12 format(sp,f10.4)
enddo
write(1,*)
write(1,*) 'Matriz x'
write(1,*)
do i=1,nl
Write(1,13) x(i,1)
13 format(sp,f10.4)
enddo
END
Program Interpola_copy
use msimsl
INTEGER LDA, LDB, N,incx,incy,nu
PARAMETER (LDA=3, LDB=3, N=3)
REAL*8 MATA(LDA,LDA),DX(N), DY(N),resposta,valor
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
! Set values for A
! A = ( 1.0 4.0 7.0 )
! ( 2.0 5.0 8.0 )
! ( 3.0 6.0 9.0 )
END
Program notas
Implicit none
Type aula
character nome*5
character disciplina*15
Real*8 valornota
endtype
arquivo1=aula('reis','informatica',10)
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
write(*,1) arquivo1%nome,arquivo1%disciplina,arquivo1%valornota
1 format (1x,a5,1x,a15,1x,f5.1)
end
Program Erros_arquivo
use msimsl
integer err
if (err==0) then
else
end
Program Erros_imsl
use msimsl
INTEGER N
PARAMETER (N=2)
write(*,*) 'terminou'
end
__________________________________________
subroutine sis (a,b,x)
Program inteiro_fracionario
character*8 a
logical b
a='35'
b=index(a,'.')
If (b) then
else
write(*,*) 'O numero e inteiro'
endif
PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS
CAMPUS DE POÇOS DE CALDAS
FACULDADE DE ENGENHARIA CIVIL – INFORMÁTICA
COMANDOS ÚTEIS DA LINGUAGEM FORTRAN
Prof. Simone Siqueira dos Reis
end
Program erro_matematicos
USE DFLIB
INTERFACE
FUNCTION Tipo_erro (sig,excec)
!DEC$ ATTRIBUTES C :: Tipo_erro
INTEGER(4) Tipo_erro
INTEGER(2) sig,excec
END FUNCTION
END INTERFACE
INTEGER(4) iret,err
REAL*8 r1, r2
else
endif
Call inverso(r1,r2)
END
Real*8 r1,r2
r2=1/r1
end
! Tipo de exceção
FUNCTION Tipo_erro (sig,excec)
!DEC$ ATTRIBUTES C :: Tipo_erro
USE DFLIB
INTEGER(2) sig,excec
SELECT CASE(excec)
CASE( FPE$INVALID )
STOP 'NUMERO INVALIDO'
CASE( FPE$DENORMAL )
STOP ' NUMERO DESNOMALIZADO'
CASE( FPE$ZERODIVIDE )
STOP ' DIVISAO POR ZERO'
CASE( FPE$OVERFLOW )
STOP ' OVERFLOW'
CASE( FPE$UNDERFLOW )
STOP ' UNDERFLOW'
CASE( FPE$INEXACT )
STOP ' PRECISAO INESATA'
CASE DEFAULT
STOP ' ERRO NAO AVALIADO'
END SELECT
Tipo_erro = 1
END