Erlang ::: Dicas de Estudo e Anotações ::: Passos Iniciais |
Quer aprender a programar em Erlang? Comece instalando e configurando o ambiente de programação da ErlangQuantidade de visualizações: 992 vezes |
|
Nos dias atuais (2023), muitos estudantes de programação estão aprendendo novas linguagens usando os compiladores e interpretadores online. Esta é uma abordagem interessante, pois promove uma grande economia de tempo no que se refere à instalação e configuração dos ambientes de programação. No entanto, à medida que as aplicações começam a ficar mais complexas, é necessário termos o ambiente funcionando localmente. Por isso é importante sabermos instalar e configurar o ambiente de programação Erlang em nossa máquina. Como instalar a Erlang Nessa dica mostrarei como instalar e testar o ambiente de programação Erlang no Windows 10. Para isso, direcione o seu navegador para a URL https://www.erlang.org/downloads e localize o download apropriado para o Windows, a saber, Download Windows Installer. Para esta dica eu baixei o Erlang/OTP 25.3 (otp_win64_25.3.exe). Trata-se de um instalador com o tamanho de 126MB. A instalação é simples e, em geral, só precisamos confirmar as sugestões que o instalador nos apresenta. Assim, basta pressionar o botão Next e aguardar a instalação ser finalizada. Após a conclusão da instalação nós precisamos adicionar o caminho "C:\Program Files\Erlang OTP\bin" na variável PATH do Windows, para que as ferramentas de linha de comando da Erlang sejam reconhecidas. Para isso, vá em Propriedades do Sistema -> Variáveis de Ambiente e adicione este caminho à variável PATH. Você pode fazê-lo tanto para o seu usuário quanto para o sistema. Como testar a atualização do ambiente de programação da Erlang Depois de atualizar a variável de ambiente PATH, abra uma nova janela de terminal e digite o seguinte comando: C:\Users\Osmar>erl -version Se tudo correu bem, você terá um resultado parecido com: Erlang (SMP,ASYNC_THREADS) (BEAM) emulator version 13.2 Parabéns! Você já está pronto para iniciar seus estudos em Erlang e todas as demais linguagens e ferramentas que compõem o seu ecosistema. |
Java ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca |
Como percorrer uma árvore binária em Java usando o algorítmo depth-first search (DFS) de forma iterativaQuantidade de visualizações: 1286 vezes |
|
Nesta dica mostrarei como podemos implementar o algorítmo da Busca em Profundidade (DFS, do inglês depth-first search) em Java de forma iterativa, ou seja, sem usar recursão. Não farei a busca, mas sim o percurso, para que você entenda como a lógica dessa busca funciona. Antes de iniciarmos, veja a árvore binária que vamos usar no exemplo: ![]() Note que esta árvore possui seis nós. O nó 5 é o nó raiz, e possui como filhos os nós 4 e 9. O nó 4, por sua vez, possui apenas um filho, o nó 2, ou seja, o filho da esquerda. O nó 9 possui dois filhos: o nó 3 é o filho da esquerda e o nó 12 é o filho da direita. Os filhos da árvore binária que não possuem outros filhos são chamados de folhas. Com a abordagem da busca em profundidade, começamos com o nó raiz e viajamos para baixo em uma única ramificação. Se o nó desejado for encontrado naquela ramificação, ótimo. Do contrário, continuamos subindo e pesquisando por nós não visitados. Esse tipo de busca também tem uma notação big O de O(n). Vamos à implementação? Veja o código para a classe No, que representa um nó na árvore binária:
// implementação da classe No
class No{
public int valor; // o valor do nó
public No esquerdo; // o filho da esquerda
public No direito; // o filho da direita
public No(int valor){
this.valor = valor;
this.esquerdo = null;
this.direito = null;
}
}
Veja agora o código completo para o exemplo. Note que usei uma implementação não-recursiva, na qual todos os nós expandidos recentemente são adicionados a uma pilha, para realizar a exploração. O uso da pilha permite o retrocesso (backtracking) de forma a reiniciarmos o percurso ou busca no próximo nó. Para manter o código o mais simples possível, eu usei a classe Stack do Java, juntamente com seus métodos push() e pop() para simular a pilha. Usei também uma ArrayList para guardar os valores da árvore binária na ordem depth-first. Eis o código:
package estudos;
import java.util.ArrayList;
import java.util.Stack;
// implementação da classe No
class No{
public int valor; // o valor do nó
public No esquerdo; // o filho da esquerda
public No direito; // o filho da direita
public No(int valor){
this.valor = valor;
this.esquerdo = null;
this.direito = null;
}
}
public class Estudos{
public static void main(String[] args){
// vamos criar os nós da árvore
No cinco = new No(5); // será a raiz da árvore
No quatro = new No(4);
No nove = new No(9);
No dois = new No(2);
No tres = new No(3);
No doze = new No(12);
// vamos fazer a ligação entre os nós
cinco.esquerdo = quatro;
cinco.direito = nove;
quatro.esquerdo = dois;
nove.esquerdo = tres;
nove.direito = doze;
// agora já podemos efetuar o percurso depth-first
ArrayList<Integer> valores = percursoDepthFirst(cinco);
System.out.println("Os valores na ordem Depth-First são: " + valores);
}
public static ArrayList<Integer> percursoDepthFirst(No no){
// vamos usar uma ArrayList para retornar os elementos
// na ordem Depth-First
ArrayList<Integer> valores = new ArrayList<>();
// vamos criar uma nova instância de uma pilha
Stack<No> pilha = new Stack<>();
// já vamos adicionar o primeiro nó recebido, que é a raiz
pilha.push(no);
// enquanto a pilha não estiver vazia
while(pilha.size() > 0){
// vamos obter o elemento no topo da pilha
No atual = pilha.pop();
// adicionamos este valor no ArrayList
valores.add(atual.valor);
// vamos colocar o filho direito na pilha
if(atual.direito != null){
pilha.push(atual.direito);
}
// vamos colocar o filho esquerdo na pilha
if(atual.esquerdo != null){
pilha.push(atual.esquerdo);
}
}
return valores; // retorna os valores da árvore
}
}
Ao executarmos este código Java nós teremos o seguinte resultado: Os valores na ordem Depth-First são: [5, 4, 2, 9, 3, 12] Compare estes valores com a imagem vista anteriormente para entender ainda melhor o percurso ou busca Depth-First. |
Java ::: Fundamentos da Linguagem ::: Tipos de Dados |
Como usar o tipo de dados char da linguagem JavaQuantidade de visualizações: 25774 vezes |
O tipo de dados char é usado para representar um único caractere. Veja:
public class Estudos{
public static void main(String args[]){
char letra1 = 'A';
char letra2 = 'B';
System.out.println("As letras são: "
+ letra1 + " e " + letra2);
System.exit(0);
}
}
Observe que um literal string deve estar entre aspas duplas, enquanto que um literal do tipo caractere deve estar entre aspas simples. Desta forma, "H" é uma string e 'H' é um caractere. O tipo char é integral mas sem sinal. A faixa de uma variável deste tipo vai de 0 à 65536. Os caracteres em Java são codificados em Unicode, que é um codificação de 16 bits capaz de representar uma larga faixa de caracteres internacionais. Se os 9 bits mais significantes de um char forem todos 0, então a codificação será a mesma que o ASCII de 7 bits. É possível atribuir literais inteiros à uma variável do tipo char. Veja:
public class Estudos{
public static void main(String args[]){
char letra = 98;
System.out.println("A letra é: "
+ letra);
System.exit(0);
}
}
Este código exibirá o caractere 'b'. Veja um exemplo no qual imprimimos todas as letras do alfabeto minúsculo:
public class Estudos{
public static void main(String args[]){
for(char i = 97; i <= 122; i++){
System.out.print(i + " ");
}
System.exit(0);
}
}
O tipo char pode ser convertido (sem a necessidade de cast) para os seguintes tipos: char -> int -> long -> float -> double Não é possível converter um char em um short ou byte. Caso isso seja realmente necessário, temos que fazer uma coerção (cast). Veja:
public class Estudos{
public static void main(String args[]){
char letra = 57;
byte valor = (byte)(letra);
System.exit(0);
}
}
É fácil entender porque um char não pode ser convertido implicitamente em um byte. Um char possui 16 bits enquanto um byte possui apenas 8 bits. Mas, um short possui 16 bits. Assim, o que impede a conversão implicita de um char para um short? É simples. Como o tipo short possui sinal (aceita valores negativos) e o tipo char é sem sinal, o resultado é que o tipo short possui um bit a menos (reservado para o sinal) e portanto, não pode acomodar os 16 bits do tipo char. |
C# ::: Dicas & Truques ::: Arquivos e Diretórios |
Como adicionar conteúdo ao final de um arquivo em C# usando as classes FileStream e StreamWriterQuantidade de visualizações: 10551 vezes |
|
Nesta dica mostro como usar as classes FileStream e StreamWriter para adicionar conteúdo a um arquivo já existente. Note que usamos o construtor de FileStream que aceita o caminho e nome do arquivo e o modo que ele será aberto. Ao fornecer o valor FileMode.Append nós estamos informando que, se o arquivo existir, mais conteúdo será adicionando ao seu final. Do contrário o arquivo é criado. Já no construtor de StreamWriter nós estamos fornecendo a codificação dos caracteres, neste caso, UTF-8. Para finalizar, escrevemos no arquivo usando os métodos Write() e WriteLine() da classe StreamWriter. Veja o código:
static void Main(string[] args){
// vamos criar uma instância de FileStream. Note que neste
// construtor nós estamos informando o caminho e nome do
// arquivo e o modo de abertura do arquivo. Se o arquivo já existir
// o novo conteúdo é adicionado. Se não existir, o arquivo é criado
FileStream fs = new FileStream("dados.txt", FileMode.Append);
// já temos o FileStream? vamos fornecê-lo a um StreamWriter
StreamWriter sw = new StreamWriter(fs, Encoding.UTF8);
// vamos escrever ou adicioar conteúdo no arquivo
sw.WriteLine("Esta é mais uma linha");
sw.Write("Hoje é: ");
sw.WriteLine(DateTime.Now);
sw.WriteLine("Esta é a última linha");
sw.Flush();
sw.Close();
fs.Close();
Console.WriteLine("Acabei de escrever no arquivo");
Console.WriteLine("Pressione qualquer tecla para sair...");
// pausa o programa
Console.ReadKey();
}
Ao executar este código C# nós teremos o seguinte resultado: Acabei de escrever no arquivo Pressione qualquer tecla para sair... |
Nossas 20 dicas & truques de programação mais populares |
Você também poderá gostar das dicas e truques de programação abaixo |
Nossas 20 dicas & truques de programação mais recentes |
Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site |
|
Python - Como criar o jogo Pedra, Papel, Tesoura em Python - Jogo completo em Python com código comentado |
Últimos Exercícios Resolvidos |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |






