Professional Documents
Culture Documents
Manual de Utilizao e
Principais Comandos da
Linguagem Fortran (verso 5.1)
1. Introduo
Este trabalho destina-se aos alunos de graduao interessados em obter
conhecimentos bsicos em programao de computador utilizando a Linguagem
Fortran (verso 5.1). O trabalho pretende apenas descrever os camandos
principais da Linguagem Fortran (verso 5.1), dando nfase nas mudanas que
ocorreram nesta nova verso.
Nas primeiras sees, descrito alguns conceitos bsicos sobre a estrutura de um
computador e seu funcionamento. Em seguida, o que um sistema de
computao, um breve comentrio respeito do sistema operacional MS-DOS e a
descrio de algoritmos e de uma linguagem utilizada para elabor-los. Logo
aps, apresentado os principais comandos da Linguagem Fortran (verso 5.1) e
finalmente a concluso.
prprio endereo. Cada palavra capaz de armazenar uma informao, como por
exemplo, o resultado de uma operao aritmtica.
As unidades de sada de dados so normalmente os monitores, onde so
mostrados os comandos que so passados para o computador e os resultados das
informaes depois de processadas e interpretadas; e as impressoras onde
normalmente so impressos os dados em forma de relatrios, arquivos fontes de
programas, cartas, etc.
As unidades de entrada de dados fornecem um meio pelo qual as informaes
so transmitidas ao computador para serem interpretadas e processadas. Os mais
populares so o teclado e o disco.
Na Unidade Lgica Aritmtica (ULA) so processadas todas as operaes
lgicas e aritmticas do computador.
A Unidade de Controle controla a ao de todos os dispositivos do computador.
Operando sob o controle das instrues do programador que est na memria
principal, a Unidade de Controle faz com que o dispositivo de entrada leia os
dados, transfere valores adequados da memria para a ULA, armazena e recupera
dados e resultados intermedirios guardados na memria principal, e, transfere os
resultados para o dispositivo de sada.
3. Funcionamento de um Computador
Um programa uma seqncia de instrues que descrevem as aes que se
deseja que o computador realize, ou seja, um programa consiste na traduo de
um algoritmo em uma forma inteligvel para a mquina, o que feito com o uso
de uma linguagem de programao. Um programa especificado (escrito) em uma
linguagem de alto nvel denominado programa fonte.
Para que um programa possa ser executado, ele deve passar pelo processo de
Compilao, onde se traduzir o programa fonte para o programa objeto, que so
arquivos de cdigo objeto com a extenso .OBJ. Estes arquivos contm um
cdigo binrio que no pode ser entendido na exibio e nem na impresso. Em
seguida, o processo de Composio chamado, o editor de ligao (linker) toma
um ou mais arquivos .OBJ e processa-os juntos para produzir um nico arquivo
Etapa 1:
COMPILAO
Etapa 2:
COMPOSIO
Etapa 3:
EXECUO
Programa
Fonte
Tradutor
(Compilador)
Subprogramas
Compilados
Independentemente
Dados
Programa
Objeto
Editor
de Ligao
Programa
Executvel
Resultados
4. Sistemas de Computao
Reservas
Areas
Jogos
Compiladores
Editores
Interpretador
Aplicativos
Programas do
Sistema
Sistema Operacional
Linguagem de Mquina
Hardware
Mquina
6. Algoritmos
Um conceito bsico de programao o de algoritmo. Programar basicamente
construir algoritmos. Algoritmo uma seqncia ordenada e sem ambigidade de
instrues que levam soluo de um determinado problema. Um algoritmo deve
ser detalhado suficientemente at o ponto onde o executor (agente) possa
compreender. Alguns exemplos de algoritmos so:
receita de bolo
indicao de um endereo residencial
planta residencial
Exemplo de um algoritmo para a utilizao de um telefone:
INCIO
Retire o fone do gancho
Disque o nmero desejado
Converse
Recoloque o fone no gancho
FIM
Suponha que se quer instruir um rob domstico para dar recados. Na forma
acima, este algoritmo no est adequado, uma vez que no pressupe alguns
problemas. H detalhes essenciais que no foram especificados:
linha ocupada
linha errada
ligao no se completar
preciso detalhar mais o algoritmo acima para que o rob saiba agir quando algo
acontecer.
INCIO
Retire o fone do gancho
Se o telefone funciona ento
Incio
Disque o nmero desejado
Se a linha no est ocupada ento
Incio
Espere um tempo
Se atenderem ento
Incio
Converse
Fim
Fim
Fim
Recoloque o fone no gancho
FIM
O algoritmo est completo? E no caso de ligao errada?
INCIO
Retire o fone do gancho
Se o telefone funciona ento
Incio
Disque o nmero desejado
Se a linha no est ocupada ento
Incio
Espere um tempo
Se atenderem ento
Incio
Se o nmero digitado est correto ento
Incio
Converse
Fim
Fim
Fim
Fim
Recoloque o fone no gancho
FIM
Exemplo de um algoritmo que l vrios nmeros e seleciona o menor deles.
INCIO
Leia um nmero
Repita o processo
Leia outro nmero
Se este nmero for menor que o anterior ento
Guarde este nmero
Jogue fora o anterior
Seno
Guarde o anterior
Jogue este fora
Fim
At ler todos os nmeros
Exiba o nmero guardado
FIM
Exerccios:
1. Elabore um algoritmo para mudar um pneu furado. Admita que esto
disponveis um macaco e outro pneu em boas condies.
2. Elabore um algoritmo para fazer pipoca, usando manteiga, sal e milho de
pipoca.
7. Linguagem Pseudo-Cdigo
Existem vrias formas de se construir um algoritmo: atravs de pseudo-cdigo,
fluxogramas e cartas NS. A seguir descrita a linguagem pseudo-cdigo para a
elaborao de algoritmos.
13
-6
1000 20
Reais:
23.8 -1378.2
-8.8
-233
-42.321
'B'
'2'
'$'
'+'
'='
4. + , -
x1 = b +
b 2 4ac
2a
b 2 4 ac
x2 = b
2a
Esta relao, utilizando variveis, define uma frmula geral que pode ser aplicada
a clculos especficos. a, b, c, x1 e x2 so as variveis que fazem parte desta
frmula. Estas variveis podem tomar valores diferentes em tempos diferentes, j
a constante 2 nunca muda.
Se num dado instante: a = 1, b = 6 e c = 9, os valores de x1 e x2 seriam
respectivamente -3 e -3.
Observaes:
1. Uma varivel pode receber muitos valores, mas somente um nico valor em
um determinado instante.
2. Em programas de computadores, os nomes das variveis devem lembrar o seu
uso. Por exemplo: RAIZ1 para x1 e RAIZ2 para x2.
3. Existem algumas regras, que dependem da linguagem utilizada, para se dar
nomes s variveis. Na linguagem FORTRAN, o nome deve sempre comear
com uma letra seguida de outros caracteres quaisquer, exceto o branco ( ' ' ).
Exemplos vlidos:
TOTAL
Exemplos no vlidos:
3ARQ
MAIOR
A123
LADO2
RAIZ1
DOIS P
VARIVEL EXPRESSO
B -265
C A+B-2
TERMO 3 + 20 - 7 * C
D 'casa'
A 10
E 'A'
CA+B
D2*C
ESCREVA(D)
FIM
INCIO
INTEIRO: A, B, C
LEIA(A,B)
C 2 * (A + B)
ESCREVA(D)
FIM
2. Ler quatro notas, calcular a mdia aritmtica e imprimir as notas e a mdia com
mensagens significativas.
INCIO
REAL: N1, N2, N3, N4, MEDIA
LEIA(N1, N2, N3, N4)
MEDIA (N1 + N2 + N3 + N4) / 4.0
ESCREVA( ' Nota 1 = ', N1)
ESCREVA( ' Nota 2 = ', N2)
ESCREVA( ' Nota 3 = ', N3)
ESCREVA( ' Nota 4 = ', N4)
ESCREVA( ' Media = ', MEDIA)
FIM
Para verificar se o algoritmo acima est certo, ser feito um rastreamento deste
algoritmo. Suponha que as notas so: 4.0, 2.0, 5.0, 8.0.
N1 4.0
N2 2.0
N3 5.0
N4 8.0
MEDIA (4.0 + 2.0 + 5.0 + 8.0) / 4.0 = 4.75
A impresso ser:
Nota 1 = 4.0
Nota 2 = 2.0
Nota 3 = 5.0
Nota 4 = 8.0
Media = 4.75
Exemplo: WRITE(*,10) A, B
Os valores das variveis A e B sero exibidos na tela conforme o formato
especificado pelo comando FORMAT de nmero 10.
X = 32.125
WRITE(*, 10) X
FORMAT(1X, F7.3)
Ser impresso: b 3 2 . 1 2 5
B = 'LINGUAGEM'
WRITE(*, 5) B
FORMAT(1X, A6)
Ser impresso: LINGUA
5. Formatos de edio.
nX
'...'
nH
/
Observaes Gerais:
1. Cada comando READ ou WRITE provoca, respectivamente, a leitura e a
escrita de um registro (uma linha de dados, no caso da tela do terminal).
2. Na leitura se existirem mais dados do que variveis, sero lidos somente um
nmero igual ao de variveis especificadas no comando READ.
3. 2I4 = I4, I4
2(F10.2, F5.2) = F10.2, F5.2, F10.2, F5.2
4. Na leitura, se o formato no for compatvel, isto , varivel de um tipo,
formato de outro, ocorrer erro de execuo.
Exemplos:
a)
10
20
b)
10
A = 6.5
B = -256.496
C = 1.03239
D = 63425.67
WRITE(*,10) A, B, C, D
FORMAT(1X, F10.5, F7.3, F12.4, F5.2)
...
Ser impresso: bbb6.50000*******bbbbbb1.0324*****
c)
40
X = 725.6975
Y = -0.0005239
Z = 76.599
A = -16.5E7
WRITE(*,40) X, Y, Z, A
FORMAT(1X, E14.7, E13.5, E14.3, E7.5)
...
d)
30
READ(*,30) A, B, C, D
FORMAT(2(F10.2, F5.2))
Ao ler estes dados: bbbbb28.38b1.002002002.32-4.81
Eles sero armazenados assim:
A = 28.38 B = 1.0 C = 2002002.32
e)
30
D = -4.81
READ(*,30) A, B, C
FORMAT(F10.2, 2( F5.2))
FORMAT(formato)
Exemplo:
3
4
5
6
PROGRAM TESTE
OPEN(1, FILE = 'PRN')
WRITE(*,1)
FORMAT(24(/), 27X,'Teste de impresso de textos', //, 17X, 'Ligue a
*impressora e posicione no inicio da pagina!')
WRITE(1,2)
FORMAT(23X, 'Instituto de Ciencias Matematicas',/, 27X, 25H Univ
*ersidade de Sao Paulo)
WRITE(1,3)
FORMAT('0', T30, 'Linguagem Fortran',\)
WRITE(1,4)
FORMAT(1X, TR2, 11H Fundamentos, TL13, '-')
WRITE(1,5)
FORMAT('+', T30, 17('-'', 3X, 11('-'))
WRITE(1,6)
FORMAT(33X, 'Modulo Basico' / '1')
STOP
END
Forma Geral:
DO n, i = m1, m2, m3
Bloco A
n CONTINUE
onde: n - nmero do comando que delimita o tamanho do lao (a vrgula aps o n
opcional).
i - varivel do DO.
m1 - valor inicial de i.
m2 - valor mximo de i para teste.
m3 - incremento.
mi - i = 1, 2, 3, pode ser expresses inteiras ou reais.
Bloco A - composto por combinaes de comandos da linguagem.
Exemplo: o trecho do algoritmo abaixo, soma os nmeros pares de 100 a 200, e
traduzido logo em seguida para a linguagem FORTRAN utilizando o comando
DO.
...
SOMA 0
PARA PAR 100 AT 200 PASSO 2 FAA
SOMA SOMA + PAR
FIM PARA
ESCREVA(SOMA)
...
20
30
SOMA= 0
DO 20, PAR = 100, 200,2
SOMA = SOMA + PAR
CONTINUE
WRITE(*,30) SOMA
FORMAT(1X, 'SOMA = ', F5.2)
Forma Geral:
DO i = m1, m2, m3
Bloco A
END DO
onde: i - varivel do DO.
m1 - valor inicial de i.
END DO
STOP
END
8.6.1 Vetores
Um vetor um conjunto unidimensional de variveis. Cada elemento de um vetor
tratado como se fosse uma varivel simples. Para referncia a um elemento do
vetor utiliza-se o nome do vetor e a identificao do elemento (ndice) entre
parnteses. Por exemplo, se desejarmos atribuir o valor 234 ao elemento
identificado pelo ndice 3 de um vetor de inteiros, teremos:
VETOR
234
4
Observaes:
1. As variveis indexadas em FORTRAN podem ter at 7 ndices.
2. O ndice de uma varivel I(V(I)), pode assumir qualquer valor inteiro.
3. Todos os elementos de um vetor tm o mesmo tipo. O tipo de um vetor
definido assim como variveis simples.
4. Um elemento de um vetor pode ser usado numa expresso como uma varivel
qualquer. Exemplo:
X(I + 1) = X(I) * X(I - 1)
2.
3.
PROGRAM EXEMPLO
REAL X(100), MAIOR
INTEGER N, I, POS
WRITE(*,*) 'Entre com o nmero de elementos que sero lidos.'
READ(* ,*) N
IF (N.LE.100) THEN
WRITE(*,*) ' Digite os valores reais. '
READ(*,10) ( X(I), I=1, N)
10
FORMAT (10(F8.3))
MAIOR = X(1)
POS = 1
IF (N.NE.1) THEN
DO I=2, N
IF (X(I).GT.MAIOR) THEN
MAIOR = X(I)
POS = I
END IF
END DO
END IF
WRITE(*,20) POS, MAIOR
20
FORMAT(1X, I3, F8.3)
ELSE
WRITE(*,*) ' Nmero de elementos do vetor muito grande.'
ENDIF
STOP
END
O programa acima l nmeros reais e os armazena em um vetor real, encontra o
maior valor e sua posio no vetor e ento os exibe.
8.6.2 Matrizes
Podemos encontrar diversos problemas que envolvam em sua soluo arranjos
homgneos multidimensionais. Para resolver este tipo de problema pode-se
utilizar matrizes, que so representadas com o uso de variveis indexadas com
mais de um ndice. Cada ndice referencia uma dimenso.
Exemplo:
2
A = 23
7
31
25
39
A(1,2) = 31
A - nome da matriz
1 - 1 ndice (nmero que indica a linha)
2 - 2 ndice (nmero que indica a coluna)
a)
10
Com os comandos acima, pode-se ler um vetor de dez posies com os valores
reais lidos todos na mesma linha.
b)
10
10
c)
10
DO J=1, 5
WRITE(*,10) A(J)
FORMAT(1X, F5.2)
END DO
Neste caso, A(1), B(1), ..., A(4), B(4) sero lidos todos em uma mesma linha.
d)
10
READ(*,10) N, (A(I), I = 1, N)
FORMAT(I2, /, (F5.2))
e)
10
READ(*,10) N, (A(I), I = 1, N)
FORMAT(I2, /, N(F5.2))
10
f)
10
READ(*,10) (A(I), I = 1, N)
FORMAT(10F8.2)
DO I=1, 4
WRITE(*,10) (A(I,J), J = 1, 3)
FORMAT(1X, 3F5.2)
END DO
Imprimi uma matriz A de ordem 4x3, com cada linha da matriz em uma linha.
g)
10
h)
10
Imprime uma matriz de ordem 5x5, sendo um elemento seguido de outro em uma
mesma linha.
i)
10
DO I=1, 5
WRITE(*,10) (A(I,J), J = 1, 5)
FORMAT(1X, F5.2)
END DO
ou
10
DO I=1, N
DO J=1, M
C(I,J) = 0
DO T=1, K
C(I,J) = C(I, J) + A(I,T) * B(T,J)
END DO
END DO
END DO
C
Impresso da matriz C
DO I=1, N
WRITE(*,10) (C(I,J), J=1, M)
10
FORMAT(1X, 10(F5.2, 3X))
END DO
ELSE
WRITE(*,*) 'Estes valores so invlidos!')
END IF
STOP
END
8.8.1 Funes
O subprograma FUNCTION definido pelo programador e pode compreender
mais de um comando da linguagem FORTRAN.
Forma Geral:
< tipo > FUNCTION < nome> (a1, a2, ..., an)
Declaraes
Comandos Executveis
RETURN
END
onde: < tipo > pode ser real e inteiro.
a1, a2, ..., an so parmetros e podem ser variveis simples ou compostas.
O subprograma deve ser finalizado com o comando RETURN que indica o fim
lgico do subprograma, isto , o controle agora deve retornar ao ponto onde a
funo foi referenciada no programa principal.
Dentro do corpo do subprograma FUNCTION, em pelo menos um ponto deve
aparecer o nome deste subprograma como uma varivel, isto , assumindo algum
valor compatvel com o seu tipo.
Exemplo:
C
Programa Principal
PROGRAM EXEMPLO2
REAL X(100), Y
INTEGER N
READ(*,*) N
READ(*,*) ( X(I), I = 1, N )
...
Y = SOMA(N,X)
WRITE(*,*) Y
STOP
END
REAL FUNCTION SOMA(N,X)
INTEGER I, N
REAL X(N)
SOMA = 0
DO I=1, N
SOMA = SOMA + X(I)
END DO
RETURN
END
8.8.2 Sub-Rotinas
As SUB-ROTINAS tambm so subprogramas com duas diferenas bsicas dos
subprogramas FUNES:
1. A sub-rotina retorna nenhum, um ou vrios valores atravs de seus
argumentos.
Vamos ver como o programa acima pode ser escrito utilizando um subprograma
sub-rotina.
C
PROGRAMA PRINCIPAL
PROGRAM PRINCIPAL
REAL X(100), MAIOR
INTEGER N, I, POS
WRITE(*,*) 'Entre com o nmero de elementos que sero lidos.'
READ(* ,*) N
WRITE(*,*) ' Digite os valores reais. '
READ(*,10) ( X(I), I=1, N)
10 FORMAT (10(F8.3))
C
CHAMADA DA SUBROTINA MAX
CALL MAX(N, X, POS, MAIOR)
C
IMPRESSO DOS RESULTADOS
WRITE(*,20) J, MAIOR
20 FORMAT(1X, I3, F8.3)
STOP
END
Observaes:
1. Os parmetros no comando sub-rotina so meramente formais, pois eles so
substitudos por seus nomes verdadeiros quando o comando CALL executado.
No entando, os parmetros da lista SUBROUTINE devem corresponder em
nmero e em tipo com os parmetros do comando CALL.
C
C
END DO
CHAMADA AO SUBPROGRAMA FUNCTION VETOR_ME
X = VETOR_ME(VA,N)
WRITE(*,*) 'Menor elemento de A = ', X
Y = VETOR_ME(VB,N)
WRITE(*,*) 'Menor elemento de B = ', Y
CHAMADA AO SUBPROGRAMA PROD
CALL PROD(A,N,N,X,A)
DO I=1, N
WRITE(*,*) (A(I,J), J=1, N)
END DO
CALL PROD(B,N,N,Y,B)
DO I=1, N
WRITE(*,*) (B(I,J), J=1, N)
END DO
CHAMADA AO SUBPROGRAMA SOMA
CALL SOMA(A,B,N,N,D)
IMPRESSAO DA MATRIZ D NA FORMA MATRICIAL
DO I=1, N
WRITE(*,*) (D(I,J), J=1, N)
END DO
END
8.9 Arquivos
Registros so as menores entidades que podem ser lidas por um comando de E/S.
Um exemplo de registro uma linha do terminal. O sistema operacional insere
uma marca (caracter de controle) indicando o fim de um registro. Em sntese, um
registro uma seqncia de caracteres. Na tela do vdeo, um registro consiste de
80 caracteres. Para discos e fitas, pode-se criar registros de qualquer tamanho
(registro de 1 caracter, registro de 100 caracteres, ...).
Arquivo uma seqncia de registros. Para indicar o final de arquivo, existe um
registro especial denominado registro de fim-de-arquivo.
Cada arquivo caracterizado por um conjunto de atributos:
a) Nome: o nome de um arquivo especificado atravs de um programa o mesmo
pelo qual o arquivo reconhecido pelo sistema operacional.
b) Mtodo de Acesso: pode ser seqncial ou direto.
Seqncial: os registros so lidos seqencialmente, na mesma ordem em que
foram escritos.
L registros de um arquivo.
Forma Geral:
READ (<unidade> [, <especificador de formato>]
[, END = <num1>] [, ERR = <num2>] [, IOSTAT = <var1>]
[, REC = <nmero registro>]) lista de variveis
onde: [ ] - item opcional.
<unidade> - nmero da unidade associado ao arquivo.
<especificao do formato> - nmero do comando FORMAT ou *.
<num1> - nmero de um comando executvel FORTRAN para o qual o
controle transferido quando encontrado o fim-de-arquivo.
<num2> - nmero de um comando executvel quando ocorre erro.
<var1> - varivel do tipo inteiro que armazenar um valor do status de E/S.
se var1 = 0, no houve erro.
se var1 < 0, fim-de-arquivo.
se var1 > 0, erros.
<nmero registro> - somente usado para arquivo de acesso direto,
especifica o nmero do registro que ser acessado.
Exemplos:
O programa ESCREVE, cria um arquivo chamado TESTE.DAT e grava neste
arquivo nomes e telefones fornecidos pelo teclado.
PROGRAM ESCREVE
CHARACTER NOME*10, FONE*10
OPEN(3,FILE='TESTE.DAT', STATUS = 'NEW')
C ----Leitura de dados
WRITE(*,*) 'Entre com nome e telefone!'
READ(*,5) NOME, FONE
5 FORMAT(2A7)
DO WHILE (NOME.NE.'zzzzzzz'.AND.NOME.NE.'ZZZZZZZ')
WRITE(3,5) NOME, FONE
WRITE(*,*) 'Entre com nome e telefone!'
READ(*,5) NOME, FONE
END DO
ENDFILE(3)
CLOSE(3,STATUS = 'KEEP')
STOP
END
O programa LE1, l nomes e telefones do arquivo TESTE.DAT e mostra estes
dados no vdeo. A varivel ESTADO ir identificar o final do arquivo, ela ser
igual a 0 enquanto houver registros para ler.
PROGRAM LE1
CHARACTER NOME*10, FONE*10
INTEGER ESTADO
OPEN(3,FILE='TESTE.DAT', STATUS = 'OLD')
REWIND(3)
C ----Leitura de dados do arquivo
READ(3,5,IOSTAT=ESTADO) NOME, FONE
DO WHILE(ESTADO.EQ.0)
WRITE(*,*) 'Nome = ', nome, 'Fone = ', fone
READ(3,5,IOSTAT=ESTADO) NOME, FONE
5
FORMAT(2A7)
END DO
ENDFILE(3)
CLOSE(3,STATUS = 'KEEP')
STOP
END
O programa LE2, tambm l nomes e telefones do arquivo TESTE.DAT e mostra
estes dados no vdeo, mas usa para isto a varivel EOF ir identificar o final do
arquivo.
PROGRAM LE2
CHARACTER NOME*10, FONE*10
OPEN(3,FILE='TESTE.DAT', STATUS = 'OLD')
REWIND(3)
C---- ----Leitura de dados
DO WHILE(.NOT. EOF(3))
READ(3,5) NOME, FONE
WRITE(*,*) 'Nome = ', nome, 'Fone = ', fone
5
FORMAT(2a3)
END DO
ENDFILE(3)
CLOSE(3,STATUS='KEEP')
STOP
END
9. Concluso
Este trabalho descreveu os principais comandos da Linguagem Fortran (verso
5.1), alm de apresentar alguns conceitos bsicos sobre computao e programas
de computadores.
10. Bibliografia
[Cereda 87] Cereda, R. L. D.; Maldonado, J. C. Introduo ao FORTRAN 77
para Microcomputadores. McGraw-Hill, 1987.
[Pressman 83] Pressman, R. S. Software Engineering: a Practitioner's Approach.
Tokyo, McGraw-Hill, 1983.