Crivo de Eratóstenes Simples em Fortran 95
Publicado por Perfil removido (última atualização em 02/05/2012)
[ Hits: 6.127 ]
Para compilar, use: "gfortran sieve001.f95 -o sieve001", igual GNU Pascal e GCC
Particularidades desta linguagem:
- Início e fim de blocos demarcados por palavras, lembrando Pascal;
- Cláusula "Program" ao início do programa semelhante a Pascal;
- Declaração de variáveis no início do código, como em Pascal.
- Arrays podem ser bem flexíveis ao serem dimensionados;
- Usam-se parêntesis para determinar elementos de um array;
- A simples declaração "LISTAGEM(:)=12345" preenche todos os elementos do array LISTAGEM com o mesmo valor.
- Cláusula de fim de blocos terminam geralmente com a seguinte estrutura: "END" + "Comando titular do bloco" + "Identificador criador pelo programador". Exemplos: END DO, END IF, END PROGRAM XXXXXXX, END FUNCTION XXXXXXX;
- Comentários são declarados após um ponto de exclamação;
- Operadores lógicos são identificados por palavras abreviadas entre pontos (.OP.). Exemplos: .AND. .OR. .NOT. Provavelmente foi daí que veio .AND., .T. .F. do Dbase, Clipper etc.;
- Originalmente "maior que (>)", "menor que (<)", "maior ou igual que (>=)", "menor ou igual que (<=)" etc em Fortran escreviam-se igual ao que se usa hoje em Bash Script ou no comando test:
* Maior que: .GT. (Greater Than). Em Bash: -gt
* Menor que: .GT. (Less Than). Em Bash: -lt
* Maior ou igual que:: .GE. (Greater or Equal Than). Em Bash: -ge
* Menor ou igual que:: .LE. (Less or Equal Than). Em Bash: -ge
* Igual a: .EQ. (Equal). Em Bash -eq
* Diferente de: .NE. (Not Equal). Em Bash -ne
Usados dentro de colchetes em scripts em comandos "if/elif" e "while", por exemplo.
- Atualmente os operadores simbólicos consagrados do tipo ">" para a omparação "maior que" podem ser usados em lugar das letras e pontos. No script fica como exemplificado.
- Formatação de entrada/saída de strings e números, são mais complicadas que em C. São feitas com uma variável de string pré-declarada ou com um comando chamado "FORMAT", podendo até ter um número de linha de código (label) para identificá-lo. FORMAT lembra um comando chamado "PICTURE" do Clipper/XBase;
- Impressão de término de linha ('\n' em C) no comando Write pode ser cancelada com a incomum declaração "Advance='no'";
- Cláusula "PARAMETER" pode definir constantes;
- Strings são definidas por uma notação semelhante a uma multiplicação de um tipo de dado (Character) por um valor. Exemplo: 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).
- Não encontrei operador de auto-incremento semelhante ao "duplo mais" em C.
Fortran não é lacônico, conciso e simbólico quanto C, porém pode ser tão poderoso quanto. Existem algumas facilidades sintáticas que não devem ser subestimadas.
Program sieve001 ! Isto eh um comentario ! Para compilar, use: ! gfortran sieve001.f95 -o sieve001 ! igual GNU Pascal e GCC Integer :: i=5, j=0, l=2 Integer, Parameter :: p=5000000, q=348600 Integer, Dimension (1:q) :: primes Real :: k=0.0, n=5.0 Character*8 :: F1='(I0," ")' primes(1)=2 primes(2)=3 primes(3:)=1 Do While ((i .LE. p) .AND. (l .LT. q)) j = 1 k = SQRT(Real(i)) Do While ((Real(primes(j)) .LT. k) .AND. (MOD(i,primes(j)) .NE. 0)) j = j + 1 End Do If (Real(primes(j)) .GT. k) Then l = l + 1 primes(l) = i End If If (MOD(i,3) .EQ. 2) Then i = i + 2 Else i = i + 4 End If End Do !Character*8 :: F1='(BN,4A5)' Do j=1,l Write (*,F1,Advance='No') primes(j) End Do Print * End Program sieve001
Octave - Método de Euler-Melhorado para solução de EDO
Octave - Sistemas lineares por Jacobi
Octave - Calcular raiz pelo método de Newton
Octave - Método de Euler para solução de EDO
Octave - Método de Euler-Modificado para solução de EDO
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
Criando uma VPC na AWS via CLI
Multifuncional HP imprime mas não digitaliza
Dica básica para escrever um Artigo.
Como Exibir Imagens Aleatórias no Neofetch para Personalizar seu Terminal
Instalação Uefi com o instalador clássico do Mageia [RESOLVIDO] (2)
Melhorando a precisão de valores flutuantes em python[AJUDA] (11)
GLPI - Configuração de destinatário com conta Microsoft Exchange (0)