Função Fatorial Recursiva em Ada 95
Publicado por Perfil removido (última atualização em 26/01/2016)
[ Hits: 2.279 ]
Este é um exemplo simples de uma função fatorial recursiva em Ada 95. Cheguei a ler um texto onde era citado que Ada é uma linguagem da família Pascal. Até parecem um pouco.
Para a compilação pode ser usado o gnatmake. Ele vem junto com o pacote GNAT nas principais distribuições Linux. Uso:
$ gnatmake fatorial-0001.adb
Caso seja feita uma tentativa de compilação com o gnat, resultará no seguinte, conforme abaixo:
$ gnat fatorial-0001.adb
gcc-4.9 -c fatorial-0001.adb
fatorial-0001.adb:4:11: warning: file name does not match unit name, should be "mostra.adb"
Esta crítica sugere que o nome do arquivo deve ter o mesmo nome do programa declarado na primeira declaração Procedure. Mesmo sem fazer isto, tudo parece funcionar normalmente.
Continuando:
Este é um exemplo simples, sem aprofundamento. O objetivo é ilustrar uma pequena parte da sintaxe de um programa em ADA. No caso um programa com função recursiva.
Posso dizer que até onde vi, Ada parece uma espécie de mistura de Pascal com Java.
Coisas como System.out.println() são semelhantes a Ada.Text_IO.Get() ou Ada.Text_IO.Put(). As semelhanças com Pascal são maiores e aparecem mais em outras instruções de declaração de tipos e registros, que não constam no exemplo. Uma semelhança relevante é que não é case sensitive.
A diferença é que colocando as bibliotecas com With e Use na primeira linha estes comandos podem ser abreviados para Get() e Put(). Get não foi usado nesta oportunidade.
Uma coisa que chama a atenção é o fato de que todo programa deve estar declarado como "Procedure Nome_do_Programa" (semelhante ao "Program Nome_do_Programa" do Pascal) e ainda deve ser seguido da partícula is. Os comandos do programa são implementados entre um Begin e um End. Este último End do programa não termina com o ponto final igual ao Pascal, mas sim com "End Nome_do_Programa", seguido de um ponto-e-vírgula.
A implementação da função Fatorial se dá antes do Begin de início do código. Ao invés de se igualar o retorno da função ao nome da mesma, retorna-se o resultado com o comando Return (semelhante ao C).
A estrutura de decisão IF é semelhante ao Pascal, com IF, THEN, ELSE, mas neste caso completa-se com END IF. Neste exemplo não aparece o que seria semelhante à estrutura CASE, ficando para uma próxima.
Ao invés de se usar um WriteLn para a mudança de linha, usa-se simplesmente o comando New_Line. O comando Put é usado semelhante ao comando Write, sem mudança de linha.
A linguagem Ada é poderosa, tendo inúmeros usos estratégicos na indústria, como programação concorrente e orientada a objetos. Não é o objetivo de abordá-los neste micro-artigo.
With Ada.Text_IO, Ada.Integer_Text_IO; Use Ada.Text_IO, Ada.Integer_Text_IO; Procedure Mostra is Function Fatorial (n1:Integer) return Integer is Begin If n1 = 0 Then Return 1; Else Return (n1 * Fatorial (n1 - 1)); End If; End Fatorial; Begin Put("O fatorial de 8 eh "); Put(Fatorial(8),2); Put("."); New_Line; End Mostra;
Contador de números (Pascal) - efeito Matrix
Operações básicas da matemática
Cronômetro feito no Lazarus(Delphi 7 para Linux)
programa para selecionar os números em posições impares em array de 19 espaços e calcular a media
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
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
Flatpak: remover runtimes não usados e pacotes
Mudar o gerenciador de login (GDM para SDDM e vice-versa) - parte 2
Linux rodando do hd externo ou ssd? (0)
Tentando acessar o linux por conexão área remota (1)
Site para donwloads de ISO windows server, xp e outros. (2)
Acabei de formatar meu ssd e deu erro (0)
Não consigo copiar arquivos do Mint para meu smartphone com android 11... (5)
[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