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
https://gist.github.com/zrhans/b76a3713393a7052c164dfd2c170e4ca

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

https://gist.github.com/zrhans/10135101ae531019e0402d41f7cb9849

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

[code lang=Fortran]
program olamundo
print*, 'Olá Mundo!!!'
end
[/code]

Exemplo com todas as funcionalidades:

[code lang=Fortran]
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
[/code]

Exemplo da estrutura if:

[code lang=Fortran]
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
[/code]

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

[code lang=Fortran]
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
[/code]

Exemplo de do while:

[code lang=Fortran]
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
[/code]

Exemplo de leitura (read):

[code lang=Fortran]
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
[/code]

Exemplo de Escrita (write):

[code lang=text]
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
[/code]

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

Verified by MonsterInsights