Função Fatorial Recursiva em Ada 95

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.

Por: Perfil removido


Conectar rede WIFI pelo terminal

Faça de modo fácil conexões a redes Wifi WPA/PSK WPA2/PSK com DHCP e wpa_supplicant via terminal sem precisar ficar derrubando e levantando placas ou ficar digitando uma "grande" quantidades de linhas para fazer as coisas funcionarem bem. Com este script/programa você apenas precisa escolher a placa a qual quer se conectar, a rede e digitar a senha para se conectar. E caso queira ainda pode testar a conexão via ping. Para aqueles que curtem uma "tela preta", o script pode dar uma boa acelerada no trabalho de configuração de conexão a redes wifi. Basta dar permissões de execução e executar. Qualquer dúvida leia os comentários no código fonte. :)

Por: Perfil removido


Salvar link favorito

Script útil para quem (assim como eu) usa um gerenciador de janelas simples e que não consegue executar os favoritos que são salvos diretamente pelo navegador (depois de arrastar o atalho para alguma pasta). Este script cria um arquivo .htm que redireciona você para o link que desejar (substituindo, assim, o "atalho" favorito, que normalmente não funcionam nestes WMs) SINTAXE DE USO: $ ./fav add <link> <nome> Onde <link> é o link para "favoritar" e <nome> é o nome que será dado ao arquivo; exemplo: Para salvar um "atalho" para o Google, basta executar: ./fav add http://www.google.com Google O comando acima vai criar um arquivo chamado Google.htm na sua pasta pessoal (/home/$USER) que, ao ser executado, te levará a página do Google OBSERVAÇÕES: #1 - o link deve ser completo (incluindo o http://) e, caso exista algum espaço ou caractere especial nele, deixe ele entre aspas ("") assim: ("http://isso é um exemplo.com"); #2 - por mais que o link possa vir entre aspas (""), o <nome> não pode!! logo, se você precisar criar um arquivo que tenha espaços no nome, crie primeiro o arquivo sem os espaços e depois você adiciona-os, renomeando; DICA: Você pode alterar o destino do arquivo modificando o script, mas precisamente as linhas ' export file="/root/$nome.htm" ' e ' export file="/home/$USER/$nome.htm" ' -> Se você quiser que os links sejam salvos no seu Desktop, por exemplo, basta trocar a linha ' export file="/home/$USER/$nome.htm" ' por ' export file="/home/$USER/Desktop/$nome.htm" ' e a linha ' export file="/root/$nome.htm" ' por ' export file="/root/Desktop/$nome.htm" ' (sem os apóstrofos ['']) NOTA: Eu publiquei também um script para listar os favoritos criados por este script (favs), assim, você pode executá-los por meio de uma lista gerada em um terminal, sem precisar ficar arrastando mouse e clicando; quando o script em questão for publicado, eu posto o link nos comentários deste (favs) Enjoy!

Por: Perfil removido


Escrita de um número em octal na tela em Assembly Puro para Linux 64 bits (GNU Assembler)

Este pequeno programa em Assembly tem uma antiga versão em formato de 32 bits: http://www.vivaolinux.com.br/script/Escrita-de-um-numero-em-octal-na-tela-em-Assembly-Puro-para-Linux-x86-(GNU-Assembler)/ Esta versão está no formato 64 bits, para criação de objeto e linkedição em formato ELF64. De modo semelhante à primeira versão, o código usa a pilha para a reordenação dos dígitos após a sequência de divisões. Também foi escrito para usar variáveis globais, que não são tão adequadas ou elegantes como variáveis locais ou a pilha, visando facilitar a compreensão e dar uma visão mais intuitiva ao programa. Conforme os restos sucessivos são obtidos, são empilhados, sendo ainda acrescidos do endereço inicial da string "digit", de modo que o valor empilhado aponta exatamente - é um endereço de memória, um ponteiro mesmo - para o dígito que será impresso. Conforme vão sendo desempilhados, os dígitos são impressos. O último item desempilhado é um ponteiro para o caractere "new line" armazenado ao final do código. Este caractere identifica o fim da escrita dos dígitos, feita através de um cmp (comparação). As diferenças entre a versão de 32 bits e a de 64 bits são notadamente visíveis no uso das interrupções, modo de chamá-las e registradores. - Interrupção de escrita 32 bits: 4 - Interrupção de escrita 64 bits: 1 - Interrupção de encerramento 32 bits: 1 - Interrupção de encerramento 64 bits: 60 - Chamada de interrupção 32 bits: "int 0x80" - Chamada de interrupção 32 bits: "syscall" - Registradores usados no código com interrupções de 32 bits: eax. ebx, ecx, edx - Registradores usados no código com interrupções de 64 bits: rax. rdi, rsi, rdx No caso dos registradores, percebe-se que em 64 bits houve uma pequena mudança na analogia usual.

Por: Perfil removido


Firewall para web server

Esse é mais um simples script para ser usado em servidor web, dá pra ter uma ideia do que usar e talvez do que não usar.

Por: Perfil removido






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts