![]() |
|
||||
![]() Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica. |
|||||
C ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade) |
Exercícios Resolvidos de C - Um método recursivo que conta de 10 até 0Quantidade de visualizações: 918 vezes |
Pergunta/Tarefa: Escreva um método recursivo em C que conta e exibe os valores de 10 até 0. Seu método deverá possuir a seguinte assinatura: void contar_recursivamente(int n){ // sua implementação aqui } Sua saída deverá ser parecida com: 10 9 8 7 6 5 4 3 2 1 0 Veja a resolução comentada deste exercício usando C console: #include <stdio.h> #include <stdlib.h> #include <locale.h> // função recursiva que conta de 10 até 0; void contar_recursivamente(int n){ // vamos exibir o número atual printf("%d\n", n); // devemos prosseguir com a recursividade? if(n > 0){ // decrementa o valor de n n--; contar_recursivamente(n); // e faz uma nova chamada recursiva } } int main(int argc, char *argv[]){ setlocale(LC_ALL,""); // para acentos do português // efetua uma chamada ao método recursivo fornecendo // o primeiro valor contar_recursivamente(10); printf("\n\n"); system("pause"); return 0; } |
Java ::: Estruturas de Dados ::: Árvore Binária e Árvore Binária de Busca |
Estruturas de dados em Java - Como fazer a travessia de uma árvore binária de busca em Java usando o percurso em-ordem (in-order, In-ordem ou ordem simétrica)Quantidade de visualizações: 5110 vezes |
Antes de discutirmos o percurso in-order, veja a árvore binária de busca na figura abaixo:![]() Esta árvore possui 9 nós e obedece à regra de que os nós com valores menores que o nó pai ficam à sua esquerda, e aqueles com nós maiores que o nó pai, ficam à sua direita. O percurso em ordem é usado quando queremos exibir os valores dos nós da árvore binária de busca em ordem ascendente. Neste tipo de percurso nós visitamos primeiramente a sub-árvore da esquerda, então o nó atual e finalmente a sub-árvore à direita do nó atual. É importante notar que esta travessia é feita por meio de um método recursivo. Veja o código completo para o exemplo: Código para No.java: package arvore_binaria; public class No { private int valor; // valor armazenado no nó private No esquerdo; // filho esquerdo private No direito; // filho direito // construtor do nó public No(int valor){ this.valor = valor; this.esquerdo = null; this.direito = null; } public int getValor() { return valor; } public void setValor(int valor) { this.valor = valor; } public No getEsquerdo() { return esquerdo; } public void setEsquerdo(No esquerdo) { this.esquerdo = esquerdo; } public No getDireito() { return direito; } public void setDireito(No direito) { this.direito = direito; } } Código para ArvoreBinariaBusca.java: package arvore_binaria; public class ArvoreBinariaBusca { private No raiz; // referência para a raiz da árvore // método usado para inserir um novo nó na árvore // retorna true se o nó for inserido com sucesso e false // se o elemento // não puder ser inserido (no caso de já existir um // elemento igual) public boolean inserir(int valor){ // a árvore ainda está vazia? if(raiz == null){ // vamos criar o primeiro nó e definí-lo como a raiz da árvore raiz = new No(valor); // cria um novo nó } else{ // localiza o nó pai do novo nó No pai = null; No noAtual = raiz; // começa a busca pela raiz // enquanto o nó atual for diferente de null while(noAtual != null){ // o valor sendo inserido é menor que o nó atual? if(valor < noAtual.getValor()) { pai = noAtual; // vamos inserir do lado esquerdo noAtual = noAtual.getEsquerdo(); } // o valor sendo inserido é maior que o nó atual else if(valor > noAtual.getValor()){ pai = noAtual; // vamos inserir do lado direito noAtual = noAtual.getDireito(); } else{ return false; // um nó com este valor foi encontrado } } // cria o novo nó e o adiciona como filho do nó pai if(valor < pai.getValor()){ pai.setEsquerdo(new No(valor)); } else{ pai.setDireito(new No(valor)); } } return true; // retorna true para indicar que o novo nó foi inserido } // método que permite disparar a travessia em-ordem public void emOrdem(){ emOrdem(raiz); } // sobrecarga do método emOrdem com uma parâmetro (esta é a versão // recursiva do método) private void emOrdem(No raiz){ if(raiz == null){ // condição de parada return; } // visita a sub-árvore da esquerda emOrdem(raiz.getEsquerdo()); // visita o nó atual System.out.print(raiz.getValor() + " "); // visita a sub-árvore da direita emOrdem(raiz.getDireito()); } } E agora o código para a classe principal: 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 9 valores na árvore for(int i = 0; i < 9; 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 exibir os nós da árvore usando o percurso in-order System.out.println("\nPercurso in-order:"); arvore.emOrdem(); System.out.println("\n"); } } Ao executar este código teremos o seguinte resultado: Informe um valor inteiro: 8 Informe um valor inteiro: 3 Informe um valor inteiro: 10 Informe um valor inteiro: 1 Informe um valor inteiro: 6 Informe um valor inteiro: 14 Informe um valor inteiro: 4 Informe um valor inteiro: 7 Informe um valor inteiro: 13 Percurso in-order: 1 3 4 6 7 8 10 13 14 |
Python ::: Dicas & Truques ::: Lista (List) |
Como adicionar itens ao final de uma lista de inteiros em Python usando a função append()Quantidade de visualizações: 8664 vezes |
O método append() é usado quando queremos adicionar um novo elemento no final de uma list Python. Esta função aceita qualquer tipo de elemento, ou seja, uma string, um number, um object, etc. Veja um exemplo de seu uso no trecho de código a seguir: """ Este exemplo mostra como adicionar itens ao fim de uma lista de inteiros. """ def main(): # cria uma lista vazia valores = [] # início do laço for for i in range(1, 6): valor = int(input("Informe um inteiro: ")) # insere o valor no final da lista valores.append(valor) # exibe os valores da lista print("Valores na lista:", valores, "\n") if __name__== "__main__": main() Ao executar este código Python nós teremos o seguinte resultado: Informe um inteiro: 7 Informe um inteiro: 2 Informe um inteiro: 9 Informe um inteiro: 3 Informe um inteiro: 6 Valores na lista: [7, 2, 9, 3, 6] |
VB.NET ::: VB.NET para Engenharia ::: Geometria Analítica e Álgebra Linear |
Como calcular vetor unitário em VB.NET - VB.NET para Física e EngenhariaQuantidade de visualizações: 638 vezes |
Um vetor unitário ou versor num espaço vetorial normado é um vetor (mais comumente um vetor espacial) cujo comprimento ou magnitude é 1. Em geral um vetor unitário é representado por um "circunflexo", assim: __$\hat{i}__$. O vetor normalizado __$\hat{u}__$ de um vetor não zero __$\vec{u}__$ é o vetor unitário codirecional com __$\vec{u}__$. O termo vetor normalizado é algumas vezes utilizado simplesmente como sinônimo para vetor unitário. Dessa forma, o vetor unitário de um vetor __$\vec{u}__$ possui a mesma direção e sentido, mas magnitude 1. Por magnitude entendemos o módulo, a norma ou comprimento do vetor. Então, vejamos a fórmula para a obtenção do vetor unitário: \[\hat{u} = \dfrac{\vec{v}}{\left|\vec{v}\right|}\] Note que nós temos que dividir as componentes do vetor pelo seu módulo de forma a obter o seu vetor unitário. Por essa razão o vetor nulo não possui vetor unitário, pois o seu módulo é zero, e, como sabemos, uma divisão por zero não é possível. Veja agora o código VB.NET que pede as coordenadas x e y de um vetor 2D ou R2 e retorna o seu vetor unitário: Imports System Module Program Sub Main(args As String()) ' vamos ler os valores x e y Console.Write("Informe o valor de x: ") Dim x = Double.Parse(Console.ReadLine()) Console.Write("Informe o valor de y: ") Dim y = Double.Parse(Console.ReadLine()) ' o primeiro passo é calcular a norma do vetor Dim norma = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2)) ' agora obtemos as componentes x e y do vetor unitário Dim u_x = x / norma Dim u_y = y / norma ' mostra o resultado Console.WriteLine("O vetor unitário é: (x = " & u_x & "; y = " & u_y) Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...") ' pausa o programa Console.ReadKey() End Sub End Module Ao executar este código VB.NET nós teremos o seguinte resultado: Informe o valor de x: -4 Informe o valor de y: 6 O vetor unitário é: (x = -0.5547001962252291; y = 0.8320502943378437 Veja agora uma modificação deste código para retornarmos o vetor unitário de um vetor 3D ou R3, ou seja, um vetor no espaço: Imports System Module Program Sub Main(args As String()) ' vamos ler os valores x, y e z Console.Write("Informe o valor de x: ") Dim x = Double.Parse(Console.ReadLine()) Console.Write("Informe o valor de y: ") Dim y = Double.Parse(Console.ReadLine()) Console.Write("Informe o valor de z: ") Dim z = Double.Parse(Console.ReadLine()) ' o primeiro passo é calcular a norma do vetor Dim norma = Math.Sqrt(Math.Pow(x, 2) + Math.Pow(y, 2) + Math.Pow(z, 2)) ' agora obtemos as componentes x, y e z do vetor unitário Dim u_x = x / norma Dim u_y = y / norma Dim u_z = z / norma ' mostra o resultado Console.WriteLine("O vetor unitário é: (x = " & u_x & "; y = " & u_y & "; z = " & u_z) Console.WriteLine(vbCrLf & "Pressione qualquer tecla para sair...") ' pausa o programa Console.ReadKey() End Sub End Module Ao executarmos este novo código nós teremos o seguinte resultado: Informe o valor de x: 3 Informe o valor de y: 7 Informe o valor de z: 5 O vetor unitário é: (x = 0.329292779969071; y = 0.7683498199278324; z = 0.5488212999484517 |
Ruby ::: Dicas & Truques ::: Strings e Caracteres |
Como converter uma string para letras maiúsculas em Ruby usando as funções upcase e upcase!Quantidade de visualizações: 7145 vezes |
Esta dica mostra como converter todos os caracteres de uma string para letras maiúsculas em Ruby. Para isso usaremos a função upcase(). Veja que podemos usar tanto upcase quanto upcase!. A primeira retorna uma nova string, enquanto a segunda opera na string original. Veja o exemplo: # declara e inicializa uma variável string frase = "Gosto muito de Ruby" puts "A frase original é: " + frase # vamos transformar a string toda para # letras maiúsculas. Veja que aqui não estamos # operando na string original frase2 = frase.upcase # exibe o resultado puts "Em letras maiúsculas: " + frase2 Ao executar este código Ruby nós teremos o seguinte resultado: A frase original é: Gosto muito de Ruby Em letras maiúsculas: GOSTO MUITO DE RUBY |
Java ::: Coleções (Collections) ::: LinkedList |
Java Collections - Como adicionar elementos no final de uma LinkedList usando os métodos add() e addLast()Quantidade de visualizações: 9342 vezes |
O trecho de código a seguir mostra como adicionar elementos no final de um lista ligada (objeto da classe LinkedList). Para isso podemos usar os métodos add() e addLast(). Ambos possuem a mesma funcionalidade. É claro que addLast() representa melhor a idéia de adicionar elementos no final da lista ligada. Veja ainda como usar um ListIterator para percorrer a lista e exibir os elementos. Outra técnica que você perceberá é o uso de unboxing dentro do laço while:import java.util.*; public class Estudos{ public static void main(String args[]){ // Cria uma LinkedList de inteiros LinkedList<Integer> valores = new LinkedList<Integer>(); // adiciona valores no final da lista ligada // usando os métodos add() e addLast(). Lembre-se // de que ambos fornecem a mesma funcionalidade valores.add(56); valores.addLast(3); valores.add(28); // obtém um ListIterator para percorrer toda a // lista ligada, começando no primeiro elemento ListIterator<Integer> iterador = valores.listIterator(0); while(iterador.hasNext()){ // note o unboxing aqui int valor = iterador.next(); System.out.println(valor); } } } Ao executar este código Java nós teremos o seguinte resultado: 56 3 28 |
C ::: Dicas & Truques ::: Strings e Caracteres |
Como escrever uma função strtoupper() em C para transformar uma palavra inteira em letras maiúsculasQuantidade de visualizações: 9061 vezes |
A linguagem C padrão não possui uma função para transformar todas as letras de uma palavra, frase ou texto em maiúsculas, embora alguns compiladores a forneça. O que temos em C padrão é a função: int toupper(int c); maiúsculo. Podemos tirar vantagem disso e escrever uma função strtoupper(). Veja a listagem logo abaixo (uma boa oportunidade para praticar ponteiros em C): #include <stdio.h> #include <stdlib.h> void strtoupper(char *string){ while(*string){ *string = toupper(*string); string++; } } int main(int argc, char *argv[]) { char frase[] = "Programando em C"; printf("Frase normal: %s\n", frase); strtoupper(frase); printf("Em letras maiusculas: %s\n\n", frase); system("PAUSE"); return 0; } Ao executar este código C nós teremos o seguinte resultado: Frase normal: Programando em C Em letras maiusculas: PROGRAMANDO EM C |
JavaScript ::: Dicas & Truques ::: Geometria, Trigonometria e Figuras Geométricas |
Como calcular o coeficiente angular de uma reta em JavaScript dados dois pontos no plano cartesianoQuantidade de visualizações: 1911 vezes |
O Coeficiente Angular de uma reta é a variação, na vertical, ou seja, no eixo y, pela variação horizontal, no eixo x. Sim, isso mesmo. O coeficiente angular de uma reta tem tudo a ver com a derivada, que nada mais é que a taxa de variação de y em relação a x. Vamos começar analisando o seguinte gráfico, no qual temos dois pontos distintos no plano cartesiano: ![]() Veja que o segmento de reta AB passa pelos pontos A (x=3, y=6) e B (x=9, y=10). Dessa forma, a fórmula para obtenção do coeficiente angular m dessa reta é: \[\ \text{m} = \frac{y_2 - y_1}{x_2 - x_1} = \frac{\Delta y}{\Delta x} = tg \theta \] Note que __$\Delta y__$ e __$\Delta x__$ são as variações dos valores no eixo das abscissas e no eixo das ordenadas. No triângulo retângulo que desenhei acima, a variação __$\Delta y__$ se refere ao comprimento do cateto oposto e a variação __$\Delta y__$ se refere ao comprimento do cateto adjascente. Veja agora o trecho de código na linguagem JavaScript que solicita as coordenadas x e y dos dois pontos, efetua o cálculo e mostra o coeficiente angular m da reta que passa pelos dois pontos: <html> <head> <title>Estudos JavaScript</title> </head> <body> <script type="text/javascript"> // x e y do primeiro ponto var x1 = 3; var y1 = 6; // x e y do segundo ponto var x2 = 9; var y2 = 10; var m = (y2 - y1) / (x2 - x1); // mostramos o resultado document.writeln("O coeficiente angular é: " + m); </script> </body> </html> Ao executar este código JavaScript nós teremos o seguinte resultado: O coeficiente angular é: 0.6666666666666666 Veja agora como podemos calcular o coeficiente angular da reta que passa pelos dois pontos usando o Teorema de Pitágoras. Note que agora nós estamos tirando proveito da tangente do ângulo Theta (__$\theta__$), também chamado de ângulo Alfa ou Alpha (__$\alpha__$): <html> <head> <title>Estudos JavaScript</title> </head> <body> <script type="text/javascript"> // x e y do primeiro ponto var x1 = 3; var y1 = 6; // x e y do segundo ponto var x2 = 9; var y2 = 10; // vamos obter o comprimento do cateto oposto var cateto_oposto = y2 - y1; // e agora o cateto adjascente var cateto_adjascente = x2 - x1; // vamos obter o ângulo tetha, ou seja, a inclinação da hipetunesa // (em radianos, não se esqueça) var tetha = Math.atan2(cateto_oposto, cateto_adjascente); // e finalmente usamos a tangente desse ângulo para calcular // o coeficiente angular var tangente = Math.tan(tetha); // mostramos o resultado document.writeln("O coeficiente angular é: " + tangente); </script> </body> </html> Ao executar este código você verá que o resultado é o mesmo. No entanto, fique atento às propriedades do coeficiente angular da reta: 1) O coeficiente angular é positivo quando a reta for crescente, ou seja, m > 0; 2) O coeficiente angular é negativo quando a reta for decrescente, ou seja, m < 0; 3) Se a reta estiver na horizontal, ou seja, paralela ao eixo x, seu coeficiente angular é zero (0). 4) Se a reta estiver na vertical, ou seja, paralela ao eixo y, o coeficiente angular não existe. |
Revit C# ::: Dicas & Truques ::: Selection, Seleção |
Como pedir para o usuário selecionar somente um elemento no Revit usando a função PickObject() do objeto Selection da Revit C# APIQuantidade de visualizações: 588 vezes |
Durante o desenvolvimento de plug-ins e macros para o Revit usando C# e a API do Revit, nós precisamos pedir para o usuário selecionar um elemento e efetuar alguma operação com ele. Para isso nós podemos usar a função PickObject() do objeto Selection. O objeto Selection é obtido a partir de um UIDocument, que, por sua vez, é obtido usando this.ActiveUIDocument. Após a aquisição do objeto Selection, nós chamamos a função PickObject() e retornamos um objeto Reference, para representar o elemento selecionado pelo usuário na área de desenho do Revit. Se o objeto Reference retornado for diferente de null, então sabemos que o usuário selecionou o elemento e podemos proseguir com a execução do código do Plug-in ou macro. Veja o código Revit C# completo para o exemplo: using System; using Autodesk.Revit.UI; using Autodesk.Revit.DB; using Autodesk.Revit.UI.Selection; using System.Collections.Generic; 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 UIDocument ativo UIDocument uidoc = this.ActiveUIDocument; // agora mostramos uma mensagem para o usuário selecionar um // elemento TaskDialog.Show("Aviso", "Selecione um elemento"); // 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); // agora testamos se o usuário realmente selecionou um // elemento if (selecionado != null) { TaskDialog.Show("Aviso", "Você selecionou um elemento."); } } 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 ::: Fundamentos da Linguagem ::: Variáveis e Constantes |
Curso Completo de Java - Como usar constantes em JavaQuantidade de visualizações: 15580 vezes |
O valor de uma variável pode ser alterado durante a execução do programa. Mas, o valor de uma constante não é alterado jamais. Escritas sempre com letras maiúsculas, as constantes trazem algumas vantagens, entre elas o fato de que nomes descritivos para constantes podem tornar o programa mais fácil de ser lido. Além disso, o valor representado pela constante pode ser alterado em apenas um lugar do código fonte. Veja abaixo como declarar e usar uma constante em Java: // Este exemplo mostra como declarar e usar // uma constante em Java public class Estudos{ final static int IDENT_PROGRAMA = 47; public static void main(String args[]){ System.out.println("O valor da constante " + "é " + IDENT_PROGRAMA); System.exit(0); } } Observe que usamos o modificador final para marcar um identificador como constante. Veja agora o que acontece quando tentamos alterar o valor de uma constante em tempo de compilação: // vamos tentar alterar o valor da constante IDENT_PROGRAMA = 29; O compilador emitirá a seguinte mensagem de erro: Estudos.java:9: cannot assign a value to final variable IDENT_PROGRAMA IDENT_PROGRAMA = 29; ^ 1 error |
Nossas 20 dicas & truques de programação mais populares |
Você também poderá gostar das dicas e truques de programação abaixo |
JavaScript - Validação de formulários em JavaScript - Como validar CPF (com pontos e hífen) usando expressões regulares |
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 |