Você está na página 1de 27

Exemplos de Programas

em FORTRAN
Joo Manuel R. S. Tavares
Joaquim O. Fonseca

Exemplo I
Programa simples de utilizao do ciclo DO, com escrita no formatada:

C
C
C

PROGRAM exercicio1
DIMENSION A(10)
Vai gerar valores que so o quntuplo da indexao
DO 15 I = 1, 10
A(I) = I*5
CONTINUE

15
C
C ESCREVE NO SENTIDO DECRESCENTE DA INDEXAO
C
DO 20 J = 10, 1, -1
WRITE (*,*) A(J)
20
CONTINUE
STOP
END
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

Exemplo I
Output:

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

Exemplo II
Programa principal e subrotina para produto 2 matrizes de 2x2, com
sada no formatada:
PROGRAM exercicio2
DIMENSION A(2, 2), B(2, 2), C(2, 2)

C
C VAI DEFINIR PONTOS A(...)
C
A(1, 1) = 0.0
A(1, 2) = 0.0 ! Considere, por exemplo, os
A(2, 1) = 10.0 ! pontos extremos dum segmento de recta
A(2, 2) = 0.0
C
C VAI LER O NGULO DE ROTAO
C

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

Exemplo II

C
C
C

C
C
C

WRITE (*, '(A\)') ' ANGULO : '


READ (*, *) TETA
PI = 4*ATAN(1.0)
! Define a constante (pi)
TETA = TETA*PI/180 ! Converte graus em radianos
DEFINE MATRIZ DE ROTAO em torno da origem
B(1,
B(1,
B(2,
B(2,

1)
2)
1)
2)

=
=
=
=

COS(TETA)
SIN(TETA)
-SIN(TETA)
COS(TETA)

CALL MULTMAT(A, B, C) ! Chamada da subrotina MULTMAT


ESCREVE A MATRIZ RESULTANTE DO PRODUTO C(...)

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

Exemplo II
C
20

DO 20 I = 1, 2
WRITE (*,*) (C(I, J), J = 1, 2)
CONTINUE
STOP
END

! Ciclo DO interno em J

C
C Subrotina para o produto de duas matrizes de 2x2
C
SUBROUTINE MULTMAT(A, B, C)
DIMENSION A(2, 2), B(2, 2), C(2, 2)
C
C faz ciclo sobre o nmero de linhas I
C

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

Exemplo II
C
C
C

3
2
1
C

DO 1 I = 1, 2
faz produto com a matriz quadrada B
DO 2 J = 1, 2
AB = 0.0
! Inicia valor da posio da matriz
DO 3 K = 1, 2
AB = AB+A(I, K)*B(K, J) !Adiciona contribuies
CONTINUE
C(I, J) = AB ! Guarda valor na posio da matriz
CONTINUE
CONTINUE
RETURN
END

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

Exemplo II
Output:

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

Exemplo III
Programa para processamento duma Figura 3D, com
leitura dos dados dum ficheiro com a seguinte estrutura:
- na primeira linha o nmero de vrtices (ns) e nmero de
faces;
- nas linhas seguintes para todos os vrtices, teremos o nmero
do vrtice e as coordenadas
- seguindo-se depois as linhas para a definio de cada face,
com o nmero da face, nmero de vrtices na face e os
nmeros dos vrtices dessa face.

Para o caso particular dum cubo de aresta 2 e centrado


na origem, ser definido do modo seguinte (ficheiro
exemplo.dat)
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

Exemplo III
1
2
3
4
5
6
7
8
1
2
3
4
5
6

8
-1
1
1
-1
-1
1
1
-1
4
4
4
4
4
4

6
1
1
1
1
-1
-1
-1
-1
1
1
5
2
1
3

! nmero de vrtices e nmero de faces


1
1
-1
-1 ! Coordenadas pontos
1
1
-1
-1
2
3
4
4
8
5
8
7
6 ! Faces
6
7
3
5
6
2
7
8
4

Y
3

1
6

7
3
6

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

10

Exemplo III
PROGRAM exercicio3
C Verso Inicial do programa de processamento duma figura 3D
C**********************************************************
C Programa 3D
C XCORD
Coordenadas dos vrtices
C LNODE
Nmero de vrtices por face
C NNODE
Nmero de cada vrtice da face
C
COMMON / FACES / XCORD(100, 4), LNODE(20), NNODE(20, 8)
C
C Limitado a 100 pontos, 20 faces e 8 lados no mximo por face
C
CHARACTER*12 FNAME
C
NDIM = 3
ICANAL = 20
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

11

Exemplo III
WRITE (*, '(A\)')' Nome do Ficheiro : '
READ (*, '(A)') FNAME
OPEN (ICANAL, FILE = FNAME, STATUS = 'OLD')
CALL LERDATA(NP, NF, NDIM, ICANAL)

C
C escreve no ecr a definio lida pela subrotina LERDATA
C
DO 20 I = 1, NP
WRITE (*, *) I, (XCORD( I, J ), J = 1, NDIM)
20
CONTINUE
DO 30 I = 1, NF
WRITE (*, *) I, LNODE(I), (NNODE(I, J), J = 1, LNODE(I))
30
CONTINUE
STOP
END

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

12

Exemplo III
C Verso Inicial subrotina LERDATA para leitura duma figura 3D
C**********************************************************
SUBROUTINE LERDATA(NP, NF, NDIM, ICANAL)
C
COMMON / FACES / XCORD(100, 4), LNODE(20), NNODE(20, 8)
C
READ (ICANAL, *) NP, NF
DO 10 I = 1, NP
READ (ICANAL, *) II, (XCORD( II, J ), J = 1, NDIM)
XCORD(II, NDIM+1) = 1 ! valor no utilizado neste exemplo
10
CONTINUE
C
DO 20 I = 1, NF
READ (ICANAL, *) II, LNODE(II), (NNODE(II, J), J = 1, LNODE(II))
20
CONTINUE
RETURN
END
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

13

Exemplo III
Output:

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

14

Exemplo IV
Programa para leitura dum ficheiro, duma estrutura de faces e
clculo da rea total utilizando a formula A= p(p-a)(p-b)(p-c),
com p=(a+b+c)/2, para determinar a rea dum qualquer
tringulo de lados a, b e c.
1

2
LNODE(I)
3
4

LNODE(I)-1

S aplicvel a Polgonos Convexos


@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

15

Exemplo IV
EXEMPLO de ESTRUTURA 3D dum PRISMA TRIANGULAR

1
2
3
4
5
6
1
2
3
4
5

6
-1
1
1
-1
-1
1
4
3
4
3
4

5
1
1
1
1
-1
-1
1
1
5
2
1

1
1
-1
-1
1
1
2
4
6
6
5

! Coordenadas

Y
3

3
5
3
3
6

4
4

! Faces

X
5

3
6

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

16

Exemplo IV
PROGRAM exercicio4
C PROGRAMA 3D ! Continuao do exemplo anterior
C
C
COMMON /FACES/ XCOORD(100, 4), LNODE(20), NNODE(20, 8)
C
PARAMETER (MPOIN = 100, MDIME = 4, MF = 20, MN = 8)
DIMENSION XCOORD(MPOIN, MDIME), LNODE(MF),
+ NNODE(MF, MN)
! Vars locais
C
CHARACTER*12 FNAME
NDIM = 3
ICANAL = 20
WRITE (*, '(A\)') ' Nome do ficheiro : '
READ (*, '(A)') FNAME
OPEN (ICANAL, FILE = FNAME, STATUS = 'OLD')
C
C
CALL LERDATA(NP, NF, NDIM, ICANAL)
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

17

Exemplo IV
C
+

CALL LERDATA(MPOIN, MDIME, MF, MN, NP, NF, NDIM,


ICANAL, XCOORD, LNODE, NNODE)

C
C ESCRITA PARA CONTROLO DE LEITURA DO FICHEIRO DE DADOS
C
DO 20 I = 1, NP
WRITE (*, 100) I, (XCOORD(I, J), J = 1, NDIM)
20
CONTINUE
DO 30 I = 1, NF
WRITE (*, 110) I, LNODE(I), (NNODE(I, J), J = 1, LNODE(I))
30
CONTINUE
C
C CLCULO DA REA TOTAL
C
AREAT = 0.0
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

18

Exemplo IV

DO 40 I=1, NF
NO1 = NNODE(I, 1)
X1 = XCOORD(NO1, 1)
Y1 = XCOORD(NO1, 2)
Z1 = XCOORD(NO1, 3)
AREAF = 0.0
DO 35 K = 3, LNODE(I)
NO2 = NNODE(I, K-1)
NO3 = NNODE(I, K)
X2 = XCOORD(NO2, 1)
Y2 = XCOORD(NO2, 2)
Z2 = XCOORD(NO2, 3)
X3 = XCOORD(NO3, 1)
Y3 = XCOORD(NO3, 2)
Z3 = XCOORD(NO3, 3)
A = SQRT((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2Y1)+(Z2-Z1)*(Z2-Z1))

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

19

Exemplo IV
+
+

35
40
100
110
1000
1010

B = SQRT((X3-X2)*(X3-X2)+(Y3-Y2)*(Y3Y2)+(Z3-Z2)*(Z3-Z2))
C = SQRT((X1-X3)*(X1-X3)+(Y1-Y3)*(Y1Y3)+(Z1-Z3)*(Z1-Z3))
P = (A+B+C)/2
AREA = SQRT(P*(P-A)*(P-B)*(P-C))
AREAF = AREAF+AREA ! Area total da face
CONTINUE
WRITE (*, 1000) I, AREAF
AREAT = AREAT+AREAF ! Area total da figura 3D
CONTINUE
WRITE (*, 1010) AREAT
STOP
FORMAT (4H No , I4, 3(2X, F11.4))
FORMAT (10I5)
FORMAT (1X, 5HFACE , I4, 5X, 7HAREA = , E12.5)
FORMAT (1X, 13HAREA TOTAL = , E12.5)
END

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

20

Exemplo IV
SUBROUTINE LERDATA(MP,MD,MF,MN,NP,NF,NDIM,ICAN
+ AL,XCOORD,LNODE,NNODE)
***********************************************************
* Subrotina LERDATA, faz a leitura dos dados de um ficheiro
*
* MP - Nmero mximo de pontos em XCOORD *
* MD - Mximo da dimenso (3)
*
* MF - Nmero mximo de faces
*
* MN - Nmero mximo de pontos por face
*
* NP - Nmero de pontos em processamento *
* NF - Nmero de faces em processamento
*
* NDIM
- Dimenso das coordenadas (2 ou 3) *
* ICANAL - Nmero de endereo do ficheiro de leitura *
* XCOORD - Vector de armazenamento das coordenadas dos pontos *
* LNODE - Vector onde se guarda o nmero de pontos por cada face*

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

21

Exemplo IV
* NNODE - Vector onde se guarda os nm. globais de cada n da face *
***********************************************************
DIMENSION XCOORD(MP, MD), LNODE(MF), NNODE(MF, MN)
C
READ (ICANAL, *) NP, NF
DO 10 I = 1, NP
READ (ICANAL, *) II, (XCOORD(II, J), J = 1, NDIM)
XCOORD(II, NDIM+1) = 1 ! No usado neste exemplo
10
CONTINUE
C
DO 20 I = 1, NF
READ (ICANAL,*) II, LNODE(II), (NNODE(II, K), K = 1,
+
LNODE(II))
20
CONTINUE
RETURN
END
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

22

Exemplo IV
Output:

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

23

Exemplo V
Programa para processamento de uma cadeia de caracteres
C
C
*
*
*
c

PROGRAM exemplo5
Programa para leitura duma cadeia de caracteres e converso
desta em todos Maisculos ou Minsculos
Varivel de caso:
ISIM = 1 Passagem de minusculas a maiusculas
ISIM = 0 Passagem de maiusculas a minusculas
CHARACTER*72 LINHA
CHARACTER*1 SIM
NL = 72

C
C Questiona da converso
C
5
WRITE(*, '(A\)') ' Texto Maiusculas (S)- Minusculas (N)[S]: '
READ (*, '(A)') SIM
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

24

Exemplo V
C
C Controla resposta
C
IF (SIM .NE. 'S' .AND. SIM .NE. 's' .AND. SIM .NE. 'N' .AND.
+
SIM .NE. 'n' .AND. SIM .NE. ' ') THEN
WRITE (*,'(A)') ' Resposta Incorrecta !'
GOTO 5
END IF
ISIM = 1
! Para maiusculas
IF (SIM .EQ. 'N' .OR. SIM .EQ. 'n') THEN
ISIM = 0
! Para minusculas
END IF
C Vai ler Cadeia de Caracteres
C
WRITE (*, '(A\)') ' Texto : '
READ (*, '(A)') LINHA
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

25

Exemplo V
C Vai determinar o nmero de caracteres significativos
C
10
IF (LINHA(NL:NL) .EQ. ' ') THEN
NL = NL-1
GOTO 10
END IF
C Converso caracteres Minusculos --> Maiusculos ou Vice-Versa
C
IC = 1
20
IASC = ICHAR(LINHA(IC:IC)) ! Cdigo ASCII do caracter
IF (IASC .GE. 97 .AND. IASC .LE. 122 .AND. ISIM .EQ. 1) THEN
LINHA(IC:IC) = CHAR(IASC-32) ! passa a maiusculo
ELSE IF (IASC .GE. 65 .AND. IASC .LE. 90 .AND. ISIM .EQ. 0) THEN
LINHA(IC:IC) = CHAR(IASC+32) ! passa a minusculo
END IF
IC = IC+1
(caracter a partir do
IF (IC .LE. NL) GOTO 20
cdigo ASCII)
@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

26

Exemplo V
C
C Escreve para o ecr a cadeia de caracteres j convertida
C
WRITE (*, '(A\)') ' Texto : '
WRITE (*, '(A)') LINHA(1:IC)
STOP
END
Output

@2001 - Joo Tavares/JOF

CFAC: Exemplos de Programas em FORTRAN

27

Você também pode gostar