Crivo de Eratóstenes Simples em Fortran 95

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

[ Hits: 6.126 ]

Download sieve001.f95




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.

  



Esconder código-fonte

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

Scripts recomendados

Octave - Decomposição LU

Matriz de Hilbert e resolução de sistemas lineares

Algorítimo de maior e menor

Octave - Método de Euler-Modificado para solução de EDO

Octave - Sistemas lineares por Jacobi


  

Comentários

[2] Comentário enviado por removido em 25/02/2015 - 05:20h

Correção:

* Maior que: .GT. (Greater Than). Em Bash: -gt;
* Menor que: .LT. (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: -le;
* Igual a: .EQ. (Equal). Em Bash -eq;
* Diferente de: .NE. (Not Equal). Em Bash -ne;
* E (AND): -a fica .AND.;
* OU (OR) -o fica .OR.;
* NAO (NOT) fica .NOT.;
NAND, NOR são combinações de .AND. e .OR.;

--
Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts