Dúvidas, comentários e doaçoes: +55 62 9 8513 2505

Planilha de Dimensionamento de Tubulações Hidráulicas Água Fria e Água Quente Completa
Nossa planilha automática de dimensionamento de tubulações de água fria e quente é uma ferramenta desenvolvida para auxiliar engenheiros e projetistas no cálculo rápido e preciso das redes hidráulicas de edificaçoes. Por meio da inserçao de dados como vazao, diâmetro da tubulaçao, comprimento da rede, material do tubo e coeficientes hidráulicos, a planilha realiza automaticamente os cálculos necessários para verificar velocidade da água, perda de carga e dimensionamento adequado das tubulaçoes.

C# ::: Dicas & Truques ::: Arquivos e Diretórios

Como adicionar conteúdo ao final de um arquivo em C# usando as classes FileStream e StreamWriter

Quantidade de visualizações: 10751 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...


JavaScript ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como testar se todos os elementos de um array satisfazem uma condição em JavaScript usando a função every()

Quantidade de visualizações: 1917 vezes
Em algumas situações nós gostaríamos de testar todos os elementos de um vetor e verificar se todos eles passam em um determinado teste. Para isso podemos usar a função every(), adicionada à linguagem JavaScript por meio do ECMAScript 5 (JavaScript 5, ECMAScript 2009, ES5).

Este método nos permite fornecer uma função de callback que será chamada para cada um dos elementos do vetor. E o retorno do método every() é um valor true se todos os elementos passarem no teste e false em caso contrário.

Veja um exemplo no qual testamos se TODOS os elementos de um vetor são maiores que 10:

<script type="text/javascript">
  function testarTodos(valor, indice, vetor){
    if(valor > 10){
      return true;
    }
  }  

  var valores = new Array(21, 50, 30, 70, 12, 3);
  // vamos verificar se TODOS os valores são
  // maiores que 10
  var res = valores.every(testarTodos);  
  window.alert("Todos passaram no teste: " + res);
</script>

Aqui o resultado será false, pois o valor 3 não passou no teste. É importante observar que, assim que a função de callback retorna false pela primeira vez, o método every() já abandona sua execução.

Uma função passada para o método every() pode conter os seguintes argumentos (nessa mesma ordem):

a) O valor do item;
b) O índice do item (opcional);
c) O vetor a partir do qual o método every() está sendo chamado (opcional).

Como última observação, o método every() não modifica o array original.


Rust ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como somar os elementos de um array em Rust

Quantidade de visualizações: 874 vezes
Nesta dica mostrarei como podemos somar os valores de um vetor na linguagem Rust. Para isso nós vamos usar um laço for e percorrer os itens do array um de cada vez. Note também o uso da função len() para retornar o tamanho do array.

Veja o código Rust completo para o exemplo:

// esta é a função principal do programa Rust
fn main() {
  // vamos criar um array com 6 elementos
  let valores:[i32;6] = [5, 2, 3, 7, 4, 1];
  // para guardar a soma
  let mut soma:i32 = 0;
  
  // vamos mostrar o conteúdo do array
  println!("Os elementos do array são: {:?}", valores);
 
  // agora vamos somar os elementos do array
  for i in 0..valores.len() {
    soma = soma + valores[i];
  }  
  
  // e mostramos o resultado
  println!("A soma dos elementos é: {}", soma);
}

Ao executarmos este código Rust nós teremos o seguinte resultado:

Os elementos do array são: [5, 2, 3, 7, 4, 1]
A soma dos elementos é: 22


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 iterativa

Quantidade de visualizações: 1420 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.


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

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby


E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser. Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book Apenas R$ 32,90

Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica.


© 2026 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 12 usuários muito felizes estudando em nosso site.