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 ::: Desafios e Lista de Exercícios Resolvidos ::: Java Básico

Exercícios Resolvidos de Java - Escrever um algoritmo que lê o público total de um jogo de futebol e fornece a renda do jogo

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

Em um determinado jogo de futebol havia 4 tipos de ingressos, assim distribuídos: popular 10%
a R$ 1,00; geral 50% a R$ 5,00; arquibancada 30% a R$ 10,00 e cadeiras 10% a R$ 20,00. Escreva um programa (algoritmo) Java que leia o público total do jogo e forneça a renda obtida.

Um outro enunciado muito comum deste exercício é: Escrever um algoritmo que lê o público total de futebol e fornecer a renda do jogo, sabendo-se que havia 4 tipos de ingressos assim distribuídos: popular 10% a R$ 1,00, geral 50% a R$ 5,00, arquibancada 30% a R$10,00 e cadeiras 10% a R$ 20,00.

Sua saída deverá ser parecida com:

Informe o público total do jogo de futebol: 10000
Renda geral do jogo: R$ 76.000,00
Resposta/Solução:

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

package estudos;

import java.text.NumberFormat;
import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    // vamos fazer a leitura usando a classe Scanner
    Scanner entrada = new Scanner(System.in);
    
    // vamos obter o público total do jogo de futebol
    System.out.print("Informe o público total do jogo de futebol: ");
    int publico = Integer.parseInt(entrada.nextLine());
    
    // renda do ingresso popular
    double popular = (publico * (10.0 / 100)) * 1.00;
    // renda do ingresso geral
    double geral = (publico * (50.0 / 100)) * 5.00;
    // renda do ingresso arquibancada
    double arquibancada = (publico * (30.0 / 100)) * 10.00;
    // renda do ingresso cadeiras
    double cadeiras = (publico * (10.0 / 100)) * 20.00;
    
    // obtemos a renda total
    double renda_total = popular + geral + arquibancada + cadeiras;
    
    // e exibimos o resultado
    NumberFormat formato = NumberFormat.getCurrencyInstance();
    System.out.println("Renda geral do jogo: " + formato.format(renda_total));
  }
}



Java ::: Desafios e Lista de Exercícios Resolvidos ::: Exceções e Tratamentos de Erros

Exercício Resolvido de Java - Como forçar o usuário a informar dois inteiros válidos antes de efetuar sua soma - Exceções e Tratamentos de Erros em Java

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

Escreva um programa Java que usa tratamento de erros try...catch para forçar o usuário a informar dois valores inteiros válidos antes de tentar somá-los. Caso o usuário informe um ou os dois valores inválidos, o programa deverá exibir uma mensagem de erro e solicitar os valores novamente.

Sua saída deverá ser parecida com:

Informe o primeiro valor: M
Dados inválidos: java.lang.NumberFormatException: 
For input string: "M"
Por favor, informe os dois números novamente
Informe o primeiro valor: 7
Informe o segundo valor: %
Dados inválidos: java.lang.NumberFormatException: 
For input string: "%"
Por favor, informe os dois números novamente
Informe o primeiro valor: 5
Informe o segundo valor: 3
A soma dos valores é: 8
Resposta/Solução:

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

package estudos;

import java.util.Scanner;

public class Estudos {
  public static void main(String[] args) {
    Scanner entrada = new Scanner(System.in);  
    
    // para verificar se os valores são inteiros válidos
    boolean validos = false; 
    int n1, n2, soma; 

    // solicita que o usuário informe os dois valores
    while(!validos) {
      try {
        System.out.print("Informe o primeiro valor: ");
        // tenta fazer a conversão
        n1 = Integer.parseInt(entrada.nextLine());
        System.out.print("Informe o segundo valor: ");
        // tenta fazer a conversão
        n2 = Integer.parseInt(entrada.nextLine());
        // se chegou até aqui é porque não houve erros na conversão,
        // ou seja, o usuário informou inteiros válidos
        soma = n1 + n2;
        System.out.println("A soma dos valores é: " + soma);
        validos = true;
      }
      catch (Exception ex) { // houve erro na conversão?
        System.out.println("Dados inválidos: " + ex.toString());
        System.out.println("Por favor, informe os dois números novamente");
      }
    }
  }
}



C ::: Dicas & Truques ::: Ponteiros, Referências e Memória

Como alocar memória dinâmica usando a função calloc() da linguagem C

Quantidade de visualizações: 18827 vezes
A função calloc() é bem parecida com a função malloc() e também é usada em C para alocarmos um bloco de memória. A diferença é que calloc() recebe a quantidade de elementos e o número de bytes do elemento e retorna um ponteiro do tipo void (genérico) para o início do bloco de memória obtido. Veja sua assinatura:

void *calloc(size_t n, size_t size);


Se a memória não puder se alocada, um ponteiro nulo (NULL) será retornado.

É importante se lembrar de alguns conceitos antes de usar esta função. Suponhamos que você queira alocar memória para um único inteiro. Você poderia ter algo assim:

// aloca memória para um int
ponteiro = calloc(1, 4);


Embora este código esteja correto, não é um boa idéia assumir que um inteiro terá sempre 4 bytes. Desta forma, é melhor usar o operador sizeof() para obter a quantidade de bytes em um inteiro em uma determinada arquitetura. Veja:

// aloca memória para um int
ponteiro = calloc(1, sizeof(int));

Eis o código completo para um aplicativo C que mostra como alocar memória para um inteiro e depois atribuir e obter o valor armazenado no bloco de memória alocado:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  // ponteiro para uma variável do tipo inteiro
  int *ponteiro;

  // aloca memória para um int
  ponteiro = calloc(1, sizeof(int));

  // testa se a memória foi alocada com sucesso
  if(ponteiro)
    printf("Memoria alocada com sucesso.\n");
  else
    printf("Nao foi possivel alocar a memoria.\n");

  // atribui valor à memória alocada
  *ponteiro = 45;

  // obtém o valor atribuído
  printf("Valor: %d\n\n", *ponteiro);

  // libera a memória
  free(ponteiro);

  system("PAUSE");
  return 0;
}

Uma aplicação interessante da função calloc() é quando precisamos construir uma matriz dinâmica. Veja como isso é feito no código abaixo:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int i;

  // quantidade de elementos na matriz
  int quant = 10;

  // ponteiro para o bloco de memória
  int *ponteiro;

  // aloca memória para uma matriz de inteiros
  ponteiro = calloc(quant, sizeof(int));

  // testa se a memória foi alocada com sucesso
  if(ponteiro)
    printf("Memoria alocada com sucesso.\n");
  else{
    printf("Nao foi possivel alocar a memoria.\n");
    exit(1);
  }

  // atribui valores aos elementos do array
  for(i = 0; i < quant; i++){
    ponteiro[i] = i * 2;
  }

  // exibe os valores
  for(i = 0; i < quant; i++){
    printf("%d  ", ponteiro[i]);
  }

  // libera a memória
  free(ponteiro);

  printf("\n\n");
  system("PAUSE");
  return 0;
}



Node.js ::: Dicas de Estudo e Anotações ::: Passos Iniciais

Saiba o que é o Node.js e como baixar, instalar e testar seu funcionamento no Windows

Quantidade de visualizações: 1736 vezes
O que é o Node.js

Então todos os seus amigos estão comentando sobre Node.js e você não tem a mínima idéia do que se trata? Neste pequeno tutorial falaremos um pouco sobre essa ferramenta, faremos o download do instalador no Windows 10 (deve funcionar em outras versões também) e no final testaremos a instalação para termos certeza de que já estaremos prontos para desenvolver algumas idéias.

O Node.js é uma plataforma server-side, ou seja, que executa do lado do servidor web e escrito a partir do Google Chrome's JavaScript Engine (V8 Engine), o motor de interpretação e/ou compilação de códigos JavaScript do navegador Google Chrome. Esta ferramenta foi desenvolvida por Ryan Dahl e desde então tem sido adotada em vários projetos web e sofre melhorias a cada versão.

O objetivo principal do Node.js é facilitar o desenvolvimento de aplicações web que sejam mais rápidas e de fácil escalabilidade. Este web server (sim, o Node.js é um servidor web tal como o Apache Web Server, Tomcat, etc) usa um modelo direcionado a eventos (event-driven) e sem bloqueio de I/O, o que o torno leve e muito eficiente, perfeito para aplicações de tempo real e acesso intensivo a dados e que possam ser executadas em ambientes distribuidos.

O Node.js é uma plataforma open source e cross-platform, ou seja, permite que nossos códigos rodem em diferentes sistemas operacionais com poucas ou nenhuma alteração. Além disso, aplicações Node.js são escritas em JavaScript e são executadas dentro do runtime do próprio Node.js. Para completar, esta ferramenta nos fornece uma extensa biblioteca de módulos JavaScript, o que simplifica ainda mais o desenvolvimento de aplicações web.

Baixando e instalando o Node.js

Para fazer o download do Node.js, direcione o seu navegador para a URL https://nodejs.org/en/download. Você encontrará os binários e instaladores para Windows, MacOS e Linux. Para este tutorial eu baixei o instalador para o Windows 64-bit Windows Installer (.msi), node-v12.16.3-x64.msi, com o tamanho de 18,8Mb.

Execute o instalador e siga o passo-a-passo da instalação. Um detalhe importante é informar, para a instalação, um diretório que não contenha espaços. Veja:



Depois de escolhido o local de instalação, continue e logo você verá a seguinte tela:



Aqui o instalador nos informa que alguns módulos rpm precisam ser compilados com C/C++ antes de serem instalados. Se você quiser instalar tais módulos, algumas ferramentas tais como Python e o Visual Studio Build Tools deverão ser baixadas. Mas se você não quiser, não precisa se preocupar com isso agora. Apenas clique o botão Next e finalize a instalação.

Testando a sua instalação do Node.js

Finalizada a instalação, chegou a hora de fazermos o teste. Abra um janela de comando (cmd) e digite:

node -v

Opcionalmente você pode digitar --version em vez de -v. O resultado será a versão do Node.js que você acaba de instalar.

Para concluir, vamos testar a interface de linha de comando do Node. Abra de novo a janela de terminal do Windows e digite apenas:

node

Agora você verá o sinal ">" aguardando os seus comandos. Digite algo como:

console.log('Que beleza. O Node.js está pronto!');

Pressione a tecla Enter e o Node.js exibirá o conteúdo digitado. Para sair do comando de linha do Node e voltar para o terminal do Windows, basta pressionar Ctrl+D.

Pronto! Agora você já pode ver nossas dicas de Node.js e dar continuidade aos seus estudos.


MySQL ::: Dicas & Truques ::: Tipos de Dados

Como usar o tipo de dados TINYINT do MySQL

Quantidade de visualizações: 21178 vezes
O tipo de dados TINYINT do MySQL é usado quando precisamos armazenar valores inteiros que se encaixem na faixa de -128 a 127. Este tipo ocupa 1 byte de espaço (8 bits).

Veja um trecho de código no qual criamos uma tabela MySQL chamada produtos contendo três campos:

CREATE TABLE produtos(
  id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  categoria TINYINT UNSIGNED NOT NULL,
  nome` VARCHAR(45) NOT NULL,
  PRIMARY KEY(id)
)
ENGINE = InnoDB;


Aqui nós usamos o tipo TINYINT para a categoria do produto. Isso quer dizer que poderemos ter no máximo 127 categorias diferentes no sistema. Mas, note o uso do modificador UNSIGNED após o nome do tipo de dados. Este modificador faz com que o valor seja somente positivo, o que altera a faixa de valores positivos para 0 até 255. Valores negativos não serão permitidos.

Veja agora uma instrução SQL INSERT que insere um novo produto na tabela recém-criada:

INSERT INTO produtos VALUES(null, 23, 'CAMISETA REGATA AX');

Se o valor fornecido para a categoria estiver fora da faixa permitida para um TINYINT você verá a seguinte mensagem de erro:

Out of range value adjusted for column 'categoria' at row 1 (Erro: 1264)

Vamos verificar o comportamento deste tipo de dados em uma função MySQL? Veja o código que cria uma função somar():

DELIMITER $$

DROP FUNCTION IF EXISTS somar $$
CREATE FUNCTION somar(a TINYINT, b TINYINT) RETURNS TINYINT
BEGIN
  RETURN a + b;
END $$

DELIMITER ;

Veja que os parâmetros e o retorno da função são do tipo TINYINT. Eis uma demonstração de como chamá-la:

SELECT somar(4, 3) AS soma;

Experimente fornecer valores que, quando somados, excedam a capacidade de um TINYINT e observe o comportamento da função.

Para finalizar, note que é comum informarmos o tipo TINYINT com um valor inteiro em parênteses, por exemplo, TINYINT(2). Este número nos parênteses não interfere em nada nos valores a serem armazenados. Ele é usado para controlar a largura do campo na exibição do valor nos resultados de uma query SELECT ou como um lembrete da quantidade de dígitos a serem usados no campo.


Ruby ::: Dicas & Truques ::: Arrays e Matrix (Vetores e Matrizes)

Como retornar o tamanho de um array em Ruby usando o método length da classe Array

Quantidade de visualizações: 7316 vezes
Em algumas situações nós precisamos saber a quantidade de elementos em um array da linguagem Ruby. Para isso nós podemos usar a função length da classe Array. Este método retorna um valor inteiro representando a quantidade de elementos no vetor.

O trecho de código abaixo mostra como obter a quantidade de elementos em um array em Ruby:

# vamos declarar um vetor contendo 5 inteiros
valores = [3, 6, 8, 2, 3]

# Obtém a quantidade de elementos
quant = valores.length

puts "O array contém #{quant} elementos"

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

O array contém 5 elementos


C# ::: Threads ::: Thread

Como usar a classe Thread para criar threads em seus programas C#

Quantidade de visualizações: 11905 vezes
A classe Thread permite criar e controlar uma thread, além de definir sua prioridade e obter seu status. Veja a posição desta classe na hierarquia de classes da plataforma .NET:

System.Object
  System.Runtime.ConstrainedExecution.CriticalFinalizerObject
    System.Threading.Thread


Um processo pode criar uma ou mais threads para executar parte do código do programa associado a tal processo. Usamos um delegate ThreadStart ou um delegate ParameterizedThreadStart para especificar o código do programa que será executado pela thread. O delegate ParameterizedThreadStart nos permite passar dados para as funções a serem executadas pela thread.

Durante seu ciclo de vida, uma thread está sempre em um ou mais dos estados definidos pela enumeração ThreadState. Um nível de prioridade de agendamento, como definido na enumeração ThreadPriority, pode ser requisitado para a thread, mas, este comportamento nem sempre é garantido pelo sistema operacional.

O método GetHashCode() fornece identificação para threads gerenciadas. Durante o ciclo de vida de uma thread, seu código de identificação não colidirá com os códigos das demais threads, independente do domínio da aplicação a partir do qual obtemos tal valor.

Veja um trecho de código no qual criamos uma thread e a agendamos para execução paralela com a thread principal da aplicação. Note como os valores dos dois laços são exibidos de forma compartilhada pelas duas threads, ou seja, um thread exibe alguns valores e pára, para permitir que a outra faça parte do seu trabalho:

class Program{
  static void Main(string[] args){
    // using using System.Threading;

    // vamos criar uma nova instância da clase Thread
    // e fornecer o método que será executado
    Thread thread = new Thread(contar);
     
    // vamos agendar a thread para futura execução
    thread.Start();

    // agora vamos contar na thread principal
    for (int i = 0; i <= 20; i++){
      Console.Write("#" + Thread.CurrentThread.GetHashCode() 
        + ": " + i + ", ");
    }

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

  // método que será chamado pela thread
  static void contar(){
    for (int i = 0; i <= 20; i++){
      Console.Write("#" + Thread.CurrentThread.GetHashCode() 
        + ": " + i + ", ");
    }
  }
}

Aqui eu usei a sintáxe de criação de objetos da classe Thread que cria uma instância de ThreadStart nos bastidores, ou seja, forneci apenas o método a ser executado pela nova thread. Note também que uma chamada ao método Start() da thread não faz com que a thread seja executada imediatamente. Este método apenas torna a thread elegível para execução, ou seja, no estado "pronta" (Running). É o sistema operacional que determina quando a mesma será executada.


JavaScript ::: Dicas & Truques ::: Strings e Caracteres

Como retornar o caractere associado a um código ASCII ou Unicode em JavaScript usando a função fromCharCode() do objeto String

Quantidade de visualizações: 261 vezes
Nesta dica mostrarei como podemos retornar o caractere a partir de seu código ASCII ou Unicode em JavaScript. Para isso nós vamos usar a função fromCharCode() do objeto String.

Veja a página HTML completa para o exemplo:

<!doctype html>
<html>
<head>
  <title>Strings em JavaScript</title>
</head>
<body>

<script type="text/javascript">
  var codigo = 102;
  document.write("O caractere para o código " 
    + codigo + " é: " + String.fromCharCode(codigo));  
</script>
  
</body>
</html>

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

O caractere para o código 102 é: f


Java ::: Desafios e Lista de Exercícios Resolvidos ::: Arquivos e Diretórios

Exercícios Resolvidos de Java - Um programa que recebe um caminho e nome de um arquivo e retorna apenas o caminho, sem o nome e extensão do arquivo

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

Escreva um método Java que recebe um caminho e nome de arquivo na forma:

"C:\temporario\Java\dica.txt"

e retorne apenas o caminho do arquivo, sem o nome e extensão do arquivo. Assim, para o caminho acima, o retorno deve ser apenas:

"C:\temporario\Java"

Eis a assinatura do método a ser criado:

public static String getCaminho(String caminho);
Dica: Escreva este método de forma que o mesmo funcione tanto no Windows como no Linux, ou seja, use File.separatorChar para obter o separador de diretórios na máquina na qual o código está sendo executado.

Resposta/Solução:

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

package estudos;

import java.io.File;

public class Main {
  public static void main(String[] args) {
    // define um caminho e nome de arquivo
    String caminho = "C:\\temporario\\Java\\dica.txt";

    // vamos retornar apenas o caminho do arquivo, ou seja, retirar o
    // nome do arquivo
    String caminhoFinal = getCaminho(caminho);

    // vamos mostrar o resultado
    System.out.println("O caminho do arquivo é: " + caminhoFinal);
  }

  public static String getCaminho(String caminho){
    // vamos obter o índice da última ocorrência do separador de caminho
    int pos = caminho.lastIndexOf(File.separatorChar);
    if (pos > -1) {
       return caminho.substring(0, pos);
    }

    // por padrão vamos retornar uma string vazia
    return "";
  }
}

Uma variação deste exercício é a criação de um método que recebe o caminho e nome do arquivo e retorne apenas o nome do arquivo, seguido por sua extensão.


C# ::: Namespace System.Drawing ::: Graphics

Como desenhar texto usando o método DrawString() da classe Graphics do C#

Quantidade de visualizações: 6041 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));


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á 37 usuários muito felizes estudando em nosso site.