Delphi ::: Data Access Controls (Controles de Acesso a Dados) ::: TClientDataSet |
Como usar o método FindField para pesquisar um campo no TClientDataSet do Delphi e retornar um objeto da classe TFieldQuantidade de visualizações: 14153 vezes |
O método FindField pode ser usado quando queremos pesquisar um campo no TClientDataSet e retornar um objeto da classe TField. Este método possui a seguinte assinatura:function FindField(const FieldName: string): TField; Veja um trecho de código no qual eu mostro como encontrar um campo chamado "autor" em um ClientDataSet e retornar seu valor no registro atual: procedure TForm3.Button3Click(Sender: TObject); var campo: TField; begin // vamos obter o campo com o nome "autor" no ClientDataSet campo := ClientDataSet1.FindField('autor'); // este campo existe no dataset? if campo <> nil then ShowMessage('O campo existe e seu valor no registro atual é: ' + campo.AsString) else // o campo não existe no dataset ShowMessage('O campo não existe no dataset'); end; Se o campo existir no dataset, veremos uma mensagem parecida com: "O campo existe e seu valor no registro atual é: M. D. Deitel". Em geral usamos o método FindField para determinar se um determinado componente field existe no dataset. O argumento para o método é o nome do campo que queremos pesquisar. Este nome pode ser o nome de um campo simples, o nome de um sub-campo de um objeto field que tenha sido qualificado pelo nome do campo pai ou o nome de um campo agregado. O comportamento do método FindField é o mesmo do método FieldByName. A diferença é que FindField retorna o valor nil se o campo não existir, enquanto FieldByName lança uma exceção do tipo EDatabaseError com a mensagem "Field not found". Esta dica foi escrita e testada no Delphi 2009. |
Java ::: Classes e Componentes ::: JTable |
Java Swing - Como excluir linhas de uma JTable em tempo de execução usando o método removeRow() da classe DefaultTableModelQuantidade de visualizações: 15984 vezes |
Nesta dica mostrarei como é possível excluir uma determinada linha de uma JTable usando o método removeRow() da classe DefaultTableModel. Veja que mostro também como inserir novas linhas na JTable usando o método insertRow(). Veja o resultado obtido na imagem abaixo: ![]() E agora o código Java Swing completo: package arquivodecodigos; import javax.swing.*; import java.awt.*; import java.awt.event.*; import javax.swing.table.*; public class Estudos extends JFrame{ public Estudos(){ super("Exemplo de uma tabela simples"); final DefaultTableModel modelo = new DefaultTableModel(); // constrói a tabela JTable tabela = new JTable(modelo); // Cria duas colunas modelo.addColumn("Nome"); modelo.addColumn("Idade"); JButton btn = new JButton("Inserir Linhas"); btn.addActionListener( new ActionListener(){ public void actionPerformed(ActionEvent e){ String nome = JOptionPane.showInputDialog(null, "Informe o nome:"); String idade = JOptionPane.showInputDialog(null, "Informe a idade:"); int pos = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe a posição da nova linha:")); // testa se a posição é válida if(pos > (modelo.getRowCount() - 1)) pos = 0; // Insere uma linha na posição especificada modelo.insertRow(pos, new Object[]{nome, idade}); } } ); JButton btn2 = new JButton("Excluir Linhas"); btn2.addActionListener( new ActionListener(){ @Override public void actionPerformed(ActionEvent e){ int pos = Integer.parseInt(JOptionPane.showInputDialog(null, "Informe a posição da linha a ser excluída:")); // testa se a posição é válida if(pos < modelo.getRowCount()) // Exclui a linha na posição especificada modelo.removeRow(pos); } } ); tabela.setPreferredScrollableViewportSize(new Dimension(350, 50)); Container c = getContentPane(); c.setLayout(new FlowLayout()); JScrollPane scrollPane = new JScrollPane(tabela); c.add(scrollPane); c.add(btn); c.add(btn2); setSize(400, 300); setVisible(true); } public static void main(String args[]){ Estudos app = new Estudos(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } |
Ruby ::: Dicas & Truques ::: Arquivos e Diretórios |
Como criar um diretório em Ruby usando a função FileUtils.mkdir()Quantidade de visualizações: 8217 vezes |
O trecho de código a seguir mostra como criar um diretório em Ruby usando o método mkdir() da classe FileUtils. Esta função recebe uma string contendo o nome e caminho do diretório a ser criado. Veja o código Ruby completo para o exemplo: require "fileutils" # nome e caminho do diretório a ser criado diretorio = "C:\\estudos_ruby\\escola" # cria o diretório if FileUtils.mkdir diretorio puts "Diretório criado com sucesso" else puts "Não foi possível criar o diretório" end Ao executar este código Ruby nós teremos o seguinte resultado: Diretório criado com sucesso Veja que, se o diretório não puder ser criado, a seguinte mensagem de erro será exibida: C:/ruby/lib/ruby/1.8/fileutils.rb:243:in `mkdir': File exists - estudos (Errno:: EEXIST) from C:/ruby/lib/ruby/1.8/fileutils.rb:243:in `fu_mkdir' from C:/ruby/lib/ruby/1.8/fileutils.rb:172:in `mkdir' from C:/ruby/lib/ruby/1.8/fileutils.rb:171:in `each' from C:/ruby/lib/ruby/1.8/fileutils.rb:171:in `mkdir' from estudos.rb:7 |
AutoCAD .NET API C# ::: Dicas & Truques ::: Linha, Linhas, Comando LINE |
Como selecionar uma linha no AutoCAD e mostrar a equação da reta correspondente usando AutoCAD .NET C# APIQuantidade de visualizações: 541 vezes |
Em algumas situações nós queremos posicionar pontos ou outros desenhos em cima de uma linha, ou seja, em cima de uma reta. Uma das melhores formas de fazer isso é obtendo a equação reduzida da reta e usar as coordenadas x e y correspondentes. Nesta dica eu mostro como isso pode ser feito usando a AutoCAD .NET C# API. O primeiro passo é pedir para o usuário selecionar a linha na área de desenho do AutoCAD usando doc.Editor.GetEntity(). Em seguida nós obtemos as coordenadas iniciais e finais da linha usando as propriedades StartPoint e EndPoint do objeto AcadLine. Para finalizar nós calculamos a equação reduzida da reta e exibimos o resultado. Fique atento ao código que calcula o coeficiente angular e linear da reta. Considere o caso em que o coeficiente angular ou linear é igual a 0. Veja o código AutoCAD .NET API C# completo para o exemplo: using System; using Autodesk.AutoCAD.Runtime; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.EditorInput; [assembly: CommandClass(typeof(PluginEstudos.Class1))] namespace PluginEstudos { public class Class1 { [CommandMethod("estudos")] public void Estudos() { // vamos obter o documento atual Document doc = Application.DocumentManager.MdiActiveDocument; // vamos obter a base de dados Database db = doc.Database; // opções da seleção PromptEntityOptions opcoes = new PromptEntityOptions("\nSelecione uma linha: "); // obtemos o resultado da seleção PromptEntityResult resultado = doc.Editor.GetEntity(opcoes); // a seleção foi feita com sucesso if (resultado.Status != PromptStatus.OK) { Application.ShowAlertDialog("Nenhum elemento selecionado."); return; } // obtemos o id do objeto selecionado ObjectId id_objeto = resultado.ObjectId; // iniciamos uma transação using (Transaction trans = db.TransactionManager.StartTransaction()) { BlockTable tabela_blocos; BlockTableRecord reg_tabela_blocos; // obtemos a entidade selecionada Entity ent = trans.GetObject(id_objeto, OpenMode.ForWrite) as Entity; // a entidade selecionada é uma linha if (ent is Line) { Line linha = ent as Line; // vamos obter o ponto inicial da linha Point3d ponto_inicial = linha.StartPoint; // vamos obter o ponto final da linha Point3d ponto_final = linha.EndPoint; string sinal = "+"; // vamos calcular o coeficiente angular da reta Double m = (ponto_final.Y - ponto_inicial.Y) / (ponto_final.X - ponto_inicial.X); // vamos calcular o coeficiente linear double n = ponto_inicial.Y - (m * ponto_inicial.X); // coeficiente linear menor que zero? O sinal será negativo if (n < 0) { sinal = "-"; n = n * -1; } // abre o model space para escrita tabela_blocos = trans.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable; reg_tabela_blocos = trans.GetObject(tabela_blocos[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; // vamos calcular as coordenadas x e y do ponto médio que // será usado para posicionar o texto double x = (ponto_inicial.X + ponto_final.X) / 2; double y = (ponto_inicial.Y + ponto_final.Y) / 2; // criamos um novo texto DBText texto = new DBText(); texto.TextString = "y = " + m.ToString("0.00") + "x" + " " + sinal + " " + n.ToString("0.00"); texto.SetDatabaseDefaults(); texto.Height = 5; texto.Position = new Point3d(x, y - texto.Height, 0); // adicionamos o texto no desenho reg_tabela_blocos.AppendEntity(texto); trans.AddNewlyCreatedDBObject(texto, true); } else { Application.ShowAlertDialog("Você não selecionou uma linha."); } // salvamos a transação trans.Commit(); } } } } Ao executar este código AutoCAD .NET C# API e selecionar uma linha nós teremos um resultado parecido com: Selecione uma linha [Usuário seleciona a linha] [Mostra a equação reduzida da reta como um texto posicionado no ponto médio da linha] Como forma de testar ainda mais o código, defina um valor para o x e experimente plotar um ponto na área de desenho do AutoCAD. Você verá que o ponto cai exatamente em cima da linha, ou seja, da reta que a representa. |
JavaScript ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como testar se um ponto está dentro de um círculo em JavaScript - Desenvolvimento de Games com JavaScriptQuantidade de visualizações: 1651 vezes |
Quando estamos trabalhando com computação gráfica, geometria e trigonometria ou desenvolvimento de jogos em JavaScript, é comum precisarmos verificar se um determinado ponto (uma coordenada x, y) está contido dentro de um círculo. Para melhor entendimento, veja a imagem a seguir: ![]() Veja que temos um círculo com raio igual a 115 e com centro nas coordenadas (x = 205; y = 166). Temos também dois pontos. O ponto vermelho está nas coordenadas (x = 140; y = 90) e o ponto azul está nas coordenadas (x = 330; y = 500. Como podemos ver na imagem, o ponto vermelho está dentro do círculo, enquanto o ponto azul está fora. E nosso intenção nesta dica é escrever o código JavaScript que permite fazer essa verificação. Tenha em mente que está técnica é muito útil para o teste de colisões no desenvolvimento de games. Veja o código completo para o exemplo: <!doctype html> <html> <head> <title>Desenvolvimento de Games usando HTML5 e JavaScript</title> </head> <body> <script type="text/javascript"> // vamos declarar a classe Circulo class Circulo{ constructor(xc, yc, raio){ this.xc = xc; // x do centro this.yc = yc; // y do centro this.raio = raio; // raio do círculo } } // agora vamos declarar a classe Ponto class Ponto{ constructor(x, y){ this.x = x; // coordenada x this.y = y; // coordenada y } } // vamos criar um objeto Circulo var c = new Circulo(90, 50, 115); // vamos criar um objeto Ponto var p = new Ponto(140, 90); // vamos verificar se o ponto está dentro do // círculo var dx = p.x - c.xc; var dy = p.y - c.yc; if((Math.pow(dx, 2) + Math.pow(dy, 2)) < Math.pow(c.raio, 2)){ document.writeln("O ponto está dentro do círculo"); } else{ document.writeln("O ponto NÃO está dentro do círculo"); } </script> </body> </html> Ao executar este código nós teremos o seguinte resultado: O ponto está dentro do círculo. Experimente com círculos de raios e coordenadas centrais diferentes e também com pontos em várias coordenadas e veja como os resultados são interessantes. |
C++ ::: Desafios e Lista de Exercícios Resolvidos ::: Laços de Repetição |
Exercício Resolvido de C++ - Escreva um programa em C++ para ler dois números inteiros M e N e, a seguir, imprimir os números paresQuantidade de visualizações: 641 vezes |
Pergunta/Tarefa: Escreva um programa em C++ para ler dois números inteiros M e N e, a seguir, imprimir os números pares existentes no intervalo [M, N] e imprimir a multiplicação desses números (os pares). Observe que os valores M e N devem ser fornecidos pelo usuário. Nota: por se tratar de intervalo fechado [M, N], os números M e N devem ser incluídos na amostra. Além disso, seu código deve assegurar que M seja menor que N. Sua saída deverá ser parecida com: Informe o valor de M: 3 Informe o valor de N: 9 Números pares no intervalo [M, N]: 4, 6, 8, Multiplicação dos números pares no intervalo [M, N]: 192 Veja a resolução comentada deste exercício em C++: #include <string> #include <iostream> using namespace std; int main(int argc, char *argv[]){ // variáveis usadas na resolução do problema int m, n, i, multiplicacao = 1; // vamos pedir para o usuário informar os valores de M e N cout << "Informe o valor de M: "; cin >> m; cout << "Informe o valor de N: "; cin >> n; // M é menor que N? if(m >= n){ cout << "M deve ser menor que N"; } else{ // mostra os números pares no intervalo cout << "Números pares no intervalo [M, N]: "; for(i = m; i <= n; i++){ if(i % 2 == 0){ cout << i << ", "; // aproveitamos para calcular a multiplicação dos números // pares no intervalo informado multiplicacao = multiplicacao * i; } } // mostramos a multiplicação cout << "\nMultiplicação dos números pares no intervalo [M, N]: " << multiplicacao << endl; } cout << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
Python ::: Desafios e Lista de Exercícios Resolvidos ::: Python Básico |
Exercícios Resolvidos de Python - Como calcular salário líquido em Python - Calculando o salário líquido de um professorQuantidade de visualizações: 1153 vezes |
Pergunta/Tarefa: Escreva um programa Python que calcule o salário líquido de um professor. Seu programa deverá solicitar que o usuário informe o valor da hora aula (como float), o número de horas trabalhadas no mês (como inteiro) e o percentual de desconto do INSS (como float). Em seguida mostre o salário líquido, formatado de acordo com a moeda brasileira em vigor (na resolução eu usei o Real). Dica: Use locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8'). Sua saída deverá ser parecida com: Informe o valor da hora aula: 28 Informe o número de horas trabalhadas no mês: 12 Informe o percentual de desconto do INSS: 8 Salário Bruto: R$ 336,00 Total de Descontos: R$ 26,88 Salário Líquido: R$ 309,12 Veja a resolução comentada deste exercício usando Python: import locale # função principal do programa def main(): locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8') # vamos ler o valor do hora aula valor_hora_aula = float(input("Informe o valor da hora aula: ")) # vamos ler o número de horas trabalhadas no mês horas_trabalhadas = int(input("Informe o número de horas trabalhadas no mês: ")) # vamos ler o percentual de desconto do INSS percentual_desconto_inss = float(input("Percentual de desconto do INSS: ")) # vamos calcular o salário bruto salario_bruto = valor_hora_aula * horas_trabalhadas # agora calculamos o total do desconto total_desconto = (percentual_desconto_inss / 100) * salario_bruto # finalmente calculamos o salário líquido salario_liquido = salario_bruto - total_desconto # mostramos o resultado print("Salário Bruto: R$ {0}".format(locale.currency(salario_bruto, grouping=True, symbol=None))) print("Total de Descontos: R$ {0}".format(locale.currency(total_desconto, grouping=True, symbol=None))) print("Salário Líquido: R$ {0}".format(locale.currency(salario_liquido, grouping=True, symbol=None))) if __name__== "__main__": main() |
C# ::: Dicas & Truques ::: Tipos de Dados |
Como usar os tipos de dados byte e sbyte da linguagem C#Quantidade de visualizações: 15320 vezes |
O tipo de dados byte é usado quando queremos armazenar valores inteiros na faixa de 0 a 255, ou seja, valores inteiros apenas positivos. Veja um exemplo de declaração e definição de uma variável deste tipo:// uma variável do tipo byte byte valor = 45; O tipo byte (que possui 8 bits não sinalizados) é um apelido C# para o tipo System.Byte da plataforma .NET. Note que quando inicializamos uma variável do tipo byte com um literal inteiro, este valor é convertido implicitamente de int para byte. Se o valor sendo definido for maior que a faixa permitida, o programa não compilará. Veja: // valor fora da faixa suportada pelo tipo byte byte valor = 290; Ao tentarmos compilar esta linha teremos o seguinte erro: Constant value '290' cannot be converted to a 'byte' Quando se trata de conversões implícitas, um valor do tipo byte pode ser convertido, sem a necessidade de cast, para os tipos short, ushort, int, uint, long, ulong, float, double ou decimal. Veja: // variável do tipo byte byte valor = 28; // variável do tipo float float valor2 = valor; O caminho oposto não é verdade, ou seja, não é possível atribuir uma variável do tipo short à uma variável do tipo byte. Veja: // variável do tipo short short valor = 50; // variável do tipo byte byte valor2 = valor; // mensagem de erro de compilação Cannot implicitly convert type 'short' to 'byte'. An explicit conversion exists (are you missing a cast?) Esta conversão não é possível, ainda que o valor contido na variável do tipo short esteja na faixa aceitável pelo tipo byte. Neste caso, um cast (conversão explícita) se faz necessário: // variável do tipo short short valor = 50; // variável do tipo byte byte valor2 = (byte)valor; Resumindo, nenhum outro tipo de dados em C# pode ser convertido para o tipo byte implicitamente. Se quiser fazê-lo, use uma conversão explícita (cast). O tipo sbyte, por sua vez, pode armazenar valores inteiros na faixa de -128 até 127 e possui 8 bits sinalizados. Este tipo é um apelido C# para o tipo de dados System.SByte da plataforma .NET. Veja um exemplo de seu uso: static void Main(string[] args){ // variável do tipo sbyte sbyte valor = -45; // exibe o resultado Console.WriteLine("O valor da variável é: " + valor); // pausa o programa Console.ReadKey(); } Note que, a exemplo de byte, o tipo sbyte também é governado por algumas regras de conversão e atribuição de valores literais. Há uma conversão implícita de sbyte para os tipos short, int, long, float, double e decimal. A conversão de qualquer outro tipo de dados para o tipo sbyte só pode ser feita por meio de cast (conversão explícita). |
Java ::: Java para Engenharia ::: Geometria Analítica e Álgebra Linear |
Como calcular a transposta de uma matriz em Java - Java para Geometria Analítica e Álgebra LinearQuantidade de visualizações: 3477 vezes |
A matriz transposta de uma matriz A é a matriz AT. Tal matriz é obtida quando copiamos os elementos da matriz A para uma outra matriz (ou para ela mesma) e trocamos de posição as linhas e colunas. Dessa forma, a primeira linha da matriz A se transforma na primeira coluna da matriz transposta, a segunda linha da matriz A se transforma na segunda coluna da matriz transposta e assim por diante. Em termos de notação, podemos dizer, de forma algébrica, que: ATji = Aij Onde i representa as linhas e j representa as colunas, tanto na matriz original quanto na matriz transposta. É importante estar atento à quantidade de linhas e colunas na matriz original e na matriz transposta equivalente. Assim, se a matriz original for 3x2, a matriz transposta será 2x3. Antes de vermos o código Java, dê uma olhada na seguinte matriz de duas linhas e três colunas: \[A = \left[\begin{matrix} 3 & 5 & 7 \\ 1 & 2 & 9 \end{matrix}\right] \] Sua matriz transposta correspondente é: \[A^T = \left[\begin{matrix} 3 & 1 \\ 5 & 2 \\ 7 & 9 \end{matrix}\right] \] E agora veja o código Java que declara uma matriz 2x3 e gera a matriz transposta 3x2: package arquivodecodigos; public class Estudos{ public static void main(String args[]){ // vamos declarar e construir uma matrix // 2x3 (duas linhas e três colunas int matriz[][] = {{3, 5, 7}, {1, 2, 9}}; // vamos exibir os valores da matriz System.out.println("Elementos da matriz:"); for(int i = 0; i < matriz.length; i++){ for(int j = 0; j < matriz[0].length; j++){ System.out.printf("%5d ", matriz[i][j]); } System.out.println(); } // como temos uma matriz 2x3, a transposta deverá ser // 3x2, ou seja, três linhas e duas colunas int linhas = matriz.length; // linhas da matriz original int colunas = matriz[0].length; // colunas da matriz original int transposta[][] = new int[colunas][linhas]; // e agora vamos preencher a matriz transposta for(int i = 0; i < matriz.length; i++){ for(int j = 0; j < matriz[0].length; j++){ transposta[j][i] = matriz[i][j]; } } // vamos exibir os valores da matriz transposta System.out.println("Elementos da matriz transposta:"); for(int i = 0; i < transposta.length; i++){ for(int j = 0; j < transposta[0].length; j++){ System.out.printf("%5d ", transposta[i][j]); } System.out.println(); } } } Ao executar este código Java nós teremos o seguinte resultado: Elementos da matriz: 3 5 7 1 2 9 Elementos da matriz transposta: 3 1 5 2 7 9 |
Java ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca |
Estruturas de dados em Java - Como obter o nó com maior valor em uma árvore binária de busca usando JavaQuantidade de visualizações: 2562 vezes |
Em exemplos dessa seção nós vimos como criar árvores binárias e árvores binárias de busca em Java e como pesquisar ou fazer a sua travessia, visitando cada um dos nós. Nesta dica mostrarei como obter o nó com o maior valor em uma árvore binária. O truque aqui é descer o lado direito da árvore até o último nó. Veja:// método que permite retornar o maior nó de uma árvore // binária de busca public No retornarMaiorElemento(){ // chama a versão recursiva do método return retornarMaiorElemento(raiz); } public No retornarMaiorElemento(No no){ if((no == null) || (no.getDireito() == null)){ return no; // ponto de parada } else{ // vamos continuar descendo do lado direito return retornarMaiorElemento(no.getDireito()); } } Este método faz parte da classe ArvoreBinariaBusca.java. Veja agora como chamá-lo a partir da classe principal, ou seja, a classe de teste: 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 obter o maior elemento na árvore binária de busca System.out.println("\nO maior nó é: " + arvore.retornarMaiorElemento().getValor()); System.out.println("\n"); } } Ao executar este código teremos o seguinte resultado: Informe um valor inteiro: 6 Informe um valor inteiro: 13 Informe um valor inteiro: 64 Informe um valor inteiro: 21 Informe um valor inteiro: 3 O maior nó é: 64 |
Nossas 20 dicas & truques de programação mais populares |
Você também poderá gostar das dicas e truques de programação abaixo |
C - Como escrever uma função concat() que reproduz a funcionalidade da função strcat() da linguagem C Delphi - Como obter a quantidade de registros em um TClientDataSet do Delphi usando a propriedade RecordCount MySQL - Como usar joins no MySQL |
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 |