Vous êtes sur la page 1sur 37

Aplicativos Computacionais – P1

Universidade Federal Fluminense


UFF - TEE

UFF-TEE Visão Geral da Linguagem 1


Objetivo do Curso
• Este curso tem a finalidade de fornecer um
treinamento prático de programação em
linguagem Fortran e programar algoritmos
básicos para análise de sistemas elétricos.
• Não serão abordados todos os detalhes desta
linguagem, mas somente o que usaremos nos
nossos trabalhos.
• Serão mostrados também alguns elementos
básicos da linguagem C.

UFF-TEE Visão Geral da Linguagem 2


Estrutura de um Programa Fortran
Program <nome do programa>
[<declarações>]
[<comandos-executáveis>]
End Program < nome do programa>

UFF-TEE Visão Geral da Linguagem 3


Exemplo

Program OlaMundo
Write(*,*) ‘Ola Mundo’
End Program OlaMundo

UFF-TEE Visão Geral da Linguagem 4


Principais Comandos Executáveis
• Atribuição de valores a variáveis.
• Expressões matemáticas ou alfa-numéricas.
• Funções intrínsicas.
• Tomada de decisões.
• Repetições.
• Entrada e saída de dados.

UFF-TEE Visão Geral da Linguagem 5


Comentários
• Os textos precedidos do caracter de
exclamação ‘!’ é intepretado como
comentário.
• Exemplo:
Program AloMundo
! Escreva mensagem
Write(*,*) “Alo Mundo!”
End Program AloMundo
UFF-TEE Visão Geral da Linguagem 6
Caracteres da Linguagem Fortran
• Letras: A B C D E F G H I J K L M N O P Q R S T
UVWXYZ
• Algarismos: 0 1 2 3 4 5 6 7 8 9
• Especiais: branco : ; = + - * / ( ) , . ‘ “ ! ? % & <
>_

UFF-TEE Visão Geral da Linguagem 7


Nome de Variáveis
• O nome de uma variável em Fortran deve
começar com uma letra, ou seja, não pode ser
um algarismo ou um caractere especial.
• Os caracteres usados em nomes podem ser
letras, algarismos e o caractere especial ‘_’.
• Exemplos: Nome1, A10, Lista_10, Corrente_

UFF-TEE Visão Geral da Linguagem 8


Declarações de Variáveis Intrínsicas
• Integer - define variáveis de tipo inteiro.
• Real – define variáveis de tipo real (ponto
flutuante).
• Double precision – define variáveis do tipo real
com precisão sobrada em relação às variáveis de
tipo Real.
• Complex – define variáveis complexas.
• Logical – define variáveis lógicas.
• Character – define variáveis do tipo caractere ou
conjunto de caracteres.

UFF-TEE Visão Geral da Linguagem 9


Declaração de Variáveis
• Apesar de o Fortran não requerer declaração de
variáveis inteiras e reais, pois assume que
variáveis não declaradas e iniciadas com I, J, K, L,
M e N como sendo variáveis inteiras, e variáveis
não declaradas e iniciada com as demais letras
como sendo variáveis reais, uma boa
programação requer a declaração explícita de
todas as variáveis. Portanto, é uma boa regra
sempre incluir o comando Implicit None no
cabeçalho da declaração de variáveis.

UFF-TEE Visão Geral da Linguagem 10


Declaração de Vetores e Matrizes
Exemplos:
integer, dimension(100) :: matricula ! ou
integer matricula(100)
real, dimension(250) :: resistencia ! ou
real resistencia(250)
real, dimension(10,10) :: matrizA ! ou
real matrizA(10,10)

UFF-TEE Visão Geral da Linguagem 11


Declaração de Conjunto de Caracteres
Exemplos:
character(50) nome
character(100) endereço

obs: A variável ‘nome’ pode conter no máximo


50 caracteres, ex. nome = ‘EDSON ARANTES’, e a
variável ‘endereço’ pode conter no máximo 100
caracteres.
UFF-TEE Visão Geral da Linguagem 12
Comandos Executáveis: Atribuição de
Valores
• <nome> = <expressão>
• <nome> é o nome da variável que receberá o
valor da <expressão>.
• Se <nome> e <expressão> não são do mesmo
tipo, então ou irá ocorrer um arredondamento,
ou perda de informação, ou um erro.
• Exemplos:
K=2
B=5.

UFF-TEE Visão Geral da Linguagem 13


Exemplo
Program Exemplo
Implicit None
Integer i1, i2, i3
Real r1, r2, r3
! Atribuir valores as variaveis inteiras
I1 = 10
i2 = 20
i3 = 25
! Atribuir valores as variaveis reais
r1 = 0.6
r2 = 5.5
r3 = 7.0
! Escrever os valores das variaveis
Write(*,*) r1, r2, r2
End Program Exemplo

UFF-TEE Visão Geral da Linguagem 14


Operadores Aritméticos
• + soma
• - subtração
• * multiplicação
• / divisão
• ** elevar a uma potência
• Exemplos:
A=2+B*5+C/D
C2=C**2

UFF-TEE Visão Geral da Linguagem 15


Operadores Relacionais
• == ou .eq. igual
• /= ou .ne. diferente
• < ou .lt. menor que
• > ou .gt. maior que
• <= ou .le. menor ou igual
• >= ou .ge. maior ou igual
• O resultado de uma expressão relacional é falso
(.false.) ou verdadeiro (.true.)
• Exemplo: A > B (é falso ou verdadeiro
dependendo dos valores de A e B)
UFF-TEE Visão Geral da Linguagem 16
Operadores Lógicos
• .not. negação lógica
• .and. multiplicação lógica
• .or. adição lógica
• .eqv. equivalência lógica
• . neqv. negação da equivalência lógica

UFF-TEE Visão Geral da Linguagem 17


Operador para Concatenação de
‘String’ de Caracteres
• Para concatenar duas strings de caracteres,
utiliza-se o operador //
Exemplo:
string1 = ‘Endereco:’
string2 = ‘Rua da Quitanda 100’
string3 = string1 // string2
(string3 = ‘Endereco: Rua da Quitanda 100’)

UFF-TEE Visão Geral da Linguagem 18


Ordem de Precedência de Operadores
Expressão Operador Ordem de precedência
Definida pelo usuário Unário 1
Aritimética ** 2
*, / 3
+, - 4
Caracter // 5
Relacional ==, /=, <, >, <=, >= 6
Lógica .not. 7
.and. 8
.or. 9
.eqv. 10
A ordem natural pode ser alterada com o uso de parênteses

UFF-TEE Visão Geral da Linguagem 19


Exemplo de Expressões
• Y = 5.*X + 9.
• Z = (A + B)/(C + D)
• I=I+1
• j=l+n
• sw = x > 0. .and. y < 1
• endereco = rua // ‘,’ // numero

UFF-TEE Visão Geral da Linguagem 20


Exemplos de Funções Intrínsecas
Numéricas
• sn = sin(x) ! seno
• cs = cos(y) ! coseno
• tn = tan(z) ! tangente
• acs = acos(p) ! arco-coseno
• asn = asin(p) ! arco-seno
• sqr = sqrt(x) ! raíz quadrada
• mod = abs(x) ! valor absoluto

UFF-TEE Visão Geral da Linguagem 21


Tomada de Decisão (IF)
If (<expressão lógica>) then
<comandos>
endif

Exemplo:
If (x > 3. .and. z > 0.) then
y = x/z
endif

UFF-TEE Visão Geral da Linguagem 22


Tomada de Decisão (IF, ELSE)
if (<expessão lógica>) then
<comandos>
else
<comandos>
endif

Exemplo:
if (z /= 0.) then
x = y/z
else
x = y/0.0001
endif

UFF-TEE Visão Geral da Linguagem 23


Tomada de Decisão (IF, ELSEIF)
if (<expressão lógica>) then
<comandos>
elseif (<expressão lógica>) then
<comandos>
else
<comandos>
endif

UFF-TEE Visão Geral da Linguagem 24


Tomada de Decisão (SELECT CASE)
select case (<expressão>)
case (<valor1>)
<comandos>
case (<valor2>)
<comandos>
:
case (<valorN>)
<comandos>
case default
<comandos>
end select

UFF-TEE Visão Geral da Linguagem 25


Tomada de Decisão (SELECT CASE)
select case (erro)
case (0)
write(*,*) ‘Processo bem sucedido’
case (1:100)
write(*,*) ‘Erro:’, erro
case default
write(*,*) ‘Aviso:’, erro
end select

UFF-TEE Visão Geral da Linguagem 26


Repetições (Do, End Do)
do [<controle de repetição>]
<comandos>
end do

Exemplo:
do i = 1, 100
a(i) = b(i)*c(i)
end do

UFF-TEE Visão Geral da Linguagem 27


Repetições (Do, End Do)
Exemplo forma alternativa:
i=0
do
i=i+1
a(i) = b(i)*c(i)
if (i > 100) exit
end do

UFF-TEE Visão Geral da Linguagem 28


Repetições (Do While, End Do)
Exemplo:
i=1
do while (i <= 100)
a(i) = b(i)*c(i)
i=i+1
end do

UFF-TEE Visão Geral da Linguagem 29


Entrada e Saída de Dados
• Há diversas formas de se entrar e sair com dados de um
programa. Vamos a seguir abordar as mais comuns para
nosso tipo de aplicação.
• Uma forma de se entrar com dados é via teclado. Neste
caso há uma interação direta entre usuário e programa.
• Outra forma de se entrar com dados é lendo um arquivo
que contém os dados.
• Da mesma forma, as saídas (resultados da computação)
podem ser mostradas na tela do computador ou gravadas
em um arquivo.
• Nos casos de se utilizar um arquivo quer seja para escrever
(saída) ou para ler (entrada), este arquivo deve ser aberto e
fechado.

UFF-TEE Visão Geral da Linguagem 30


Abrir/Fechar um Arquivo (Open)
• O comando Open a seguir mostra as principais opções que vamos precisar.
Para conhecer todas as opções consulte o livro texto.

open(unit=<numero>, file=<nome do arquivo>, iostat=<resultado>,


status=‘old’ | ‘new’ | ‘unknown’)
close(unit=<numero>)

Exemplo:
open(unit=10,file=“dados.txt”,iostat=ioerr,status= ‘unknown’)
<comandos>
close(unit=10)

Obs: Se o arquivo não existir e o status for igual a ‘unknown’ o arquivo é


criado, se for igual a ‘old’ o comando retornará um código de erro em ioerr e
nenhum arquivo será criado.

UFF-TEE Visão Geral da Linguagem 31


Ler de um Arquivo (Read)
• Read(unit=<número>,<formato>) <lista de
variáveis>

Exemplo:
Read(10,100) a, i1, b
100 format(F7.2,I3,F9.3)
! alternativa
Read(10, “(F7.2,I3,F9.3)” ) a, i1, b

UFF-TEE Visão Geral da Linguagem 32


Escrever em um Arquivo (Write)
• Write(<número da unidade, <formato>) <lista
de variáveis>

Exemplo:
write(20,200) i, x, y, z
200 format(1x, I3, 3(1x,F8.2))
! alternativa
write(20, ”(1x, I3, 3(1x,F8.2)) ” ) i, x, y, z

UFF-TEE Visão Geral da Linguagem 33


Formatação
• <rótulo> format (<lista de caracteres de
edição>)
Caracter Descrição
de Edição
Aw Formata um string num campo de tamanho w
Ew.d Formata um número real ou complexo num campo
de tamanho w, em notação científica ([-]i.dEe)
Iw Formata um número inteiro num campo de
tamanho w
Fw.d Formata um número real ou complexo num campo
de tamanho w, em notação decimal ([-]i.f)

UFF-TEE Visão Geral da Linguagem 34


Considerações adicionais
• Leitura do teclado: read(*,<format>)
• Escrita no console: write(*,<format>)
• Formato livre na leitura: read(<unit>,*) <lista de
variáveis>, significa que o programa identificará cada
variável na lista por espaços em branco ou vírgulas e
atribuirá o formato de acordo com o tipo de variável.
• Formato livre na saída: write(<unit>,*) <lista de
variáveis>, significa que o programa atribuirá um
formato ‘default’ para cada variável na lista de acordo
com o respectivo tipo e escreverá os valores separados
por espaços em branco.

UFF-TEE Visão Geral da Linguagem 35


Primeiro Trabalho
• Escrever um programa em Fortran que leia o arquivo de dados de barra e ramos de um sistema
elétrico de potência (entrada.txt), processe as informações conforme abaixo, e imprima os mesmos
dados lidos em um arquivo de saída (saida.txt).
• O arquivo de entrada contêm quatro listas de dados distintas: uma com dados de barras, uma com
dados de carga, uma com dados de geração e a outra com dados de ramos. Cada uma destas listas
é terminada por uma linha contendo o valor 0 (zero).
• A lista de dados de barra contém as seguintes variáveis: número da barra (inteiro), nome da barra
(character(10)), tensão da barra (real), ângulo da barra (real).
• A lista de dados de carga contém as seguintes variáveis: número da barra (inteiro), carga ativa da
barra (real), carga reativa da barra (real).
• A lista de dados de geração contém as seguintes variáveis: número da barra (inteiro), geração ativa
da barra (real), geração reativa da barra (real).
• A lista de dados de ramo contém as seguintes variáveis: número da barra De (inteiro), número da
barra Para (inteiro), identificação do circuito (character(2)), resistência (real), reatância (real), e
reatância shunt (real).
• Processamento: Ordene as lista de barras, cargas e geração na forma ascendente do número de
barra, e ordene a lista de linhas na forma ascendente pelo número da barra De.
• As linhas no arquivo, cujo primeiro caractere seja ‘!’ deve ser considerada como linha de
comentário.

UFF-TEE Visão Geral da Linguagem 36


Método de Ordenação (Bubble Sort)
Ordenação de um arranjo A(N)

Fazer i variar de N a 1
Fazer j variar de 1 a i-1
Se A(j) maior que A(j+1) trocar A(j) com A(j+1)

UFF-TEE Introdução a Sistemas de Controle 37

Vous aimerez peut-être aussi