![]() |
|
|
Planilha de Dimensionamento de Tubulações
Hidráulicas Água Fria e Água Quente CompletaNossa 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. |
||
Você está aqui: Cards de Ética e Legislação Profissional |
||
|
||
|
|
||
Delphi ::: VCL - Visual Component Library ::: TEdit |
Como obter a quantidade de caracteres no texto de um TEdit do Delphi usando a função SendMessage() da API do Windows e a mensagem WM_GETTEXTLENGTHQuantidade de visualizações: 11503 vezes |
|
Em algumas ocasiões gostaríamos de obter o tamanho do texto de um TEdit usando apenas as funções da API do Windows. Para isso podemos usar a função SendMessage() em combinação com a mensagem WM_GETTEXTLENGTH. A função SendMessage() da API do Windows possui a seguinte assinatura em C/C++: LRESULT SendMessage( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); No arquivo Windows.pas podemos encontrar o protótipo e corpo desta função convertidos para Object Pascal:
// Protótipo
{$EXTERNALSYM SendMessage}
function SendMessage(hWnd: HWND; Msg: UINT; wParam: WPARAM;
lParam: LPARAM): LRESULT; stdcall;
// Implementação
function SendMessage; external user32 name 'SendMessageW';
Quando usamos a mensagem WM_GETTEXTLENGTH para obter a quantidade de caracteres no texto de um TEdit, o retorno da função SendMessage() é um valor inteiro contendo a quantidade de caracteres na caixa de texto. Os parâmetros wParam e lParam não são usados, ou seja, podemos fornecer o valor 0 para os mesmos. Veja:
procedure TForm1.Button1Click(Sender: TObject);
var
tamanho: Integer;
begin
// vamos obter a quantidade de caracteres na caixa de texto
tamanho := SendMessage(Edit1.Handle, WM_GETTEXTLENGTH, 0, 0);
// vamos exibir o resultado
ShowMessage('O edit contém ' + IntToStr(tamanho) + ' caracteres.');
end;
Ao executar este exemplo teremos uma mensagem com um conteúdo parecido com: O edit contém 10 caracteres. |
PHP ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes) |
Como obter apenas os elementos duplicados em um vetor usando as funções array_unique() e array_diff_assoc() do PHPQuantidade de visualizações: 15693 vezes |
Em algumas situações precisamos obter apenas os elementos que se repetem em um vetor (array). Isso pode ser feito combinando-se as funções array_unique() e array_diff_assoc(). Veja:
<?
// vamos declarar e inicializar um array de inteiros
$valores = array(9, 2, 6, 11, 6, 9, 3, 6);
// vamos listar os valores dos elementos no array
echo "Elementos no array:<br>";
for($i = 0; $i < count($valores); $i++){
echo $valores[$i] . " - ";
}
// vamos exibir apenas os valores duplicados
// Aviso: não use o laço for para percorrer o array
// resultante. Em vez disso use foreach
$valores = array_unique(array_diff_assoc(
$valores, array_unique($valores)));
echo "<br><br>Elementos repetidos:<br>";
foreach($valores as $valor){
echo $valor . " - ";
}
?>
A execução deste código produz o seguinte resultado: Elementos no array: 9 - 2 - 6 - 11 - 6 - 9 - 3 - 6 - Elementos repetidos: 6 - 9 - |
Java ::: Classes e Componentes ::: JTextField |
Java Swing - Como definir a cor do texto de um JTextField usando o método setForeground()Quantidade de visualizações: 11115 vezes |
|
Nesta dica eu mostro como podemos usar o método setForeground() da classe JTextField para definir a cor de seu texto. Note que esta função pede um objeto da classe Color, por isso, neste exemplo, forneci o valor Color.BLUE. Veja o código Java Swing completo:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Estudos extends JFrame{
JTextField texto;
public Estudos() {
super("Estudos Swing");
Container c = getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT));
// Cria um botão
JButton btn = new JButton("Definir cor do texto");
btn.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
// vamos definir a cor do texto como azul
texto.setForeground(Color.BLUE);
}
}
);
// Cria o JTextField
texto = new JTextField(10);
// Adiciona o botão à janela
c.add(btn);
// Adiciona o JTextField à janela
c.add(texto);
setSize(350, 250);
setVisible(true);
}
public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
|
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: 1341 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. |
AutoCAD Civil 3D ::: Dicas & Truques ::: Coordinated Geometry Points (COGO Points) |
Como criar pontos COGO no AutoCAD Civil 3DQuantidade de visualizações: 859 vezes |
|
Nesta dica mostrarei os passos necessários para a criação de COGO points no Civil 3D usando a opção Manual do Point Creation Tools. Siga os passos abaixo atentamente: A) Vá até a guia Home. Em seguida acesse o painel Create Ground Data. B) No painel Create Ground Data, acesse a opção Points -> Point Creation Tools. C) Será aberto um painel flutuante chamado Create Points. Na primeira opção deste painel, clique a seta ao lado do primeiro botão e marque a opção Manual (talvez já esteja marcada). D) Agora é só clicar no botão (ao lado da seta que você acabou de acessar). Na janela de comandos do Civil 3D nós veremos a mensagem: CREATEPOINTMANUAL Please specify a location for the new point: Você pode clicar na tela de desenho ou informar as coordenadas x e y manualmente, por exemplo, 50,100 (o valor x para a coordenada x e o valor 100 para a coordenada y, sem espaços e com a vírgula separando os dois valores). Note que o x é o Easting (distância para o Leste) e y é o Northing (distância para o Norte). Verifique se nas suas configurações esta é a ordem padrão. E) Depois de informar as coordenadas x e y do COGO point, uma mensagem será exibida solicitando a descrição do ponto: CREATEPOINTMANUAL Enter a point description <.>: Aqui podemos informar o nome do ponto, por exemplo, BUEIRO 5. F) Após informarmos a descrição do ponto, a seguinte mensagem é exibida: CREATEPOINTMANUAL Specify a point elevation <.>: Aqui nós precisamos informar a elevação do ponto e pressionar Enter. Nesse momento o novo COGO Point é criado e o Civil 3D reiniciará o processo, ou seja, será solicitada a localização do próximo ponto. Se você não quiser continuar criando novos pontos, basta pressionar a tecla Enter. Para visualizar os pontos criados, vá até o Painel Toolspace, aba Prospector e acesse o item Points. |
Veja mais Dicas e truques de AutoCAD Civil 3D |
Dicas e truques de outras linguagens |
|
JavaScript - Como retornar o índice da primeira ocorrência de um elemento em um array do JavaScript usando a função indexOf() |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |





