PROGRAMAÇÃO DE COMPUTADORES NOÇÕES DE FORTRAN I - INTRODUÇÃO A linguagem FORTRAN, a primeira linguagem de programação de alto nível (surgiu em 1956), foi proposta e implementada para auxiliar os programadores na codificação de problemas técnicos e científicos cuja solução requer a utilização de computadores eletrônicos. O FORTRAN é uma das linguagens mais popular e difundida no meio técnico e científico, muitas bibliotecas computacionais na área de matemática estão disponíveis nesta linguagem. NOTAÇÃO: [] Os Colchetes indicam de tratar-se de um item opcional. {} As chaves encerram uma lista de itens dos quais somente um item pode ser usado. ... As reticências indicam que o item precedente pode aparecer uma ou mais vezes em sucessão. EXPRESSÕES Uma expressão FORTRAN, é definida como uma combinação de itens sintáticos, isto é: uma expressão pode consistir de uma única constante, de uma única variável, de um único elemento ou conjunto, ou uma combinação de constantes, variáveis, elementos ou conjuntos, unidos com um ou mais operadores. Os operadores especificam as computações a serem realizadas sobres os valores dos elementos básicos. Por exemplo, a expressão: x + z , consiste de duas variáveis unidas pelo operador + TIPOS DE EXPRESSÕES: Aritméticas: produz somente um valor que é sempre um número cujo tipo é real, inteiro ou complexo. Caracteres: produz somente um valor que é sempre uma cadeia de caracteres. Relacionais: produz somente um valor que é sempre uma constante lógica. Lógicas: produz somente um valor que é sempre uma constante lógica. Booleanas: produz somente um valore que é sempre do tipo Booleano.OPERADORES ARITIMÉTICOS Operador Definição Uso do Operador Significado ** Potenciação a**b a elevado a potência b * Multiplicação a*b a multiplicado por b / Divisão a/b a dividido por b + Adição a+b a mais b + Mais unitário +a o mesmo que a - Subtração a-b a menos b - Menos unitário -a a com sinal trocado OPERADOR CARACTERE Operador Definição Uso do Operador Significado // Concatenação a//b a encadeado com b O resultado de uma operação de concatenação é uma cadeia de caracteres encadeando o primeiro operando imediatamente com o segundo operando, sendo seu comprimento igual à soma dos comprimentos dos operandos. Por exemplo o valor de: 'AB'//'EFG' , é: 'ABEFG.' OPERADORES RELACIONAIS Operador Definição Uso do Operador Significado .EQ. Igual a a.EQ.b a=b? .NE. Diferente de a.NE.b ab? .LT. Menor que a.LT.b a<b? .LE. Menor ou igual a.LE.b ab? .GT. Maior que a.GT.b a>b? .GE. Maior ou igual a.GE.b ab? OPERADORES LÓGICOS Operador Definição Uso do Operador Significado .NOT. Negação Lógica .NOT.a Complemento de a: se a é verdade, então .NOT.a é falso, se a é falso então .NOT.a. é verdade. .AND. Conjunção a.AND.b lógica Produto Booleano de a por b: se a e b são verdade, então a.AND.b é verdade; se a ou b ou ambos são falsos, então a.AND.b é falso. .OR. Disjunção Inclusivo lógica a.OR.b Soma Booleana de a com b: se a ou b ou ambos são verdade, então a.OR.b é verdade; se a e b são falsos, então a.OR.b é falso. .EQV. Equivalência a.EQV.b Lógica Equivalência lógica de a com b: se a e b são ambos verdade ou ambos falsos, então a.EQV.b é verdade, caso contrário é falso. .NEQV. Não a.NEQV.b Não equivalência lógica de a com b: se a equivalência e b são ambos verdade ou ambos falsos, lógica então a.EQV.b é falso, caso contrário é verdade. EXEMPLO: 0A10 Se desejarmos testar se o valor da variável A satisfaz a inequação: , na linguagem FORTRAN devemos utilizar: 0.LE.A.AND.A.GT.10 II - COMANDOS PARA DECLARAÇÃO DOS TIPOS DE VARIÁVEIS 2.1 - INTEGER INTEGER é usado para declarar, explicitamente, um nome de variável, conjunto de variáveis, constante simbólica, como sendo do tipo inteiro. Sintaxe: Exemplo: INTEGER a,b,c,d(10) 2.2 - COMANDO REAL O comando REAL é usado para declarar, explicitamente, um nome de variável, conjunto de variáveis, constante simbólica como sendo do tipo real. Exemplo: REAL a,b,c,d(10) 2.3 - COMANDO CHARACTER O comando CHARACTER é usado para declarar, explicitamente, um nome de variável, conjunto de variáveis, constante simbólica, como sendo do tipo alfa-numérica Sintaxe: CHARACTER <VARIÁVEL>[*s] S Número de caracteres, deve ser um número inteiro positivo. Exemplo: CHARACTER N1*10, N2*20, C*30 2.4 - COMANDO LOGICAL O comando LOGICAL é usado para declarar, explicitamente, um nome de variável, conjunto de variáveis, como sendo do tipo lógica. As variáveis lógicas devem ser .TRUE. (verdadeiro) ou .FALSE. (falso). EXEMPLO: LOGICAL B,C OBS: A maioria dos compiladores da linguagem FORTRAN não permite que sejam feitas operações entre variáveis de tipo diferentes. Exemplo se a variável J é do tipo INTEGER e a variável A é do tipo REAL, então a soma J + A causa um erro durante a execução do programa, portanto se desejarmos que o resultado desta soma seja uma variável do tipo REAL devemos converter a variável J (INTEGER) para uma variável (REAL), através do comando FLOAT, neste caso pode-se realizar a soma destas duas variáveis : FLOAT(J) + A FLOAT(var) INT(var) 10 REAL A INTEGER C A = 2.64 C = INT(A) PRINT 10,C FORMAT(3X,'VALOR DE C = ',I2) STOP END Integer Real Real*4 Integer*4 III - COMANDOS PARA DE ENTRADA SAÍDA 3.1 - COMANDO WRITE O comando WRITE é usado para transferir dados para arquivos externos e internos. Sintaxe: WRITE ( unit, fmt ) lista de variáveis Unit Número que identifica o dispositivo de saída (ARQUIVO, IMPRESSORA, VÍDEO), o dispositivo padrão é o vídeo e identificado pelo símbolo *. Fmt Pode ser um número (LABEL) associado ao formato de saída dos dados ou pode ser utilizado para especificar diretamente o formato da variável a ser transferida, a qual deve ser escrita utilizando os seguintes delimitadores: '(tipo do formato)'. Pode-se omitir a especificação do formato (utiliza-se o dispositivo padrão), para isto é necessário utilizar o símbolo *. Exemplos: Se a = 2.30 e b = 323,141415, e ambas as variáveis são do tipo REAL, então: a) WRITE(*,*) a,b Apresenta os seguintes valores de a e b no vídeo: 2.300000 323.1414 b) WRITE(8,10) a,b 10 FORMAT(3X,'Valor de a = ', f5.3, 5X,'Valor de b = ', f6.2) Apresenta a seguinte mensagem na unidade 8 (que pode ser vídeo, impressora ou arquivo): Valor de a = 2.300 Valor de b = 323.14 Se a variável nome = 'LINGUAGEM FORTRAN' é do tipo CHARACTER*17, então: c) WRITE(*, 'A10') NOME Apresenta o valor da variável nome com os 10 primeiros caracteres no vídeo: LINGUAGEM 3.2 - COMANDO PRINT O comando PRINT é usado para transferir dados da lista para o vídeo. Sintaxe: PRINT fmt, lista de variáveis Fmt Pode ser um número (LABEL) associado ao formato de saída dos dados ou pode ser utilizado para especificar diretamente o formato da variável a ser transferida, a qual deve ser escrita utilizando os seguintes delimitadores: '(tipo do formato)'. Pode-se omitir a especificação do formato (utiliza-se o dispositivo padrão), para isto é necessário utilizar o símbolo *. Exemplos: Se a = 2.30 e b = 323,141415, e ambas as variáveis são do tipo REAL, então: a) PRINT*, a,b Apresenta os seguintes valores de a e b no vídeo: 2.300000 323.1414 b) PRINT 10,a,b 10 FORMAT(3X,'Valor de a = ', f5.3, 5X,'Valor de b = ', f6.2) Apresenta a seguinte mensagem no vídeo: Valor de a = 2.300 Valor de b = 323.14 Se a variável JI = 2 do tipo INTEGER, então: c) PRINT '(I3)',JI Apresenta o valor da variável JI no vídeo com os 3 dígitos, neste caso os dois primeiros dígitos não são preenchidos (brancos). 3.3 - COMANDO READ O comando READ é usado para adquirir dados de um arquivo ou teclado. Sintaxe: READ ( unit, fmt ) lista de variáveis Unit Número que identifica o dispositivo de entrada (ARQUIVO, TECLADO), o dispositivo padrão é o teclado e identificado pelo símbolo *. Fmt Pode ser um número (LABEL) associado a formato de entrada dos dados ou pode ser utilizado para especificar diretamente o formato da variável a ser transferida, a qual deve ser escrita utilizando os seguintes delimitadores: ('tipo do formato'). Pode-se omitir a especificação do formato (utiliza-se o dispositivo padrão), para isto é necessário utilizar o símbolo *. Exemplos: a) READ(*,*) a b) READ(*,10) b,c 10 FORMAT(3X,f8.6, 5X, f7.6) c) READ(8,*) A,B 3.4 - COMANDO FORMAT O comando FORMAT é um comando não executável, usado em conjunção com os comandos de entrada e saída. Em outras palavras, o comando FORMAT descreve o formato nos quais os dados devem ser transferidos, especifica o tipo de conversão que os dados devem sofrer entre a representação interna e a representação externa, e pode especificar requisitos de edição necessários para esse formato. Sintaxe: n FORMAT(ef [,ef [,...,ef ]]) N (LABEL) associado a formato de entrada ou saída dos dados. Ef Especificação do formato. As especificações do formato de conversão mais usadas no FORTRAN são: Conversão de dados inteiros decimais [a] Iw a É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será usada somente uma vez. w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em caracteres. [a] Fw.d a Conversão de dados reais sem expoentes É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será usada somente uma vez. w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em caracteres. d É uma constante inteira sem sinal, indicando a quantidade de dígitos á direita do ponto decimal interno ao campo w. Na saída todos os valores são arredondados. [a] Ew.d a Conversão de dados reais com expoente de simples precisão. É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será usada somente uma vez. w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em caracteres. d É uma constante inteira sem sinal , indicando a Quantidade de dígitos à direita do ponto decimal interno ao campo w. Na saída todos os dados são arredondados. [a] Dw.d a Conversão de dados reais com expoente de dupla precisão. É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será usada somente uma vez. w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em caracteres. d É uma constante inteira sem sinal , indicando a Quantidade de dígitos à direita do ponto decimal interno ao campo w. Na saída todos os dados são arredondados. [a] Aw Conversão de dados caracteres. a É uma constante inteira sem sinal, usada para indicar o número de vezes que a mesma especificação do formato é, repetitivamente usada. Se a for omitida, a especificação será usada somente uma vez. w É uma constante inteira sem sinal e não nula, indicando a largura do campo externo, em caracteres. CARACTERES DE CONTROLE DE FORMATAÇÃO Símbolo RESULTADO [a] x Avança na apresentação dos dados um total de a caracteres. [a] / Avança uma linha. \ Permite que a apresentação dos dados continue na mesma linha. EXEMPLOS Se a = 34.456767 e b = 0.001312, então: FORMATO A b F9.4 34.4568 0.0013 E10.4 0.3446E+03 0.1312E-02 E12.5 0.34457E+03 0.13120E-02 D10.4 0.3446D+03 0.1312D-02 Se N = 23, J =356, K=-13, então: Variável FORMATO N I2 J I3 K I3 Se NOME = 'teste de programação, então: FORMATO RESULTADO A10 teste de p A5 teste IV- COMANDOS 4 .1 - COMANDO IF (SELEÇÃO) O comando IF transfere o controle de fluxo ou executam outro comando (ou um bloco de comandos) dependendo da condição dada como resultado de uma expressão contida no particular comando IF. O comando IF , executa condicionalmente, blocos ou grupos de comandos executáveis. If(e1) THEN Bloco (1) ELSE Bloco (3) END IF Se a expressão lógica (e1) for verdadeira o bloco1 é executado. Se a expressão lógica (e1) for falsa e a expressão (e2) for verdadeira o bloco2 é executado. Se ambas as expressões lógicas (e1) e (e2) são falsas, então o bloco3 é executado. EXEMPLO IF(DELTA.GT.0) THEN X1 = (-B+DELTA)/(2.0*A) X2 = (-B+DELTA)/(2.0*A) AR = Raízes distintas' ELSE IF(DELTA.EQ.0.) THEN X1 = -B/(2.0*A) X2 = X1 AR = Raízes repetidas' ENDIF ELSE AR = Raízes complexas' END IF 4.2 - COMANDO DO O comando DO é um comando de controle que permite que uma seqüência de comandos seja repetitivamente executada enquanto o valor da variável de controle estiver entre os limites especificados. DO <LABEL> <VAR>=nstart, nend[,step] <COMANDOS> <LABEL> END DO <LABEL> Valor inteiro contido entre 1 e 9999 <VAR> É uma variável de controle do tipo inteiro. nstart É o parâmetro inicial de k. nend É o parâmetro inicial de k. nstep É o parâmetro de incremento de k. EXEMPLO: Desejamos calcular o valor da variável s, a qual é definida pela seguinte expressão : S = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 +10 S=0 DO 400 J=1,10,1 S=S+J END DO 400 4.3 - COMANDO DO WHILE (ENQUANTO) O comando DO é um comando de controle que permite que uma seqüência de comandos seja repetitivamente executada enquanto a expressão lógica permanecer verdadeira .TRUE. . DO <LABEL> WHILE (expressão lógica) <COMANDOS> END DO Enquanto a expressão lógica for verdadeira a seqüência de comandos representada pelo <COMANDOS> é executada. EXEMPLO: se desejarmos que seja apresentado, todos os valores da variável K, a qual pode assumir os seguintes valores: 1,2,3,4,5,6,7,8,9,10, podemos utilizar dos seguintes comandos: INTEGER K K=0 DO WHILE (K.LT.10) K=K+1 PRINT *,K END DO END 4.6 - COMANDO STOP O comando executável STOP termina a execução do programa, pode exibir uma informação no vídeo. STOP [' mensagem'] EXEMPLO STOP 'PROGRAMA ABORTADO' 4.7 - COMANDO END O comando END indica o final físico de uma unidade de programa para o compilador. Um programa na linguagem FORTRAN tem dois pontos terminais. O primeiro é um ponto terminal lógico, indicando o fim da execução do programa. Esse terminal lógico é indicado pelo comando STOP. O segundo ponto terminal é o ponto terminal físico, indicando o fim do processo de compilação. Esse ponto terminal físico é indicado pelo comando END, que deve ser o último comando numa unidade de programa FORTRAN. A forma geral do comando END é: END Cada unidade de programa (isto é, um programa principal, um subprograma FUNCTION, um subprograma SUBROUTINE) deve conter um e somente um comando END.