Escolar Documentos
Profissional Documentos
Cultura Documentos
Ficha de Fortranv2 PDF
Ficha de Fortranv2 PDF
Pelos Docentes: dr. Veca Luis, Eng. Virgílio, Dr. Mazibe, Dr. Edson, Dr. Machel.
Índice
1. Linguagem de Programação (Fortran)....................................................................................................... 3
1.0. Introdução à programação em Fortran ............................................................................................... 3
1.1. Codificação de programa em Fortran (sintaxe do fortran) ................................................................. 3
1.2. Estrutura básica do Fortran................................................................................................................. 4
1.3. Formato Livre ..................................................................................................................................... 4
1.4. Formato Fixo ...................................................................................................................................... 4
2. Tipos e Declaração de Variáveis ............................................................................................................ 5
2.1. Declaração de Variáveis ..................................................................................................................... 5
2.2. Atribuição de Valores ......................................................................................................................... 6
3. Comandos de Entrada/Saída................................................................................................................... 6
3.1. Comandos READ sequências ............................................................................................................. 7
3.2. Comandos WRITE (PRINT) .............................................................................................................. 7
3.3. Comandos WRITE (PRINT) sequências ............................................................................................ 7
3.4. Comando OPEN ................................................................................................................................. 7
3.5. Registos, Arquivos e Unidades........................................................................................................... 7
3.6. Comando CLOSE ............................................................................................................................... 8
4. Comandos de controlo de fluxo ............................................................................................................. 8
4.1. Comandos IF ...................................................................................................................................... 8
4.2. Comando IF lógico ............................................................................................................................. 8
4.3. Comandos IF bloco............................................................................................................................. 8
4.4. Comando DO ...................................................................................................................................... 9
4.5. Comando EXIT .................................................................................................................................. 9
4.6. Comando CYCLE .............................................................................................................................. 9
4.7. Comando CONTINUE ....................................................................................................................... 9
4.8. Comando STOP ................................................................................................................................ 10
4.9. Comando END ................................................................................................................................. 10
4.10. Comando SELECT CASE ............................................................................................................ 10
5. Estruturas Homogéneas ........................................................................................................................ 10
5.1. Atribuição de valores........................................................................................................................ 10
5.2. Declaração: ................................................................................................................................... 11
5.3. Atribuição de valores........................................................................................................................ 11
5.4. Comando de saída (print) com arrays multidimensionais ................................................................ 11
2
6. Ficha 2: Exercícios fortran ................................................................................................................... 13
Cabeçalho
Conjunto de especificações
Conjunto de instruções de execução
Subprogramas (caso existam)
Instrução de final do programa
O cabeçalho consiste na instrução PROGRAM seguida pelo nome do programa escolhido pelo
programador. O nome do programa deve iniciar-se por uma letra e consiste numa sequência de,
no máximo 31 letras, algarismos ou sublinhados (ex.: PROGRAM ex1_a).
No conjunto de especificações declaram-se os nomes e os tipos de variáveis que são usados para
guardar os valores dos dados, resultados e dos cálculos intermédios.
O conjunto de instruções de execução consiste na sequência de instruções do algoritmo que
permitem resolver o problema em estudo.
A instrução final do programa consiste na instrução END PROGRAM seguida pelo nome do
programa. Ex.
3
1.2. Estrutura básica do Fortran
PROGRAM media// este é o início do programa começando pela palavra program seguido do nome do programa
Implic it none // inibe a possibilidade de, as variáveis não serem declaradas
Integer ::a // Declaração de variáveis
Write *, “Digite um numero” // exibe uma mensagem
Read*, a // leitura de dados
Write*, a // Comando para exibir e invocar valor da variável
Write *, “fim de programa” // mostra uma mensagem
END PROGRAM media // sempre que o programa iniciar tem que terminar com palavras end programa o nome do
programa.
1.4.Formato Fixo
Algumas necessidades em programação, definiram o Fortran77 como uma linguagem obsoleta em relação
às linguagens actuais:
Formato fixo:
Linhas de instruções, começavam na posição 7 e iam até a 72;
Somente letras maiúsculas;
Nomes de variáveis, até 6 caracteres.
Impossibilidade de determinar operações paralelas;
É uma situação crítica, pois o Fortran é considerado como uma linguagem de alta performance, no
entanto, até o padrão 77 não existia nenhuma instrução que permitisse ao usuário definir regiões do
programa que pudessem executar em paralelo, utilizando os recursos de mais de um processador, como
por exemplo, q compartilha de endereços de memória.
Não é possível a alocação dinâmica de memória;
No Fortran77, o programador é obrigado a declarar vectores com o maior tamanho possível para reservar
memória durante a compilação, ou seja, não era possível utilizar conjuntos de dados temporários durante
a execução.
Não possui representação numérica portável;
Diversos ambientes computacionais criaram extensões do Fotran77 para melhorar a precisão numérica em
suas arquitecturas, o que tornava o código “não portável” para outra arquitetura. No Fortran90, os
diversos recursos de precisão numérica foram padronizados, melhorando a portabilidade.
Não era possível definir uma nova estrutura de dados pelo usuário.
4
Não possui recursão explícita;
Não era possível chamar uma função dentro de outra função. Não havia recursão!
5
INTEGER P1
CHARACTER*20 ARQUIVO
2.2.Atribuição de Valores
Formas válidas para núme ros inteiros:
I=0
I = 134
I = -23
Formas válidas para núme ros reais:
A = 3.1415
A = -0.0012
A = .236
A = +5.0E3
A atribuição 5.0E3 quer dizer: 5.0 x 103
Formas válidas para núme ros reais em dupla precisão (REAL*8):
A = 3.1415D0
A = -0.0012D0
A = 2.4D-62
A = +5.0D2
A atribuição 5.0D3 quer dizer: 5.0 x 103
Mesmo para números pequenos é importante a colocação do D0 após o número, pois esta atribuição
elimina o risco da variável conter “muitos algarismos” em seu final. A falta do D0 pode levar o número
5.0 a ser armazenado na variável como 5.000000342589485 ou mesmo 4.999999993748758, sendo que
algumas vezes este “algarismos” pode afectar operações com números muito pequenos.
Formas válidas para núme ros complexos:
A atribuição do número complexo deve ser sempre feita entre parênteses, onde o primeiro número é a
parte real e o segundo número é a parte imaginária.
C = (1,2)
C = (1.70,-8.948)
C = (+502348E5,.999)
Formas válidas para variável lógica:
L = .TRUE.
L = .FALSE.
Estas são as duas únicas opções para a variável lógica
Formas válidas para caracteres
O texto alfanumérico pode ser definido entre apostro fes ou entre aspas
S = “Texto”
S = „texto‟
No caso de o apóstrofe ser necessário no meio do texto, pode-se usar as formas:
S = “texto‟s texto”
S = „texto‟‟s texto‟
3. Comandos de Entrada/Saída
- Os "Comandos de Entrada" fornecem um método de transferir dados de um dispositivo periférico (como
um teclado) ou de um arquivo interno para a memória principal. Este processo é chamado de "leitura de
dados".
- Os "Comandos de Saída" fornecem um meio de transferir dados da memória principal para um
dispositivo periférico (como um monitor de vídeo ou impressora) ou um arquivo interno. Este processo é
chamado de "escrita" ou "gravação" de dados.
- Alguns comandos de E/S permitem que se edite os dados durante a sua transferência.
6
- Neste capítulo somente serão apresentados os comandos de E/S que transferem dados
(READ, PRINT, WRITE). Comandos auxiliares não serão discutidos.
3.4.Comando OPEN
- O comando OPEN serve para inicializar um arquivo.
- A forma geral simplificada do comando OPEN é: open([unit=]u[,file='a'][,status='b']) sendo que:
- "u" é o número da unidade.
- 'a' é uma expressão carácter que especifica o nome do arquivo;
- 'b' especifica a condição do arquivo, que pode ser:
-'NEW', para arquivos novos, que vão ser criados pelo programa;
-'OLD', para arquivos já existentes (em geral, arquivos de entrada de dados);
-'SCRATCH', para arquivos que são criados pelo programa e que devem ser apagados no final da
execução deste.
- 'UNKNOWN', para arquivos para os quais não se aplica nenhuma das condições acima discutidas.
7
- Cada comando de E/S opera sobre um único registo.
- Uma unidade de E/S é um meio de se referir a um arquivo. Usa-se números de unidades de E/S para
distinguir um arquivo de outro.
- Certos números de unidades podem ser pré-definidos. Assim, por exemplo, o número 5 pode indicar o
teclado e 6 pode indicar o monitor de vídeo.
- O comando OPEN estabelece a conexão entre o número da unidade e um particular arquivo.
3.6.Comando CLOSE
- O comando CLOSE serve para finalizar um arquivo. É o oposto de OPEN.
- A forma geral simplificada do comando CLOSE é: close([unit=]u) sendo que "u" é o número da
unidade.
4.1.Comandos IF
- Os comandos IF transferem o controlo do fluxo ou executam outro comando (ou um bloco de
comandos) dependendo do resultado verdadeiro ou falso de uma expressão lógica contida no particular
comando IF. Os três tipos de comandos IF são:
1. IF aritmético.
2. IF lógico.
3. IF bloco.
- Os comandos ELSE, ELSE IF e END IF são também apresentados nesta sessão, pois eles são usados
somente em conjunto com um comando IF bloco.
4.2.Comando IF lógico
- O comando IF lógico calcula uma expressão lógica/relacional e executa ou ignora um comando
executável contido no próprio IF, dependendo do valor (falso ou verdadeiro) dessa expressão.
- A forma geral do comando IF lógico é: if (condicao ) then….endif sendo que: if =se, then=então,
endif=fimse.
Ex:
Portugol fortran
Se (media>14) então if (media>14)then
Escrever “Dispensado” print* “Dispensado”
Fimse endif
4.3.Comandos IF bloco
- O comando IF bloco permite a execução de um determinado bloco de comandos, dependendo do valor
da(s) expressões lógica(s)/relacional(is) nele contido.
- A forma geral do comando IF bloco é:
Ex:
Portugol fortran
Se (media>14) então if (media>14)then
Escrever “Dispensado” print*, “Dispensado”
Senão else
Escrever “Admitido” print*, “Admitido”
Fimse endif
- O comando ENDIF ou END IF finaliza uma estrutura IF bloco. Sua forma geral é simplesmente: end if
- Exemplo:
...
print *,”Digite a nota do aluno: “
read *,nota
if(nota>=5.0) then
8
print *,”O aluno foi aprovado.”
elseif(nota>=3.5) then
print *,”O aluno foi reprovado mas podera cursar o RE.”
else
print *,”O aluno foi reprovado e nao podera cursar o RE.”
endif
4.4.Comando DO
- O comando DO é um comando de controlo que permite que um bloco de comandos seja repetitivamente
executado. O número de execuções depende da variável de controlo.
- A forma geral do comando DO é:
Fortran portugol
do v = vi , vf [, incr] para v de vi ate vf passo incr
enddo proximo
- Exemplo:
do i=0,100,5 para i de 0 ate 100 passo 5
bloco de comandos bloco de comandos
enddo próximo
2) A estrutura DO WHILE - END DO (while loop) executa o laço DO enquanto uma expressão
lógica/relacional for verdadeira:
do while (media>14)
bloco de comandos
end do
- O comando DO implícito é uma terceira forma do comando DO e somente pode ser usando em
comandos de entrada ou saída de dados.
- Exemplos de uso do comando DO implícito:
print *,(var(i),i=1,10,1)
print *,(var(i,j),j=10,20,2)
read(1,100)(var(i),i=2,8,2)
write((3,200)(var(i,j),j=1,5,1)
4.5.Comando EXIT
- O comando EXIT termina abruptamente um laço DO, direccionando o fluxo do programa para a
primeira linha de comando após o ENDDO daquele respectivo comando DO envolvido.
4.6.Comando CYCLE
- O comando CYCLE reinicia abruptamente um laço DO, direccionando o fluxo do programa para a linha
do comando DO dentro do qual ele está inserido.
4.7.Comando CONTINUE
- O comando CONTINUE é um comando executável que somente passa o controlo para o próximo
comando executável. A forma geral é: continue
9
4.8. Comando STOP
- O comando STOP termina a execução do programa. Apesar de sua localização dentro do programa em
geral ser a penúltima linha de comando, ele pode ser colocado em qualquer posição dentro do programa.
- A forma geral do comando STOP é: stop [varcar]
Sendo que "varcar" é uma variável carácter que será exibida na saída padrão (em geral, a tela do monitor
do operador).
4.9.Comando END
- O comando END indica o final de uma unidade de programa para o compilador. Sua forma geral é: end
Deve obrigatoriamente ser colocado na última linha do programa.
5. Estruturas Homogéneas
5.1.Atribuição de valores
vetor(3) = 1
vetor = (/ 1,2,3,4,5 /) , onde vector tem cinco elementos
Usando o do implícito:
10
vetor = (/ i, i=1, 5 /)
vetor = (/ -1, (0, i=2, 49), 1 /)
vetor = (/ -1, (0, i= 1,48), 1 /)
Obs.: nos dois últimos casos, todos elementos são zero, excepto o primeiro e o último. Comandos de entrada (read) e
saída (print) com arrays. Um elemento do array: como se fosse uma variável escalar. Um grupo de elementos do array:
utilizando o do implícito O array todo: apenas o nome do array
Exemplos:
Print *, (p(i), i=1,99,2), q(3), q(4), r
Read *, first, last, (arr(i), i=first, last)
Do i=1, 10
Read *, arr(i)
Matrizes (arrays multidimensionais). Fortran permite até sete dimensões para um array
Exemplos:
real, dimension(3,4) :: a
logical :: b(10,4)
integer, dimension (5:7, -10:-1) :: c
integer, dimension(5:8, 0:1, 100, -3:4) :: d
5.3.Atribuição de valores
vetor(3,2) = 1
Utilizando a função intrínseca reshape:
reshape((/ 1,2,3,4,5,6 /), (/ 2,3 /))
1 3 5
2 4 6
integer :: i, j
real, dimension(2,2) :: a
reshape((/ ((10*i+j, i=1,2), j=1,2) /), (/2,2 /))
11 12
21 22
11
dot_product Produto escalar de dois vetores
transpose Transposta de uma matriz
maxval, minval Valor máximo e mínimo, respectivamente, de um array, ou parte deste
product, sum Produto e soma, respectivamente, de um array, ou parte deste
Ex:
matriz_b = tranpose(matriz_a)
max = maxval(matriz_c)
prod = product(vetor_d)
program somamat
implicit none
print *
print *, 'Digite os valores da matriz B: '
do linha = 1, lin !leitura dos elementos
read *, matrizb(linha, 1: col) !da matriz B
end do
do linha = 1, lin
matrizc(linha, 1: col) = matriza(linha, 1: col) + matrizb(linha, 1: col)
end do !formação da matriz C atraves da soma dos elementos
!das matrizes A e B
print *
print *, 'Matriz C = A + B: '
do linha = 1, lin
print '(F5.2)', matrizc(linha, 1: col) !visualização da
end do !matriz C
end program FIM
12
6. Ficha 2: Exercícios fortran
1. Em uma escola, a média final é dada pela média aritmética de três notas. E a mesma tem o
seguinte esquema de avaliação:
Desenvolva um algoritmo que a partir da entrada das três notas mostre a situação do aluno. No
caso do aluno em recuperação e prova final, mostre também quanto o aluno irá precisar para
passar. No caso da recuperação a nota necessária para passar é dada por 10 – Média + 2 e na prova
final é dado por 10 – Média.
2. Em uma loja e CD´s existem apenas quatro tipos de preços que estão associados a
cores. Assim os CD´s que ficam na loja não são marcados por preços e sim por cores.
Desenvolva o algoritmo que a partir a entrada da cor o software mostre o preço. A loja está
actualmente com a seguinte tabela de preços.
Cor Preço
Verde 10
Azul 20
Amarelo 30
Vermelho 40
3. Desenvolva um algoritmo capaz e encontrar o menor dentre 3 números inteiros quaisquer dados
pelo teclado.
4. Desenvolva um algoritmo capaz de verificar se uns números inteiros, dados como entrada, é par
ou impar.
13
variável E, caso contrário zerar tal variável. A hora excedente de trabalho vale MZM 20,00. No
final do processamento imprimir o salário total e o salário excedente.
7. A secretária de Meio Ambiente que controla o índice de poluição mantém 3 grupos que são
altamente poluentes do meio ambiente. O índice de poluição aceitável varia de 0,05 até 0,25. Se o
índice sobe para 0,3 as indústrias do 1º grupo são intimadas a suspenderem suas actividades, se o
índice crescer para 0,4 as indústrias do 1º e 2º grupo são intimadas a suspenderem suas
actividades, se o índice atingir 0,5 todos os grupos devem ser notificados a paralisarem suas
actividades. Faça um algoritmo que leia o índice de poluição medido e emita a notificação
adequada aos diferentes grupos de empresas.
14