Departamento de Ciência da Computação Universidade de Brasília Computação Básica – 2004.1 Professor Jorge H. C. Fernandes Lista de Exercícios 3 – Programação Básica em Java Resolva os exercícios abaixo usando a Linguagem Java. Dica: para facilitar a compreensão do programa utilize comentários digitando dois sinais de barra (//) numa linha qualquer, o que permite que o texto até o final da linha seja ignorado pelo compilador. A figura abaixo mostra um exemplo de um programa em Java que apresenta na saída o produto de dois números recebidos como entrada.. class Multiplica { // declara classe de nome Multiplica public static void main(String[] args) { // declara método main IO.println("Informe o primeiro numero"); // solicita entrada de dados int a = IO.readInt(); // lê numero 1 IO.println("Informe o segundo numero"); // solicita entrada de dados int b = IO.readInt(); // lê numero 2 int produto = a * b; // calcula produto IO.println(a+" * "+b+" = "+produto); } } O programa abaixo lê uma lista de números inteiros positivos terminada por –1 e imprime o resto da divisão do maior deles dividido pelo menor deles. class RestosMenoresMaiores { public static void main(String[] args) { int n; n = IO.readInt(); if (n <= 0) return; int menor, maior; menor = n; maior = n; while ((n = IO.readInt()) > 0) { if (n > maior) maior = n; if (n < menor) menor = n; } int resto = maior % menor; IO.println(resto); } } Exercício 0 – Quadrados.java - Crie um programa que recebe uma lista de pares de números inteiros positivos, terminada por –1, e, para cada par de números n1 e n2, imprime a potência de n1 elevada a n2. Exemplo: Entrada // Comentários Saída // Comentários 2 // n1 base 32 // 2 à quinta potência 5 // n2 expoente 225 // 15 ao quadrado 15 // n1 base 2 // n2 expoente -1 // fim da lista Exercício 01 – DecimalParaBinario.java - Crie um programa que recebe uma lista de numerais inteiros positivos decimais (0-9)*, terminada por –1, e, para cada numeral n, imprime a seqüência de 0s e 1s que formam os bits (do menos significativo para o mais significativo) deste numeral representado em binário, a seqüência de bits deve ser apresentada na mesma linha e concluída por “\n”. Use o método print para imprimir cada um dos bits, e o método println para pular de linha. Exemplo: Entrada // Comentários Saída // Comentários 2 // converte o numeral decimal 2 01 // 2 decimal 5 // converte o numeral decimal 5 101 // 5 decimal 15 // converte o numeral decimal 15 1111 // 15 decimal 259 // converte o numeral decimal 259 110000001 // 259 decimal -1 // fim de execução Exercício 02 – DecimalParaBinario2.java - Crie um programa que recebe uma lista de números inteiros positivos decimais (0-9)*, terminada por –1, e imprime para cada número n a seqüência de 0s e 1s que formam os bits (do mais significativo para o menos significativo) deste número representado em binário, a seqüência de bits deve ser apresentada na mesma linha e concluída por “\n”. Use o método print para imprimir cada um dos bits, e o método println para pular de linha. Exemplo: Entrada Saída 2 10 5 101 15 1111 259 100000011 -1 Exercício 03 – DecimalParaOctal.java. Crie um programa que recebe uma lista de números inteiros positivos decimais (0-9)* terminada por –1. e imprime uma seqüência de algarismos octais (0-7)* (do menos significativo para o mais significativo) que representam cada número. Os algarismos octais de cada número devem estar na mesma linha, encerrados pelo algarismo “0” e pelo final de linha (“\n”) Exemplo: Entrada Saída 2 20 5 50 15 710 259 3040 560 06010 -1 Exercício 04 – DecimalParaHexa.java. Crie um programa que recebe uma lista de números inteiros positivos decimais terminada por –1. e imprime uma seqüência de algarismos hexadecimais (0-F)* (do menos significativo para o mais significativo) que representam cada número. Os algarismos hexadecimais de cada número devem estar na mesma linha, e encerrados por “0x\n”. Exemplo: Entrada Saída 2 20x 5 50x 15 F0x 259 3010x 560 0320x -1 Quesito 05 - A média aritmética de uma série de números é igual ao somatório dos números dividido pela quantidade de números somados. O desvio quadrado de uma série de números é igual à soma dos quadrados da diferença entre cada número e a média aritmética dos números. A variância de uma série de números é igual ao desvio quadrado dos números da série dividido pela quantidade de números que a compõem, subtraída de um. O desvio padrão de uma série de valores numéricos é igual à raiz quadrada da variância da série. As fórmulas abaixo descrevem matematicamente: Média(v1, v2, ..., vn) = (v1 + v2 + ... + vn)/n DesvioQuadrado(v1, v2, ..., vn) = 2 2 2 (v1 - Média(v1, v2, ..., vn)) + (v2 - Média(v1, v2, ..., vn)) + ... + (vn - Média(v1, v2, ..., vn)) Variância(v1, v2, ..., vn) = DesvioQuadrado(v1, v2, ..., vn) / (n-1) DesvioPadrão (v1, v2, ..., vn) = RaizQuadrada (Variância (v1, v2, ..., vn)) Implemente os métodos de uma classe chamada Estatistica, conforme o código abaixo, que é responsável por calcular cada uma das medidas descritas acima (desvio padrão, variância, desvio quadrado e média aritmética). Cada um dos métodos recebe a série de valores através de array de ponto flutuante (float) e ret orna um float contendo a medida adequada. Observação: para calculo da raiz quadrada utilize o método static float sqrt(float f) da classe Math, que recebe um número em ponto flutuante e retorna a raiz quadrada do número recebido. O método main na classe Estatistica recebe como argumentos de linha de comando uma lista de numerais de ponto flutuante e faz alguns testes com o uso das funções, como mostrado abaixo. class Estatistica { static float desvioPadrao(float[] serie) { return 0f;} static float variancia(float[] serie) { return 0f;} static float desvioQuadrado(float[] serie) { return 0f;} static float mediaAritmetica(float[] serie) { return 0f;} public static void main(String[] args) { // converte os valores digitados na linha de comando float[] serie = new float[args.length]; for (int i = 0; i < args.length; i++) { serie[i] = Float.parseFloat(args[i]); } IO.println("Media["+mediaAritmetica(serie)+"]"); IO.println("Desvio Quadrado["+desvioQuadrado(serie)+"]"); IO.println("Variancia["+variancia(serie)+"]"); IO.println("Desvio Padrao["+desvioPadrao(serie)+"]"); } } Exercício 06 – EhPrimo.java. Escreva um programa java que lê uma lista de números inteiros positivos, terminada por –1, e para cada número da lista, imprime 0 ou 1, caso o número seja ou não primo. Exemplos: Entrada Saída 1 0 3 1 2 1 4 0 6 0 78 0 5 1 4 0 3 1 21 0 3 1 4 0 56 0 76 0 8 0 9 0 554 0 2 1 -1 1 0 Exercício 07 – NEsimoPrimo.java. Escreva um programa java que lê uma lista de números inteiros positivos, terminada por –1, e para cada número n da lista, imprime o n-esimo número primo. NEsimoPrimo pode usar o código da classe EhPrimo se for possível. Por definição 2 é o 1-ésimo número primo, 3 é o 2-ésimo número primo, 5 é o 3-ésimo número primo, etc. Exemplos: Entrada Saída 1 2 2 3 3 5 4 7 5 11 6 13 -1 Exercício 08 – DifPrimos.java - Escreva um programa que lê uma lista de pares de números inteiros positivos x e y, menores do que 100, onde x é menor que y, e imprima a diferença entre Xésimo e o Y-ésimo números primos. A lista de números é terminada quando o primeiro número do par for–1. Por definição 2 é o 1-ésimo número primo, 3 é o 2-ésimo número primo, 5 é o 3-ésimo número primo, etc. Busque os números primos na faixa de 1 a 1000000. DifPrimos pode usar o código da classe NEsimoPrimo se for possível. Exemplos: Entrada Saída 1 3 3 4 2 538 4 0 2 100 1 1 -1 Exercício 9 – ConversorBinarioOctalDecimalHexa.java. Crie um programa que converte a representação de números entre qualquer base. A sintaxe EntradaSaída (E/S) de dados do programa apresenta o seguinte formato: ES ::= E[CódBase] E[CódBase] (E[Numeral] S[Numeral])* E[-1]. CódBase ::= “b” | “0” | “d” | “x” Numero ::= [0-F]* Os códigos de bases “b”, “0”, “d” e “x” representam, respectivamente as bases binário, octal, decimal e hexadecimal. Exemplo de Execução onde se deseja converter de binário para decimal: Entrada Saída b // numerais serão digitados em binário 0 // 0 binário convertido para decimal d // numerais serão impressos em decimal 2 // 10 binário convertido para decimal 0 // converte 14 // 1100 binário convertido para decimal 10 127 // 1111111 binário convertido para decimal 1110 1111111 -1 d // numerais serão digitados em decimal x // numerais serão impressos em hexadecimal 2 5 15 259 560 -1 D // numerais serão digitados em decimal B // numerais serão impressos em binário 2 5 15 259 -1 2 // 2 decimal convertido para hexa 5 // 5 decimal convertido para hexa F // 15 decimal convertido para hexa C2 // 259 decimal convertido para hexa 181 // 560 decimal convertido para hexa 01 101 1111 110000001 Exercício 10 – ComplementoA2.java - Complemento a dois. Escreva um programa que lê um número N, inteiro positivo decimal, entre 0 e 127, e imprime a seqüência de 0s e 1s que formam os bits (do menos significativo para o mais significativo) do número –N, representado em formato de complemento a dois, ocupando um espaço de 8 bits. Exemplo: Entrada 25 1 1 1 0 0 1 1 1 120 0 0 0 1 0 0 0 1 Exercício 11 – InverteString.java - Invertido. Escreva um programa que lê uma lista de Strings N, terminada por um string vazio e imprime cada um dos strings da lista com seus caracteres invertidos. Dica: use uma pilha para inverter os algarismos. Exemplo Entrada Saída 1234 4321 1000 0001 Java avaJ Ola Pessoal laosseP alO