Exercícios

To criando este tópico para que todos nos possamos postar nossos exercícios, com ou sem resposta, e com isso ajudarmos a quem esta começando .Vamos postando td qnt é tipo de exercícios , quem puder ajudar , ajude.
Abrços.

Me parece que aqui não da pra anexar um arquivo , então estou a colar a minha primeira contribuição.

O objetivo deste trabalho é construir um programa para gerenciar as informações sobre os clientes de uma certa empresa. Para cada cliente, devem-se armazenar as seguintes informações:

Código (int)
Nome (String)
RG (String)
CPF (String)
Endereço (String)
Nome do Pai (String)
Nome da Mãe (String)

Os dados sobre cada cliente devem ser armazenados em um arranjo e o programa deve imprimir na tela o menu abaixo fornecendo as seguintes opções ao usuário:

  1. Cadastrar um novo cliente
  2. Consultar os dados de um cliente
  3. Alterar os dados de um cliente
  4. Imprimir lista de clientes
  5. Sair

Escolhida a opção 1 (cadastrar um novo cliente), o programa deve pedir o código do novo cliente e verificar se não irá ocorrer duplicação do código para os clientes já cadastrados, caso o código seja duplicado o sistema deverá solicitar um novo código ao usuário, se o código não for duplicado o usuário deverá fornecer os dados referentes ao cliente com aquele código.
Após o usuário concluir o fornecimento das informações do novo cliente, o programa deve
gravar estas informações na primeira posição disponível no array e voltar ao menu principal.

Na opção 2 (consultar os dados de um cliente), o programa deve pedir ao usuário o número do código do cliente que se deseja consultar e, de posse desse código, o programa deve localizar a posição onde os dados referentes àquele cliente estão armazenados. Obtido estes dados, o programa deve listá-los (na tela do computador) e depois, voltar ao menu principal. É muito importante que o programa não tente acessar os dados de um cliente inexistente, isto é, caso o usuário forneça um código inválido, o programa deve imprimir uma mensagem de erro informando ao usuário que o código fornecida é inválido e depois, deve voltar ao menu principal.

No caso da opção 3 (alterar os dados de um cliente), o programa deve pedir ao usuário o número do código do cliente que ele deseja alterar, deve obter do array os dados daquele cliente e, de modo análogo ao caso anterior, deve imprimí-los na tela. No entanto, neste caso, os membros do registro cliente devem ser numerados para que o usuário possa optar por qual membro de dados ele deseja alterar. Mais precisamente, suponha que o usuário deseja alterar os dados do cliente de código 37025; então o programa deve obter os dados daquele cliente, deve imprimí-los na tela no formato mostrado a seguir e depois, deve pedir o número correspondente ao campo que se deseja alterar. Isto é,

Código : 37025
1 - Nome : Manoel da Silva Oliveira
2 - RG : M 345.678.456 SSP/MG
3 - CPF : 000.533.589-45
4 - Endereço : Rua Sem Saída, s/n
5 ? Nome do Pai : José da Silva
6 ? Nome da Mãe : Maria Teresinha dos Santos

Informe o número do campo a alterar (0 para sair):

Ao digitar um número entre 1 e 6 o programa deve pedir que o usuário forneça os dados correspondentes àquele membro de dados do registro cliente. O programa deve repetir este processo até que o usuário forneça o valor 0; neste caso, antes de voltar ao menu principal, os dados do respectivo cliente devem ser reescritos no array (observe que esses dados devem ser reescritos na sua devida posição no array).

Finalmente, na opção 4, o programa deve listar o código e o nome de todos os clientes já cadastrados.

Alguns exercícios que tinha guardado no meu e-mail do quarto período da faculdade:

1 - Utilize um array unidimensional para resolver o seguinte problema. Leia 20 números, cada um dos quais está entre 10 e 100, inclusives. Enquanto cada número é lido, imprima-o somente se ele não for uma duplicata de um número já lido. Previna-se para o “pior caso” em que todos os 20 números são diferentes. Utilize o menor array possível para resolver esse problema.

2 – Suponha que seja necessária a construção de métodos para cálculo de salário de todos os empregados de uma firma como descrita acima, descontando 15% de imposto. O salário do vendedor será calculado baseado em uma comissão sobre seu salário.
(a) Construa os métodos necessários para as classes em Java.
(b) Construa um programa que possua o método main() que instancie as classes acima e calcule o salário para os três tipos de empregado

3 - Considere a classe formaGeométrica . Construa uma hierarquia classe formaGeométrica seja uma superclasse abstrata contendo métodos para a hierarquia. Derive formaGeométricaBiDimensional e formaGeométricaTriDimensional da classe formaGeométrica - essas classes também devem ser abstratas. Utilize um método abstrato print() para enviar para a saída o tipo e as dimensões de cada classe. Também inclua os métodos área() e volume() a fim de que esses cálculos possam ser realizados com objetos de cada classe concreta na hierarquia. Escreva um programa que testa a hierarquia da classe formaGeométrica

4 - Crie uma classe chamada Racional para realizar aritmética com frações. Utilize variáveis do tipo inteiro para representar as propriedades da classe - o numerador e o denominador. Forneça um método-construtor que permita que um objeto dessa classe seja inicializado quando ele for declarado. Forneça a assinatura para os seguintes métodos : a) Multiplicação de dois números Racional. b) Impressão dos números Racional na forma a/b, onde a é o numerador e b é o denominador

5 - Estruture uma hierarquia de classes chamadas máquinaImagem. Máquinas como máquina fotográfica, filmadora, celular estariam nessa hierarquia. Crie uma interface que possua um método valorBateria(), que mostre como está a bateria. Na classe chamada maquina_fotográfica implemente esse método. Mostre a hierarquia das classes. Escreva também uma classe que instancie uma classe de maquina_fotográfica.

6 - Construa um array de objetos em Java da classe contaCorrente que possua como atributos o nome do correntista e o valor do saldo. Construa as duas classes necessárias e o trecho de código que retorne o valor do saldo médio de um conjunto de correntistas (P.S. Nesta tenho apenas a duvida de como fazer o trecho de código…)

Acomodação ótima de arquivos em disquetes

Uma companhia que vende software precisa acomodar n arquivos, de tamanhos t=(t[1],t[2],…,t[n]), em disquetes de capacidade C, sendo que t[i]<=C, para cada i.

Faça um programa em Java que aloca os arquivos no menor número possível de disquetes.

Exemplo: C=360
arquivo 1 2 3 4 5 6 7 8 9
tamanho 40 80 80 80 100 100 100 240 240
disquete 1 1 2 2 2 2 3 1 3

No caso, são necessários 3 disquetes para acomodar os 9 arquivos, já que eles nao cabem em dois disquetes cuja capacidade é de 720. Note que se os arquivos fossem alocados na ordem que surgem, da esquerda para a direita, haveria necessidade de quatro disquetes.

Uma forma de testar o seu programa, é variar a ordem de apresentação dos arquivos e verificar se o número de disquetes se mantem ou não.

Outra forma de testes é repartir a capacidade de um certo número de disquetes em arquivos de tamanhos bem diferentes e apresentar os dados bem embaralhados para o programa. Ou seja, obter os dados a partir de uma solução pré-estabelecida. Por exemplo:

360=20+40+60+80+100+10+50

360=70+110+180

360=15+25+35+45+55+65+75+22+23

Tente resolver agora a sequência:

10 15 20 22 23 25 35 40 45 50 55 60 65 70 75 80 100 110 180

em diversas ordens.

Outro teste ainda: duplique cada arquivo (tome dois de 10, dois de 15, etc) e veja se o programa aloca os arquivos em 6 disquetes.

No relatório explique a função de cada variável no programa. Explique sucintamente o método que Você usou para gerar a solução. Divida o seu programa em blocos convenientes e explique também sucintamente a função de cada bloco.

A grosso modo, o seu programa vai ter que enumerar todas as possibilidades de alocação dos arquivos em um certo número de disquetes e escolher uma configuração que usa o mínimo de disquetes.

Obviamente, a melhor estrategia é Você estar absolutamente convencido de que o seu programa funciona corretamente através do entendimento completo do algoritmo utilizado. Neste caso Você não precisará se preocupar com tantos testes. É sempre bom lembrar porém que João Seguro morreu de velho.

Peguei alguns exercícios simples em Java só para começar e ver o que acontece. Se alguém se interessar me dá um toque aí e, se alguém quiser, posso depois, colocar aqui um exercício que faz um sistema em Java… bem simples, usando ArrayList…

Divirtam-se:

  1. O operador vírgula (,) em Java tem a função de separar expressões no comando for. Neste caso, as expressões são avaliadas sequencialmente. Para demonstrar isso, analise o código abaixo e escreva o resultado a ser impresso após sua execução.

Código:

public class OperadorVirgula {
public static void main(String[] args) {
for(int i = 1, j = i + 10; i < 5; i++, j = i * 2) {
System.out.println("i= " + i + " j= " + j);
}
}
}

  1. O programa abaixo apresenta alguns erros gerais. Explique detalhadamente quais são os erros e como corrigi-los. O programa deve ser executado diretamente da linha de comandos.

Código:

public class QuestaoErro {
public static void main (int[] args) {
double d = 4.5;
double d2;
int i = 10;
char c = (char)64;
d2 = d * 10.5;
i += c;
int k = i + (int)d * i++;
do {
k = i / d2;
i++;
} while (i < 10);
for (int j = 0; j < i; j++) {
System.out.println("j = "+j);
}
System.out.println(j+i);
}
}

  1. O programa abaixo recebe valores numéricos passados através dos argumentos de chamada do método main e imprime na saída padrão o maior valor fornecido. Explique seu funcionamento e altere-o para imprimir também o menor valor, a soma e a média aritmética dos valores fornecidos.

Código:

/**
Imprime o maior valor numérico fornecido como argumento de entrada

@version 1.0 02/02/2001
@author Denilson Alves Pereira
*/

public class MaiorNumero {

public static void main (String[] args){ 

   if (args.length &gt; 0) { 
       double valor; 
       double maior = Double.parseDouble(args[0]); 
  
       for (int i=1; i &lt; args.length; i++) { 
           valor = Double.parseDouble(args[i]); 
           if (valor &gt; maior) 
               maior = valor; 
       } 
       System.out.println("Maior valor = " + maior); 
   } 
   else System.out.println("Entre com os valores na forma: java MaiorNumero n1 n2 n3 ..."); 
} 

}

  1. O programa abaixo implementa uma classe Console com métodos para leitura de números e strings da entrada padrão. Isso facilita a leitura desses valores pois Java fornece apenas um método para leitura de caracteres (System.in.read).
    Observe o uso de um pacote (package cursojava). Isso significa que o arquivo Console.class deve estar dentro de um subdiretório chamado cursojava. O caminho até o subdiretório cursojava deve estar definido na variável de ambiente CLASSPATH (Exemplo: CLASSPATH=C:\denilson e o arquivo Console.class no diretório C:\denilson\cursojava). O comando import cursojava deve estar presente nos programas que usam a classe Console.
    a) Analise o código da classe Console abaixo e tente entendê-lo.
    b) Altere o programa do exercício anterior para que a entrada de dados seja informada durante a execução (usando a classe Console), sem usar a lista de argumentos de entrada do programa.

Código:

package cursojava;

/**
Interface para leitura de números e strings da entrada padrão (console)

@version 1.10 10 Mar 1997
@author Cay Horstmann, traduzido por Denilson Alves Pereira
*/

public class Console
{ /**
imprime um prompt no console

  @param prompt a string prompt a ser exibida 
*/ 

public static void printPrompt(String prompt)
{ System.out.print(prompt + " ");
System.out.flush();
}

/**
lê uma string do console. A string é terminada por um newline

  @return a string de entrada (sem o newline) 
*/ 

public static String readLine()
{ int ch;
String r = “”;
boolean done = false;
while (!done)
{ try
{ ch = System.in.read();
if (ch < 0 || (char)ch == ‘\n’)
done = true;
else if ((char)ch != ‘\r’) // weird–it used to do \r\n translation
r = r + (char) ch;
}
catch(java.io.IOException e)
{ done = true;
}
}
return r;
}

/**
lê uma string do console. A string é terminada por um newline

  @param prompt a string prompt a ser exibida 
  @return a string de entrada (sem o newline) 
*/ 

public static String readLine(String prompt)
{ printPrompt(prompt);
return readLine();
}

/**
lê um inteiro do console. A entrada é terminada por um newline

  @param prompt a string prompt a ser exibida 
  @return o valor de entrada como um int 
  @exception NumberFormatException se entrada com erros 
*/ 

public static int readInt(String prompt)
{ while(true)
{ printPrompt(prompt);
try
{ return Integer.valueOf
(readLine().trim()).intValue();
} catch(NumberFormatException e)
{ System.out.println
(“Não é um número inteiro. Favor entre novamente!”);
}
}
}

/**
lê um número em ponto flutuante do console. A entrada é terminada por um newline

  @param prompt a string prompt a ser exibida 
  @return o valor de entrada como um double 
  @exception NumberFormatException se entrada com erros 
*/ 

public static double readDouble(String prompt)
{ while(true)
{ printPrompt(prompt);
try
{ return Double.parseDouble(readLine().trim());
} catch(NumberFormatException e)
{ System.out.println
(“Não é um número em ponto flutuante. Favor entre novamente!”);
}
}
}
}

  1. O código abaixo implementa o método ShellSort para ordenação de números inteiros. Ele demonstra o uso de arranjos como argumentos de um método. Lembre-se que um arranjo contém uma referência para uma estrutura, assim, o método pode mudar os elementos do arranjo (passagem de parâmetro por referência).
    Altere o código abaixo para implementar a ordenação de números inteiros usando o método QuickSort.

Código:

/**
Ordena um arranjo de números inteiros usando o método ShellSort

@version 1.20 27/03/1998
@author Cay Horstmann
*/

public class ShellSort
{ public static void sort(int[] a)
{ int n = a.length;
int incr = n / 2;
while (incr >= 1)
{ for (int i = incr; i < n; i++)
{ int temp = a[i];
int j = i;
while (j >= incr && temp < a[j - incr])
{ a[j] = a[j - incr];
j -= incr;
}
a[j] = temp;
}
incr /= 2;
}
}

public static void print(int[] a)
{ for (int i = 0; i < a.length; i++)
System.out.print(a[i] + " ");
System.out.println();
}

public static void main(String[] args)
{ // cria um arranjo de dez números inteiros
int[] a = new int[10];
int i;
// preenche o arranjo com valores aleatórios
for (i = 0; i < a.length; i++)
a[i] = (int)(Math.random() * 100);
print(a);
sort(a);
print(a);
}
}

  1. Mostre o resultado impresso pelo programa abaixo, considerando sua chamada de execução com os seguintes parâmetros:
    java Impressao 10 2.5 12 20.4

Código:

public class Impressao {
public static void main (String[] args) {
String[] args2 = args;
args2[3] = “30.8”;
double[] d = {2, 4, 4.5};
double[] d2 = new double[d.length];
int i;
for (i = 0; i < d.length; i += (int)d[i]) {
d[i] = Double.parseDouble(args[i+1]);
}
i = 0;
while (i < d.length-1) {
d2[i] = d[i] + Double.parseDouble(args[i]);
i++;
}
d2[d.length-1] = d[d.length-1];
for (i = 0; i < args2.length; i++)
System.out.print(args2[i]+" “);
System.out.println();
for (i = 0; i < d.length; i++)
System.out.print(d[i]+” “);
System.out.println();
for (i = 0; i < d2.length; i++)
System.out.print(d2[i]+” ");
System.out.println();
switch ((int)d[0]) {
case 3: System.out.println(“string 3”); break;
case 4: System.out.println(“string 4”); break;
case 20: System.out.println(“string 20”); break;
default: System.out.println(“default”); break;
}
}
}

  1. Desenvolva um método estático em Java que recebe como parâmetros um arranjo de números inteiros e um número inteiro a ser pesquisado dentro do arranjo. O método deve retornar ?True? se o número pesquisado se encontra no arranjo e ?False?, caso contrário. Para testa-lo, crie um método main que execute os seguintes passos:
    ? Cria e inicializa um arranjo de 100 números inteiros aleatórios variando de 100 a 199.
    ? Leia da entrada padrão (console) vários números a serem pesquisados. Para cada um deles imprima um resultado dizendo se o número se encontra ou não no arranjo.
    ? Imprima o arranjo de números inteiros criado.

  2. Faça um programa em Java que inicialize um vetor de 10 elementos inteiros com valores aleatórios entre 12 e 21. Em seguida, elimine todos os elementos repetidos e imprima apenas os elementos restantes.
    Exemplo:
    Vetor gerado
    12 14 18 14 12 13 14 14 21 17
    Vetor resultante
    12 14 18 13 21 17 ? ? ? ?
    O programa deve possuir três métodos estáticos:
    ? public static int eliminaRepetidos (int[] vet) ? elimina os elementos repetidos do vetor vet. Retorna o número de elementos restantes no vetor após a eliminação.
    ? public static void imprime (int[] vet, int numElem) ? imprime na saída padrão os elementos do vetor de inteiros vet. NumElem é o número de elementos do vetor.
    ? public static void main (String[] args) ? cria e inicializa o vetor, elimina os elementos repetidos através da chamada do método eliminaRepetidos e imprime o vetor resultante usando o método imprime.

  3. Faça um programa em Java que inicialize uma matriz de 10 linhas e 10 colunas de elementos inteiros com valores aleatórios entre 0 e 4. Em seguida, imprima os elementos da matriz e uma mensagem informando se a matriz é ou não simétrica. Uma matriz é simétrica se for quadrada (o número de linhas é igual ao número de colunas) e todos os elementos das posições i, j são iguais aos elementos das posições j, i, onde i representa o número da linha e j representa o número da coluna.
    O programa deve possuir três métodos estáticos:
    ? Método main, para criar, inicializar e imprimir a matriz, e imprimir uma mensagem informando se a matriz é ou não simétrica. O método main deve usar os dois métodos definidos abaixo.
    ? Método para imprimir uma matriz. Este método deve receber como parâmetro a matriz a ser impressa.
    ? Método para verificar se uma matriz é simétrica. Este método deve receber como parâmetro a matriz a ser verificada e retornar true se a matriz é simétrica e false, caso contrário. O método não deve imprimir nenhuma mensagem.

  4. Mostre qual o resultado será impresso pelo programa se ele for executado.

Código:

public class Parametro {
public static void main(String[] args) {
int[] v = new int[4];
v[0] = (int)5.25;
v[1] = 1;
v[2] = 2;
v[3] = 3;
troca1(v[0],v[1]);
troca2(v);
imprime(v);
}
public static void troca1(int a, int b) {
int aux = a;
a = b;
b = aux;
}
public static void troca2(int[] v) {
int aux;
for (int i=0; i<v.length/2; i++) {
aux = v[i];
v[i] = v[v.length-i-1];
v[v.length-i-1] = aux;
}
}
public static void imprime(int[] v) {
for(int i=0; i<v.length; i++)
System.out.print(v[i]+" ");
}
}

Post Origianl do bbcbreno!
Apenas copiei e pus neste tópico.

1 curtida