Buscar

Manual de Utilização e Comandos FORTRAN USP 2006

Prévia do material em texto

Universidade de São Paulo - USP 
Instituto de Ciências Matemáticas de São Carlos - ICMSC 
Departamento de Ciências da Computação e Estatística - SCE 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Manual de Utilização e 
Principais Comandos da 
Linguagem Fortran (versão 5.1) 
 
 
 
 
 
 
 
 
 
 
 Claudia Regina Milaré 
Profa. Dra. Roseli Francelin 
 
 
 
 
 
São Carlos, junho de 1996 
 
 
1. Introdução 
Este trabalho destina-se aos alunos de graduação interessados em obter 
conhecimentos básicos em programação de computador utilizando a Linguagem 
Fortran (versão 5.1). O trabalho pretende apenas descrever os camandos 
principais da Linguagem Fortran (versão 5.1), dando ênfase nas mudanças que 
ocorreram nesta nova versão. 
 
Nas primeiras seções, é descrito alguns conceitos básicos sobre a estrutura de um 
computador e seu funcionamento. Em seguida, o que é um sistema de 
computação, um breve comentário à respeito do sistema operacional MS-DOS e a 
descrição de algoritmos e de uma linguagem utilizada para elaborá-los. Logo 
após, é apresentado os principais comandos da Linguagem Fortran (versão 5.1) e 
finalmente a conclusão. 
 
 
2. Estrutura Básica de um Computador 
 
Os computadores evoluiram muito desde a sua invenção, estão cada vez menores 
e mais poderosos, mas independente de seu tamanho e complexidade, eles 
possuem os seguintes componentes básicos: a Unidade Central de 
Processamento (UCP ou CPU) que engloba a Unidade Lógica Aritmética (ULA) 
e a Unidade de Controle, a Memória e as Uunidades de Entrada e Saída. 
 
A memória do computador é dividida em dois tipos: memória principal e 
memória secundária ou externa. A memória principal ou memória RAM como é 
mais conhecida, é onde as informações recebidas e processadas pelo computador 
são armazenadas durante a sessão de trabalho. RAM é a abreviação de "Random 
Access Memory", ou Memória de Acesso Aleatório. As informações gravadas 
nela ficam disponíveis enquanto o computador está ligado. A memória secundária 
é composta de dispositivos eletromagnéticos, mais conhecidos como discos. 
Existem dois tipos de disco: discos rígidos com grande capacidade de 
armazenamento de informações e de acesso extremamente rápido e os discos 
flexíveis ou disquetes que são dispositivos com menor capacidade. 
 
A memória do computador, tanto a principal quanto a secundária, é dividida em 
unidades pequenas e de mesmo tamanho, chamadas palavras, tendo cada uma seu 
próprio endereço. Cada palavra é capaz de armazenar uma informação, como por 
exemplo, o resultado de uma operação aritmética. 
 
As unidades de saída de dados são normalmente os monitores, onde são 
mostrados os comandos que são passados para o computador e os resultados das 
informações depois de processadas e interpretadas; e as impressoras onde 
normalmente são impressos os dados em forma de relatórios, arquivos fontes de 
programas, cartas, etc. 
 
As unidades de entrada de dados fornecem um meio pelo qual as informações 
são transmitidas ao computador para serem interpretadas e processadas. Os mais 
populares são o teclado e o disco. 
 
Na Unidade Lógica Aritmética (ULA) são processadas todas as operações 
lógicas e aritméticas do computador. 
 
A Unidade de Controle controla a ação de todos os dispositivos do computador. 
Operando sob o controle das instruções do programador que está na memória 
principal, a Unidade de Controle faz com que o dispositivo de entrada leia os 
dados, transfere valores adequados da memória para a ULA, armazena e recupera 
dados e resultados intermediários guardados na memória principal, e, transfere os 
resultados para o dispositivo de saída. 
 
 
3. Funcionamento de um Computador 
 
Um programa é uma seqüência de instruções que descrevem as ações que se 
deseja que o computador realize, ou seja, um programa consiste na tradução de 
um algoritmo em uma forma inteligível para a máquina, o que é feito com o uso 
de uma linguagem de programação. Um programa especificado (escrito) em uma 
linguagem de alto nível é denominado programa fonte. 
 
Para que um programa possa ser executado, ele deve passar pelo processo de 
Compilação, onde se traduzirá o programa fonte para o programa objeto, que são 
arquivos de código objeto com a extensão “.OBJ”. Estes arquivos contêm um 
código binário que não pode ser entendido na exibição e nem na impressão. Em 
seguida, o processo de Composição é chamado, o editor de ligação (linker) toma 
um ou mais arquivos “.OBJ” e processa-os juntos para produzir um único arquivo 
executável com a extensão “.EXE”. O editor de ligação pode também processar o 
código proveniente de bibliotecas de rotinas pré-compiladas fornecidas pelo 
Fortran. E, finalmente, o programa poderá ser executado. A Figura 1 mostra as 
etapas de um processamento. 
 
Etapa 1:
COMPILAÇÃO
Etapa 2:
COMPOSIÇÃO
Etapa 3:
EXECUÇÃO
Programa
Fonte
Programa
Objeto
Tradutor
(Compilador)
Editor
de Ligação
Subprogramas
Compilados
Independentemente
Dados
Programa
Executável Resultados
 
 
Figura 1 - Etapas de um processamento. 
 
 
Um programa fonte pode ser escrito em várias linguagens, mas geralmente, as 
que são utilizadas são chamadas de Linguagens de Alto Nível. Estas linguagens 
expressam as soluções usando uma notação mais dirigida para os problemas, mais 
próxima da linguagem natural. 
 
A Linguagem FORTRAN nasceu em 1956 e foi a primeira linguagem de 
programação de alto nível a ser proposta. Foi sugerida visando a resolução de 
problemas da área científica através do uso de computadores. Seu nome é uma 
composição de FORmula TRANslation. 
 
 
4. Sistemas de Computação 
 
Um Sistema de Computação consiste de hardware (dispositivos físicos), 
programas do sistema e programas aplicativos, como mostra a Figura 2. Um 
computador seria apenas um amontoado de fios e dispositivos eletromecânicos 
sem nenhuma utilidade prática se não existisse o software, que é o conjunto de 
programas e dados que juntamente com o hardware proporcionam ao usuário o 
controle e utilização dos recursos oferecidos pelo computador. Com o software o 
computador pode armazenar, processar, recuperar informações, além de editar 
cartas e programas e proporcionar diversos outros recursos. O software pode ser 
dividido em dois tipos: programas do sistema, que fazem o gerenciamento e o 
controle das operações básicas do computador e programas aplicativos, que são 
programas desenvolvidos para atender as necessidades dos mais diversos tipos de 
usuários. O mais importante dos programas do sistema é o sistema operacional, 
que controla todos os recursos do computador e fornece a base para a utilização 
dos mais diversos tipos de aplicativos. 
 
Máquina
Linguagem de Máquina
Sistema Operacional
Compiladores
Sistema 
Bancário
Reservas 
Aéreas Jogos
Editores Interpretador
Hardware
Programas do
Sistema
Aplicativos
 
 
Figura 2 - Esquema de um Sistema de Computação. 
 
 
5. Sistema Operacional DOS 
 
O Sistema Operacional DOS ("Disk Operating System") da Microsoft é um dos 
mais utilizados no mundo. Ele é chamado de sistema de gerenciamento de disco 
porque trata do gerenciamento de discos, arquivos em disco e do fluxo de 
informações entre as várias partes de um sistema de computação. O MS-DOS 
trabalha com comandos que informam ao sistema as tarefas a serem realizadas. 
Esses comandos permitem a realização das seguintes tarefas: 
 
 • gerenciar arquivos e diretórios; 
 • manutenção de discos (rígidos e flexíveis); 
 • configurar o hardware; 
 • otimizar o uso da memória; 
 • melhorar o desempenho dos programas; 
 • personalizar o MS-DOS. 
 
O MS-DOS tem várias versões desde o seu lançamento em 1981. A primeira 
versãofoi denominada e numerada como 1.00. A partir de então foram feitas 
várias revisões e adicionados novos recursos para adaptar o MS-DOS à 
sofisticação cada vez maior dos computadores e corrigir os erros apresentados. 
Por isso vários comandos e conceitos básicos do MS-DOS podem ser aplicados 
para qualquer versão. A versão do MS-DOS é mostrada toda vez que o 
computador é ligado e o mesmo é trazido ("carregado") para a memória do 
computador. 
 
 
 
6. Algoritmos 
 
Um conceito básico de programação é o de algoritmo. Programar é basicamente 
construir algoritmos. Algoritmo é uma seqüência ordenada e sem ambigüidade de 
instruções que levam à solução de um determinado problema. Um algoritmo deve 
ser detalhado suficientemente até o ponto onde o executor (agente) possa 
compreender. Alguns exemplos de algoritmos são: 
 
 ∗ receita de bolo 
 ∗ indicação de um endereço residencial 
 ∗ planta residencial 
 
Exemplo de um algoritmo para a utilização de um telefone: 
 
INÍCIO 
 Retire o fone do gancho 
 Disque o número desejado 
 Converse 
 Recoloque o fone no gancho 
FIM 
 
Suponha que se quer instruir um robô doméstico para dar recados. Na forma 
acima, este algoritmo não está adequado, uma vez que não pressupõe alguns 
problemas. Há detalhes essenciais que não foram especificados: 
 
 ∗ linha ocupada 
 ∗ linha errada 
 ∗ ligação não se completar 
 
É preciso detalhar mais o algoritmo acima para que o robô saiba agir quando algo 
acontecer. 
 
INÍCIO 
 Retire o fone do gancho 
 Se o telefone funciona então 
 Início 
 Disque o número desejado 
 Se a linha não está ocupada então 
 Início 
 Espere um tempo 
 Se atenderem então 
 Início 
 Converse 
 Fim 
 Fim 
 Fim 
 Recoloque o fone no gancho 
FIM 
 
O algoritmo está completo? E no caso de ligação errada? 
 
INÍCIO 
 Retire o fone do gancho 
 Se o telefone funciona então 
 Início 
 Disque o número desejado 
 Se a linha não está ocupada então 
 Início 
 Espere um tempo 
 Se atenderem então 
 Início 
 Se o número digitado está correto então 
 Início 
 Converse 
 Fim 
 Fim 
 Fim 
 Fim 
 Recoloque o fone no gancho 
FIM 
 
Exemplo de um algoritmo que lê vários números e seleciona o menor deles. 
 
INÍCIO 
 Leia um número 
 Repita o processo 
 Leia outro número 
 Se este número for menor que o anterior então 
 Guarde este número 
 Jogue fora o anterior 
 Senão 
 Guarde o anterior 
 Jogue este fora 
 Fim 
 Até ler todos os números 
 Exiba o número guardado 
FIM 
 
Exercícios: 
 
1. Elabore um algoritmo para mudar um pneu furado. Admita que estão 
disponíveis um macaco e outro pneu em boas condições. 
 
2. Elabore um algoritmo para fazer pipoca, usando manteiga, sal e milho de 
pipoca. 
 
7. Linguagem Pseudo-Código 
 
Existem várias formas de se construir um algoritmo: através de pseudo-código, 
fluxogramas e cartas NS. A seguir é descrita a linguagem pseudo-código para a 
elaboração de algoritmos. 
 
7.1 Dados, Tipos de Dados e Operações Primitivas 
 
O objetivo principal de um computador é manipular dados ou informações. A 
maioria dos computadores é capaz de lidar com vários tipos diferentes de dados. 
 
Os tipos de dados são: 
 
 ∗ Numéricos: inteiros e reais. 
 ∗ Não numéricos: caracteres e lógicos. 
 
Exemplos: 
 
 Inteiros: 13 -6 1000 20 -233 
 
 Reais: 23.8 -1378.2 -8.8 -42.321 
 
 As frações devem ser armazenadas na forma decimal: 
 
 5.32 x 10-2 
 1.29 x 103 
 0.528 x 10-10 
 
 1234567810 → 123456 x 104 ou 0.123456 x 1010 
 
 Caracteres: ' A ' ' B ' ' 2 ' ' $ ' ' + ' ' = ' 
 
 
 Cadeia de Caracteres é um conjunto de caracteres ou strings: 
 
 ' MARIA ' ' ICC ' ' 325 ' 
 
 
Na prática, uma cadeia de caracteres pode ter até 255 caracteres. Internamente, o 
computador registra os caracteres da cadeia (excluindo os apóstrofos) e o número 
de caracteres desta cadeia. 
 
Os dados lógicos têm apenas dois valores possíveis: VERDADEIRO e FALSO. 
 
Os dados podem ser manipulados utilizando os seguintes operadores: 
 
 Adição: + 
 Subtração: - 
 Multiplicação: * 
 Divisão: / 
 Exponenciação: ↑ 
 
No cálculo de uma expressão numérica, a prioridade das operações é a seguinte: 
 
 1. ↑ exponenciação (da direita para esquerda) 
 2. - , + sinal dos operandos 
 3. * , / multiplicação e divisão (da esquerda para direita) 
 4. + , - adição e subtração (da esquerda para direita) 
 
Os parênteses podem mudar a prioridade das operações. Parênteses mais internos 
devem ser resolvidos primeiro. 
 
Exemplos: 
 
 1. 13 * 6 + 3 = 78 + 3 = 81 
 
 2. 8 + 7 * 3 + 4 * 5 = 8 + 21 + 20 = 49 
 
 3. 3 ↑ 2 - 2 * 3 = 9 - 2 * 3 = 9 - 6 = 3 
 
 4. 2 ↑ 3 ↑ 2 = 2 ↑ 9 = 512 
 
 5. (2 ↑ 3) ↑ 2 = 8 ↑ 2 = 64 
 
 6. -3 * 7 + 2 ↑ 3 / 4 - 6 = -3 * 7 + 8 / 4 - 6 = -21 + 2 - 6 = -25 
 
 7. (3 * (6 + 2)) * 8 = (3 * 8) * 8 = 24 * 8 = 192 
 
 
Observação: se os termos da operação são todos inteiros, o resultado será inteiro; 
caso contrário, será real. 
 
Exemplos: 
 
 3 + 2 = 5 
 3 + 2.0 = 5.0 
 3 * 2.2 = 6.6 
 8 / 2 = 4 
 8 / 5 = 1 (resultado truncado) 
 8.0 / 5 = 1.6 
 2 ↑ 3 = 8 (a base e o expoente podem ser inteiros ou reais) 
 
 
 
7.2 Variáveis e Expressões 
 
Uma variável em um programa pode ser definida como uma entidade que possui 
um valor e é conhecida no programa por um nome (identificador). 
 
Por exemplo: 
 
 x b b ac
a
1 4
2
2
= − +
−
 
 
 x b b ac
a
2 4
2
2
= − −
−
 
 
 
 
Esta relação, utilizando variáveis, define uma fórmula geral que pode ser aplicada 
a cálculos específicos. a, b, c, x1 e x2 são as variáveis que fazem parte desta 
fórmula. Estas variáveis 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. 
 
Observações: 
 
1. Uma variável pode receber muitos valores, mas somente um único valor em 
um determinado instante. 
 
2. Em programas de computadores, os nomes das variáveis 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 variáveis. Na linguagem FORTRAN, o nome deve sempre começar 
com uma letra seguida de outros caracteres quaisquer, exceto o branco ( ' ' ). 
 
Exemplos válidos: TOTAL MAIOR A123 LADO2 RAIZ1 
 
Exemplos não válidos: 3ARQ DOIS P 
 
 
7.3 Comando de Atribuição 
 
Uma forma de dar valores às variáveis é através do comando de atribuição. 
 
Forma Geral: VARIÁVEL ← EXPRESSÃO 
 
onde EXPRESSÃO é uma combinação de variáveis, constantes e operadores. 
 
Exemplos: 
 
 A ← 3 
 B ← -265 
 C ← A + B - 2 
 TERMO ← 3 + 20 - 7 * C 
 D ← 'casa' 
 A ← 10 
 E ← 'A' 
 
 
7.4 Tipos de Variáveis 
 
Toda variável tem um tipo que determina o tipo de dado que ela poderá assumir. 
Geralmente estes tipos são: Inteiro, Real, Caracter e Lógico. Uma variável do 
tipo inteiro, por exemplo, só pode armazenar constantes do tipo inteiro. Se A é 
uma variável do tipo real, só pode armazenar valores reais. 
 
Um erro ocorrerá ao se atribuir a uma variável do tipo caracter um valor 
numérico. Neste caso, não há compatibilidade entre os tipos. No entanto, não 
ocorrerá erro ao se atribuir um valor inteiro a uma variável real, ou um valor real 
a uma variável inteira. 
 
Suponha a variável A do tipo inteira e a variável B do tipo real: 
 
 A ← 20.834 
 B ← -27 
 
Automaticamente, o valor -27é convertido para real, -27.0. O valor de 20.834 é 
convertido para inteiro, 20. Observe que no caso de 20.834, o valor é truncado, 
não correspondendo ao valor real. Deve-se portanto evitar as conversões. 
 
 
7.5 Aplicações de Algoritmos 
 
Para escrever os primeiros algoritmos, será utilizada a linguagem pseudo-código 
que facilita a tradução para uma linguagem adequada de programação; e ainda 
permite ao desenvolvedor pensar no problema e não na máquina que vai executar 
o algoritmo. 
 
Exemplos: 
 
1. Dados dois números, imprimir o dobro da soma destes números. 
 
INÍCIO 
 INTEIRO: A, B, C, D 
 LEIA(A,B) 
 C ← A + B 
 D ← 2 * C 
 ESCREVA(D) 
FIM 
 
INÍCIO 
 INTEIRO: A, B, C 
 LEIA(A,B) 
 C ← 2 * (A + B) 
 ESCREVA(D) 
FIM 
 
 
2. Ler quatro notas, calcular a média aritmética e imprimir as notas e a média com 
mensagens significativas. 
 
INÍCIO 
 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 são: 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 impressão será: 
 
 Nota 1 = 4.0 
 Nota 2 = 2.0 
 Nota 3 = 5.0 
 Nota 4 = 8.0 
 Media = 4.75 
 
3. Escrever um algoritmo para ler uma temperatura dada na escala Celsius e 
imprimir a equivalente em Farenheit ( °F = 9 °C + 32 ). 
 5 
 
INÍCIO 
 LEIA(C) 
 F ← 9/5 * C + 32 
 ESCREVA( 'Temperatura em graus Celcius: ' , C) 
 ESCREVA( 'Temperatura equivalente em graus Farenheit: ', F) 
FIM 
 
 
 
 
 
8. Principais Comandos da Linguagem Fortran 
 
A seguir os principais comandos da Linguagem Fortran (Versão 5.1) serão 
apresentados, destacando-se as diferenças existentes entre a nova versão e a 
anterior. 
 
8.1 Declaração de Variáveis 
 
Todas as variáveis utilizadas devem estar declaradas no início do programa. 
Exemplos: 
 
 INTEGER A 
 REAL B 
 LOGICAL C 
 CHARACTER*5 D (pode-se armazenar uma palavra de no máximo 5 
 caracteres na variável D) 
 
8.2. Comando READ 
 
 
O comando READ especifica o dispositivo de leitura dos dados, associa um 
formato à leitura dos dados, especifica a lista de variáveis que irão receber os 
dados lidos e ainda aciona a ação leitura. 
 
Forma Geral: 
 
 READ(i,n) <lista de variáveis> 
 
onde: i - é um número inteiro e especifica o dispositivo de entrada dos dados 
 (i será * para o teclado). 
 n - número do comando FORMAT, que especifica o formato dos dados 
 de entrada (n será * quando não se tem nenhum comando FORMAT 
 associado ao comando READ). 
 <lista de variáveis> - nomes de variáveis, separadas por vírgula. 
 
Exemplo: READ(*,*) A, B 
 
Serão lidos valores de dados digitados no teclado e atribuídos às variáveis A e B. 
Os dados digitados devem ser compatíveis com os tipos das variáveis que irão 
recebê-los. 
 
 
8.2 Comando WRITE 
 
O comando WRITE especifica o dispositivo de impressão/exibição dos dados, 
associa um formato de exibição/impressão dos dados, especifica a lista de 
variáveis ou constantes a serem exibidas ou impressas e aciona a ação 
exibição/impressão. 
 
Forma Geral: 
 
 WRITE(i,n) <lista> 
 
onde: i - é um número inteiro e especifica o dispositivo que será utilizado para 
 exibição (i será * para o vídeo) ou impressão (i será o número da 
 impressora definida pelo comando OPEN). 
 n - número do comando FORMAT, que especifica o formato dos dados 
 de impressão (n será * quando não se tem nenhum comando 
 FORMAT associado ao comando WRITE). 
 <lista> - nomes de variáveis ou expressões aritméticas, separadas por 
 vírgula. 
 
 
Exemplo: WRITE(*,10) A, B 
 
Os valores das variáveis A e B serão exibidos na tela conforme o formato 
especificado pelo comando FORMAT de número 10. 
 
 
8.3 Comando FORMAT 
 
O comando FORMAT permite especificar a forma em que os dados serão lidos 
ou impressos pelos comandos de E/S associados. 
 
Forma Geral: 
 
 n FORMAT('x', esp1, ..., espn) 
 
onde: n - é o número do comando FORMAT. 
 x - é um caracter de controle e só deve ser utilizado quando o FORMAT 
 estiver associado a um comando de saída (assumir x = 1X). 
 espi - são especificações de formato. 
 
A seguir serão apresentadas algumas especificações de formato: 
 
1. Especificação numérica para inteiro: especifica quantos caracteres serão 
reservados para o dado numérico inteiro. 
 
Forma Geral: 
 
 I n 
 
onde: I - representa o formato inteiro. 
 n - indica o comprimento do dado em caracteres. 
 
Exemplo: Para imprimir os valores abaixo, o formato mínimo a ser utilizado é: 
 23 → I2 
 +245 → I4 
 - 4567 → I5 
 
2. Especificação numérica para real: especifica quantos caracteres serão 
reservados para o dado numérico real. 
 
Forma Geral: 
 
 F n.d 
 
onde: F - representa o formato ponto flutuante. 
 n - indica o comprimento do dado em caracteres. 
 d - indica o número de casas decimais. 
 
Exemplo: X = 32.125 
 WRITE(*, 10) X 
 10 FORMAT(1X, F7.3) 
 
 Será impresso: b 3 2 . 1 2 5 
 
 
3. Especificação numérica para real com exponente: define o comprimento do 
campo e o número de casas decimais associados aos valores reais com expoente, 
lidos ou escritos. 
 
Forma Geral: 
 
 E n.d 
 
onde: E - representa o formato ponto flutuante com expoente. 
 n - indica o comprimento do dado em caracteres. 
 d - indica o número de casas decimais. 
 
Exemplo: Para imprimir totalmente os valores reais abaixo, o formato mínimo a 
ser utilizado é: 
 
 1.23E+03 → E8.2 
 -5.1E-02 → E8.1 
 
 
4. Especificação para caracteres: especifica quantos caracteres serão aceitos 
para o dado alfanumérico. 
 
Forma Geral: 
 
 An 
 
onde: A - representa o formato alfanumérico. 
 n - indica o número de caracteres. 
 
Exemplo: B = 'LINGUAGEM' 
 WRITE(*, 5) B 
 5 FORMAT(1X, A6) 
 
 Será impresso: LINGUA 
 
 
 
5. Formatos de edição. 
 
 nX - define n posições em branco na linha. 
 '...' - exibe os caracteres que estiverem entre apóstrofo. 
 nH - exibe os próximos n caracteres depois de H. 
 / - salta para a linha seguinte. 
 \ - não avança o cursor para a próxima linha e o conserva na posição 
 corrente. 
 TLn - retrocede o cursor n posições para a esquerda. 
 TRn - retrocede o cursor n posições para a direita. 
 Tn - posiciona o cursor na n-ésima posição da linha. 
 n( ) - repete n vezes os atributos entre parênteses. 
 
 
Observações 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 variáveis, serão lidos somente um 
número igual ao de variáveis 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 não for compatível, isto é, variável de um tipo, 
formato de outro, ocorrerá erro de execução. 
 
Exemplos: 
 
a) INTERGER V1, V2, V3 
 V1 = 39 
 READ(*,10) V2, V3 
 10 FORMAT(I5, I4) 
 WRITE(*,20) V1, V2, V3 
 20 FORMAT(1X, I4, I12, I8) 
 ... 
 
 Com os seguintes dados de entrada: 7 2 6 5 4 - 2 5 6 
 
 A impressão será (onde b= ' '): bb39bbbbbbb72654bbbb-256 
 
 Se V1 = 76543, teremos: ****bbbbbbb72654bbbb-256 
 
 
b) A = 6.5 
 B = -256.496 
 C = 1.03239 
 D = 63425.67 
 WRITE(*,10) A, B, C, D 
 10 FORMAT(1X, F10.5, F7.3, F12.4, F5.2) 
 ... 
 
 Será impresso: bbb6.50000*******bbbbbb1.0324***** 
 
 
c) X = 725.6975 
 Y = -0.0005239 
 Z = 76.599 
 A = -16.5E7 
 WRITE(*,40) X, Y, Z, A 
 40 FORMAT(1X, E14.7, E13.5, E14.3, E7.5) 
 ... 
 
 Será impresso: b0.7256975Eb03b-0.52390E-03bbbbb0.766Eb02 
 
 
d) READ(*,30) A, B, C, D 
 30 FORMAT(2(F10.2, F5.2)) 
 
 Ao ler estes dados: bbbbb28.38b1.002002002.32-4.81 
 
 Eles serão armazenados assim: 
 A = 28.38 B = 1.0 C = 2002002.32 D = -4.81 
 
 
e) READ(*,30) A, B, C 
 30 FORMAT(F10.2, 2( F5.2)) 
 
 A será impresso na 1° linha, B e C serão impressos na 2° linha. 
 
 
8.4 Comando OPEN 
 
Este comando juntamente com os comandos WRITE e FORMAT pode ser 
utilizado para exibir textos na impressora ou em arquivos. A sintaxe do comando 
OPEN para exibição de textos na impressora é descrito abaixo. 
 
Forma Geral: 
 
 OPEN(m, FILE = 'PRN') m, número que identifica a impressora. 
 
 WRITE(m, n) m, número que foi associado à impressora. 
 n, número do comando FORMAT associado. 
 
 n FORMAT(formato) n, número que identifica o comando FORMAT. 
 
 
Em formato podem aparecer além dos atributos utilizados para o vídeo, os 
seguintes atributos que devem aparecer necessariamente na primeira posição de 
impressão: 
 
 'b' - avança uma linha. 
 '0' - avança duas linhas. 
 '1' - causa o salto para uma nova página. 
 '+' - impressão superposta da linha. 
 
Exemplo: 
 
 PROGRAM TESTE 
 OPEN(1, FILE = 'PRN') 
 WRITE(*,1) 
 1 FORMAT(24(/), 27X,'Teste de impressão de textos', //, 17X, 'Ligue a 
 *impressora e posicione no inicio da pagina!') 
 WRITE(1,2) 
 2 FORMAT(23X, 'Instituto de Ciencias Matematicas',/, 27X, 25H Univ 
 *ersidade de Sao Paulo) 
 WRITE(1,3) 
 3 FORMAT('0', T30, 'Linguagem Fortran',\) 
 WRITE(1,4) 
 4 FORMAT(1X, TR2, 11H Fundamentos, TL13, '-') 
 WRITE(1,5) 
 5 FORMAT('+', T30, 17('-'', 3X, 11('-')) 
 WRITE(1,6) 
 6 FORMAT(33X, 'Modulo Basico' / '1') 
 STOP 
 END 
 
 
8.5 Estrutura de Iteração 
 
 
8.5.1 Estrutura PARA 
 
O comando FORTRAN que implementa diretamente a estrutura: 
 
 para I de M até N passo P faça 
 comandos; 
 fim para; 
 
é o DO, cujas formas principais serão apresentadas a seguir. 
 
 
Forma Geral: 
 
 DO n, i = m1, m2, m3 
 Bloco A 
 n CONTINUE 
 
onde: n - número do comando que delimita o tamanho do laço (a vírgula após o n 
 é opcional). 
 i - variável do DO. 
 m1 - valor inicial de i. 
 m2 - valor máximo de i para teste. 
 m3 - incremento. 
 mi - i = 1, 2, 3, pode ser expressões inteiras ou reais. 
 Bloco A - composto por combinações de comandos da linguagem. 
 
Exemplo: o trecho do algoritmo abaixo, soma os números 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 FAÇA 
 SOMA ← SOMA + PAR 
 FIM PARA 
 ESCREVA(SOMA) 
 ... 
 
 SOMA= 0 
 DO 20, PAR = 100, 200,2 
 SOMA = SOMA + PAR 
20 CONTINUE 
 WRITE(*,30) SOMA 
30 FORMAT(1X, 'SOMA = ', F5.2) 
 
 
Forma Geral: 
 
 DO i = m1, m2, m3 
 Bloco A 
 END DO 
 
onde: i - variável do DO. 
 m1 - valor inicial de i. 
 m2 - valor máximo de i para teste. 
 m3 - incremento. 
 mi - i = 1, 2, 3, pode ser expressões inteiras ou reais. 
 Bloco A - composto por combinações de comandos da linguagem. 
 
Observações: 
 
1. O incremento m3 pode ser omitido e neste caso, é assumido valor 1. 
2. O último comando do Bloco A, pode ser qualquer comando da linguagem, 
exceto: GOTOs, END, RETURN ou DO. 
3. A variável i não pode ser alterada por nenhum comando dentro do laço. 
4. Se os laços terminam no mesmo comando, pode ser o mesmo CONTINUE 
para todos eles. 
5. A variável i pode ser um número inteiro ou real. 
 
 
8.5.2 Estrutura ENQUANTO 
 
O comando FORTRAN que implementa a estrutura: 
 
 enquanto <condição> faça 
 comandos; 
 fim enquanto; 
 
é o WHILE, que é descrito a seguir. 
 
Forma Geral: 
 
 DO WHILE (condição) 
 Bloco A 
 END DO 
 
onde: condição - condição de parada. 
 Bloco A - composto por combinações de comandos da linguagem. 
 
Exemplo: O programa abaixo exibe os valores dos senos de ângulos em radianos 
de 0.0, 0.1, 0.2, ... até 6.3. A função SIN( ) do Fortran é utilizada no programa 
para fornecer o valor dos ângulos. 
 
PROGRAN SENO 
REAL A 
A = 0.0 
DO WHILE (A.LE.6.3) 
 WRITE(*,*) A, SIN(A) 
 A = A + 0.1 
END DO 
STOP 
END 
 
 
8.6 Conjuntos e Variáveis Indexadas 
 
 
Os tipos básicos (inteiro, real, caracter e lógico) não são suficientes para 
expressar estruturas de dados (forma sistemática de representar as informações) 
em algoritmos. Torna-se necessário a criação de novos tipos. 
 
As variáveis de um programa podem ser classificadas em simples ou compostas. 
As variáveis simples armazenam num dado instante, um único valor. As variáveis 
compostas podem armazenar um conjunto de valores de mesmo tipo, num dado 
instante, que podem ser acessados individualmente. Vetores e Matrizes são 
variáveis compostas que ajudam na representação de dados e serão apresentados 
abaixo. 
 
 
8.6.1 Vetores 
 
Um vetor é um conjunto unidimensional de variáveis. Cada elemento de um vetor 
é tratado como se fosse uma variável simples. Para referência a um elemento do 
vetor utiliza-se o nome do vetor e a identificação do elemento (índice) entre 
parênteses. Por exemplo, se desejarmos atribuir o valor 234 ao elemento 
identificado pelo índice 3 de um vetor de inteiros, teremos: 
 
 VETOR 
 234 
 1 2 3 4 5 
 
Observações: 
 
1. As variáveis indexadas em FORTRAN podem ter até 7 índices. 
 
2. O índice de uma variável I(V(I)), pode assumir qualquer valor inteiro. 
 
3. Todos os elementos de um vetor têm o mesmo tipo. O tipo de um vetor é 
definido assim como variáveis simples. 
 
4. Um elemento de um vetor pode ser usado numa expressão como uma variável 
qualquer. Exemplo: 
 
 X(I + 1) = X(I) * X(I - 1) 
 
5. O número de elementos de um vetor e limites superior e inferior para o índice 
devem ser declarados no início do programa. 
 
Declarações de tipos para vetores: 
 
Forma Geral: 
 
 <tipo> A(n, m) 
 
onde: <tipo> - pode se INTEGER ou REAL ou CHARACTER, etc. 
 A - é o nome do vetor. 
 n - limite inferior do índice (se for omitido é assumido 1). 
 m - limite superior do índice. 
 
Observação: Os limites (superior e inferior) podem ser números inteiros positivos 
e negativos. Na versão anterior, deveriam ser maiores ou iguais a 1. 
 
Exemplos: 
 
1. REAL VETOR1(100), A(20) 
 
2. INTEGER A(0:10), B(-3,1) 
 
3. PROGRAM EXEMPLO 
 REAL X(100), MAIOR 
 INTEGER N, I, POS 
 WRITE(*,*) 'Entre com o número de elementos que serão 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 = IEND IF 
 END DO 
 END IF 
 WRITE(*,20) POS, MAIOR 
 20 FORMAT(1X, I3, F8.3) 
 ELSE 
 WRITE(*,*) ' Número de elementos do vetor muito grande.' 
 ENDIF 
 STOP 
 END 
 
O programa acima lê números reais e os armazena em um vetor real, encontra o 
maior valor e sua posição no vetor e então os exibe. 
 
 
8.6.2 Matrizes 
 
Podemos encontrar diversos problemas que envolvam em sua solução arranjos 
homgêneos multidimensionais. Para resolver este tipo de problema pode-se 
utilizar matrizes, que são representadas com o uso de variáveis indexadas com 
mais de um índice. Cada índice referencia uma dimensão. 
 
Exemplo: 2 31 
 A = 23 25 
 7 39 
 
 A(1,2) = 31 A - nome da matriz 
 1 - 1° índice (número que indica a linha) 
 2 - 2° índice (número que indica a coluna) 
 
Declaração de tipos para matrizes: 
 
 INTEGER MATRIZ(3,4) 
 REAL A(2,2), B(10,10) 
 
 
8.7 DO IMPLÍCITO para entrada e saída de dados 
 
Forma Geral: 
 
 (<lista de variáveis>, i = m1, , m2, m3) 
 
onde: i, m1, m2, m3 têm os mesmos significados do comando DO. 
 
O DO IMPLÍCITO deve vir sempre associado a um comando de entrada ou saída 
e tem funcionamento análogo ao do comando DO. 
 
Exemplos: 
 
a) READ(*,10) (X(I), I = 1, 10) 
 10 FORMAT(10(F5.2, 1X)) 
 
Com os comandos acima, pode-se ler um vetor de dez posições com os valores 
reais lidos todos na mesma linha. 
 
b) WRITE(*,10) (A(J), J = 1, 10) 
 10 FORMAT(1X, F5.2) 
 
Os comandos acima imprimem os valores do vetor A, cada um em uma linha. O 
controle é feito pelo comando FORMAT. É equivalente a: 
 
 DO J=1, 5 
 WRITE(*,10) A(J) 
 10 FORMAT(1X, F5.2) 
 END DO 
 
 
c) READ(*,10) (A(I), B(I), I = 1, 4) 
 10 FORMAT(8F5.2) 
 
Neste caso, A(1), B(1), ..., A(4), B(4) serão lidos todos em uma mesma linha. 
 
 
d) READ(*,10) N, (A(I), I = 1, N) 
 10 FORMAT(I2, /, (F5.2)) 
 
Aqui, os valores serão lidos um em cada linha. 
 
 
e) READ(*,10) N, (A(I), I = 1, N) 
 10 FORMAT(I2, /, N(F5.2)) 
 
A linguagem FORTRAN não suporta as especificações do FORMAT como 
acima, pode-se usar o artifício abaixo. 
 
 READ(*,10) (A(I), I = 1, N) 
 10 FORMAT(10F8.2) 
 
 
f) DO I=1, 4 
 WRITE(*,10) (A(I,J), J = 1, 3) 
 10 FORMAT(1X, 3F5.2) 
 END DO 
 
Imprimi uma matriz A de ordem 4x3, com cada linha da matriz em uma linha. 
 
 
g) WRITE(*,10) ((A(I,J), J=1, 3), I=1, 4) 
 10 FORMAT(1X, 3F5.2) 
 
Faz o mesmo do exemplo anterior. 
 
 
h) WRITE(*,10) ((A(I,J), J=1, 5), I=1, 5) 
 10 FORMAT(1X, 25F5.2) 
 
Imprime uma matriz de ordem 5x5, sendo um elemento seguido de outro em uma 
mesma linha. 
 
 
i) DO I=1, 5 
 WRITE(*,10) (A(I,J), J = 1, 5) 
 10 FORMAT(1X, F5.2) 
 END DO 
 
ou 
 
 
 WRITE(*,10) ((A(I,J), J=1, 5), I=1, 5) 
 10 FORMAT(1X, F5.2) 
 
 Imprimi uma matriz de ordem 5x5, um elemento seguido do outro, um em cada 
linha. 
 
 
j) O programa abaixo efetua o produto entre duas matrizes. 
 
 PROGRAM PRODUTO 
 REAL A(20,20), B(20,20), C(20,20) 
 INTEGER I, J, K, T, N, M 
C Leitura de dados 
 READ(*,*) N, K, M 
 IF (N.LE.20.AND.K.LE.20.AND.M.LE.20) THEN 
C Leitura da matriz A. 
 READ(*,5) ((A(I,J), J=1, N), I=1, K) 
 5 FORMAT(16F5.2) 
C Leitura da matriz B. 
 READ(*,5) ((B(I,J), J=1, K), I=1, M) 
C Cálculo da matriz C = A*B 
 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 Impressão 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 são inválidos!') 
 END IF 
 STOP 
 END 
 
 
 
8.8 Subprogramas: FUNCTION e SUBROUTINE 
 
Subprograma é uma unidade de programa independente, simples, que geralmente 
realiza uma única função e que tem associado um identificador (nome); sua 
execução é subordinada ao programa principal ou a uma outra unidade de 
programa. Uma unidade de programa é uma seqüência de comandos FORTRAN 
terminada pelo comando END. 
 
8.8.1 Funções 
 
O subprograma FUNCTION é definido pelo programador e pode compreender 
mais de um comando da linguagem FORTRAN. 
 
Forma Geral: 
 
 < tipo > FUNCTION < nome> (a1, a2, ..., an) 
 Declarações 
 Comandos Executáveis 
 RETURN 
 END 
 
onde: < tipo > pode ser real e inteiro. 
 a1, a2, ..., an são parâmetros e podem ser variáveis simples ou compostas. 
 
O subprograma deve ser finalizado com o comando RETURN que indica o fim 
lógico do subprograma, isto é, o controle agora deve retornar ao ponto onde a 
função foi referenciada no programa principal. 
 
Dentro do corpo do subprograma FUNCTION, em pelo menos um ponto deve 
aparecer o nome deste subprograma como uma variável, isto é, assumindo algum 
valor compatível 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 
 
Este subprograma recebe um vetor X real e sua dimensão N como entrada e 
retorna um só valor para o programa principal. 
 
 
8.8.2 Sub-Rotinas 
 
As SUB-ROTINAS também são subprogramas com duas diferenças básicas dos 
subprogramas FUNÇÕES: 
 
1. A sub-rotina retorna nenhum, um ou vários valores através de seus 
argumentos. 
2. A sub-rotina é chamada através de um comando específico, o comando CALL. 
 
Forma Geral: 
 
 SUBROUTINE < nome> (a1, a2, ..., an) 
 Declarações 
 Comandos Executáveis 
 RETURN 
 END 
 
onde: a1, a2, ..., an são parâmetros formais que podem ser variáveis simples ou 
compostas. A lista de parâmetros pode ser inteiramente omitida. 
 
Exemplo: Vamos considerar um programa que encontra o maior valor entre N 
valores lidos e armazenados num vetor real, além de encontrar também a posição 
do vetor que este maior valor está. O programa funcionará para qualquer número 
de dados até 100. 
 
 PROGRAM PRINCIPAL 
 REAL X(100), MAIOR 
 INTEGER N, I, POS 
 WRITE(*,*) 'Entre com o número de elementos que serão lidos.' 
 READ(* ,*) N 
 WRITE(*,*) ' Digite os valores reais. ' 
 READ(*,10) ( X(I), I=1, N) 
 10 FORMAT (10(F8.3)) 
 AIOR = 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) J, MAIOR 
 20 FORMAT(1X, I3, F8.3) 
 STOP 
 END 
 
Em síntese o programa lê N e um vetor X como dados de entrada, encontra o 
maior elemento do vetor e sua posição armazenando-os nas variáveis MAIOR e 
POS respectivamente e imprime estes valores. 
 
Vamos ver como o programa acima pode ser escrito utilizando um subprograma 
sub-rotina. 
 
C PROGRAMA PRINCIPAL 
 
 PROGRAM PRINCIPAL 
 REALX(100), MAIOR 
 INTEGER N, I, POS 
 WRITE(*,*) 'Entre com o número de elementos que serão 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 IMPRESSÃO DOS RESULTADOS 
 WRITE(*,20) J, MAIOR 
 20 FORMAT(1X, I3, F8.3) 
 STOP 
 END 
 
 
 SUBROUTINE MAX (N, X, POS, MAIOR) 
 INTEGER N, I, POS 
 REAL X(N), MAIOR 
 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 
 RETURN 
 END 
 
 
Observações: 
 
1. Os parâmetros no comando sub-rotina são meramente formais, pois eles são 
substituídos por seus nomes verdadeiros quando o comando CALL é executado. 
No entando, os parâmetros da lista SUBROUTINE devem corresponder em 
número e em tipo com os parâmetros do comando CALL. 
 
2. Números de comandos e variáveis são locais para subprogramas. Eles podem 
ser idênticos com outros subprogramas ou com o programa principal. 
 
3. Os subprogramas podem vir antes ou depois do programa principal. 
 
4. Os argumentos podem ser expressões (ex: contantes, variáveis, expressões 
aritméticas, etc). 
 
5. Recursividade não é permitida na linguagem FORTRAN. 
 
6. Deve-se fazer um algoritmo ou diagrama estruturado para cada unidade de 
programa. 
 
Exemplo: O programa abaixo calcula a seguinte matriz: 
 
 D = x * A + y * B 
 
 onde: A e B são matrizes quadradas de ordem N lidas. 
 x corresponde ao menor elemento da diagonal principal da matriz A. 
 y corresponde ao menor elemento da diagonal principal da matriz B. 
 
Na implementação que segue foram utilizados subprogramas para determinar o 
menor elemento de um vetor, para calcular o produto de um número por uma 
matriz e para somar duas matrizes de ordem NxM. 
 
C Sub-rotina que efetua a soma de duas matrizes 
 SUBROUTINE SOMA(P,Q,N,M,S) 
 INTEGER N, M, I, J 
 REAL P(10,10),Q(10,10),S(10,10) 
 DO I=1, N 
 WRITE(*,*) (P(I,J), J=1, M) 
 END DO 
 WRITE(*,*) 'Matriz Q' 
 DO I=1, N 
 WRITE(*,*) (Q(I,J), J=1,M) 
 END DO 
 DO I=1,N 
 DO J=1,M 
 S(I,J) = P(I,J) + Q(I,J) 
 END DO 
 END DO 
 RETURN 
 END 
 
C Sub-rotina que calcula o produto de um número por uma matriz 
 SUBROUTINE PROD(T,N,M,K,TP) 
 INTEGER N, M, I, J 
 REAL T(10,10), TP(10,10), K 
 DO I=1,N 
 DO J=1,M 
 TP(I,J) = K * T(I,J) 
 END DO 
 END DO 
 RETURN 
 END 
 
C Função que encontra o menor elemento de um vetor 
 REAL FUNCTION VETOR_ME(V,N) 
 REAL V(N) 
 INTEGER N, I 
 VETOR_ME = V(1) 
 DO I=2, N 
 IF (V(I).LT.VETOR_ME) THEN 
 VETOR_ME = V(I) 
 END IF 
 END DO 
 RETURN 
 END 
 
 PROGRAM PRINCIPAL 
 REAL A(10,10), B(10,10), D(10,10), X, Y, VA(10), VB(10) 
 INTEGER I, J 
C LEITURA DAS MATRIZES 
 WRITE(*,*) 'Entre com a dimensao da matriz!' 
 READ(*,*) N 
 WRITE(*,*) 'Entre com os valores da matriz A.' 
 DO I=1, N 
 READ(*,*) (A(I,J), J=1, N) 
 WRITE(*,*) (A(I,J), J=1, N) 
 END DO 
 WRITE(*,*) 'Entre com os valores da matriz B.' 
 DO I=1, N 
 READ(*,*) (B(I,J), J=1, N) 
 WRITE(*,*) (B(I,J), J=1, N) 
 END DO 
C CRIAR UM VETOR APARTIR DA DIAGONAL PRINCIPAL DE A 
 DO I=1, N 
 VA(I) = A(I,I) 
 VB(I) = B(I,I) 
 END DO 
C 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 
C 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 
C CHAMADA AO SUBPROGRAMA SOMA 
 CALL SOMA(A,B,N,N,D) 
C 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 são 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 síntese, um 
registro é uma seqüência de caracteres. Na tela do vídeo, 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 seqüência 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 através de um programa é o mesmo 
pelo qual o arquivo é reconhecido pelo sistema operacional. 
 
b) Método de Acesso: pode ser seqüêncial ou direto. 
 
Seqüêncial: os registros são lidos seqüencialmente, na mesma ordem em que 
foram escritos. 
 
Direto: permite a leitura e escrita em qualquer ordem, conforme definido pelo 
programador. Neste caso, cada registro pode ser acessado diretamente, sem ter 
que acessar o restante do arquivo. Todos os registros têm que ter o mesmo 
tamanho. Neste tipo de acesso cada registro é identificado por seu número, onde 
este número é um inteiro positivo único. 
 
Nos discos podemos implementar ambos os métodos de acesso. De forma geral, 
os demais dispositivos de armazenamento só permitem acesso seqüêncial. 
 
c) Estrutura: formatado ou não formatado. 
 
 
8.9.1 Comando OPEN 
 
Especifica os atributos de um arquivo. 
 
Forma Geral: 
 
 OPEN (<unidade> [, FILE = <nome>] [, STATUS = ' <status> '] 
 [, ACCESS = ' <acesso> '] [, FORM = ' <formato> '] 
 [, IOSTAT = <var1>] [, RECL = <comprimento do arquivo>]) 
 
onde: <unidade> - número inteiro que designa um arquivo ou dispositivo de E/S. 
 <status> - OLD, NEW (default: OLD) 
 <acesso> - SEQUENTIAL, DIRECT (default: SEQUENTIAL) 
 <formato> - FORMATTED, UNFORMATTED 
 (default: se SEQUENTIAL → FORMATTED 
 se DIRECT → UNFORMATTED) 
 <comprimento do arquivo> - somente se o acesso é DIRETO (número de 
 bytes no PC). 
 
8.9.2 Comando CLOSE 
 
Fecha um arquivo. 
 
Forma Geral: 
 
 CLOSE (<unidade> [, STATUS = ' <status> '] [, IOSTAT = <var1>] ) 
 
onde: <status> - KEEP, DELETE (default: KEEP). 
 
 
8.9.3 Comando READ 
 
Lê registros de um arquivo. 
 
Forma Geral: 
 
 READ (<unidade> [, <especificador de formato>] 
 [, END = <num1>] [, ERR = <num2>] [, IOSTAT = <var1>] 
 [, REC = <número registro>]) lista de variáveis 
 
onde: [ ] - item opcional. 
 <unidade> - número da unidade associado ao arquivo. 
 <especificação do formato> - número do comando FORMAT ou *. 
 <num1> - número de um comando executável FORTRAN para o qual o 
 controle é transferido quando é encontrado o fim-de-arquivo. 
 <num2> - número de um comando executável quando ocorre erro. 
 <var1> - variável do tipo inteiro que armazenará um valor do status de E/S. 
 se var1 = 0, não houve erro. 
 se var1 < 0, fim-de-arquivo. 
 se var1 > 0, erros. 
 <número registro> - somente usado para arquivo de acesso direto, 
 especifica o número do registro que será acessado. 
 
 
8.9.4 Comando WRITE 
 
Escreve registros em um arquivo. 
 
Forma Geral:WRITE (<unidade> [, <especificador de formato>] 
 [, END = <num1>] [, ERR = <num2>] [, IOSTAT = <var1>] 
 [, REC = <número registro>]) lista de variáveis e/ou expressões 
 
onde: [ ] - item opcional. 
 <unidade> - número da unidade associado ao arquivo. 
 <especificação do formato> - número do comando FORMAT ou *. 
 <num1> - número de um comando executável FORTRAN para o qual o 
 controle é transferido quando é encontrado o fim-de-arquivo. 
 <num2> - número de um comando executável quando ocorre erro. 
 <var1> - variável do tipo inteiro que armazenará um valor do status de E/S. 
 se var1 = 0, não houve erro. 
 se var1 < 0, fim-de-arquivo. 
 se var1 > 0, erros. 
 <número registro> - somente usado para arquivo de acesso direto, 
 especifica o número do registro que será acessado. 
 
 
8.9.5 Comandos BACKSPACE, REWIND, ENDFILE, EN 
 
Backspace: posiciona o arquivo no início do registro anterior ao registro 
corrente. 
 
Rewind: posiciona o arquivo no ínicio, ou seja, no primeiro registro. 
 
Endfile: escreve um registro de fim-de-arquivo em um arquivo. 
 
 
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 vídeo. A variável 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, também lê nomes e telefones do arquivo TESTE.DAT e mostra 
estes dados no vídeo, mas usa para isto a variável 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. Conclusão 
 
Este trabalho descreveu os principais comandos da Linguagem Fortran (versão 
5.1), além de apresentar alguns conceitos básicos sobre computação e programas 
de computadores. 
 
10. Bibliografia 
 
[Cereda 87] Cereda, R. L. D.; Maldonado, J. C. Introdução ao FORTRAN 77 
para Microcomputadores. McGraw-Hill, 1987. 
 
[Pressman 83] Pressman, R. S. Software Engineering: a Practitioner's Approach. 
Tokyo, McGraw-Hill, 1983.

Continue navegando