Crivo de Eratóstenes Simples em Fortran 95
Publicado por Perfil removido (última atualização em 02/05/2012)
[ Hits: 6.126 ]
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
Matriz de Hilbert e resolução de sistemas lineares
Octave - Método de Euler-Modificado para solução de EDO
Octave - Sistemas lineares por Jacobi
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
É cada coisa que me aparece! - não é só 3% (1)
Alguma pessoa pode me ajudar com drriver Core i3 7020u (Debian 12)? (2)
Mikrotik não mostra bytes nem packtes (1)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
[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