Você está na página 1de 16

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
1. COMANDOS:
COMANDO FUNÇÃO
Rewind(unidade) Posiciona o ponteiro no começo do arquivo
Dmod(x,y) Retorna o resto da divisão de x por y
Dsqrt(x) Retorna a Raiz Quadrada de x
Transpose(H) Retorna a Transposta da Matriz H
Matmul(H,G) Retorna o produto da matriz H pela Matriz G
DsinD(x) Seno do ângulo x
DcosD(x) Coseno do ângulo x
DtanD(x) Tangente do ângulo x
Alog10(x) Logaritmo na base 10
Alog(x) Logaritmo neperiano
Exp(x) Exponencial de X
Dabs(x) Retorna o valor absoluto de x
Dsign(x,y) Retorna x positivo se y>0 e x negativo se y<0
Dmax1(x1,x2,...) Retorna o maior valor da lista
Dmin1(x1,x2,...) Retorna o menor valor da lista
Dint(x) Trunca o valor de x
Idnint(x) Arredonda o valor de X
Ceiling(x) Retorna o menor numero inteiro maior que x
Floor(x) Retorna o maior número inteiro menor que x
Iw Formatar valores inteiros – w tamanho do campo
Fw.d Formatar valores reais - d número de casas decimais
Ew.dEe Formatar valores reais com expoente – e casas decimais do expoente
Aw Formatar caracteres
nX Deixa n posições em Branco
SP Escreve o sinal de + onde é opcional
/ Muda de linha
\ Começa a escrever onde parou
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
2. ARQUIVOS:

Open (unidade,FILE=’nome.ext’,status=’new’, iostat=err)


Close(unidade)

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

1) Cálculo de Derivada numérica:


Program derivada

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

REAL FUNCTION FCN (X)


REAL X
FCN = 2*sin(x)*cos(x)
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
2) Cálculo de Integral numérica:

Program integral

use msimsl

REAL A, B, ERRABS, ERREST, ERRREL,F, RESULT


EXTERNAL F

A = -0.25
B = 0.75

ERRABS = 0.0
ERRREL = 1*e-30
CALL QDAGS (F, A, B, ERRABS, ERRREL, RESULT, ERREST)

WRITE (*,99999) RESULT, ERREST


99999 FORMAT (' Calculado =', F8.3, 13X, /, /,' Erro estimado =', 1PE10.3, 6X)
END

REAL FUNCTION F (X)


REAL X
F = (-1/x)*(0.75-x)
RETURN
END

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 A MATRIZ INVERSA


CALL DWRRRN ('AINV', N, N, AINV, LDAINV, 0)

!CALCULA O AUTO VALOR( EVAL) AUTO VETOR (EVEC) DE A


CALL DEVCRG (N, A, N, EVAL, EVEC, LDEVEC)

!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

a= trim('aaaa ')// 'bbbb'


print*, a
pause 'Digite uma tecla'

end

6) Conversão de número em texto e vice-versa:

program character_real

implicit none

character (255) text,text1


real r
integer i

!Conversão do caractere "text" em um real "r": read(text, *) r


!**************************************************************
text = '10.2'
read (text, *) r
write (*,*) 'O string continha o valor: ', r
!**************************************************************

!Conversão do real "r" em um caractere "text": write(text, *) r


!**************************************************************
r = 25.4
write (text,*) r
text1 = 'O real foi convertido no string: ' // trim(text)
write (*,*) 'A string contem o valor: ', text1
pause 'reis'
!**************************************************************

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)

a=RESHAPE((/1, 2, 3/), (/3/))


b=RESHAPE((/1, 2, 3/), (/3/))
!a=(/1,2,3/)
!b=(/4,5,6/)

x=dot_product(a,b)
write(*,*) x
pause 'reis'

d = RESHAPE((/7, 8, 9, 10, 11, 12/), (/2, 3/))

c=sum(d,dim=2)
write(*,*)c(1),c(2),c(2)
pause 'reis'
end

8) Integral por Gauss:

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

WRITE (*,9) (I,QX(I),I,QW(I),I=1,N)


9 FORMAT (2X,'QX(',I1,') = ',e24.17e3,2x,'QW(',I1,') = ',e24.17e3,/)

End

9) Calcula as raízes de um Polinômio:

Program raiz

use msimsl
implicit none

INTEGER ITMAX, NROOT


REAL*8 EPS, ERRABS, ERRREL, ETA
INTEGER INFO[allocatable](:)
REAL*8 F, X[allocatable](:), XGUESS[allocatable](:)
EXTERNAL f

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)

CALL DWRRRN ('AS RAIZES SAO:', 1, NROOT, X, 1, 0)

END

REAL*8 FUNCTION F (X)


REAL*8 X

F = X*X + 2.0*X - 3.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

10) Calcula as raízes:

implicit none

REAL*8 ERRABS, ERRREL


INTEGER MAXFN, NOUT
REAL*8 A, B, F
EXTERNAL F

A = -10.0 !inicio
B = 0.0 !fim
ERRABS = 0.0
ERRREL = 0.001
MAXFN = 100

CALL DZBREN (F, ERRABS, ERRREL, A, B, MAXFN)

WRITE (NOUT,99999) B, MAXFN


99999 FORMAT (' RAIZ:',&
F5.1, '.', /, ' f(x):', I2, '.', //)

END

REAL*8 FUNCTION F (X)


REAL*8 X

F = X**2 + 2*X - 3.0


RETURN
END

11) Operação com vetor:

PROGRAM ORDEM
USE MSIMSL
IMPLICIT NONE
INTEGER N,j
PARAMETER (N=4)

INTEGER INCX, INDEX,Imax


REAL*8 VALUE, X(N) , X1(N),minimo,maximo

DATA X/4.0, 1.0, 3.0,2.0/


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
!Coloca o vetor em ormdem crescente
CALL DSVRGN(N,X,X1)
Write(*,9) (x1(j),j=1,4)
9 format (4(f5.1))
!Descobre a posiçao de um número no vetor
INCX = 1
VALUE = 1.0
CALL DSRCH (N, VALUE, X1, INCX, INDEX)
WRITE (*,*)index
Imax=1
minimo=idmin(N,X1,Imax) !verifica o valor minimo de um vetor
maximo=idmax(N,X1,Imax) !verifica o valor maximo de um vetor
write(*,*) minimo,maximo
END

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')

Write(*,'(2x,"numero de linhas: ",\)')


read*, nl
ALLOCATE (a(nl,nl))
ALLOCATE (b(nl,1))
ALLOCATE (x(nl,1))
a=0
b=0
CALL RANDOM_NUMBER(a)
CALL RANDOM_NUMBER(b)

a=100*A
b=100*B
ipath=1
lda=nl
Call DLSLRG (nl, A, nl, B, IPATH, X) !Resolução do sistema

CALL DWRRRN ('Matriz Gerada', nl, nl, a , LDA,0)


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
CALL DWRRRN ('Vetor gerado', nl, 1, b , LDA,0)
CALL DWRRRN ('solucao', nl, 1, x , LDA,0)

Write(1,*) 'Simone Siqueira dos Reis'


write(1,*)
Write(1,*) 'EU'
write(1,*)
write(1,*) 'Solução do sistema A.X=B'
write(1,*)
write(1,*) 'Matriz A'

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

13) Interpolação e Cópia de vetor:

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 )

DATA MATA/1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0,8.0,9.0/


incx=1 !Incremento da matriz Original
incy=1 !Incremento do vetor
nu=3
CALL DCOPY (Nu, MATA, INCX, DX, INCY)
incx=2 !Incremento da matriz Original
incy=1 !Incremento do vetor
nu=3
CALL DCOPY (Nu, MATA, INCX, DY, INCY)

CALL DWRRRN ('vet1', N, 1, DX, N, 0)


CALL DWRRRN ('vet2', N, 1, DY, N, 0)

!Interpolação entre dois vetores


valor=1.5
resposta=DQDVAL(valor,N,DX,DY,.TRUE.)
Write(*,*) resposta

END

14) Condição de TYPE:

Program notas

Implicit none

Type aula

character nome*5
character disciplina*15
Real*8 valornota

endtype

type (aula) arquivo1

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

15) Erros de Arquivos:

Program Erros_arquivo

use msimsl

integer err

open (1, file='erros.txt', status='old', iostat=err)

if (err==0) then

write(1,*) 'seu arquivo abriu com sucesso'

else

write(*,*) 'seu arquivo não existe'


open (1, file='erros.txt', status='New')
write(1,*) 'seu arquivo abriu com sucesso'
endif

end

16) Erros do IMSL:

Program Erros_imsl
use msimsl

INTEGER N
PARAMETER (N=2)

REAL A(N,N), AINV(N,N), B(N), X(N)

DATA A/2.0, -3.0, 2.0, -3.0/


DATA B/1.0, 2.0/
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
CALL ERSET (0, 1, 0)
! 0 - Geral
! 0 não imprime , 1 imprime
! 0 não para , 1 para
CALL UMACH (-3, 9)
OPEN (UNIT=9,FILE='CHECKERR.txt')

call sis (a,b,x)


! Generate level 5 terminal error.

CALL LINRG (-1, A, 2, AINV, 2)

write(*,*) 'terminou'

end
__________________________________________
subroutine sis (a,b,x)

REAL A(2,2), B(2), X(2)

CALL LSARG (2, A, 2, B, 1, X)


End

17) Verifica se o numero e inteiro ou fracionário:

Program inteiro_fracionario

character*8 a
logical b

a='35'
b=index(a,'.')

If (b) then

write(*,*) 'O numero e fracionário'

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

18) Erros matemáticos e de entrada de dados via teclado :

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

iret = SIGNALQQ(SIG$FPE, Tipo_erro)

Write(*,*) 'Digite o valor de x'


read(*,*,iostat=err) r1
if (err==0) then

write(*,*) 'Gravação de variável com sucesso'

else

stop 'falha na gravação'

endif

Call inverso(r1,r2)

Write(*,*) 'O inverso de ',r1,' e : ',r2

END

! Subrotina que calcula o inverso de de um Número


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
Subroutine inverso(r1,r2)

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

Você também pode gostar