Função Fatorial Recursiva em Fortran 95
Publicado por Perfil removido (última atualização em 02/05/2012)
[ Hits: 12.800 ]
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
Octave - Método de Euler-Modificado para solução de EDO
Script em Bath "DOS" para Upload e Download de arquivos usando o SSH
Octave - Calcular raiz pelo método de Newton
Octave - Sistemas lineares por Gauss-Seidel
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Falta pacotes de suporte ao sistema de arquivos (Gerenciador de discos... (2)
Enzo quer programar mas não faz código pra não bugar (12)
Erro de Montagem SSD Nvme (12)
WebScrapping através de screenshot devido a bloqueios de Shadow DOM (1)