Funções recursivas

Discussão sobre avaliação de atividade acadêmica.

https://gist.github.com/zrhans/664f676f4b66adf549539ca2b788c6cd

Processo de compilação e execução

 
 zrhans:~/workspace/2017-2 $ gfortran denrlei-fatorial.f90
 zrhans:~/workspace/2017-2 $ ./a.out

========================================
 ****Utilize somente numeros inteiros****

Encontrar o valor fatorial do numero:
 ----------------------------------------

3
 3.00000000 ! = 6.00000000
 zrhans:~/workspace/2017-2 $

Observando o resultado, vemos que pode ser melhorado declarando variáveis do tipo integer​ ao invés de real. Já a questão do valor máximo para cálculo do fatorial, pode ser usado o especificados de entidade kind=16[1] para aproveitar o limite da capacidade computacional da arquitetura. Ver U3 – Tipos de dados.

Veja abaixo os resultados do cálculo do fatorial dos primeiros 100 inteiros, percebendo que para n=33 é o fatorial retorna o valor inteiro máximo para essa máquina[2]:

zrhans:~/workspace/2017-2 $ ./a.out
1 : 1
2 : 2
3 : 6
4 : 24
5 : 120
6 : 720
7 : 5040
8 : 40320
9 : 362880
10 : 3628800
11 : 39916800
12 : 479001600
13 : 6227020800
14 : 87178291200
15 : 1307674368000
16 : 20922789888000
17 : 355687428096000
18 : 6402373705728000
19 : 121645100408832000
20 : 2432902008176640000
21 : 51090942171709440000
22 : 1124000727777607680000
23 : 25852016738884976640000
24 : 620448401733239439360000
25 : 15511210043330985984000000
26 : 403291461126605635584000000
27 : 10888869450418352160768000000
28 : 304888344611713860501504000000
29 : 8841761993739701954543616000000
30 : 265252859812191058636308480000000
31 : 8222838654177922817725562880000000
32 : 263130836933693530167218012160000000
33 : 8683317618811886495518194401280000000
34 : -45049567881334322615755997788248211456
35 : 124676958757991025765413114570153656320
36 : 64699745315476902531002227912544878592
37 : 11914008226076149403460180741783027712
38 : 112449945669955213868112260755986841600
39 : -38122888843946684167491727129499926528
40 : -163786086074113512846170655452924215296
41 : 90417809380115242574495275065471401984
42 : 54441957834517090031680871000348557312
43 : -40972381562334372881344799007389515776
44 : -101372954138020089462298119166297636864
45 : -138112166238704000779545465870406909952
46 : 112205324517446769945026111164878159872
47 : 169414748505921235465608113272750342144
48 : -34868877818303820771801141270420652032
49 : -7163178492194900501382885091770892288
50 : -17876557688806561605769647156776402944
51 : 109142658633680748495871817299708084224
52 : -109381988704554957092033826755239215104
53 : -12445163685458847000424491687618805760
54 : 8525894827099188903826663732120911872
55 : 128641848569516926247091897834881941504
56 : 58013814553240137106279522686256283648
57 : -96036239674696819575813281201073946624
58 : -125584030397400119983176590753997520896
59 : 76754278814039117186822509013046919168
60 : -158696408050791457277893963261939810304
61 : -152574617312001916977042750888818507776
62 : 68280000442158124397838452982762438656
63 : -122030742116238187960047358698953113600
64 : 16526943742340630214585014197669593088
65 : 53404242489325573557902100553218916352
66 : 121856335086103220187792562194766364672
67 : -2402355333607370538888911313090641920
68 : -163360162685301196644445969290163650560
69 : -42533116894813274175409835772940910592
70 : 85223119651516978891682962780050161664
71 : -74241109319186841031252576388266328064
72 : 99157999753562861163808218953115762688
73 : 92604276670381132227133227510318235648
74 : 47069135189434515540366687128185208832
75 : 127361469998204030893755460296208547840
76 : 151565446077229370950925974422339715072
77 : 100938872634753805466563377840038871040
78 : 46737626329212166734327500592363077632
79 : -50833556122561926085248134952767193088
80 : 16703913246307474740644492959843090432
81 : -8112494732848399861294499979782520832
82 : 15340165748308138300600216521369714688
83 : -87895710574178374903680458453386526720
84 : 102972384029662704285082853414432407552
85 : -94688897423070185815697252999218855936
86 : 23531627718487142971026820429615464448
87 : 5557409982750657699085732785936138240
88 : 148769711561119414056169877730611953664
89 : -30507980976972224072490571814496370688
90 : -23459352559992458817154603850527670272
91 : -93106881433682971580821305807408726016
92 : -58773918875371798851194948487397507072
93 : -21456584674561877747136490419676774400
94 : 24775242116814272549417545140992475136
95 : -28328567349213352048955463628092342272
96 : 2716469843025911007272351157280833536
97 : -76784792147425095757956545175527358464
98 : -38697558187013188085500063702780477440
99 : -87952224383982522367385624825816940544
100 : 52119101546147813309177310644279443456

Alternativa de verificação:

...
integer(kind(16) :: maxint

if ( (fatorial(x) > 0) .and. (fatorial(x)<=huge(maxint) )

...

Referências

[1] StackOverflow – https://stackoverflow.com/q/47614227/824522
[2] The GNU Fortran Compiler – https://gcc.gnu.org/onlinedocs/gfortran/KIND-Type-Parameters.html

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

Verified by MonsterInsights