Você está aqui: Cards de Engenharia Civil - Estruturas de Aço e Madeira |
||
|
||
|
|
||
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: 15397 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. |
Ruby ::: Dicas & Truques ::: Data e Hora |
Como usar a classe Date do Ruby em seus programasQuantidade de visualizações: 7861 vezes |
|
A classe Date da linguagem Ruby representa datas. Ela o faz trabalhando com anos, meses, semanas e dias. Tenha em mente que, ao usar a classe Date não temos acesso a nada relacionado a horas, minutos ou segundos. Internamente, uma data é representada como um número: ajd (Astronomical Julian Day Number). O dia da reforma do calendário (Day of Calendar Reform), sg, também é armazenado, para conversões para outros formatos de datas (há também um campo chamado "of" para a diferença de fuso horário, mas este é usado somente na subclasse DateTime). Um novo objeto Date é criado usando-se um dos métodos de criação de objetos da classe. E tais métodos recebem nomes de acordo com o formato de data. Além disso, os argumentos fornecidos devem obedecer ao formato de data desejado, por exemplo, Date::civil() (apelido para Date::new()) com ano, mês e dia do ano, ou Date::ordinal() com ano e dia do ano. Todos estes métodos de criação de objetos da classe também aceitam o dia da reforma do calendário (Day of Calendar Reform) como um argumento opcional. Objetos Date são imutáveis após sua criação. Após criarmos um objeto Date, valores de data podem ser obtidos para os diferentes formatos de data suportados usando métodos de instância. Por exemplo, mon() retorna o mês civil, cwday() retorna o dia comercial da semana, e yday() retorna o dia ordinal do ano. Valores Date podem ser obtidos em qualquer formato, independente de qual formato foi usado para criar a instância do objeto. A classe Date inclui o módulo Comparable, o que permite que objetos Date possam ser comparados e ordenados, faixas de datas possam ser criadas e assim por diante. Veja no trecho de código abaixo como podemos criar um objeto Date representando a data atual:
# importa o módulo date
require 'date'
# obtém a data de hoje
hoje = Date.today
# exibe o resultado
puts "Hoje é " + hoje.strftime("%e/%m/%Y")
|
C# ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular o cosseno de um ângulo em C# usando a função Cos() da classe Math - Calculadora de cosseno em C#Quantidade de visualizações: 2292 vezes |
|
Em geral, quando falamos de cosseno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função cosseno disponível nas linguagens de programação para calcular o cosseno de qualquer número, mesmo nossas aplicações não tendo nenhuma relação com trigonometria. No entanto, é sempre importante entender o que é a função cosseno. Veja a seguinte imagem: ![]() Veja que temos um triângulo retângulo com as medidas já calculadas para a hipotenusa e os dois catetos, assim como os ângulos entre eles. Assim, o cosseno é a razão entre o cateto adjascente e a hipotenusa, ou seja, o cateto adjascente dividido pela hipotenusa. Veja a fórmula: \[\text{Cosseno} = \frac{\text{Cateto adjascente}}{\text{Hipotenusa}} \] Então, se dividirmos 30 por 36.056 (na figura eu arredondei) nós teremos 0.8320, que é a razão entre o cateto adjascente e a hipotenusa (em radianos). Agora, experimente calcular o arco-cosseno de 0.8320. O resultado será 0.5881 (em radianos). Convertendo 0.5881 radianos para graus, nós obtemos 33.69º, que é exatamente o ângulo em graus entre o cateto adjascente e a hipotenusa na figura acima. Pronto! Agora que já sabemos o que é cosseno na trigonometria, vamos entender mais sobre a função Cos() da linguagem C#. Esta função, que é um método da classe Math, recebe um valor numérico Double e retorna um valor Double, ou seja, também numérico) entre -1 até 1 (ambos inclusos). Veja:
using System;
using System.Collections;
namespace Estudos {
class Program {
static void Main(string[] args) {
// vamos calcular o cosseno de três números
Console.WriteLine("Cosseno de 0 = " + Math.Cos(0));
Console.WriteLine("Cosseno de 1 = " + Math.Cos(1));
Console.WriteLine("Cosseno de 2 = " + Math.Cos(2));
Console.WriteLine("\nPressione qualquer tecla para sair...");
// pausa o programa
Console.ReadKey();
}
}
}
Ao executar este código C# nós teremos o seguinte resultado: Cosseno de 0 = 1 Cosseno de 1 = 0,5403023058681397 Cosseno de 2 = -0,4161468365471424 Note que calculamos os cossenos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função cosseno mostrada abaixo: ![]() |
C# ::: Coleções (Collections) ::: ArrayList |
Como escrever um método C# que retorna uma ArrayListQuantidade de visualizações: 17541 vezes |
|
Estudantes C# ficam um pouco confusos quando solicitados a escrever funções que retornam objetos de classes. E essa confusão é maior ainda quando precisam retornar uma ArrayList, mais precisamente um objeto da classe ArrayList. Esta dica mostra como isso pode ser feito. Veja que temos um método que define, em sua assinatura, que o tipo de retorno não é void (sem retorno) mas sim um objeto da classe ArrayList. No corpo deste método temos a criação da ArrayList propriamente dita, a adição de cinco inteiros e finalmente o uso da palavra-chave return para retornar o ArrayList já preenchido ao chamador do método. Note que o método Main é responsável por efetuar uma chamada ao método, obter o ArrayList resultante e em seguida usar o laço foreach para exibir seus valores:
// método que retornará uma ArrayList
static ArrayList obterLista(){
// Cria o ArrayList
ArrayList lista = new ArrayList();
// Adiciona 5 inteiros
lista.Add(1);
lista.Add(2);
lista.Add(3);
lista.Add(4);
lista.Add(5);
// retorna o ArrayList preenchido
return lista;
}
static void Main(string[] args){
// obtém um ArrayList preenchido a partir do
// método obterLista
ArrayList mLista = obterLista();
// exibe os valores do ArrayList
foreach (int valor in mLista){
Console.Write("{0} ", valor);
}
// pausa o programa
Console.ReadKey();
}
|
Java ::: Classes e Componentes ::: JComboBox |
Tutorial Java Swing - Como remover todos os itens de um JComboBox (Caixa de Combinação) em tempo de execuçãoQuantidade de visualizações: 12702 vezes |
|
Nesta dica mostrarei como é possível usar o método removeAllItems() da classe JComboBox para remover todos os seus itens. Note que criei a aplicação Java Swing na mão mesmo, sem usar nenhum editor visual de GUI, como o que está disponível no IDE Netbeans. Esta abordagem pode não ser produtiva, mas é excelente para entender como o Java Swing funciona. Veja o código completo para o exemplo:
package arquivodecodigos;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Estudos extends JFrame{
JComboBox combo;
public Estudos(){
super("A classe JComboBox");
Container c = getContentPane();
c.setLayout(new FlowLayout(FlowLayout.LEFT));
// Cria os itens da lista
String nomes[] = {"Carlos", "Marcelo", "Fabiana",
"Carolina", "Osmar"};
// Cria o JComboBox
combo = new JComboBox(nomes);
// Um botão que permite limpar o JComboBox
JButton btn = new JButton("Limpar");
btn.addActionListener(
new ActionListener(){
@Override
public void actionPerformed(ActionEvent e){
// remove todos os itens do JComboBox
combo.removeAllItems();
}
}
);
// Adiciona o JComboBox à janela
c.add(combo);
// Adiciona o botão à janela
c.add(btn);
setSize(350, 250);
setVisible(true);
}
public static void main(String args[]){
Estudos app = new Estudos();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
Aqui os itens do JComboBox foram inseridos a partir de um vetor de String. |
Desafios, Exercícios e Algoritmos Resolvidos de Java |
Veja mais Dicas e truques de Java |
Dicas e truques de outras linguagens |
|
VB.NET - Como inverter o conteúdo de uma string em VB.NET usando os métodos ToCharArray() e Reverse() |
E-Books em PDF |
||||
|
||||
|
||||
Linguagens Mais Populares |
||||
|
1º lugar: Java |








