![]() |
|
|
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. |
||
Delphi ::: Data Controls (Controles de Dados) ::: TDBGrid |
Como aplicar cores alternadas às colunas de um TDBGrid do Delphi (efeito zebrinha)Quantidade de visualizações: 10014 vezes |
|
Em algumas situações gostaríamos de aplicar o efeito zebrinha, ou seja, aplicar cores alternadas às colunas de um controle TDBGrid. Esta técnica é muito útil quando temos grids com várias colunas e queremos facilitar a visualização dos dados por parte dos usuários. A forma mais comum de se aplicar cores alternadas às colunas do DBGrid é por meio do evento OnDrawColumnCell. Veja o trecho de código abaixo:
procedure TForm3.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
grid: TDBGrid;
begin
// obtém um referência ao DBGrid
grid := sender as TDBGrid;
// o número da coluna é par?
if Odd(DataCol) then
grid.Canvas.Brush.Color := clWhite
else
grid.Canvas.Brush.Color := clYellow;
// vamos terminar de colorir a célula
grid.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Execute este código e verá que a primeira coluna é pintada de branco, a segunda de amarelo, a terceira de branco e assim por diante. Note que neste código eu não tratei a seleção de células, na qual a cor do texto se iguala ao branco do fundo da célula. Veja mais dicas nesta seção para saber como realizar esta tarefa você mesmo. Fique atento ao fato de que este código aplica as cores alternadas às colunas mesmo se estas forem colunas persistentes com cores já definidas por meio do Object Inspector. Esta dica foi escrita e testada no Delphi 2009. |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Listas Ligadas |
Exercícios Resolvidos de Java - Como inserir no início de uma lista ligada em Java - Escreva um programa Java que pede para o usuário informar váriosQuantidade de visualizações: 1007 vezes |
|
Pergunta/Tarefa: Este exercício Java demonstra como inserir um nó no início de uma lista ligada. Escreva um programa Java que cria uma lista ligada, ou seja, uma lista dinamicamente encadeada, e pede para o usuário informar vários valores inteiros, colocando os valores sempre no início da lista. Seu código deverá interromper a leitura dos valores quando o usuário informar o valor -1. Quando isso acontecer, mostre todos os valores contidos na lista ligada, na mesma ordem que foram inseridos (o último valor lido será o primeiro da lista). Sua saída deve ser parecida com: Inserindo valores no início da lista Informe o valor (-1 para sair): 8 Informe o valor (-1 para sair): 2 Informe o valor (-1 para sair): 5 Informe o valor (-1 para sair): 7 Informe o valor (-1 para sair): -1 Valores na lista: 7 -> 5 -> 2 -> 8 -> null Veja a resolução comentada deste exercício usando Java:
package estudos;
import java.util.Scanner;
// classe interna usada para representar um
// nó na lista ligada
class No {
int valor; // valor do nó
No proximo; // aponta para o novo nó
// construtor da classe No
No(int valor, No proximo) {
this.valor = valor;
this.proximo = proximo;
}
}
public class Estudos {
public static void main(String args[]){
// para ler a entrada do usuário
Scanner entrada = new Scanner(System.in);
// vamos criar uma referência para o início da lista
No inicio = null;
// agora vamos pedir para o usuário informar
// valores inteiros. O valor -1 sai do laço
int valor;
System.out.println("Inserindo valores no início da lista\n");
do {
System.out.print("Informe o valor (-1 para sair): ");
valor = Integer.parseInt(entrada.nextLine());
if (valor != -1) {
inicio = inserirInicio(inicio, valor);
}
} while(valor != -1);
// vamos exibir os valores na lista ligada
System.out.print("\nValores na lista: ");
exibirLista(inicio);
}
// função que permite adicionar um nó no início da
// lista ligada
public static No inserirInicio(No inicio, int valor) {
// vamos apontar para o nó inicial
No atual = inicio;
// criamos um novo nó
No novo = criarNo(valor);
// a lista ligada ainda está vazia?
if (atual == null){
// inicio recebe o novo nó
inicio = novo;
}
else { // temos um ou mais nós na lista ligada
// vamos inserir este nó antes do nó que
// representa o início da lista
novo.proximo = inicio;
inicio = novo;
}
// e retornamos o início da lista
return inicio;
}
// função usada para construir e retornar um novo nó
public static No criarNo(int valor) {
// cria o novo nó
No no = new No(valor, null);
// retorna o nó criado
return no;
}
// função usada para percorrer a lista ligada e
// exibir os valores contidos em seus nós
public static void exibirLista(No inicio) {
// vamos apontar para o início da lista
No temp = inicio;
// a lista está vazia?
if (temp == null) {
System.out.println("A lista está vazia.");
}
else {
// esse laço se repete enquanto tempo for
// diferente de null
while (temp != null) {
// vamos mostrar o valor desse nó
System.out.print(temp.valor + " -> ");
// avança para o próximo nó
temp = temp.proximo;
}
// mostra o final da lista
System.out.println("null");
}
}
}
|
C# ::: Dicas & Truques ::: Arquivos e Diretórios |
Como renomear um diretório em C# usando o método MoveTo() da classe DirectoryInfoQuantidade de visualizações: 10154 vezes |
|
Nesta dica mostrarei como podemos usar a função MoveTo() da classe DirectoryInfo para renomear um diretório na linguagem C#. Note que, na verdade, o que o método MoveTo() faz é mover todo o conteúdo de um diretório (incluindo seu conteúdo) para um novo diretório, o que dá o mesmo resultado que simplesmente renomear o diretório antigo. Veja um exemplo completo de seu uso:
using System;
using System.IO;
namespace Estudos {
class Program {
static void Main(string[] args) {
// vamos criar uma instância da classe DirectoryInfo
DirectoryInfo dir = new DirectoryInfo(@"C:\estudos_csharp\teste");
try {
// vamos chamar o método MoveTo() para renomear o diretório
dir.MoveTo(@"C:\estudos_csharp\teste_2");
Console.WriteLine("Diretório renomeado com sucesso.");
}
catch (Exception e) {
Console.WriteLine("Não foi possível renomear o diretório: {0}", e.ToString());
}
finally { }
Console.WriteLine("\n\nPressione uma tecla para sair...");
Console.ReadKey();
}
}
}
Ao executar este código C# nós teremos o seguinte resultado: Diretório renomeado com sucesso. |
Delphi ::: Dicas & Truques ::: Ponteiros, Referências e Memória |
Como usar nil para testar ou indicar que um ponteiro Delphi não referencia nenhuma posição de memóriaQuantidade de visualizações: 15622 vezes |
O propósito dos ponteiros é nos permitir acessar e manipular os valores de outras variáveis. Isso é feito acessando-se diretamente o endereço de memória destas variáveis. Porém, há situações nas quais queremos testar se um determinado ponteiro está realmente apontando para um local na memória. Veja o seguinte trecho de código:procedure TForm1.Button1Click(Sender: TObject); var pvalor: ^integer; begin // vamos exibir o valor da variável referenciada pelo // ponteiro pvalor ShowMessage(IntToStr(pvalor^)); end; Ao executarmos este código nós teremos um valor aleatório sendo exibido (e um warning do tipo W1036 Variable 'pvalor' might not have been initialized. Isso acontece porque criamos um ponteiro para um Integer mas não indicamos o endereço da variável para a qual ele aponta, ou seja, até o momento este ponteiro é nulo (não aponta para nenhuma posição de memória). Mova a declaração do ponteiro para a seção interface e verá que código compilará mas teremos uma exceção do tipo EAccessViolation (Exception class EAccessViolation with message 'Access violation at address ... in module ...). Clássico erro de lógica. Estamos tentando acessar dados não existentes na memória. Esta situação pode ser evitada testando se o ponteiro ainda é nulo antes de tentarmos desreferenciá-lo. Veja:
procedure TForm1.Button1Click(Sender: TObject);
begin
// vamos exibir o valor da variável referenciada pelo
// ponteiro pvalor
if pvalor = nil then
ShowMessage('O ponteiro ainda é nulo.')
else
ShowMessage(IntToStr(pvalor^));
end;
Note que movi a declaração do ponteiro para a secão interface, de forma a torná-la global. Isso evita que o ponteiro seja automaticamente inicializado (o que sempre acontece com as variáveis locais). Ao executar o código novamente você verá a mensagem indicando que o ponteiro ainda é nulo. Podemos também usar nil para, explicitamente, marcar um ponteiro como nulo, ou seja, definir que o ponteiro não aponta para nenhum local na memória. Comece declarando as variáveis abaixo na seção interface do formulário: valor: Integer; pvalor: ^Integer; Em seguida coloque o código abaixo no evento Click de um botão: procedure TForm1.Button1Click(Sender: TObject); begin // vamos atribuir um valor à variável valor valor := 14; // vamos "apontar" nosso ponteiro para o local de // memória da variável valor pvalor := @valor; // vamos exibir o valor da variável apontada por pvalor ShowMessage(IntToStr(pvalor^)); // vamos marcar pvalor como nulo pvalor := nil; // vamos causar um EAccessViolation já que pvalor // não aponta para nenhum local na memória agora ShowMessage(IntToStr(pvalor^)); end; Sempre que marcamos um ponteiro como nil, a memória até então ocupada por ele é liberada para uso por parte do sistema operacional ou demais programas. Este procedimento ajuda a evitar os vazamentos de memória (memory leak) tão frequentes em códigos que trabalham com memória alocada dinamicamente. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Nossas 20 dicas & truques de programação mais populares |
|
GNU Octave - Como calcular a derivada de uma função usando a função diff() do GNU Octave - Regra do Tombo (ou Regra da Potência) |
Você também poderá gostar das dicas e truques de programação abaixo |
|
Python - Como calcular o coeficiente angular de uma reta em Python dados dois pontos no plano cartesiano JavaScript - Cookies em JavaScript - Como escrever uma função para a criação de cookies em JavaScript |
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 |




