Escolar Documentos
Profissional Documentos
Cultura Documentos
Tecnologia e de Gestão
INSTITUTO POLITÉCNICO DE BRAGANÇA
ALGORITMIA E PROGRAMAÇÃO
Textos de Apoio
Engenharia Mecânica
Engenharia Química
Luís Alves
Paulo Matos
Apresentação
Objectivos
Algoritmia e Programação 2
APRESENTAÇÃO
Programa da disciplina
Algoritmia e Programação 3
APRESENTAÇÃO
Funções Intrínsecas
Estruturas de repetição
Formatação da entrada e saída de dados
Arrays
Estruturas de dados
Procedimentos e Funções
Funções de I/O
Bibliotecas externas
TÓPICOS AVANÇADOS DO FORTRAN
ESTUDO DE CASOS TÍPICOS
Bibliografia
McGraw-Will.
Scientists”, Prentice-Hall.
Programming”, Addison-Wesley.
Algoritmia e Programação 4
APRESENTAÇÃO
Programação”.
Algoritmia e Programação 5
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
PROBLEMAS
Introdução à Algoritmia
Definição de Algoritmo
O algoritmo mais não é do que uma descrição de um conjunto de
operações que visam resolver um determinado problema. Descrição essa
que pode ser mais, ou menos, informal dependendo das exigências do
próprio problema e também de quem o implementa. Deve no entanto ser
suficientemente explicita para que não dê origem a interpretações distintas.
Um algoritmo é assim, um plano de acção que visa estabelecer um certo
efeito desejado ou, por outras palavras, obter uma solução para um
determinado tipo de problema.
Vantagens
Permite introduzir conceitos básicos sobre programação a quem nunca
os teve e, acima de tudo, permite disciplinar a forma de raciocinar a
quem não tem experiência de programação.
Algoritmia e Programação 6
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Concepção de um programa
Concepção de um algoritmo
Algoritmia e Programação 7
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Algoritmia e Programação 8
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Algoritmia e Programação 9
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Solução Sequencial
Todas as acções (operações) têm de obedecer a uma certa ordem e só
começa a próxima quando as anteriores já tiverem terminado na sua
totalidade.
Remover a lâmpada
Algoritmia e Programação 10
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Remover a lâmpada
Não
Testar se a nova
lâmapada funciona
Sim
Algoritmia e Programação 11
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Algoritmia e Programação 12
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
b2 4*a*c > 0
b 2
4*a *c b 2
4*a*c = 0
b2 4*a*c < 0
b b2 4 * a * c
x2 =
2*a
Mostrar os resultados de x1 e x 2
Senão
Se b 2 4 * a * c = 0 então
b
x1, x 2 =
2*a
Mostrar x1
Senão
A equação não possui raízes reais
Fim do algoritmo
Algoritmia e Programação 13
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Diagrama de Fluxo
Símbolos
Algoritmia e Programação 14
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
b b2 4 * a * c delta = b2-4*a*c
x2 =
2*a
Mostrar os resultados de x1 e x 2
Senão delta > 0
falso
Se b 2 4 * a * c = 0 então verd.
b
x1, x 2 =
2*a x1 =
b + b2 4 * a * c
2*a
Mostrar x1 x2 =
b b2 4 * a * c
2*a
Senão
A equação não possui raízes reais
Mostrar
Fim do algoritmo x1 e x2
2
1 2
falso
delta = 0
verd.
x1,x2=-b/2*a
Mostrar
x1
Não há
raizes
Fim
Algoritmia e Programação 15
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Elemento: Exemplos:
Constantes 4, “Maria”, 3.14
Variáveis a, b, c, x1, x2, t
Operadores +, -, *, /, raiz
Expressões 4*a*c, x>y
Expressões de atribuição
(var = expressão) media = soma/n
Expressões condicionais
Se condição então SE nota >= 10 ENTÃO
... ESCREVER(“Aprovado”)
Senão fazer ... SENÃO
ESCREVER(“Reprovado”)
FIMSE
Expressões de repetição
Enquanto condição fazer
...
Para todos os elementos de um conjunto fazer
...
Para os valores de x entre vmin e vmax fazer
...
Algoritmia e Programação 16
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Ler os valores de a e b
Início Início
Calcular a
Ler a e b potência de 2
de um dado
valor
t1=a2
t2=b2 Fim
x=t1+t2
h= x
Início
Mostrar
resultado
Calcular a raiz
quadrada de
Fim um dado valor
Fim
Algoritmia e Programação 17
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Estrutura de um algoritmo
Algoritmia e Programação 18
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Algoritmia e Programação 19
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
sequência de instruções]
FIMSE
express.
=cnst.5
Algoritmia e Programação 20
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Estruturas de repetição
verd.
verd.
falso
Instrução PARA
PARA variável_controlo valor1 ATÉ valorN FAZER
sequência de instruções
FIMPARA
valor1<= falso
valorN
verd.
Algoritmia e Programação 21
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Início
NOME : primeiro_algoritmo
a, b : inteiro a 1
b 2
INICIO
a 1
falso verd.
a>b
b 2
SE a > b ENTÃO
b 0 a 0
a 0
SENÃO
b 0
Fim
FIMSE
FIM.
Exercícios propostos
Algoritmia e Programação 22
INTRODUÇÃO À RESOLUÇÃO ALGORÍTMICA DE PROBLEMAS
Algoritmia e Programação 23
CONCEITOS BÁSICOS DE PROGRAMAÇÃO
Desenvolvimento de programas
Algoritmia e Programação 24
CONCEITOS BÁSICOS DE PROGRAMAÇÃO
Compilação
Erros léxicos
Erros sintácticos
Erros semânticos
Teste
Erros de sistema
Erros lógicos
Registe-se que os erros lógicos são os que apresentam maior dificuldade na sua
detecção, pois permitem a execução do programa. O problema está em que o
programa não apresenta os resultados desejados.
Codificação não
(Editar) Compilação Erros?
Sim
não
Executável
Erros? Fim
Linkagem
(a.out)
Codificação não
(Editar) Compilação Erros? Sim
Sim
Algoritmia e Programação 25
CONCEITOS BÁSICOS DE PROGRAMAÇÃO
Exemplos de editores
Exemplos de compiladores/interpretadores
Algoritmia e Programação 26
CONCEITOS BÁSICOS DE PROGRAMAÇÃO
Programas + Bibliotecas
Bibliotecas
Algoritmia e Programação 27
CONCEITOS BÁSICOS DE PROGRAMAÇÃO
Algoritmia e Programação 28
CONCEITOS BÁSICOS DE PROGRAMAÇÃO
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
P R O G R A M T E S T E
a , b : : I N T E G E R
c : : R E A L
1 0 1 0 R E A D * , a ; R E A D * , b
1 0 2 0 c = ( a + b ) / 2 . 0
C I s t o é u m c o m e n t á r i o
* I s t o t a m b é m é u m c o m e n t á r i o
P R I N T * , “ M É D I A É “
, c ! I s t o é o u t r o c o m e n t á r i o
Algoritmia e Programação 29
CONCEITOS BÁSICOS DE PROGRAMAÇÃO
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
P R O G R A M T E S T E
a , b : : I N T E G E R
c : : R E A L
1 0 1 0 R E A D * , a ; R E A D * , b
1 0 2 0 c = ( a + b ) &
/ 2 . 0
! A m é d i a = ( a + b ) / 2
P R I N T * , “ MÉ D I A &
& É “ , c
E N D
Algoritmia e Programação 30
FORTRAN
Fortran
Caracteres
Maiúsculas [A - Z]
Minúsculas [a - z]
Dígitos [0 - 9]
Underscore _
Símbolos aritméticos + - * / **
Caracteres invisíveis espaço, tabulador e new line
Outros ().=,‘$:!“%&;<>?
Estrutura de um programa
PROGRAM nome_do_programa
Declaração_de_variáveis
Parte_executável_do_programa
END [PROGRAM [nome_do_programa]]
Algoritmia e Programação 31
FORTRAN
Identificadores
Exemplos de Identificadores
Correctos
nota
numero_de_notas
Numero_de_Notas
N123
Errados
12_notas
12notas
_notas
Algoritmia e Programação 32
FORTRAN
Palavras reservadas
As palavras (tokens) reservadas são todas aquelas que por fazerem parte
da própria linguagem, não podem ser utilizadas pelo programador para
representar qualquer outro tipo de elemento.
O Fortran standard não possui palavras reservadas, o que significa que
uma mesma palavra tanto pode representar uma instrução ou parte de
uma instrução, como uma variável, ou designação de um programa.
Desaconselha-se a utilização de identificadores com o mesmo nome de
uma das palavras reservadas.
Devido ao elevado número de funções intrínsecas que fazem parte do
Fortran, por vezes é difícil escolher um nome que já não seja utilizado.
Nem todos os compiladores são standard, pelo que há alguns que só e
simplesmente não permitem o uso de palavras reservadas como
identificadores.
Desvantagens:
Pode levar o compilador a interpretações erradas, ou pelo menos a não
executar o que se pretende;
Tornar o próprio programa ilegível para o programador.
Variável
Algoritmia e Programação 33
FORTRAN
Declaração de variáveis
Em Fortran as variáveis podem ser declaradas implicitamente ou
explicitamente.
Declaração Implícita
Quando a variável não é declarada de forma explícita, o tipo é
determinado da seguinte forma:
Se o primeiro caracter da variável estiver compreendido entre [i,n], então
a variável é do tipo inteiro.
Caso contrário a variável é do tipo real.
Declaração Explícita
Caso o programador o deseje (e é de todo aconselhável) pode declarar
explicitamente o tipo da variável, da seguinte forma;
Exemplo: INTEGER :: a, b, c
Algoritmia e Programação 34
FORTRAN
31 0
Variável
Algoritmia e Programação 35
FORTRAN
Iniciação de variáveis
Exemplos:
INTEGER :: nalunos = 10, a, b
REAL :: PI = 3.1415
CHARACTER :: nome = “Luís”
Iniciação de constantes
lista_constantes nome_da_constante=expressão_constante[,lista_constantes]
Algoritmia e Programação 36
FORTRAN
Exemplos:
INTEGER, PARAMETER :: nalunos = 10
REAL, PARAMETER :: PI = 3.1415
Entrada
READ *,lista_parâmetros_onde_guardar_os_valores_a_ler
Saída
PRINT *,lista_parâmetros_onde_guardar_os_valores_a_visualizar
Exemplos:
READ *, x, y
PRINT *,”A Maria vai de férias a “, cid
INTEGER :: a,b
...
PRINT *,”Insira dois valores”
READ *, a, b
...
Algoritmia e Programação 37
FORTRAN
PROGRAM Area_de_uma_circunferencia
REAL, PARAMETER :: PI = 3.1415
READ *,raio
area = PI * raio * raio
PRINT *,”A área é de “, area
END
PROGRAM Circulo_Area_Perimetro
IMPLICIT NONE
REAL, PARAMETER :: PI = 3.1415
REAL :: raio, perimetro, area
PRINT *,”Qual o raio da circunferência?”
READ *,raio
perimetro = 2 * PI * raio
PRINT *,”O perímetro é: “,perimetro
area = PI * raio * raio
PRINT *,”A área é de “, area
END
Algoritmia e Programação 38
FORTRAN
Operadores aritméticos
Operadores binários
+ Adição
- Subtracção
* Multiplicação
/ Divisão
** Exponenciação
Operadores unários
- Negação
+ Positivo
Algoritmia e Programação 39
FORTRAN
Uma operação aritmética entre dois valores (ou variáveis) reais, ou entre um
real e um inteiro (ou vice versa), resulta num real. Ex:
6. / 2. = 3. 7. / 2 = 3.5 1 / 2. = 0.5 0. + 2 = 2. 2 * 3. =
6.
Exponenciação
Algoritmia e Programação 40
FORTRAN
Exercícios propostos
I. Considere as seguintes variáveis e respectivas inicializações:
a = 3. b = 2. c = 5. d = 4.
e = 10. f = 2. g = 3.
Determine o resultado de cada uma das seguintes expressões:
1) a * b + c * d + e / f**g 6) a**b**g
2) a * (b + c) * d + (e / f)**g 7) a / (g / b)
Algoritmia e Programação 41
FORTRAN
3) a * (b + c) * (d + e) / f**g 8) (a / g) / b
4) a**(b**g) 9) a / g / b
5) (a**b)**g
II. Elabore as expressões (formulas) para cada uma das seguintes situações:
1) A média de duas notas.
2) A área de um quadrado e o volume de um cubo.
3) Dada a velocidade inicial, a aceleração e o tempo, calcular o espaço
percorrido.
Operador de atribuição
var = expressão
Operadores relacionais
== .EQ. Igual
/= .NE. Diferente
> .GT. Maior do que
>= .GE. Maior ou igual a
< .LT. Menor do que
<= .LE. Menor ou igual a
Exemplos:
2<4 .TRUE.
2 <= 4 .TRUE.
3 == 4 .FALSE.
Algoritmia e Programação 42
FORTRAN
Operadores Lógicos
Algoritmia e Programação 43
FORTRAN
Exercícios propostos
Funções intrínsecas
Exemplos:
SQRT(X) Raiz quadrada de X
Parâmetro: REAL
Valor de retorno: REAL
Algoritmia e Programação 44
FORTRAN
SIN(X) Seno de X
Parâmetro: REAL (Radianos)
Valor de retorno: REAL
COS(X) Coseno de X
Parâmetro: REAL (Radianos)
Valor de retorno: REAL
TAN(X) Tangente de X
Parâmetro: REAL (Radianos)
Valor de retorno: REAL
Algoritmia e Programação 45
FORTRAN
Parâmetro: REAL
Valor de retorno: REAL (Radianos)
EXP(X) eX
Parâmetro: REAL
Valor de retorno: REAL
LOG(X) ln X
Parâmetro: REAL
Valor de retorno: REAL
LOG10(X) log10 X
Parâmetro: REAL
Valor de retorno: REAL
Algoritmia e Programação 46
FORTRAN
Parâmetro: INTEGER
Valor de retorno: INTEGER
Algoritmia e Programação 47
FORTRAN
Parâmetro: REAL
Valor de retorno: REAL
y = TAN(3.1415)
y = SIN(PI)
y = REAL(n)
Algoritmia e Programação 48
FORTRAN
y = COS(SQRT(X))
Exercícios propostos
PROGRAM exemplo1
IMPLICIT NONE
INTEGER :: i1, i2, i3
REAL :: a1 = 2.4, a2
i1 = a1
i2 = INT(a1 * i1)
i3 = NINT(a1 * i1)
a2 = a1 ** i1
PRINT *, i1, i2, i3, a1, a2
END PROGRAM
PROGRAM exemplo2
IMPLICIT NONE
INTEGER :: i
LOGICAL :: l
REAL :: a
a = 0.5
i = nint(2. * 3.141593 / a)
l = i > 100
a = a * (5 / 3)
PRINT *, i, a, l
Algoritmia e Programação 49
FORTRAN
END PROGRAM
PROGRAM exemplo3
IMPLICIT NONE
INTEGER :: i, j, k
REAL :: a, b, c
READ *, i, j, k, a, b
c = SIN((3.141593 / 180) * a)
PRINT *, i, j, k, a, b, c
END PROGRAM
PRINT *, lista_parâmetros
READ *, lista_parâmetros
Algoritmia e Programação 50
FORTRAN
IF (Expressão_lógica) instrução
verd.
Exp
Algoritmia e Programação 51
FORTRAN
END IF [nome]
[nome:] IF (Expressão_lógica) THEN
Lista_instruções
ENDIF [nome]
Exemplos
Algoritmia e Programação 52
FORTRAN
ENDIF meu_if
PRINT *, a, b
END
ELSE
Lista_Inst2 Lista_Inst1
Lista_instruções2
END IF [nome]
Exemplos
Exemplo 1
Dados dois valores, ordená-los por ordem crescente.
PROGRAM Ord_Dois_Numeros
IMPLICIT NONE
INTEGER :: a, b
PRINT *,”Introduza dois valores”
READ *, a, b
IF ( a < b ) THEN
PRINT *, a, b
ELSE
PRINT *, b, a
ENDIF
Algoritmia e Programação 53
FORTRAN
END
Exemplo 2
PROGRAM CalRaizes
IMPLICIT NONE
REAL :: a, b, c, x1, x2
PRINT *, “Introduza os coeficientes a, b, e c”
READ *, a, b, c
IF (b**2 – 4 * a * c .GE. 0) THEN
PRINT ,”X1=”, (-b + SQRT(b**2 – 4 * a * c)) / (2 * a)
PRINT ,”X2=”, (-b - SQRT(b**2 – 4 * a * c)) / (2 * a)
ELSE
PRINT *,”Não há raízes reais”
END IF
END
A seguir apresentamos outra forma de resolver o mesmo problema, neste caso
usando uma variável auxiliar denominada temp.
PROGRAM CalRaizes1
IMPLICIT NONE
REAL :: a, b, c, x1, x2, temp
PRINT *, “Introduza os coeficientes a, b, e c”; READ *, a, b, c
temp = b**2 – 4 * a * c
IF (temp .GE. 0) THEN
PRINT ,”X1=”, (-b + SQRT(temp)) / (2 * a)
PRINT ,”X2=”, (-b - SQRT(temp)) / (2 * a)
ELSE
PRINT *,”Não há raízes reais”
END IF
END
Algoritmia e Programação 54
FORTRAN
De referir que esta última solução é mais apropriada porque o cálculo de delta
(cálculo de b**2 – 4 * a * c ) é apenas efectuado uma única vez.
Situação 3
IF (Expressão_lógica1) THEN
Lista_instruções1
Algoritmia e Programação 55
FORTRAN
Algoritmia e Programação 56
FORTRAN
END
Exercícios propostos
3* t 2 + 5 t 0
f (t ) =
3*t 2 + 5 t<0
2) Implemente um programa que dado o valor de x e de y, calcule o f(x,y),
sabendo que:
x+ y x y y 0
x + y2 x 0 y <0
f (x, y) =
x2 + y x<0 y 0
x2 + y 2 x <0 y <0
3) Implemente um programa que dado um caracter indique se este pertence ao
alfabeto e, em caso afirmativo, se é minúsculo ou maiúsculo.
Algoritmia e Programação 57
FORTRAN
PROGRAM Nota_Qualitativa
IMPLICIT NONE
INTEGER :: nota
PRINT *,”Insira uma nota”
READ *, nota
Algoritmia e Programação 58
FORTRAN
Estruturas de repetição
Ciclo infinito
DO
Lista_instruções Lista_Inst.
END DO
DO verd.
Cond.
Lista_instruções1
falso
IF (Condição) EXIT
Lista_instruções2 Lista_Inst2
Algoritmia e Programação 59
FORTRAN
END DO
Exemplos
PROGRAM Positivo_Negativo
IMPLICIT NONE
INTEGER :: n
DO
PRINT *,”Insira um número”
READ *,n
IF (n .GE. 0) THEN
PRINT *,”É positivo”
ELSE
PRINT *,”É negativo”
END IF
END DO
END
Ler continuamente um número inteiro e indicar se este é positivo ou
negativo. Caso seja zero o programa deve terminar.
PROGRAM Positivo_Negativo
IMPLICIT NONE
INTEGER :: n
DO
PRINT *,”Insira um número”
READ *,n
Algoritmia e Programação 60
FORTRAN
IF (n ==0) EXIT
IF (n .GT. 0) THEN
PRINT *,”É positivo”
ELSE
PRINT *,”É negativo”
END IF
END DO
END
PROGRAM media
IMPLICIT NONE
INTEGER, PARAMETER :: nalunos =30
INTEGER :: nota, cont = 1, stotal = 0
DO
IF ( cont > nalunos) EXIT
PRINT *,”Insira a nota do aluno n.”, cont
READ *, nota
stotal = stotal + nota
cont = cont + 1
END DO
PRINT *,”A média é:”, stotal / REAL(nalunos)
END
Estruturas de repetição
Ciclo com incremento
DO VarInc = Vinicial, Vfinal [, Vincremento]
Lista_de_instruções
Algoritmia e Programação 61
FORTRAN
END DO
Vinicial, Vfinal e Vinvremento podem ser constantes, variáveis ou
expressões, que resultem num inteiro ou num real (desaconselha-se a
utilização deste último).
VarInc é uma variável que no início do ciclo assume o valor de Vincial e
por cada iteração vai incrementar (ou decrementar) em Vincremento
unidades, até que o seu valor exceda (acima ou abaixo) Vfinal.
Por omissão o valor de Vincremento é 1.
Se Vincremento for positivo e se o Vinicial exceder Vfinal, ou se
Vincremento for negativo e Vfinal for inferior a Vinicial, então o ciclo
não executa nenhuma iteração.
Exemplos
PROGRAM media
IMPLICIT NONE
INTEGER, PARAMETER :: nalunos =30
INTEGER :: nota, cont, stotal = 0
DO cont = 1, nalunos
PRINT *,”Insira a nota do aluno n.”, cont
READ *, nota
stotal = stotal + nota
END DO
PRINT *,”A média é:”, stotal / REAL(nalunos)
END
Algoritmia e Programação 62
FORTRAN
PROGRAM factorial
IMPLICIT NONE
INTEGER :: fact = 1, n, val
PRINT *,”Valor?”
READ *, val
DO n = 2, val
fact = fact * n
END DO
PRINT *,”O factorial de “,val, “ é ”,fact
END
PROGRAM factorial
IMPLICIT NONE
INTEGER :: fact = 1, n, val
PRINT *,”Valor?”
READ *, val
DO n = val, 2, -1
fact = fact * n
END DO
PRINT *,”O factorial de “,val, “ é ”,fact
END
Algoritmia e Programação 63
FORTRAN
PROGRAM factorial
IMPLICIT NONE
INTEGER :: fact = 1, n, val
DO ! este ciclo serve para validar o número introduzido
PRINT *,”Valor?”
READ *, val
IF (val >= 0) EXIT
PRINT *,”Valor inválido!!!”
ENDDO
DO n = 2, val
fact = fact * n
ENDDO
PRINT *,”O factorial de “,val, “ é ”,fact
END
PROGRAM fx
IMPLICIT NONE
REAL :: x
INTEGER :: n
DO n = 10, 20
Algoritmia e Programação 64
FORTRAN
x = n / 10.
PRINT *, x**2 – x + 1
ENDDO
END
Estruturas de repetição
DO WHILE ( Condição )
Lista_de_instruções
END DO
Exemplos
PROGRAM media
IMPLICIT NONE
INTEGER, PARAMETER :: nalunos =30
INTEGER :: nota, cont = 1, stotal = 0
DO WHILE (cont <= nalunos)
Algoritmia e Programação 65
FORTRAN
PROGRAM exDoWhile
IMPLICIT NONE
INTEGER :: max, tsoma = 0, n = 0
PRINT *,”Insira o valor da soma”
READ *,max
DO WHILE ( tsoma < max)
n=n+1
tsoma = tsoma + n
END DO
PRINT *,”O valor é:”, n-1
END
Algoritmia e Programação 66
FORTRAN
IMPLICIT NONE
INTEGER :: i, j
DO i = 1, 4
DO j = 1, 4
PRINT *, i * j
END DO
END DO
END
EXIT e CYCLE
DO
DO
EXIT
PRINT *,”segundo ciclo” ! Não chega a ser executada
END DO
PRINT *,”primeiro ciclo” ! Imprime apenas esta mensagem
END DO
Algoritmia e Programação 67
FORTRAN
Exercícios propostos
2) O sen(x) pode ser calculado com base na soma dos termos de uma série
infinita, do tipo:
3
x x5 x7
sen( x) = x + + ...
3! 5! 7!
A nível computacional não é viável calcular o valor da série até ao infinito,
pelo que o sen(x) é calculado com um dado erro através da seguinte função:
N
x 2n 1
sen( x) = ( 1) n 1
n =1 (2n 1)!
Para um dado valor x, determine o N que permite obter o sen(x) com a mesma
precisão da função intrínseca SIN(X).
Algoritmia e Programação 68
FORTRAN
FORMAT
label FORMAT(Lista_formatadores_e_strings)
Descritores de formato
Algoritmia e Programação 69
FORTRAN
Número de repetições
rIw - rIw.m
Algoritmia e Programação 70
FORTRAN
Espaçamento vertical
Caracter de Imagem da linha a imprimir
controlo
vertical
1 2 133
Exemplo:
FORMAT(‘1’, ...)
Arrays
...
a(1) = 540
Memória
a(2) = 912 array a
do
computador a(3) = 123
a(4) = 321
...
Algoritmia e Programação 71
FORTRAN
Declaração de arrays
Exemplo:
INTEGER, DIMENSION(4) :: a ! a(1), a(2), a(3) e a(4)
Exemplo1:
REAL, DIMENSION(10) :: LstNotas
LstNotas(1) = 10
LstNotas(10) = 15.5
PRINT *,”A nota 1 é “, LstNotas(1)
Exemplo2:
REAL, DIMENSION(5) :: a
READ *, a(2)
a(3) = (a(1) + a(2)) / 2
Algoritmia e Programação 72
FORTRAN
Inicialização de arrays
A inicialização dos arrays pode ser feita segundo uma das seguintes
formas:
Utilizando expressões de atribuição;
Iniciar aquando da declaração das variáveis;
Utilizando instruções de entrada ( ex: READ).
O que é equivalente a:
REAL, DIMENSION(5) :: array1
array1 = (/ 0.1, 0.2, 0.3, 0.4, 0.5 /)
Algoritmia e Programação 73
FORTRAN
DO i = 1, 5
READ *, array1( i )
END DO
Ciclo DO implícito
(Arg1, Arg2, ..., Índice = Vinicial, Vfinal, Incremento)
Exemplos:
REAL, DIMENSION(500) :: array1 = (/ (0.0, i = 1, 500) /)
INTEGER, DIMENSION(500) :: array2 = (/ (i, i = 1, 500) /)
INTEGER, DIMENSION(25) :: array3 = (/ ( (0, i = 1, 4), 5*j, j = 1, 5) /)
Limites do array
Exemplo:
REAL, DIMENSION(-2:2) :: a =(/ -2.0, -1.0, 0.0, 1.0, 2.0 /)
Algoritmia e Programação 74
FORTRAN
Exemplo:
Determinar o máximo valor de um array.
PROGRAM Maximo
IMPLICIT NONE
INTEGER, PARAMETER :: TARRAY = 100
REAL, DIMENSION(TARRAY) :: array
REAL :: max
INTEGER :: i
! Inicialização do array ...
max = array(1)
DO i = 2, TARRAY
IF( max < array(i) ) max = array(i)
END DO
PRINT *,”Máximo = “, max
END
PROGRAM media_superior
IMPLICIT NONE
INTEGER, PARAMETER :: NVAL = 10
REAL, DIMENSION(NVAL) :: lval
REAL :: soma = 0.0, media
INTEGER :: i
DO i = 1, NVAL
PRINT *,”Insira um valor”
Algoritmia e Programação 75
FORTRAN
READ *, lval(i)
soma = soma + lval(i)
END DO
media = soma / NVAL
DO i = 1, NVAL
IF( lval(i) > media ) THEN
PRINT *,lval(i), “é superior à média”
END IF
END DO
END
Exercícios propostos
Algoritmia e Programação 76
FORTRAN
O Fortran é das poucas linguagens que permite que se aplique alguns dos
operadores escalares e funções implícitas aos arrays, desde que se garanta a
seguinte condição:
Caso o operador a utilizar seja do tipo binário em que ambos
operandos são arrays, então estes devem possuir a mesma estrutura,
isto é, a mesma dimensão e os mesmos limites.
Exemplo 1:
INTEGER, DIMENSION(10) :: a, b, c
...
a=b+c ! Assim é mais fácil
é equivalente a ter:
INTEGER, DIMENSION(10) :: a, b, c
...
DO i = 1, 10
a(i) = b(i) + c(i)
END DO
Exemplo 2:
INTEGER, DIMENSION(10) :: a, b
INTEGER :: K = 10
...
a=K*b ! Assim é mais fácil
é equivalente a ter:
INTEGER, DIMENSION(10) :: a, b
INTEGER :: K = 10
Algoritmia e Programação 77
FORTRAN
...
DO i = 1, 10
a(i) = K * b(i)
END DO
Exemplo3:
INTEGER, DIMENSION(10) :: a, b
INTEGER :: m
...
a = abs(b)
m = maxval(a)
é equivalente a ter:
INTEGER, DIMENSION(10) :: a, b
INTEGER :: m
...
DO i = 1, 10
a(i) = abs(b(i))
END DO
m = maxval(a)
Sub-arrays de um array
O Fortran admite aceder aos arrays como um todo, ou por partes (sub-
arrays), sendo estas representadas da seguinte forma:
Algoritmia e Programação 78
FORTRAN
Exemplos:
INTEGER, DIMENSION(10) :: array1 = (/ (i, i=1,10) /)
INTEGER, DIMENSION(5) :: array2 = array1(3:7), array3 = array1(2:10:2)
! array2 = (/ 3, 4, 5, 6, 7 /)
! array3 = (/ 2, 4, 6, 8, 10 /)
Strings
Representação
As strings (constantes) são sequências de caracteres limitadas, à
esquerda e à direita, pelo caracter aspas (“) ou plica (‘).
As variáveis para strings são declaradas com o tipo CHARACTER,
utilizando o atributo LEN para indicar a quantidade máxima de
caracteres que a variável poderá vir a conter.
Para o tamanho de uma string contam todos os caracteres que surjam
entre plicas, incluindo espaços, tabuladores ou outro qualquer tipo de
caracter invisível.
Declaração de strings
CHARACTER (LEN = Tamanho_string) :: Lst_strings
CHARACTER (Tamanho_string) :: Lst_strings
CHARACTER (*) :: Lst_strings_vs_atribuição
Algoritmia e Programação 79
FORTRAN
Exemplo:
CHARACTER (7) :: a = “BOM DIA”
Inicialização de strings
Na declaração
CHARACTER (*) :: a = “BOM DIA”
Por atribuição
CHARACTER (7) :: a
a = ‘BOM DIA’
Com instruções de entrada (READ)
CHARACTER (7) :: a
READ *, a
Sub-strings
Exemplos:
CHARACTER (*) :: a = “BOM DIA”
CHARACTER (3) :: b, c
b = a(1:3)
c = a(5:7)
PRINT *, b, “ “, c ! dá BOM DIA
PROGRAM exemplo
IMPLICIT NONE
CHARACTER (8) :: a, b, c
Algoritmia e Programação 80
FORTRAN
CHARACTER :: z
a = ‘ABCDEFGH’ ! a = ‘ABCDEFGH’
b = ‘12345678’ ! b = ‘12345678’
c = a(5:7) ! c = ‘EFG em que caracter espaço
b(7:8) = a(2:6) ! b = ‘123456BC’
z = a(1:1) ! z = ‘A’
END
Exemplo:
PROGRAM exemplo
IMPLICIT NONE
CHARACTER (10) :: a
CHARACTER (8) :: b, c
a = ‘ABCDEFGHIJ’ ! a = ‘ABCDEFGHIJ’
b = ‘12345678’ ! b = ‘12345678’
c = a(1:3) // b(4:5) // a(6:8) ! c = ‘ABC45FGH’
END
Algoritmia e Programação 81
FORTRAN
Algoritmia e Programação 82
FORTRAN
Algoritmia e Programação 83
FORTRAN
Arrays de strings
Algoritmia e Programação 84
FORTRAN
Arrays multi-dimensionais
Exemplo:
INTEGER, DIMENSION(3,5) :: a
a
1 2 3 4 5
Exemplo:
INTEGER, DIMENSION(2,3,5) :: array
INTEGER :: i
array(1,1,1) = 10
DO i = 1, 3
PRINT *, array(2, i, 3)
END DO
PRINT *, (array(2, i, 3), i =1, 3)
Algoritmia e Programação 85
FORTRAN
Exemplo:
INTEGER,DIMENSION(2,3) :: a= RESHAPE((/ 11,12,13,21,22,23 /), (/2, 3/))
É equivalente a ter:
INTEGER, DIMENSION(2,3,5) :: a
INTEGER :: x, y, z
READ *, (((a(x,y,z), z = 1,5), y = 1,3), x = 1,2)
Algoritmia e Programação 86
FORTRAN
Sintaxe
[nome:] WHERE (máscara)
Expressão_Atribuição_Array
ELSEWHERE
Expressão_Atribuição_Array
END WHERE [nome]
Algoritmia e Programação 87
FORTRAN
Exemplo:
DO i = 1, 10
DO j = 1, 5
IF ( a( i, j) > 0) THEN
b( i, j) = 1
ELSE
b( i, j) = 0
ENDIF
ENDDO
ENDDO
É equivalente a ter:
WHERE ( a(i, j) > 0 )
b( i, j) = 1
ELSEWHERE
b( i, j) = 0
ENDWHERE
Exemplo:
DO i = 1, 10
IF ( a( i ) < 0) a( i ) = 0
ENDDO
É equivalente a ter:
WHERE (a( i ) < 0 ) a( i ) = 0
Algoritmia e Programação 88
FORTRAN
Sintaxe
FORALL (expr1, ... , expr2, condição)
instr1
.
.
.
instrN
END FORALL
onde instr pode ser uma operação aritmética ou uma atribuição de apontadores
e expr tem o seguinte formato geral,
Algoritmia e Programação 89
FORTRAN
Exemplo1:
FORALL (i = 1:m, j = 1:n)
x(i,j) = i+j
END FORALL
Exemplo2:
FORALL (i = 1:6, a(i) .NE. 0.0)
b(i) = 1.0 / a(i)
END FORALL
é equivalente a ter:
DO i = 1, 6
IF (a(i) .NE. 0.0) THEN
b(i) = 1.0 / a(i)
END IF
END DO
Algoritmia e Programação 90
FORTRAN
Definição
TYPE [::] Nome_do_tipo
Definições_das_componentes_do_tipo
END TYPE [Nome_do_tipo]
Exemplos:
TYPE Ponto TYPE Ponto3D
REAL :: x, y REAL :: x, y, z
END TYPE END TYPE
TYPE Data
INTEGER :: dia, mes, ano
END TYPE
Exemplo:
TYPE(Ponto) :: p1, p2
Algoritmia e Programação 91
FORTRAN
Na declaração
TYPE(Nome_do_tipo)[,...] ::Variável = Nome_do_tipo(Valores_dos_campos)
Exemplo:
TYPE(Ponto) :: p1, p2 = Ponto(12., 45.5)
Por atribuição
Variável = Nome_do_tipo( Valores_dos_campos )
Exemplo:
p1 = ponto(0.0, 0.5)
Exemplo:
PRINT *, p1%x
PRINT *, p2%y
Exemplos:
TYPE Recta
TYPE(Ponto) :: p1, p2
END TYPE
Algoritmia e Programação 92
FORTRAN
TYPE Aluno
INTEGER :: nmec
CHARACTER (20) :: nome
TYPE(Data) :: dnasc
END TYPE
Algoritmia e Programação 93
FORTRAN
Exemplo 1
Implementar um programa em que dados dois pontos de um quadrado,
indique qual a área do mesmo.
PROGRAM quadrado
IMPLICIT NONE
TYPE Ponto
REAL :: x, y
END TYPE
TYPE(Ponto) :: p1, p2
PRINT *, “Insira coordenadas do 1º ponto”
READ *, p1
PRINT *, “Insira coordenadas do 2º ponto”
READ *, p2
PRINT , “Área = “, (p2%x-p1%x)**2
END
Exemplo 1
Implementar um programa que indique quais os alunos da turma de AP
que obtiveram uma nota no teste superior à média (da turma).
PROGRAM Alunos
INTEGER, PARAMETER :: nalunos = 30
TYPE Aluno
CHARACTER(20) :: nome
REAL :: nota
END TYPE
TYPE(Aluno), DIMENSION(nalunos) :: Lst
Algoritmia e Programação 94
FORTRAN
INTEGER :: i
REAL :: soma = 0, media
DO i = 1, nalunos
PRINT *,“Nome e nota do aluno nº “, i
READ *, Lst(i)%nome ! ou Lst(i) para ler os 2 campos
READ *, Lst(i)%nota
soma = soma + Lst(i)%nota
END DO
media = soma / REAL(nalunos)
DO i = 1, nalunos
IF(Lst(i)%nota > media) PRINT *, Lst(i)%nome
END DO
END
Exercícios propostos
Algoritmia e Programação 95
FORTRAN
Procedimentos
Vantagens:
Algoritmia e Programação 96
FORTRAN
Tipos de procedimentos
Procedimentos internos
Algoritmia e Programação 97
FORTRAN
Procedimentos externos
PROGRAM NomePrograma
Declarações
Corpo do Programa
END PROGRAM
Procedimentos externos
Algoritmia e Programação 98
FORTRAN
Exemplo:
! Ficheiro com o módulo ! Ficheiro com o programa principal
MODULE Nome_do_Módulo PROGRAM NomePrograma
... USE Nome_do_Módulo
END MODULE Declarações
Corpo do Programa
END PROGRAM
PROGRAM Area_Circulo
IMPLICIT NONE
Algoritmia e Programação 99
FORTRAN
PROGRAM Area_Circulo
IMPLICIT NONE
REAL :: raio
PRINT *,”Insira o raio do círculo”
READ *, raio
CALL Det_Area(raio)
END PROGRAM
SUBROUTINE Det_Area(r)
REAL, PARAMETER :: PI = 3.1415
REAL, INTENT(IN) :: r
PRINT *,”Área do círculo = “, PI * r**2
END SUBROUTINE Det_Area
Subrotinas
Definição e implementação
Uma subrotina deve ser definida segundo a seguinte sintaxe:
SUBROUTINE Nome_Subrotina (Lista_Pârametros)
Declarações
Parte_Executável
[RETURN]
END SUBROUTINE [Nome_Subrotina]
Nome_Subrotina Identificador;
Lista_Parâmetros Lista de parâmetros;
Declarações Declarações dos parâmetros e variáveis;
Parte_Executável Corpo da subrotina.
Comportamento da subrotina
A utilização dos procedimentos pressupõe duas entidades, uma que
invoca o procedimento e outra que é invocada (o próprio procedimento). O
esquema seguinte mostra esta dualidade de entidades:
Função Origem
(Quem invoca)
Subrotina
(Quem é invocado)
....
O INTENT tanto pode ser um atributo, que pode ser utilizado aquando
da declaração dos parâmetros, ou uma instrução que assinala a intenção dos
parâmetros após estes terem sido declarados.
Ou:
Tipo_parâmetro :: Lst_parâmetros
INTENT(IN | OUT | INOUT) Lst_parâmetros
Exemplos: Parâmetros
SUBROUTINE Soma(a, b, c)
REAL, INTENT(IN) :: a, b
REAL, INTENT(OUT) :: c
c=a+b
END SUBROUTINE
Exercícios propostos
Variáveis estáticas
Pode-se ainda utilizar a instrução SAVE, desde que esta seja colocada
imediatamente a seguir às declarações:
Funções em Fortran
Ou de outra forma:
FUNCTION Nome_Função ( Lista_parâmetros)
! Zona de declarações da função
Tipo_Retorno_Função :: Nome_Função
!Corpo da função
Nome_Função = expressão | READ *, Nome_Função
[RETURN]
...
END FUNCTION [Nome_Função]
Nome_Função ( Lista_parâmetros)
Exemplo:
PROGRAM Exemplo
IMPLICIT NONE
REAL :: a
PRINT *, Soma(10., 20.)
a = Soma(10., 20.)
PRINT *, a
CONTAINS
REAL FUNCTION Soma(x, y)
REAL, INTENT(IN) :: x, y
Soma = x + y
END FUNCTION
END
CONTAINS
REAL FUNCTION maior(x,y)
REAL, INTENT(IN) :: x, y
IF (x > y) THEN
maior = x
ELSE
maior = y
END IF
END FUNCTION
END
Procedimentos recursivos
RECURSIVE SUBROUTINE
Nome_Subrotina(Lista_parâmetros)
...
END SUBROUTINE [Nome_Subrotina]
t=0
END IF
END SUBROUTINE
MODULE exemplo
CONTAINS
REAL FUNCTION calculo(pri, seg, ter)
IMPLICIT NONE
REAL, INTENT(IN) :: pri, seg, ter
calculo = (pri - seg) / ter
END FUNCTION
END MODULE exemplo
PROGRAM teste
USE exemplo
IMPLICIT NONE
WRITE (*,*), calculo(3., 2., 1.)
WRITE (*,*), calculo(pri = 3., seg = 2., ter = 1.)
WRITE (*,*), calculo(ter = 1., seg = 2., pri = 3.)
END PROGRAM
Parâmetros opcionais
Declaração
Para se declarar os parâmetros como opcionais utiliza-se o atributo
OPTIONAL.
Tipo, INTENT(IN|OUT|INOUT), OPTIONAL :: Lista_parâmetros
Exemplo:
SUBROUTINE teste(a, b, c)
REAL, INTENT(IN) :: a, b
REAL, INTENT(IN), OPTIONAL :: c
...
END SUBROUTINE
Exemplo:
MODULE exemplo
CONTAINS
REAL FUNCTION media(a,b,c)
REAL, INTENT(IN) :: a, b
REAL, INTENT(IN), OPTIONAL :: c
IF (PRESENT(c)) THEN
media = (a + b + c) / 3
ELSE
media = (a + b) / 2
END IF
END FUNCTION
END MODULE
PROGRAM teste
USE exemplo
WRITE (*,*) media(10., 20., 30.)
WRITE (*,*) media(20., 30.)
WRITE (*,*) media(b=20., a=10., c=30.)
END PROGRAM
Exercícios propostos
5) Implemente uma função em que dados dois, três, ou quatro inteiros, devolva
o maior.
Processamento de ficheiros
WRITE
WRITE (control_list) output_list
control_list:
UNIT = unit_specifier ! Inteiro que identifica o ficheiro;
FMT = format_specifier ! É o formato segundo o qual se pretende
! aceder aos dados;
ADVANCE = character_expression ! Permite inserir, ou não, o
! new line após imprimir os argumentos da output_list.
“No” ! Não insere o new line
“Yes” ! Insere o new line (valor por defeito)
Exemplos:
WRITE (UNIT = 6, fmt = *) “Olá bom dia”
WRITE (6, *) “Olá bom dia”
WRITE (*, *) “Olá bom dia” PRINT *, “Olá bom dia”
WRITE (*,”(a)”, ADVANCE=”YES”) “Insira um valor”
READ *,valor
> Insira um valor
> 10
READ
READ (control_list) input_list
control_list:
UNIT = unit_specifier ! Inteiro que identifica o ficheiro;
FMT = format_specifier ! É o formato segundo o qual se pretende
! aceder aos dados;
ADVANCE = character_expression ! Permite acrescentar à lista
de entrada o caracter new line.
“No” ! Não insere o new line
“Yes” ! Insere o new line (valor por defeito)
IOSTAT = Variável_inteira
! Permite detectar a ocorrência de erros durante a operação.
Variável_inteira = 0 ! Operação bem sucedida.
Variável_inteira > 0 ! Ocorrência de erro.
Variável_inteira < 0 ! Operação bem sucedida
! tendo sido alcançado o fim do ficheiro.
END = Label
! Em caso de erro a execução continua na instrução identificada pela Label.
Exemplo:
READ (*,*) Largura, Altura
READ (*, FMT =*) Largura, Altura
READ (UNIT=*, IOSTAT=Erro, END=100) Largura, Altura
100 PRINT *,”Erro de acesso do teclado”
Acesso a um ficheiro
Ciclo de Operações:
Abrir Ficheiro
Ler/Escrever de/no ficheiro
Fechar Ficheiro
OPEN (...)
READ (...) ... / WRITE(...) ...
CLOSE
OPEN
OPEN (Lista_controlo)
Lista_controlo:
Identificador do ficheiro:
UNIT = constante_inteira/variável_inteira
Nome do ficheiro:
FILE = constante_string/variável_string
Modo de criar/abrir um ficheiro:
STATUS = constante_string/variável_string
“OLD” ! Abre um ficheiro que já existe.
“NEW” ! Cria e abre um novo ficheiro.
“REPLACE” ! Se o ficheiro não existir, cria e abre um novo
ficheiro, caso contrário substitui o actual ficheiro e abre.
Finalidade do acesso:
ACTION = constante_string/variável_string
“READ” ! Abre o ficheiro para leitura
“WRITE” ! Abre o ficheiro para escrita
“READWRITE” ! Abre o ficheiro para leitura e escrita
Tratamento de erros:
IOSTAT = Variável_inteira
Variável_inteira = 0 ! Operação bem sucedida.
Variável_inteira > 0 ! Ocorrência de erro.
Variável_inteira < 0 ! Operação bem sucedida, tendo sido alcançado
o fim do ficheiro.
Exemplos:
INTEGER :: erroescrita, erroleitura
CHARACTER(30) :: ficheiro
PRINT *, “Nome do ficheiro?”
READ *, ficheiro
OPEN(UNIT=20, FILE=ficheiro, STATUS=”REPLACE”, ACTION=”WRITE”, IOSTAT=erroescrita)
...
CLOSE
Instrução CLOSE permite “fechar” um ficheiro.
CLOSE (Lista_controlo)
Identificador do ficheiro:
UNIT = constante_inteira/variável_inteira
Exemplos:
CLOSE (UNIT=30, STATUS=”KEEP”)
CLOSE (30, ERR=200, STATUS=”DELETE”)
INQUIRE
Permite interrogar o sistema operativo sobre determinado ficheiro.
INQUIRE (UNIT = inteiro/var_inteira, Lista_controlo)
INQUIRE (FILE = nome_fich, Lista_controlo)
ACTION = variável_string
“READ” ! Ficheiro aberto em modo leitura
“WRITE” ! Ficheiro aberto em modo escrita
“READWRITE” ! Ficheiro aberto em modo leitura e escrita
“UNDEFINED” ! Ficheiro não aberto
READ = variável_string
! Permite determinar se o ficheiro foi aberto para leitura.
WRITE = variável_string
! Permite determinar se o ficheiro foi aberto para escrita.
READWRITE = variável_string
! Permite determinar se o ficheiro foi aberto para leitura e escrita.
“YES” ! Sinal de afirmativo
“NO” ! Sinal de negativo
“UNKNOWN” ! Ficheiro não aberto
BLANK = variável_string
“ZERO” ! Que os espaços, nos campos tipo
numérico, são tratados como zeros.
EXIST = variável_lógica
Permite verificar a existência de um ficheiro.
.TRUE. ! Caso o ficheiro exista
.FALSE. ! Caso o ficheiro não exista
FORM = variável_string
Permite determinar se o ficheiro está ou não formatado.
“FORMATTED” ! Formatado
“UNFORMATTED” ! Não formatado
“UNDEFINED” ! Ficheiro não aberto
IOSTAT = variável_inteira
Permite detectar a ocorrência de erros aquando da execução do
INQUIRE.
NAME = variável_string
Permite determinar o nome do ficheiro com base no UNIT.
Devolve o nome do ficheiro se este existir;
Caso contrário devolve “UNDEFINED”.
NAMED = variável_lógica
NUMBER = variável_inteira
Permite com base no nome, determinar o UNIT do ficheiro.
Se o ficheiro existir, devolve o respectivo UNIT;
Caso contrário, devolve –1.
OPENED = variável_lógica
Permite determinar se um ficheiro está, ou não, aberto.
.TRUE. ! Se o ficheiro está aberto
.FALSE. ! Se o ficheiro está fechado
REWIND
Posiciona o acesso do ficheiro no início deste.
REWIND identificador_ficheiro
BACKSPACE
Em ficheiros abertos em modo formatado, permite retornar ao início da
linha anterior.
BACKSPACE identificador_ficheiro
ENDFILE
Escreve o caracter de fim de ficheiro (no ficheiro) e posiciona-se após
este.
ENDFILE identificador_ficheiro