Função Fatorial Recursiva em Fortran 95
Publicado por Perfil removido (última atualização em 02/05/2012)
[ Hits: 12.763 ]
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.
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
Algoritmo para calcular a tabuada
Octave - Sistemas lineares por Jacobi
Octave - Calcular raiz pelo método da Secante
Matriz de Hilbert e resolução de sistemas lineares
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
Excluir banco de dados no xampp (1)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta