Crivo de Eratóstenes Simples em Fortran 95
Publicado por Perfil removido (última atualização em 02/05/2012)
[ Hits: 6.155 ]
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 - Sistemas lineares por Gauss-Seidel
Octave - Método de Gauss-Legendre
Octave - Sistemas lineares por Jacobi
Cálculo da raiz de uma função pelo Método da Bisseção - Octave
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)