Função Fatorial Recursiva em Fortran 95

Publicado por Perfil removido (última atualização em 02/05/2012)

[ Hits: 12.507 ]

Download fatorial001.f95




A velha função fatorial, recursiva, em Fortran versão 95.

Para compilar, use: "gfortran fatorial001.f95 -o fatorial001", igual GNU Pascal e GCC

Durante a execução (após compilado), o programa pede um número de um intervalo pré-definido de 0 a J.

Insistentemente, há um loop indefinido para isto.

"J" deve ser no máximo até 20, já que o número definido por 21! (fatorial de 21) excede 2^63.

O que há de diferente no código são as particularidades desta linguagem:

- Blocos com início e fim definidos por palavras, lembrando Pascal;
- Cláusula "Program" semelhante a Pascal;
- Comentários vêm após um ponto de exclamação;
- Operadores lógicos definidos por palavras entre pontos (.OP.). Provavelmente foi daí que veio .AND., .T. .F. do Dbase, Clipper etc.;
- Máscaras de formatação com strings, algo mais complexas que C para formatação de entrada/saída de dados. Podem ser feitas com um comando chamado "FORMAT". De novo uma referência ao "PICTURE" do Clipper;
- Necessidade de uma estranha expressão (Advance='no') para evitar avanço de linha;
- Dimensionamento do tamanho do tipo de dados (KIND=8). Esta cláusula aumenta o inteiro para 64 bits. 8 é o valor máximo;
- Cláusula "PARAMETER" para declarar constantes;
- Funções e subrotinas devem estar num bloco determinado em uma áres definida pela cláusula "CONTAINS";
- Não foi usado algo como "RETURN" ao final, mas uma variável especificada para retorno do valor;
- Variáveis de sequências de caracteres são definidas por uma coisa que "lembra" uma multiplicação de um tipo (Character) por um valor (Character*5).
- Não existe operador para resto de divisão (módulo, sinal de porcentagem "%" em C), sendo necessário o uso de uma função já implementada na linguagem (não aparece neste código).

A sintaxe de Fortran é ricamente cheia de recursos tanto quanto C. Infelizmente não tão lacônica e taquigráfica quanto. Seu código compilado com gfortran gerou um executável pequeno, mesmo sem usar "strip -s".

É tão verborrágica quanto Pascal e até mais, lembrando também Clipper e COBOL.

  



Esconder código-fonte

Program fatorial001

! Isto eh um comentario
! Para compilar, use:
! gfortran fatorial001.f95 -o fatorial001
! igual GNU Pascal e GCC

Integer :: I=-1
Integer, Parameter :: J=20, K=8
Integer (Kind=K) :: L=1

Character*5  :: F0='(2I2)'
Character*14 :: F1='(BN,A47,I2,A2)'
Character*27 :: F2='(BN,A14,I0,A4,I0,A1)'

Do While ((I .LT. 0) .OR. (I .GT. J)) 
   Write (*,F1,Advance='no')"Digite numero para calcular fatorial entre 0 e ",J,": "
   Read (*,F0) I
End Do

L = Fatorial(I)

Write (*,F2)"O fatorial de ",I," eh ",L,"."

Contains

   Recursive Integer (Kind=K) Function Fatorial(A) Result (B)
   Integer :: A
      If (A .LT. 0) Stop "Erro" 

      If (A .EQ. 0) Then 
         B = 1
      Else
         B = A * Fatorial(A-1)
      End If
   End Function Fatorial

End Program fatorial001

Scripts recomendados

Matriz de Hilbert e resolução de sistemas lineares

Octave - Calcular raiz pelo método de Newton

Crivo de Eratóstenes Simples em Fortran 95

Octave - Calcular raiz pelo método Regula-Falsi

Octave - Sistemas lineares por Jacobi


  

Comentários
[1] Comentário enviado por albertguedes em 01/07/2015 - 17:38h

Questão de utilizar alguma biblioteca para números gigantes para exceder 2^63. Sugiro essas bibliotecas para serem usadas com fortran : http://crd-legacy.lbl.gov/~dhbailey/mpdist/

"Aquele que se empenha a resolver as dificuldades resolve-as antes que elas surjam. Aquele que se ultrapassa a vencer os inimigos triunfa antes que as suas ameaças se concretizem." - Sun Tzu


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts