Códigos de Aula dia 30-10-17

A seguir temos dois códigos desenvolvidos em sala de aula como recurso de aprendizagem sobre formatação e posteriormente uma introdução sobre escrita em arquivos.

Exemplo 01

program teste
character (len=15) :: produto
integer :: id
real :: preco, s = 0.0
produto = 'Bolacha'
id = 1
preco = 1.24
print *,''
100 format(30(""))
print 100
print *,' Detalhes do produto'
print 100
print 101
101 format (4x,'Produto', 7x, 'Id', 3x, 'Preço')
print '(30("="))'
print 200, produto, id, preco
200 format(1x, a, 2x, i3.3, 2x, f5.2)
produto = "Massa"; id=4; preco=12.3456
s = s + preco
print 200, produto, id, preco
produto = "Graxa"; id=8; preco=32.87
s = s + preco
print 200, produto, id, preco
produto = "Bicileta Caloi"; id=3; preco=2.87
s = s + preco
print 200, produto, id, preco
print 201, s
201 format(30(""),/,14x," Total: ",1x,f5.2,2/)
end program teste

view raw
fatura-compras.f90
hosted with ❤ by GitHub

Resultado:

(p34dj19)cabox@box-codeanywhere:~/workspace/f$ ./a.out
 !234567890

------------------------------
  Detalhes do produto são
------------------------------
       Nome:       Id: Peso:
------------------------------
 Bolacha            1   1.24
 Massa              4  12.35
 Graxa              8  32.87
 Bicileta Caloi     3   2.87
==============================
             Total: 48.09

Exemplo 02

program arquivos
integer :: a
open(unit=10, file='dados.txt', status="unknown")
do a = 1, 10
write(10,99) a , a, a * 0.16
end do
99 format(i2,1x,i3.3, 1x, f10.7)
close(10)
end program arquivos

view raw
arquivo.f90
hosted with ❤ by GitHub

Resultado:

(p34dj19)cabox@box-codeanywhere:~/workspace/f$./a.out;cat dados.txt;
 1 001 0.1600000
 2 002 0.3200000
 3 003 0.4800000
 4 004 0.6400000
 5 005 0.8000000
 6 006 0.9600000
 7 007 1.1200000
 8 008 1.2800000
 9 009 1.4399999
10 010 1.5999999

Sugestão:  Refaça os programas acima adicionando comentários antes de cada comando indicando o que eles farão. Envie para o professor o seu código comentado usando o link ENVIAR e receba seu feedback.


09/10/2017
1 – Faça um programa em Fortran o somatório dos primeiros 50 números inteiros.

!
! Este programa efetua o somatorio dos numeros
! inteiro de 1 até 50
!----------------------------------------------

program somatorio
implicit none

! Declaracao de variaveis
integer :: i, soma = 0

! Procedimento de somatorio (repeticao)
do i =1,50
    soma = soma + i
enddo

! Mostrando o resultado
print*, "O somatorio dos primeiros 50 inteiros vale: ", soma

end program somatorio

Resultado

hrz@jep ~ $ gfortran somatorio.f90 -o somatorio
hrz@jep ~ $ ./somatorio 
O somatorio dos primeiros 50 inteiros vale:         1275
hrz@jep ~ $ sdfg

2 – Faça um programa em Fortran que selecione uma mensagem de acordo com o valor de temperatura fornecida pelo usuário:

Temperatura Mensagem
< 0 Temperatura Congelante
1 a 10 Temperatura Fria
11 a 20 Temperatura Agradavel
21 a 30 Temperatura Otima
31 a 40 Temperatura Horrivel
41 < Valor incorreto
!
! Este programa selecione uma mensagem de acordo 
! com o valor de temperatura fornecida pelo usuário
! 
!----------------------------------------------

program temperaturas
implicit none

! Declaração da variável
integer :: temp

! Monstrando mensagem para o usuario
print*, "Digite a Temperatura em Celsius"

! Leitura do valor digitado pelo usuario
read*, temp
 
print*, "A temperatura digitada foi de: ", temp, " Celsius"

! Seleção da temperatura
select case (temp)
 
    case (:0)
        print*, "Temperatura Congelante"

    case (1:10)
        print*, "Temperatura Fria"
     
    case (11:20)
        print*, "Temperatura Agradavel"
     
    case (21:30)
        print*, "Temperatura Otima"
     
    case (31:40)
        print*, "Temperatura Horrivel"
     
    case (41:)
        print*, "Valor incorreto"
 
end select

end program temperaturas
hrz@jep ~ $ gfortran temperaturas.f90 -o temperaturas
hrz@jep ~ $ ./temperaturas 
Digite a Temperatura em Celsius
26
A temperatura digitada foi de:           26  Celsius
Temperatura Otima
hrz@jep ~ $ 

portalfisica.com

Revisão 01 — Fortran

Adaptado do original: Cristian da Silva – Ideiasprogramadas.com.br

Fortran é uma linguagem de programação de alto nível, desenvolvida entre os anos 1954 e 1958 por uma equipe liderada pelo engenheiro John Backus na IBM. O Fortran permite traduções quase diretas de fórmulas, por meio de simbologia de variáveis e operadores algébricos.

A linguagem Fortran ocupa um lugar de destaque em algumas áreas, por exemplo aquelas voltadas para problemas que possam ser formulados matematicamente. Em particular podemos citar os problemas nos campos da física, da engenharia, da estatística e da matemática. A NASA, por exemplo, usa a linguagem Fortran para manejar satélites e desenvolver softwares, já as agências e centros de monitoramento do clima a utilizam para desenvolver modelos numéricos de previsão de tempo e clima.

Conceitos básicos da linguagem Fortran

Comentários em Fortran podem ser feitos com a letra C na primeira coluna (isso tem que ser adicionado no inicio da linha) ou o ponto de exclamação ! em qualquer coluna. É interessante notar que a linguagem é a insensível à caixa (Case Insensitive), ou seja a linguagem Fortran não faz qualquer definição entre letras minúsculas ou maiúsculas (MASCOTE="Pig" é o mesmo que mascote="Pig").

Outro conceito interessante e essencial é com o inicio de cada programa escrito com a linguagem, todo e qualquer ,inicio de programa Fortran deve ser iniciado com program nome_do_programa e devem ser terminados com o end.

Declarações de variáveis podem ser do tipo inteiro, real, alfanuméricos ou literais, sempre deve ser declarada antes de ser usada. As declarações de matrizes e vetores deve-se indicar suas dimensões logo após o nome da variável, Exemplo, matriz(4,3) incida que a matriz de 4 linhas e 3 colunas.

Tipos de variáveis suportadas pelo Fortran

Inteiras (INTEGER)

  • Reais real
  • Alfanuméricas character
  • Lógicas logical

Operadores

Atribuição

  • Recebe =

Operadores Literais

  • Concatenação //

Operadores Aritméticos

  • Soma +
  • Subtração -
  • Multiplicação *
  • Divisão /
  • Potenciação **

Operadores Relacionais

  • Menor que .LT. (less than)
  • Menor ou igual que .LE.(less than or qual to)’
  • Igual que .NE. (note qual to)
  • Diferente que .GT.(greater than)
  • Maior ou igual que .GE. (greater than or equal to)

Exemplo de utilização desses casos de operadores racionais:

A .NE. B (isso vai retornar verdadeiro .true.)
"NOME" .EQ. "Joao" (Isso vai retornar .false.)

Operadores Lógicos

  • Junção .AND.
  • Disjunção .OR.
  • Negação .NOT.

Prioridades

Quadro 1 – Prioridade dos operadores em Fortran

Operador Prioridade
** 1
* 2
/ 2
+ 3
- 3
.eq. 4
.ne. 4
.gt. 4
.ge. 4
.lt. 4
.not. 5
.and. 6
.or. 7

Funções trigonométricas básicas da biblioteca (built-in)

Quadro 2 – unções trigonométricas básicas da biblioteca em Fortran

Nome Definição Tipo do argumento Tipo da Função
sin(x) Seno(radianos) * \mathbb{R} ou \mathbb{C} \mathbb{R}
cos(x) Cosseno(radianos) * \mathbb{R} ou \mathbb{C} \mathbb{R}
tan(x) Tangente(radianos) \mathbb{R} \mathbb{R}
asin(x) Arcoseno(radianos) ** \mathbb{R} , \mid x \mid < 1 \mathbb{R}
acos(x) Arcocoseno(radianos) *** \mathbb{R} , \mid x \mid < 1 \mathbb{R}
atan(x) Arcotangente(radianos) ** \mathbb{R} \mathbb{R}
sinh(x) Seno Hiperbólico(radianos) \mathbb{R} \mathbb{R}
cosh(x) Cosseno Hiperbólico(radianos) \mathbb{R} \mathbb{R}
tanh(x) Tangente Hiperbólica(radianos) \mathbb{R} \mathbb{R}

* Se x for complexo, a parte real (\mathbb{R} ) é assumida como valor em radianos
** Retorna valores na faixa [-\pi/2, \pi/2]
*** Retorna valores na faixa [0, \pi]

Exemplos

Exemplos de programas básicos com a linguagem Fortran com todos os conceitos vistos acima.

Todos os exemplos citados abaixo podem ser testados no link Compile and Execute

Um Olá Mundo simples

program olamundo
print*, 'Olá Mundo!!!'
end

Exemplo com todas as funcionalidades:

program demonstracao
integer k, n, m
real a, b, c
character*2 estado
character*3 codigo
character*5 tudo
n = 1
m = 3
k = m+n
a = 2.5
b = 1.0
c = a+b
print*, 'Valor das variaveis k e c:'
print*, 'k = ',k,' c = ', c
print*
estado = 'SP'
codigo = 'OLA'
tudo = estado//codigo
print*
print*, 'Variavel tudo concatenada = ', tudo
stop
end

Exemplo da estrutura if:

program resultadonota
real nota
print*, 'Qual foi a nota da sua prova?'
read*, nota
if(nota .ge. 9.00) then
print*, 'Muito bem!!!'
else if (nota .ge. 7.00) then
print*, 'Você foi bem!'
else if (nota .ge. 5.00) then
print*, 'Você tem que melhorar um pouco!'
else
print*, 'Foi muito mal na prova!!!'
end if
stop
end

Comando do(faça). Exemplo de loop:

program loop
implicit none
integer m, n
parameter (m=3, n=2)
integer i, j
print*, ' i j '
do 10 i=1,m
print*, 'Primeiro do ', i
do 20 j=1,n
print*, 'Segundo do ',i,j
20 continue
10 continue
stop
end

Exemplo de do while:

program radiacao
implicit nome
real radse, fatseg, nivrad, radmim
parameter(radseg=0.466, fatseg=10.0)
integer dia
print*, 'entre com o nivel de radiacao do dia'
read*, nivrad
print*, 'n.dias radiacao'
radmin=raseg/fatseg
do while(nivrad .gt. radseg) then
print*, dia,nivrad,' inseguro'
else
print*, dia, nivrad, ' Seguro'
end if
dia=dia+3
nivrad=nivrad/2.0
end do
end

Exemplo de leitura (read):

program ler
integer a,b,c
print*, 'entre com os valores de a b c'
read(*,*) a,b,c
sum=a+b+c
stop
end

Exemplo de Escrita (write):

program escrever
 integer a,b,c
 print*,'entre com os valores de a b c´
 read(*,*)a,b,c
 sum=a+b+c
 write(*,*)a,b,c,sum
 stop
end

Referências

  1. CRISTO, Helder Pereira. Guia Básico de Programação em Linguagem Fortran 77 e 90: Programação em Linguagem Fortran. Belo Horizonte, 2003.
  2. ABOUT Fortran TUTORIAL. Disponivel em . Acesso em 03/05/2017.

IDPFPT-2666