Delphi ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas |
Como calcular o seno de um número ou ângulo em Delphi usando a função Sin()Quantidade de visualizações: 12910 vezes |
Em geral, quando falamos de seno, estamos falando do triângulo retângulo de Pitágoras (Teorema de Pitágoras). A verdade é que podemos usar a função seno disponível nas linguagens de programação para calcular o seno 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 seno. 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 seno é a razão entre o cateto oposto (oposto ao ângulo theta) e a hipotenusa, ou seja, o cateto oposto dividido pela hipotenusa. Veja a fórmula: \[\text{Seno} = \frac{\text{Cateto oposto}}{\text{Hipotenusa}} \] Então, se dividirmos 20 por 36.056 (na figura eu arredondei) nós teremos 0.5547, que é a razão entre o cateto oposto e a hipotenusa (em radianos). Agora, experimente calcular o arco-cosseno de 0.5547. O resultado será 0.9828 (em radianos). Convertendo 0.9828 radianos para graus, nós obtemos 56.31º, que é exatamente o ângulo em graus entre o cateto oposto e a hipotenusa na figura acima. Pronto! Agora que já sabemos o que é seno na trigonometria, vamos entender mais sobre a função Sin() da linguagem Delphi. Esta função, incorporada por padrão à linguagem, recebe um valor numérico (Extended) e retorna um valor Extended, ou seja, também numérico) entre -1 até 1 (ambos inclusos). Veja: procedure TForm1.Button1Click(Sender: TObject); begin Memo1.Lines.Add('Seno de 0 = ' + FloatToStr(Sin(0))); Memo1.Lines.Add('Seno de 1 = ' + FloatToStr(Sin(1))); Memo1.Lines.Add('Seno de 2 = ' + FloatToStr(Sin(2))); end; Ao executar este código Delphi nós teremos o seguinte resultado: Seno de 0 = 0 Seno de 1 = 0,841470984807897 Seno de 2 = 0,909297426825682 Note que calculamos os senos dos valores 0, 1 e 2. Observe como os resultados conferem com a curva da função seno mostrada abaixo: ![]() |
C# ::: Fundamentos da Linguagem ::: Estruturas de Controle |
Como usar a instrução continue da linguagem C#Quantidade de visualizações: 9278 vezes |
A instrução continue é usada quando queremos abandonar completamente a iteração atual de um laço e saltar imediatamente para a próxima iteração. Veja um exemplo:static void Main(string[] args){ for(int i = 0; i <= 10; i++){ // se o valor de i não for par, vamos passar // para a próxima iteração if(i % 2 != 0) continue; Console.WriteLine("{0}", i); } Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } Aqui nós estamos exibindo somente os números pares de 0 a 10. Note que, cada vez que o valor de i for ímpar, nós usamos a instrução continue para interromper a instrução atual e saltar para a próxima. Veja mais um exemplo, desta vez usando um laço while: static void Main(string[] args){ int valor = 0; while(valor <= 10){ if((valor >= 5) && (valor <= 7)){ valor++; continue; } Console.WriteLine("{0}", valor); valor++; } Console.WriteLine("\n\nPressione uma tecla para sair..."); Console.ReadKey(); } Este laço conta de 0 a 10 mas não exibe os valores 5, 6 e 7. |
C++ ::: Dicas & Truques ::: Matemática e Estatística |
Como calcular juros simples e montante usando C++Quantidade de visualizações: 19743 vezes |
O regime de juros será simples quando o percentual de juros incidir apenas sobre o valor principal. Sobre os juros gerados a cada período não incidirão novos juros. Valor Principal ou simplesmente principal é o valor inicial emprestado ou aplicado, antes de somarmos os juros. Transformando em fórmula temos: J = P . i . n Onde: J = juros P = principal (capital) i = taxa de juros n = número de períodos Imaginemos uma dívida de R$ 2.000,00 que deverá ser paga com juros de 5% a.m. pelo regime de juros simples e o prazo para o pagamento é de 2 meses. O cálculo em C++ pode ser feito assim: #include <iostream> using namespace std; int main(int argc, char *argv[]) { float principal = 2000.00; float taxa = 0.08; int meses = 2; float juros = principal * taxa * meses; cout << "O total de juros a ser pago é: " << juros << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } O montante da dívida pode ser obtido das seguintes formas: a) Montante = Principal + Juros b) Montante = Principal + (Principal x Taxa de juros x Número de períodos) M = P . (1 + (i . n)) Veja o código: #include <iostream> using namespace std; int main(int argc, char *argv[]) { float principal = 2000.00; float taxa = 0.08; int meses = 2; float juros = principal * taxa * meses; float montante = principal * (1 + (taxa * meses)); cout << "O total de juros a ser pago é: " << juros << "\n"; cout << "O montante a ser pago é: " << montante << "\n\n"; system("PAUSE"); // pausa o programa return EXIT_SUCCESS; } |
C# ::: Dicas & Truques ::: Gráficos |
Como desenhar texto em C# usando o método DrawString() da classe GraphicsQuantidade de visualizações: 8723 vezes |
Em algumas situações precisamos desenhar uma string (texto) no formulário ou algum outro controle. Para isso podemos usar o método DrawString() da classe Graphics. A assinatura mais comumente usada deste método é:Graphics.DrawString(String, Font, Brush, Single, Single) Note que precisamos fornecer a string a ser desenhada, a fonte a ser usada (como um objeto da classe Font), a cor e preenchimento (um objeto de alguma classe que herde de Brush) e as coordenadas x e y. Veja um trecho de código no qual desenhamos a string "Arquivo de Códigos" no formulário: private void button1_Click(object sender, EventArgs e){ // vamos obter o Graphics do formulário Graphics g = this.CreateGraphics(); // vamos desenhar a string "Arquivo de Códigos" g.DrawString("Arquivo de Códigos", this.Font, new SolidBrush(Color.Red), 40, 60); // vamos liberar o objeto Graphics g.Dispose(); } Aqui a string será desenhada usando a fonte do formulário e na cor vermelha e sólida. Se quiséssemos definir a fonte, o código ficaria algo assim: g.DrawString("Arquivo de Códigos", new Font("Verdana", 30), new SolidBrush(Color.Red), 40, 60); As coordenadas x e y nas quais o desenho ocorrerá podem ser informadas como um objeto da estrutura PointF. Veja: g.DrawString("Arquivo de Códigos", new Font("Verdana", 30), new SolidBrush(Color.Red), new PointF(80f, 120f)); |
LISP ::: Desafios e Lista de Exercícios Resolvidos ::: Lisp Básico |
Exercícios Resolvidos de Lisp - Como converter quilômetros em metros, centímetros e milímetros usando LispQuantidade de visualizações: 911 vezes |
Pergunta/Tarefa: Escreva um programa em Common Lisp para converter quilômetros em metros, centímetros e milímetros. Seu programa deverá pedir para o usuário informar a quantidade de quilômetros e exibir as conversões solicitadas. Como sabemos, um Quilômetro = 1000 Metros, 100.000 Centímetros ou 1.000.000 Milímetros. Seu programa deverá exibir uma saída parecida com: Informe a distância em quilômetros: 2.5 Distância em Quilômetros: 2.5 Distância em Metros: 2500.0 Distância em Centímetros: 250000.0 Distância em Milímetros: 2500000.0 Veja a resolução comentada deste exercício usando Common Lisp: ; Variáveis usadas na resolução do problema (let ((quilometros)(metros)(centimetros)(milimetros)) ; vamos ler a quantidade de quilômetros (princ "Informe a distância em quilômetros: ") ; talvez o seu compilador não precise disso (force-output) ; atribui o valor lido à variável quilometros (setq quilometros (read)) ; vamos calcular a distância em metros (setq metros (* quilometros 1000.0)) ; vamos calcular a distância em centímetros (setq centimetros (* quilometros 100000.0)) ; e agora a distância em milímetros (setq milimetros (* quilometros 1000000.0)) ; E mostramos o resultado (format t "Distância em Quilômetros: ~F" quilometros) (format t "~%Distância em Metros: ~F" metros) (format t "~%Distância em Centímetros: ~F" centimetros) (format t "~%Distância em Milímetros: ~F" milimetros) ) |
Delphi ::: Imagens, Gráficos e Cores ::: TBitmap (A classe TBitmap) |
Computação gráfica em Delphi - Como usar a classe TBitmap do DelphiQuantidade de visualizações: 16557 vezes |
A classe TBitmap encapsula um bitmap Windows (HBITMAP, um handle para um bitmap), incluindo sua paleta (HPALETTE, um handle para uma paleta de cores). Esta classe herda de TGraphic e é usada para criar, manipular (redimensionar, rolar, rotacionar, pintar, etc) e armazenar imagens na memória e como arquivos em disco. A classe TBitmap contém muitas propriedades e métodos úteis. Entre seus métodos podemos citar LoadFromFile(), usado para carregar uma imagem bitmap a partir do disco e guardá-la em memória como um objeto TBitmap. Veja o trecho de código abaixo: procedure TForm2.Button1Click(Sender: TObject); var bmp: TBitmap; begin // vamos criar o bitmap bmp := TBitmap.Create; // vamos carregar a imagem e guardá-la no bitmap bmp.LoadFromFile('foto.bmp'); // vamos desenhar o bitmap no formulário // começando nas coordenadas x = 0; y = 0 a partir // do canto superior esquerdo da área cliente do formulário Form2.Canvas.Draw(0, 0, bmp); // vamos liberar o bitmap bmp.Free; end; Aqui nós carregamos o bitmap foto.bmp e o desenhamos na superfície do formulário usando o método Draw() do Canvas do formulário. É possível também redimensionar o bitmap ao desenhá-lo no formulário. Veja este novo trecho de código: procedure TForm2.Button1Click(Sender: TObject); var bmp: TBitmap; retang: TRect; // um objeto TRect begin // vamos criar o bitmap bmp := TBitmap.Create; // vamos carregar a imagem e guardá-la no bitmap bmp.LoadFromFile('foto.bmp'); // vamos redimensionar o bitmap na memória de // acordo com o retângulo abaixo retang.Top := 0; retang.Left := 0; retang.Right := 200; retang.Bottom := 150; // vamos desenhar o bitmap usando o método // StretchDraw da classe TCanvas Form2.Canvas.StretchDraw(retang, bmp); // vamos liberar o bitmap bmp.Free; end; Aqui nós usamos um objeto do registro (record) TRect para criar um retângulo especificando o tamanho do bitmap e fornecemos tal retângulo, juntamente com o bitmap, para o método StretchDraw() da classe TCanvas. Este método redimensiona a imagem antes de desenhá-la na superfície do formulário. Para fins de compatibilidade, esta dica foi escrita usando Delphi 2009. |
Java ::: Dicas & Truques ::: Expressões Regulares |
Java Expressões Regulares - Como substituir todas as ocorrências de uma substring em uma string usando expressões regularesQuantidade de visualizações: 9304 vezes |
Este exemplo mostra como substituir todas as ocorrências de uma substring em uma string usando expressões regulares na linguagem Java. Nesta dica nós substituimos todas as ocorrências de "Java" por "C++". Veja o código completo: package arquivodecodigos; import java.util.regex.*; public class Estudos{ public static void main(String args[]){ String padrao = "Java"; Pattern regPat = Pattern.compile(padrao); String frase = "Java? Gosto muito de Java."; System.out.println("Frase original: " + frase); Matcher matcher = regPat.matcher(frase); String res = matcher.replaceAll("C++"); System.out.println("Depois da substituição: " + res); } } Ao executarmos este código Java nós teremos o seguinte resultado: Frase original: Java? Gosto muito de Java. Depois da substituição: C++? Gosto muito de C++. |
Java ::: Coleções (Collections) ::: Set (Conjunto) |
Como usar objetos da interface Set do Java para representar a interseção (ou intersecção) de dois ou mais conjuntosQuantidade de visualizações: 4658 vezes |
Na teoria dos conjuntos, a interseção (português brasileiro) ou intersecção (português europeu) de dois ou mais conjuntos é o conjunto dos elementos que, simultaneamente, pertencem a dois ou mais destes conjuntos. Assim, seja A = {2, 5, 8, 19, 30} e B = {2, 3, 1, 30}. A interseção desses dois conjuntos é C = {2, 30}. Na programação Java podemos representar a interseção de dois conjuntos usando objetos da interface Set e qualquer uma de suas implementações. Para este exemplo vou usar a classe TreeSet, que permite a ordenação dos elementos. Veja o código: package estudos; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; public class Estudos{ public static void main(String[] args) { // primeiro conjunto Set<Integer> conjuntoA = new TreeSet<>(); conjuntoA.add(2); conjuntoA.add(5); conjuntoA.add(8); conjuntoA.add(19); conjuntoA.add(30); // segundo conjunto Set<Integer> conjuntoB = new TreeSet<>(); conjuntoB.add(2); conjuntoB.add(3); conjuntoB.add(1); conjuntoB.add(30); // vamos obter a interseção dos dois conjuntos Set<Integer> conjuntoC = intersecao(conjuntoA, conjuntoB); // vamos exibir os elementos no conjunto C Iterator iterator = conjuntoC.iterator(); while(iterator.hasNext()){ System.out.println(iterator.next()); } } // método genérico que permite obter a interseção de dois conjuntos public static <T> Set<T> intersecao(Set<T> conjA, Set<T> conjB){ Set<T> conjC = new TreeSet<>(); // percorremos todos os elementos do conjunto A for(T elemento: conjA){ // e verificamos se o elemento está contido no conjunto B if(conjB.contains(elemento)){ conjC.add(elemento); // se estiver contido nós o adicionamos no conjunto C } } return conjC; // e retornamos o conjunto C } } Ao executarmos este código teremos o seguinte resultado: 2 30 |
Revit C# ::: Dicas & Truques ::: Colunas e Pilares |
Como rotacionar colunas e pilares no Revit via programação usando a função RotateElement() da classe ElementTransformUtils da Revit C# APIQuantidade de visualizações: 366 vezes |
Nesta dica mostrarei como podemos usar a função RotateElement() da classe ElementTransformUtils da Revit C# API para rotacionar uma coluna ou pilar no Revit, tudo isso via programação. Essa dica é muito útil para programadores Revit C#, pois traz as técnicas necessárias para selecionar um único elemento na área de desenho do Revit, assim como obter sua caixa delimitadora (BoundingBox), seu ponto geométrico central e, o mais importante, fazer a rotação do elemento em seus eixos. O primeiro passo é pedir para o usuário selecionar o pilar ou a coluna usando a função PickObject() da classe Selection, que retorna uma Reference. Após a seleção do elemento nós usamos a função GetElement() da classe Document para retornar o elemento como uma variável FamilyInstance, ou seja, uma instância de família do Revit. De posse da instância de família nós usamos a função get_BoundingBox() para obter e retornar um objeto da classe BoundingBoxXYZ. É esse objeto que usamos para obter o ponto máximo, o ponto mínimo e o ponto geométrico central da coluna ou pilar. O passo final é usar a função RotateElement() da classe ElementTransformUtils para rotacionar a coluna ou pilar de acordo com o ângulo de rotação desejado. Note que fiz a conversão de ângulos em graus para ângulos em radianos antes de efetuar a rotação. Veja o código Revit C# API completo para o exemplo: using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Structure; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; using Autodesk.Revit.DB.Architecture; using System.Linq; namespace Estudos { [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes. TransactionMode.Manual)] [Autodesk.Revit.DB.Macros.AddInId("ED8EC6C4-9489-48F7-B04E-B45B5D1BEB12")] public partial class ThisApplication { private void Module_Startup(object sender, EventArgs e) { // vamos obter uma referência ao Document ativo Document doc = this.ActiveUIDocument.Document; UIDocument uidoc = this.ActiveUIDocument; // agora mostramos uma mensagem para o usuário selecionar uma // coluna ou pilar TaskDialog.Show("Aviso", "Selecione uma coluna ou pilar"); // obtemos uma referência ao objeto Selection do // UIDocument ativo Selection selecao = uidoc.Selection; // e finalmente esperamos que o usuário selecione o elemento Reference selecionado = selecao.PickObject(ObjectType.Element, "Selecione uma coluna ou pilar"); // agora testamos se o usuário realmente selecionou um // elemento if (selecionado != null) { // vamos obter o elemento selecionado a partir da // referência FamilyInstance coluna = uidoc.Document.GetElement(selecionado) as FamilyInstance; // vamos obter o elemento BoundingBoxXYZ BoundingBoxXYZ bounding = coluna.get_BoundingBox(null); // vamos obter as informações da BoundingBoxXYZ // primeiro o ponto mínimo (canto esquerdo inferior e // a parte de trás da caixa delimitadora) XYZ pontoMinimo = bounding.Min; // agora o ponto máximo (canto direito superior e // a parte da frente da caixa delimitadora) XYZ pontoMaximo = bounding.Max; // agora obtemos o ponto central da coluna XYZ centro = (pontoMaximo + pontoMinimo) * 0.5; // construímos a linha que servirá de eixo de rotação Line eixos = Line.CreateBound(centro, centro + XYZ.BasisZ); // definimos o ângulo de rotação em graus double angulo_rotacao_graus = 45; // convertemos para radianos double angulo_rotacao_radianos = angulo_rotacao_graus * (Math.PI / 180); // iniciamos a transação Transaction transacao = new Transaction(doc); transacao.Start("Como rotacionar colunas e pilares no Revit"); // rotacionamos a coluna ou pilar ElementTransformUtils.RotateElement(doc, coluna.Id, eixos, angulo_rotacao_radianos); // fazemos o commit da transação transacao.Commit(); // e mostramos o resultado TaskDialog.Show("Aviso", "A coluna foi rotacionada com sucesso."); } } private void Module_Shutdown(object sender, EventArgs e) { // para fazer alguma limpeza de memória ou algo assim } #region Revit Macros generated code private void InternalStartup() { this.Startup += new System.EventHandler(Module_Startup); this.Shutdown += new System.EventHandler(Module_Shutdown); } #endregion } } |
Java ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico |
Exercícios Resolvidos de Java - Escreva um programa Java para calcular e imprimir o número de lâmpadas necessáriasQuantidade de visualizações: 467 vezes |
Pergunta/Tarefa: Escreva um programa Java para calcular e imprimir o número de lâmpadas necessárias para iluminar um determinado cômodo de uma residência. Dados de entrada: a potência da lâmpada utilizada (em watts), as dimensões (largura e comprimento, em metros) do cômodo. Considere que a potência necessária é de 18 watts por metro quadrado. Sua saída deverá ser parecida com: Informe a potência da lâmpada (em watts): 100 Informe a largura do cômodo (em metros): 6 Informe o comprimento do cômodo (em metros): 4 Serão necessárias 4 lâmpadas. Veja a resolução completa para o exercício em Java, comentada linha a linha: // Como calcular o número de lâmpadas necessárias package estudos; import java.util.Scanner; public class Estudos { public static void main(String[] args) { // variáveis usadas na resolução do problema double potencia_lampada, largura_comodo, comprimento_comodo; double area_comodo, potencia_total; int quant_lampadas; // para ler a entrada do usuário Scanner entrada = new Scanner(System.in); // vamos ler a potência da lâmpada System.out.print("Informe a potência da lâmpada (em watts): "); potencia_lampada = Double.parseDouble(entrada.nextLine()); // vamos ler a largura do cômodo System.out.print("Informe a largura do cômodo (em metros): "); largura_comodo = Double.parseDouble(entrada.nextLine()); // agora vamos ler o comprimento do cômodo System.out.print("Informe o comprimento do cômodo (em metros): "); comprimento_comodo = Double.parseDouble(entrada.nextLine()); // agora vamos calcular a área do cômodo area_comodo = largura_comodo * comprimento_comodo; // calculamos a potência total necessária para iluminar // todo o cômodo potencia_total = area_comodo * 18; // e finalmente calculamos a quantidade de lâmpadas necessárias quant_lampadas = (int)(potencia_total / potencia_lampada); // será necessário no mínimo uma lâmpada if (quant_lampadas == 0) { quant_lampadas = quant_lampadas + 1; } // e mostramos o resultado System.out.println("Serão necessárias " + quant_lampadas + " lâmpadas."); } } |
Nossas 20 dicas & truques de programação mais populares |
MySQL - Como adicionar horas ao valor de um campo DATETIME ou TIME usando a função ADDTIME() do MySQL wxWidgets - Como usar a classe wxFrame para criar a janela principal de suas aplicações C++ wxWidgets Python - Como usar a biblioteca Pandas do Python em seus projetos de Data Science e Machine Learning |
Você também poderá gostar das dicas e truques de programação abaixo |
Java - Como usar null em Java |
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 |