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.

Delphi ::: Imagens, Gráficos e Cores ::: TCanvas (Classe TCanvas)

Computação gráfica em Delphi - Como desenhar linhas usando o método LineTo() da classe TCanvas do Delphi

Quantidade de visualizações: 16779 vezes
Podemos desenhar linhas em Delphi usando o método LineTo() da classe TCanvas. Este método desenha uma linha partindo da posição inicial da caneta (PenPos), ou seja, as coordenadas x e y iniciais, até as coordenadas finais que fornecemos ao método durante a realização do desenho.

Veja um exemplo no qual desenhamos uma linha horizontal no formulário:

procedure TForm2.Button1Click(Sender: TObject);
var
  areaDesenho: TCanvas;
begin
  // este trecho de código mostra como desenhar uma
  // linha horizontal no formulário

  // vamos obter o canvas do formulário
  areaDesenho := Form2.Canvas;

  // vamos mover a caneta para as coordenadas x = 30; y = 100
  areaDesenho.MoveTo(30, 100);

  // vamos desenhar uma linha no formulário partindo
  // das coordenadas anteriores até as coordenadas
  // x = 300; y = 100
  areaDesenho.LineTo(300, 100);
end;

Note que, na maioria dos casos, este código é escrito de forma mais compacta:

procedure TForm2.Button1Click(Sender: TObject);
begin
  // este trecho de código mostra como desenhar uma
  // linha horizontal no formulário

  // vamos obter o canvas do formulário
  with Form2.Canvas do
    begin
      // vamos mover a caneta para as coordenadas x = 30; y = 100
      MoveTo(30, 100);

      // vamos desenhar uma linha no formulário partindo
      // das coordenadas anteriores até as coordenadas
      // x = 300; y = 100
      LineTo(300, 100);
    end;
end;

É importante observar que a nova posição da caneta (propriedade PenPos) é definida ao final da chamada ao método LineTo().

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


GNU Octave ::: Desafios e Lista de Exercícios Resolvidos ::: Pesquisa Operacional

Exercício Resolvido de Octave - Programação Linear - Um fazendeiro decidiu misturar duas rações, a Ração X e a Ração Y. Cada porção de ração dada aos animais

Quantidade de visualizações: 625 vezes
Pergunta/Tarefa:

Este exercício de Octave aborda o uso da função glpk() para resolver um problema de Pesquisa Operacional usando Programação Linear.

1) Um fazendeiro decidiu misturar duas rações, a Ração X e a Ração Y. Cada porção de ração dada aos animais exige 60g de proteína e 30g de gordura. A Ração X possui 15g de proteína e 10g de gordura, e custa R$ 80,00 a unidade. A Ração Y apresenta 20g de proteína e 5g de gordura e custa R$ 50,00 a unidade.

Quanto de cada ração deve ser usada para minimizar os custos do fazendeiro?

Sua saída deverá ser parecida com:

A solução para o problema de minimização é:

x = 2.40
y = 1.20

O custo mínimo é: 252.00
Resposta/Solução:

Antes de passarmos ao código Octave, vamos fazer a modelagem matemática do problema. O primeiro passo é identificar as variáveis. Assim, vamos chamar de x o número de unidades da Ração X e de y o número de unidades da Ração Y. Veja:

x = Número de unidades da Ração X
y = Número de unidades da Ração Y

E então temos a função custo:

custo = 80x + 50y

A primeira restrição diz respeito à quantidade de proteína em cada porção de ração. Sabendo que a Ração X apresenta 15g de proteína e a Ração Y apresenta 20g de proteína nós temos:

R1: 15x + 20y >= 60 (proteína)

A segunda restrição diz respeito à quantidade de gordura em cada porção de ração. Sabendo que a Ração X apresenta 10g de gordura e a Ração Y apresenta 5g de gordura nós temos:

R2: 10x + 5y >= 30 (gordura)

As restrições R3 e R4 dizem respeito à não negatividade das variáveis de decisão:

R3: x >= 0
R4: y >= 0

Veja agora o código Octave completo (pesquisa_operacional.m):

# vamos começar definindo a matriz que representa a função de
# minimização
c = [80.0, 50.0]';

# agora a matriz de restrições
A = [15, 20; 10, 5];
b = [60, 30]';

# as restrições de não negatividade e o limite superior
lb = [0, 0]';
ub = [];

# definimos as restrições como limites inferiores
ctype = "LL";

# indicamos que vamos usar variáveis contínuas (não inteiros)
vartype = "CC";

# vamos usar minimização, por isso definimos o valor 1. Se fosse
# maximização o valor seria -1
s = 1;

# definimos os parâmetros adicionais
param.msglev = 1;
param.itlim = 100;

# e chamamos a função glpk()
[xmin, fmin, status, extra] = glpk(c, A, b, lb, ub, ctype, vartype, s, param);

# mostramos a solução para o problema de minimização
printf("A solução para o problema de minimização é:\n\n");
printf("x = %.2f\n", xmin(1));
printf("y = %.2f\n", xmin(2));

# para finalizar vamos mostrar o custo mínimo
printf("\nO custo mínimo é: %.2f\n\n", fmin);

Ao executar o código você perceberá que, para minimizar os custos do fazendeiro, deverão ser usados na mistura 2,4 unidades da Ração X e 1,2 unidades da Raça Y, a um custo mínimo de R$ 252,00.


Delphi ::: Dicas & Truques ::: Arquivos e Diretórios

Como verificar a existência de um diretório usando a função DirectoryExists() do Delphi

Quantidade de visualizações: 13462 vezes
Em algumas situações precisamos saber se um diretório já existe, talvez para evitar que nosso código tente criar um diretório com o mesmo caminho e nome. Em Delphi isso pode ser feito com o auxílio da função DirectoryExists() da unit SysUtils. Esta função recebe uma string contendo o nome do diretório a ser pesquisado e retorna true se o diretório existir e false em caso contrário. Veja o exemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  diretorio: string;
begin
  // diretório que queremos verificar a existência
  diretorio := 'C:\arquivo de codigos';

  // vamos verificar se o diretório existe
  if DirectoryExists(diretorio) then
    ShowMessage('O diretório existe')
  else
    ShowMessage('O diretório NÃO existe');
end;

Note que a unit FileCtrl também contém uma função chamada DirectoryExists(). Porém, esta função foi considerada ultrapassada. Dê preferência àquela da unit SysUtils.

Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009.


Java ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca

Estruturas de dados em Java - Como pesquisar um nó em uma árvore binária de busca usando um método recursivo usando Java

Quantidade de visualizações: 2924 vezes
Nesta dica mostraremos um exemplo completo de como pesquisar um valor em uma árvore binária de busca em Java. Note que o exemplo usa apenas inteiros, mas você não terá dificuldades para modificar a classe Nó para os dados que você precisar.

Código para No.java:

package arvore_binaria;

public class No {
  private int valor; // valor armazenado no nó
  private No esquerdo; // filho esquerdo
  private No direito; // filho direito
 
  // construtor do nó
  public No(int valor){
    this.valor = valor;
    this.esquerdo = null;
    this.direito = null;
  }

  public int getValor() {
    return valor;
  }

  public void setValor(int valor) {
    this.valor = valor;
  }

  public No getEsquerdo() {
    return esquerdo;
  }

  public void setEsquerdo(No esquerdo) {
    this.esquerdo = esquerdo;
  }

  public No getDireito() {
    return direito;
  }

  public void setDireito(No direito) {
    this.direito = direito;
  }
}

Código para ArvoreBinariaBusca.java:

package arvore_binaria;

public class ArvoreBinariaBusca {
  private No raiz; // referência para a raiz da árvore
   
  // método usado para inserir um novo nó na árvore
  // retorna true se o nó for inserido com sucesso e false
  // se o elemento
  // não puder ser inserido (no caso de já existir um 
  // elemento igual)
  public boolean inserir(int valor){
    // a árvore ainda está vazia?
    if(raiz == null){
      // vamos criar o primeiro nó e definí-lo como a raiz da árvore
      raiz = new No(valor); // cria um novo nó
    }
    else{
      // localiza o nó pai do novo nó
      No pai = null;
      No noAtual = raiz; // começa a busca pela raiz
  
      // enquanto o nó atual for diferente de null
      while(noAtual != null){
        // o valor sendo inserido é menor que o nó atual?
        if(valor < noAtual.getValor()) {
          pai = noAtual;
          // vamos inserir do lado esquerdo
          noAtual = noAtual.getEsquerdo();
        }
        // o valor sendo inserido é maior que o nó atual
        else if(valor > noAtual.getValor()){
          pai = noAtual;
          // vamos inserir do lado direito
          noAtual = noAtual.getDireito();
        }
        else{
          return false; // um nó com este valor foi encontrado
        }
      }
        
      // cria o novo nó e o adiciona como filho do nó pai
      if(valor < pai.getValor()){
         pai.setEsquerdo(new No(valor));
      }
      else{
        pai.setDireito(new No(valor));
      }
    }
 
    return true; // retorna true para indicar que o novo nó foi inserido
  }
   
  // método que permite pesquisar na árvore binária de busca
  public No pesquisar(int valor){
    return pesquisar(raiz, valor); // chama a versão recursiva do método
  }
 
  // sobrecarga do método pesquisar que recebe dois 
  // parâmetros (esta é a versão recursiva do método)
  private No pesquisar(No noAtual, int valor){
    // o valor pesquisado não foi encontrado....vamos retornar null
    if(noAtual == null){
      return null;
    }
  
    // o valor pesquisado foi encontrado?
    if(valor == noAtual.getValor()){
      return noAtual; // retorna o nó atual
    }  
    // ainda não encontramos...vamos disparar uma nova 
    // chamada para a sub-árvore da esquerda
    else if(valor < noAtual.getValor()){
      return pesquisar(noAtual.getEsquerdo(), valor);
    }
    // ainda não encontramos...vamos disparar uma nova 
    // chamada para a sub-árvore da direita
    else{
      return pesquisar(noAtual.getDireito(), valor);
    }
  }
}

E finalmente o código para a classe principal:

package arvore_binaria;

import java.util.Scanner;

public class ArvoreBinariaTeste {
  public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);  
       
    // vamos criar um novo objeto da classe ArvoreBinariaBusca
    ArvoreBinariaBusca arvore = new ArvoreBinariaBusca();
    
    // vamos inserir 5 valores na árvore
    for(int i = 0; i < 5; i++){
      System.out.print("Informe um valor inteiro: ");
      int valor = Integer.parseInt(entrada.nextLine());
       
      // vamos inserir o nó e verificar o sucesso da operação
      if(!arvore.inserir(valor)){
        System.out.println("Não foi possível inserir." +
          " Um elemento já contém este valor.");  
      }
    }
     
    // vamos pesquisar um valor na árvore
    System.out.print("\nInforme o valor a ser pesquisado: ");
    int valorPesquisa = Integer.parseInt(entrada.nextLine());
    // obtém um objeto da classe NoArvore a partir do 
    // método pesquisar() da classe ArvoreBinariaBusca
    No res = arvore.pesquisar(valorPesquisa);
    // o valor foi encontrado?
    if(res != null){
      System.out.println("O valor foi encontrado na árvore");
    }
    else{
      System.out.println("O valor não foi encontrado na árvore");  
    }
     
    System.out.println("\n");
  }
}



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á 61 usuários muito felizes estudando em nosso site.