Planilha Web - Planilhas e Calculadoras online para estudantes e profissionais de Engenharia Civil, Engenharia Elétrica e Engenharia Mecânica.
E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser. Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book Apenas R$ 19,90
Java ::: Fundamentos da Linguagem ::: Tipos de Dados

Como usar null em Java

Quantidade de visualizações: 32046 vezes
O tipo de dados null é um tipo (ou valor) especial que indica que uma referência não está apontando para nenhum objeto, ou seja, aponta para uma posição de memória nula. Este tipo pode ser atribuído (ou testado) apenas a referências. Seu uso não é permitido com primitivos.

Veja um trecho de código no qual definimos que uma variável do tipo String aponta para um objeto nulo:

public class Estudos{
  public static void main(String args[]){
    String nome = null;  

    System.out.println(nome.length());    

    System.exit(0);
  }
}

Este código compila normalmente. Porém, ao tentarmos executá-lo, temos uma exceção de tempo de execução NullPointerException:

Exception in thread "main" 
java.lang.NullPointerException
  at Estudos.main(Estudos.java:5)


Isso aconteceu porque estamos tentando executar um método de um objeto que não existe.

Uma técnica muito valiosa é testar se uma referência não está apontando para um objeto nulo. Veja como isso é feito:

public class Estudos{
  public static void main(String args[]){
    String nome = null;  

    if(nome != null)
      System.out.println(nome.length());    
    else
      System.out.println("Objeto é nulo.");      

    System.exit(0);
  }
}

Tenha em mente que, quando uma referência recebe o valor null, o objeto para o qual ela apontava fica imediatamente disponível para o coletor de lixo (Garbagge Colector), ou seja, a memória ocupada pelo objeto pode ser liberada a qualquer momento.

Veja agora o que acontece quando tentamos atribuir o valor null a um primitivo:

public class Estudos{
  public static void main(String args[]){
    int valor = null;     

    System.exit(0);
  }
}

Eis a mensagem de erro de compilação:

Estudos.java:3: incompatible types
found   : <nulltype>
required: int
 int valor = null;
             ^
1 error



Java ::: Dicas & Truques ::: Programação Orientada a Objetos

Como usar construtores em suas classes Java - Programação orientada a objetos em Java - Métodos construtores - Revisado

Quantidade de visualizações: 20002 vezes
Muitas vezes precisamos inicializar propriedades de um objeto de uma classe Java no momento em que este é criado. Para isso podemos usar um método construtor. Um método construtor, que em Java é definido por um método com o mesmo nome da classe, é chamado no exato momento em que efetuamos uma chamada a new.

Veja um exemplo no qual exibimos uma mensagem alertando que um objeto de uma classe acaba de ser criado:

class Pessoa{ 
  public Pessoa(){
    System.out.println("Fui criado.");
  }
}
 
public class Estudos{ 
  public static void main(String args[]){ 
    // cria um objeto da classe Pessoa
    Pessoa p = new Pessoa();
  } 
}

Execute este código e veja o resultado. Note que um construtor deve, exceto em raríssimas ocasiões, ser marcado com o modificador public. Além disso, um construtor não possui retorno e só se torna realmente útil quando o usamos para inicializar as propriedades do objeto recém-criado. Veja:

class Pessoa{ 
  public String nome;
 
  public Pessoa(String nome){
    this.nome = nome;
  }
}
 
public class Estudos{ 
  public static void main(String args[]){ 
    // cria um objeto da classe Pessoa
    Pessoa p = new Pessoa("Osmar J. Silva");
    System.out.println(p.nome);
  } 
}

Aqui nós fornecemos o valor para a propriedade nome na mesma instrução que cria a instância da classe.

Quando não definimos um método construtor, o compilador Java o faz nos bastidores. Mas isso só ocorre quando não definimos o nosso próprio método construtor, seja ele com ou sem parâmetros.


GNU Octave ::: Dicas & Truques ::: Trigonometria - Funções Trigonométricas

Como converter graus em radianos usando a função deg2rad() do GNU Octave - GNU Octave para Geometria Analítica e Álgebra Linear

Quantidade de visualizações: 1875 vezes
Quer aprender como calcular radianos ou como converter graus em radianos? Veja a fórmula nessa dica.

Quando estamos trabalhando com trigonometria no software GNU Octave, é importante ficarmos atentos ao fato de que todos os métodos e funções trigonométricas nessa linguagem recebem seus argumentos em radianos, em vez de graus.

Nesta dica veremos como converter graus em radianos (sem a chatice de ficar relembrando regra de três). Veja a fórmula abaixo:

\[Radianos = Graus \times \frac{\pi}{180}\]

Agora veja como esta fórmula pode ser escrita no GNU Octave. Primeiro vamos usar a fórmula dada e depois veremos a função deg2rad(). Assim, digite a expressão a seguir na janela de comandos do GNU Octave:

>> 30 * (pi / 180) [Enter]
ans = 0.5236
>>

Agora veja como podemos obter o mesmo resultado usando a função deg2rad():

>> deg2rad(30) [Enter]
ans = 0.5236
>>

Finalmente, veja como usar esta função em um script do GNU Octave:

graus = input("Informe o ângulo em graus: ");
radianos = deg2rad(graus);
fprintf("O ângulo em radianos é %f\n", radianos);

Execute este script e teremos o seguinte resultado na janela de comandos:

Informe o ângulo em graus: 30 [Enter]
O ângulo em radianos é 0.523599
>>


Python ::: Desafios e Lista de Exercícios Resolvidos ::: Recursão (Recursividade)

Exercício Resolvido de Python - Um método recursivo que conta de 0 até 10

Quantidade de visualizações: 1348 vezes
Exercícios Resolvidos de Python - Um método recursivo que conta de 0 até 10

Pergunta/Tarefa:

Escreva um método recursivo que conta e exibe os valores de 0 até 10. Seu método deverá possuir a seguinte assinatura:

def contar_recursivamente(n):
  # sua implementação aqui
Veja que o método deverá receber o valor 0 e efetuar novas chamadas a si mesmo até que os valores de 0 a 10 sejam exibidos. O ponto de parada da recursividade é a exibição do valor 10.

Sua saída deverá ser parecida com:

0  1  2  3  4  5  6  7  8  9  10
Resposta/Solução:

Veja a resolução comentada deste exercício usando Python:

# método recursivo que conta de 0 até 10
def contar_recursivamente(n):
  # vamos exibir o número atual
  print(n, " ", end =" ")
    
  # devemos prosseguir com a recursividade?
  if n < 10:
    # incrementa o valor de n
    n = n + 1  
    contar_recursivamente(n) # e faz uma nova chamada recursiva

# método principal
def main():
  # efetua uma chamada ao método recursivo fornecendo o primeiro valor
  contar_recursivamente(0)
  
if __name__== "__main__":
  main()



Python ::: cmath Python Module (Módulo Python cmath para números complexos) ::: Números Complexos (Complex Numbers)

Como converter um número complexo na forma retangular para a forma polar usando Python

Quantidade de visualizações: 2459 vezes
Quando estamos efetuando cálculos envolvendo números complexos, é comum precisarmos converter da forma retangular para a forma polar, e vice-versa.

Um número complexo na forma retangular apresenta o seguinte formato:

7 + j5


onde 7 é a parte real e 5 é a parte imaginária. Note que usei a notação "j" em vez de "i" para a parte imaginária, uma vez que a notação "j" é a mais comum na engenharia.

O número complexo na forma polar, por sua vez, é composto pelo raio e pela fase (phase), que é o ângulo theta (ângulo da inclinação da hipotenusa em relação ao cateto adjascente).

O raio, representado por r, é o módulo do vetor cujas coordenadas são formadas pela parte real e a parte imaginária do número complexo. A parte real se encontra no eixo das abcissas (x) e a parte imaginária fica no eixo das ordenadas (y).

Veja agora o código Python completo que lê a parte real e a parte imaginária de um número complexo e o exibe na forma polar:

# vamos importar o módulo de matemática de números complexos
import cmath

# método principal
def main():
  # vamos ler a parte real e a parte imaginária do
  # número complexo
  real = float(input("Parte real do número complexo: "))
  imaginaria = float(input("Parte imaginária do número complexo: "))

  # constrói o número complexo
  z = complex(real, imaginaria)

  # mostra o valor absoluto na forma polar
  print ("Valor absoluto (raio ou módulo): ", abs(z))
  # mostra a fase do número complexto na forma polar
  print("Fase em radianos: ", cmath.phase(z))
  print("Fase em graus: ", cmath.phase(z) * (180 / cmath.pi))
  
if __name__== "__main__":
  main()

Ao executar este código Python nós teremos o seguinte resultado:

Parte real do número complexo: 3
Parte imaginária do número complexo: -4
Valor absoluto (raio ou módulo): 5.0
Fase em radianos: -0.9272952180016122
Fase em graus: -53.13010235415598


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Estruturas de Dados - Árvores Binárias e Árvores Binárias de Busca

Exercícios Resolvidos de Java - Travessia de uma árvore binária de busca usando o percurso em-ordem (in-order, In-ordem ou ordem simétrica)

Quantidade de visualizações: 2834 vezes
Pergunta/Tarefa:

O percurso em ordem (em-ordem, in-order, In-ordem ou ordem simétrica) é 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 uma função recursiva.

Escreva um programa Java que contenha uma árvore binária de busca cujos nós guardarão, além das referências para o filho esquerdo e o filho direito, apenas um valor inteiro. Forneça uma função inserir() que permitirá inserir os valores na árvore. Em seguida forneça uma função recursiva que permitirá fazer a travessia in-order da árvore.

Sua saída deverá ser parecida com:

Informe um valor inteiro: 7
Informe um valor inteiro: 3
Informe um valor inteiro: 18
Informe um valor inteiro: 4
Informe um valor inteiro: 9

Percurso em ordem:
3 4 7 9 18
Resposta/Solução:

Veja a resolução comentada deste exercício usando Java:

Código para NoArvore.java:

package estudos;

public class NoArvore {
  int valor; // valor armazenado no nó
  NoArvore esquerdo; // filho esquerdo
  NoArvore direito; // filho direito

  // construtor do nó
  public NoArvore(int valor){
    this.valor = valor;
  }
}

Código para ArvoreBinariaBusca.java:

package estudos;

public class ArvoreBinariaBusca {
  private NoArvore 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 NoArvore(valor); // cria um novo nó
    }
    else{
      // localiza o nó pai
      NoArvore pai = null;
      NoArvore noAtual = raiz; // começa a busca pela raiz
 
      // enquanto o nó atual for diferente de null
      while(noAtual != null){
        if(valor < noAtual.valor) {
          pai = noAtual;
          noAtual = noAtual.esquerdo;
        }
        else if(valor > noAtual.valor){
          pai = noAtual;
          noAtual = noAtual.direito;
        }
        else{
          return false; // um nó com este valor foi encontrado
        }
      }
       
      // cria o novo nó e o adiciona ao nó pai
      if(valor < pai.valor){
         pai.esquerdo = new NoArvore(valor);
      }
      else{
        pai.direito = new NoArvore(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(NoArvore raiz){
    if(raiz == null){ // condição de parada
      return;
    }
    
    // visita a sub-árvore da esquerda
    emOrdem(raiz.esquerdo);
    // visita o nó atual
    System.out.print(raiz.valor + " ");
    // visita a sub-árvore da direita
    emOrdem(raiz.direito);
  }
}

E aqui está o código para a classe que permite testar a árvore:

package estudos;

import java.util.Scanner;

public class Estudos {
  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("Erro. Um elemento já contém este valor.");  
      }
    }
    
    // vamos exibir os nós da árvore usando o percurso em ordem
    System.out.println("\nPercurso em ordem:");
    arvore.emOrdem();
    
    System.out.println("\n");
  }
}



GoLang ::: Fundamentos da Linguagem ::: Variáveis e Constantes

Como declarar variáveis em Go usando var e sem definir o tipo da variável

Quantidade de visualizações: 502 vezes
Em algumas situações nós queremos declarar variáveis na linguagem Go mas não queremos definir de antemão o tipo, ou seja, se ela será do tipo int, float, boolean, string, etc. Essa situação é muito comum quando a variável receberá o retorno de uma função.

Quando não definimos o tipo da variável, a própria linguagem se encarrega de fazer isso para nós, por meio da inferência de tipos. Assim, dependendo do valor que a variável recebe, o seu tipo será definido automaticamente.

Veja um exemplo:

// pacote principal
package main

// vamos importar os módulos necessários
import (
  "fmt"
)
  
// esta é a função principal do programa
func main() {
  // vamos declarar uma variável do tipo real
  // Como não definimos o tipo, ele será
  // automaticamente float64
  var salario = 1250.94
  
  // vamos mostrar o tipo da variável
  fmt.Printf("O tipo da variável é: %T", salario)
}

Ao executarmos este código Golang nós teremos o seguinte resultado:

O tipo da variável é: float64


C# ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como retornar a quantidade de dimensões de uma matriz em C# usando a propriedade Rank

Quantidade de visualizações: 8254 vezes
A propriedade Rank de um array do C# pode ser usada para obtermos a quantidade de dimensões de uma matriz (unidimensional, bidimensional, tridimensional, etc). Esta propriedade retorna um inteiro contendo a quantidade de dimensões.

Veja o código para o exemplo:

using System;

namespace Estudos {
  class Program {
    static void Main(string[] args) {
      // cria uma matriz de duas dimensões: quatro linhas
      // e duas colunas
      int[,] matriz = new int[4, 2];

      // obtém a quantidade de dimensões
      int dimen = matriz.Rank;
      Console.WriteLine("Este array possui " + dimen + " dimensões.");

      Console.WriteLine("\n\nPressione uma tecla para sair...");
      Console.ReadKey();
    }
  }
}

Ao executar este código C# nós teremos o seguinte resultado:

Este array possui 2 dimensões.


C# ::: Dicas & Truques ::: Programação Orientada a Objetos

Como criar sua primeira classe em C# - Programação Orientada a Objetos em C#

Quantidade de visualizações: 34891 vezes
O estudo da programação orientada a objeto em C# passa obrigatoriamente pela criação de sua primeira classe. E esta não é uma tarefa fácil para os iniciantes. Esta dica o guiará passo-a-passo pelas caminhos iniciais.

Esta dica assume que você já sabe criar uma aplicação console ou Windows Forms no Visual C# 2005 ou 2008. Sendo assim, crie uma nova aplicação console e vamos criar o esqueleto da classe. Em Visual C# 2005 ou 2008, a forma mais comum de adicionar uma classe ao seu projeto é clicando com o botão direito no namespace do projeto (o primeiro filho do solution explorer) e escolhendo a opção Add -> Class. Em seguida dê o nome "Pessoa.cs" para a classe e clique o botão Add. Imediatamente o código inicial para a classe será exibido, contendo o namespace e alguns using padrões. Agora faça sua classe Pessoa parecida com o código abaixo (não altere nada em relação ao namespace):

class Pessoa{
  // varíáveis privadas para o nome
  // e idade da pessoa
  private string nome;
  private int idade;

  // método que permite definir o nome
  // da pessoa
  public void setNome(string nome){
    this.nome = nome;
  }

  // método que permite definir a idade
  // da pessoa
  public void setIdade(int idade){
    this.idade = idade;
  }

  // método que permite obter o nome
  // da pessoa
  public string getNome(){
    return this.nome;
  }

  // método que permite obter a idade
  // da pessoa
  public int getIdade(){
    return this.idade;
  }
}

Hora de testar a classe. Volte à classe principal da aplicação (aquela que contém o método Main) e faça as seguintes alterações:

static void Main(string[] args){
  // Cria uma instância da classe Pessoa
  Pessoa p = new Pessoa();

  // Define um nome e idade para a pessoa
  p.setNome("Osmar J. Silva");
  p.setIdade(37);

  // Obtém o nome e idade da pessoa
  string nome = p.getNome();
  int idade = p.getIdade();
  Console.WriteLine("Nome: " + nome + " - Idade: " +
    idade);

  Console.WriteLine("\n\nPressione uma tecla para sair...");
  Console.ReadKey();
}

Funcionou? Agora tente refazer todo o processo, desta vez usando Windows Forms.


Java ::: Java + MySQL ::: Metadados da Base de Dados (Database Metadata)

Java MySQL - Como obter uma lista das funções numéricas (matemática) suportadas pelo MySQL usando o método getNumericFunctions() da interface DatabaseMetaData

Quantidade de visualizações: 5701 vezes
Em algumas situações gostaríamos de, via código, obter uma lista das funções numéricas, ou seja, funções matemáticas, suportadas pelo MS SQL Server. Para isso podemos usar o método getNumericFunctions() da interface DatabaseMetaData. É importante observar que, no Sun Microsystem's JDBC Driver for MySQL, a interface DatabaseMetaData é implementada por uma classe do mesmo nome, no pacote com.mysql.jdbc.DatabaseMetaData. E esta classe implementa o método getNumericFunctions() de forma a retornar a lista de funções numéricas separadas por vírgulas.

Veja um trecho de código Java no qual listamos todas as funções numéricas suportados no MySQL 5.0:

package estudosbancodados;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.SQLException;

public class EstudosBancoDados{
  public static void main(String[] args) {
    // strings de conexão
    String databaseURL = "jdbc:mysql://localhost/estudos";
    String usuario = "root";
    String senha = "osmar1234";
    String driverName = "com.mysql.jdbc.Driver";

    try {
      Class.forName(driverName).newInstance();
      Connection conn = DriverManager.getConnection(databaseURL, usuario, senha);

      // vamos obter um objeto da classe com.mysql.jdbc.DatabaseMetaData
      DatabaseMetaData dbmd = conn.getMetaData();

      // vamos obter a lista de funções numéricas disponíveis
      // nesta versão do MySQL
      String funcoesNumericas = dbmd.getNumericFunctions();

      // como a lista de funções está separada por vírgulas, vamos obter
      // uma matriz de strings
      String funcoes[] = funcoesNumericas.split(",");

      // vamos mostrar o resultado
      for(int i = 0; i < funcoes.length; i++){
        System.out.println(funcoes[i]);
      }
    }
    catch (SQLException ex) {
      System.out.println("SQLException: " + ex.getMessage());
      System.out.println("SQLState: " + ex.getSQLState());
      System.out.println("VendorError: " + ex.getErrorCode());
    }
    catch (Exception e) {
      System.out.println("Problemas ao tentar conectar com o banco de dados: " + e);
    }
  }
}

Ao executarmos este código teremos o seguite resultado:

ABS
ACOS
ASIN
ATAN
ATAN2
BIT_COUNT
CEILING
COS
COT
DEGREES
EXP
FLOOR
LOG
LOG10
MAX
MIN
MOD
PI
POW
POWER
RADIANS
RAND
ROUND
SIN
SQRT
TAN
TRUNCATE

Carregar Publicações Anteriores


Nossas 20 dicas & truques de programação mais populares

Você também poderá gostar das dicas e truques de programação abaixo

Nossas 20 dicas & truques de programação mais recentes

Últimos Projetos e Códigos Fonte Liberados Para Apoiadores do Site

Últimos Exercícios Resolvidos

E-Books em PDF

E-Book 350 Exercícios Resolvidos de Java - PDF com 500 páginas
Domine lógica de programação e a linguagem Java com o nosso E-Book 350 Exercícios Exercícios de Java, para você estudar onde e quando quiser.

Este e-book contém exercícios resolvidos abrangendo os tópicos: Java básico, matemática e estatística, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book
E-Book 650 Dicas, Truques e Exercícios Resolvidos de Python - PDF com 1.200 páginas
Domine lógica de programação e a linguagem Python com o nosso E-Book 650 Dicas, Truques e Exercícios Exercícios de Python, para você estudar onde e quando quiser.

Este e-book contém dicas, truques e exercícios resolvidos abrangendo os tópicos: Python básico, matemática e estatística, banco de dados, programação dinâmica, strings e caracteres, entrada e saída, estruturas condicionais, vetores e matrizes, funções, laços, recursividade, internet, arquivos e diretórios, programação orientada a objetos e muito mais.
Ver Conteúdo do E-book

Linguagens Mais Populares

1º lugar: Java
2º lugar: Python
3º lugar: C#
4º lugar: PHP
5º lugar: C
6º lugar: Delphi
7º lugar: JavaScript
8º lugar: C++
9º lugar: VB.NET
10º lugar: Ruby



© 2025 Arquivo de Códigos - Todos os direitos reservados
Neste momento há 12 usuários muito felizes estudando em nosso site.