Crivo de Eratóstenes Simples em Ada 95
Publicado por Perfil removido (última atualização em 22/02/2016)
[ Hits: 2.065 ]
A linguagem de programação Ada foi assim denominada em homenagem à Condessa Ada Lovelace (1815 — 1852), filha do poeta, maconheiro e revolucionário inglês Lord Byron (1788 — 1824).
Ada Lovelace foi a primeira programadora da história, colaborando com os cálculos da máquina analítica de Charles Babbage. A máquina analítica é uma espécie de computador mecânico. Também chamada de máquina das diferenças, pois calculava diferenças de polinômios programados.
Como disse em outra oportunidade, Ada possui semelhanças com Pascal. Na verdade foi implementada com base em Pascal e algumas outras linguagens como Simula, COBOL e BASIC. Mais tarde adquiriu elementos de C++ e Java. É um sonho de padronização de uma linguagem universal.
Ada é uma linguagem de programação estruturada, com tipagem estática, imperativa, orientada a objetos, de alto nível, orientada à escalonamento de sistemas de tempo real e com suporte à programação de threads (programação paralela). Foi criada pelo Departamento de Defesa dos EUA (DoD) para substituir outras centenas de linguagens usadas por lá.
Existe até uma implementação chamada de A# (A Sharp) para a plataforma .Net.
Exemplos de quem usa ou usou Ada: sistema de bordo de aviões a Boeing e da Embraer, transporte metroferroviário de algumas capitais europeias, alguns projetos científicos da NASA. A maior parte das afirmações está esparsa pela internet. Há muito ainda para se dizer.
Voltando ao programa, algumas semelhanças com Pascal:
* Operador de atribuição :=
* Operador de igualdade lógica =
* Operadores Lógicos, exceto o de diferente
* Cálculo de resto de divisão
* Conectores lógicos
Comentários no programa começam por um duplo hífen no começo da linha.
Após isto, o programa começa com uma invocação de módulos (melhor chamados de packages) nas cláusulas With e Use.
Como são usadas expressões com tipo de dados inteiro e ponto flutuante, com funções do sistema, são chamados os módulos para os mesmos.
A declaração de variáveis e arrays devem ser feitas antes do Begin da procedure principal do programa.
O operador de diferente é expresso de uma forma curiosa. Ao invés de != (como em C) ou <> (como em Pascal) é expresso por /= que em C teria um significado bem diverso do apresentado.
É possível converter tipos de dados como entre Integer e Float, de modo semelhante ao type casting de C++. Sendo Integer(X) e Float(Y) respectivamente uma conversão para tipos Integer e Float.
Aparentemente não existem funções de incremento e decremento de valores numéricos.
Posições de arrays são marcadas entre parêntesis. Podem existir arrays multidimensionais separando os índices por vírgulas, dentro do mesmo par de parêntesis.
Existem três tipos de laços (loops) neste programa com as seguintes estruturas:
While (...) Loop
Exit When (...)
End Loop;
For (...) in <reverse> (...) Loop
Exit When (...)
End Loop;
Loop
Exit When (...)
End Loop;
O primeiro laço é condicional, um while simples, como aparece na maioria das linguagens. A diferença é a cláusula Exit When.
O segundo é um for que percorre um conjunto, que pode ser um vetor ou uma sequência de números demarcados por pontos, como por exemplo 1..10, que vai de 1 a 10. Pode ainda ter em opcional a cláusula Reverse, que faz os itens do conjunto serem percorridos do fim para o começo. Novamente aparece a cláusula Exit When.
O terceiro comeca apenas com a palavra Loop e encerra com a expressão End Loop. Seria apenas um laço perpétuo se não estivessem com a cláusula Exit When entre eles.
A cláusula Exit When (...) serve para sair do laço caso a expressão lógica que vem após When seja verdadeira.
A estrutura condicional If assemelha-se à do Pascal, com uma leve diferença no fechamento do bloco. Segue If ... Then ... <Elsif> ... <Else> End If. Com Elsif e Else sendo opcionais caso a lógica do programa necessite.
A função Put() serve para a escrita de dados como a função Write do Pascal. E a mudança de linha se dá com a função New_Line. As duas combinadas tem o mesmo efeito da função WriteLn do Pascal.
-- Isto eh um comentario -- Crivo de Eratostenes simples em Ada -- Compilar com gnatmake <arquivo.adb> With Ada.Text_IO, Ada.Integer_Text_IO; With Ada.Float_Text_IO, Ada.Numerics.Elementary_Functions; Use Ada.Text_IO, Ada.Integer_Text_IO; Use Ada.Float_Text_IO, Ada.Numerics.Elementary_Functions; Procedure sieve001 is primes : Array (1..170) of Integer; i, j, l, m, p, q : Integer; k, n : Float; Begin primes(1) := 2; primes(2) := 3; j := 0; l := 3; m := l; p := 1000; q := 170; k := 0.0; n := 5.0; While m <= q Loop primes(m) := 1; m := m + 1; End Loop; Loop i := Integer(n); j := 1; k := SQRT(n); While Float(primes(j))<k And (i Mod primes(j)) /= 0 Loop j := j + 1; End Loop; If Float(primes(j)) > k Then primes(l) := i; l := l + 1; End If; If (i Mod 3) = 2 Then n := n + 2.0; Else n := n + 4.0; End If; Exit When Integer(n) >=p ; End Loop; For m in 1..l-1 Loop Put (primes(m)); New_Line; End Loop; End sieve001;
Editor de Texto feito no Lazarus(Delphi 7 para Linux)
Visualizador de imagem Pascal/Lazarus
Nenhum comentário foi encontrado.
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
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
Excluir banco de dados no xampp (1)
[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