UFG Instituto de Informática Curso de Engenharia de Software Disciplina de Introdução à Programação 03/06/2011 Dojo de revisão do gabarito da lista de exercícios 26.1 Vetores Equipes: Questão 1 Líder: Rodolfo. Membros: Pedro, Felipe Alves, Filipe Houri, Wallace, Vinicius Maboni, Alexandre Morais, Ariane, Dumon Questão 2 Líder: Iago. Membros: Eurismar, Manoel, Valquer, Laerte, Murilo, Douglas, Kleudson, Mauro. Questão 3 Líder: José Sérgio. Membros: Julliano, Igor, Lucas de Oliveira, Eric, Vitor André, Phelipe, Hermes, Caionã Questão 4 Líder: Ademar. Membros: Felipe Akitaya, Guilherme Moreno, Amauri, Gustavo Amorim, Leonardo, Jean Carlos, Vinícius Machado Questão 5 Líder: Luiz Henrique. Membros: Diônata, Mário, Gustavo Lein, Iasmin, Edmar, Nelson, Felipe Rezende, Kelves Questão 6 Líder: Aline. Membros: Jober, Fernando, Victor Tarelho, Geovanne Alves, Adryan, Alexandre Costa, Jean Lucas, Vinícius Machado Regras: Para cada questão há uma equipe com um líder, caso o líder não esteja presente, a equipe poderá nomear um substituto; Nos 10 minutos iniciais, o líder deverá explicar o gabarito da questão para seus membros; Os gabaritos são recolhidos e cada equipe terá 2 minutos revezados por membro (exceto o líder) para montar a solução no computador, sem consultas, com apoio do líder, no estilo dojo. Tempo máximo para cada equipe: 20 minutos, ou seja, 10 revezamentos; Cada equipe deverá escolher internamente a ordem de revezamento entre seus membros; Serão disponíveis 2 computadores com 1 projetor cada um para que as duas equipes realizem suas tarefas. Comentários serão feitos pelo professor para que as demais equipes acompanhem a solução sendo realizada. 1. Elabore um programa que, dados dois vetores inteiros de 5 posições, efetue as respectivas operações indicadas por outro vetor de 5 posições de caracteres também fornecido pelo usuário, contendo as quatro operações aritméticas em qualquer combinação e armazenando e apresentando os resultados em um terceiro vetor (Fonte: Forbelone) Entrada: [1, 2, -1, 7, 0]; [2, 3, 8, -10, 2]; [+, -, *, /, -]; Saída: [3, -1, -8, -0.7, -2] 2. Desenvolva um programa que leia um vetor de 10 posições inteiras e coloque em ordem crescente, utilizando a seguinte estratégia de ordenação (Fonte: Forbelone): Selecione o elemento do vetor de 10 posições que apresenta o menor valor; troque esse elemento pelo primeiro; repita estas operações, envolvendo agora apenas os 9 elementos restantes (trocando o de menor valor com a segunda posição), depois os 8 elementos restantes (trocando o de menor valor com a terceira posição), depois os 7 últimos restantes; os 6 e assim por diante, até restar um único elemento, o maior deles. Entrada: [22, 3, 9, -1, 4, 6, 11, 3, 8, 1] Saída: [-1, 1, 3, 3, 4, 6, 8, 9, 11, 22]
3. Faça um programa que leia um vetor de valores numéricos de 10 posições e que retorne: a) a média dos valores do vetor; b) o valor mais próximo da média; c) o valor mais distante da média; Entrada: [5; -1; 2.5; 3; 8; 2; 9; 4; 2; 5] Saída: média: 3.95; valor mais próximo: 4; valor mais distante: 9; 4. Crie um programa que leia um vetor de 10 números e gere um segundo vetor cujas posições pares são o dobro do vetor original e as ímpares o triplo. Considere a primeira posição do vetor como sendo 0 (fonte: Forbelone) Entrada: [5; -1; 2.5; 3; 8; 2; 9; 4; 2; 5] Saída: [10, -3; 5; 9; 16; 6; 18; 12; 4; 15] 5. Desenvolva um programa que permita a leitura de um vetor de 10 números inteiros, e gere e apresente um segundo vetor com os mesmos dados, só que de maneira invertida, ou seja, o primeiro elemento ficará na última posição, o segundo na penúltima posição e assim por diante. Entrada: [5; -1; 2.5; 3; 8; 2; 9; 4; 2; 13] Saída: [13; 2; 4; 9; 2; 8; 3; 2.5; -1; 5] 6. Elabore um programa que leia uma séria de 10 notas de avaliações de alunos, e calcule quantas estão abaixo de 90% da média e quantas estão acima de 110% da média (fonte: Forbelone) Entrada: [4,3; 3,1; 1,7; 9,8; 10; 2,9; 5,8; 7,4; 5,6; 1,9] Saída: média: 5,25; 5 notas estão abaixo de 10% média (4,73); 4 notas estão acima de 110% da média (5,78); 7. Construa um programa que permita informar dados para 2 vetores inteiros de 10 posições e apresente a intersecção dos vetores. Lembrando que intersecção são os elementos repetidos em ambos os vetores, mas sem repetição (cada número pode aparecer uma única vez no resultado). (fonte: Forbelone) Entrada: [4; 2; 20; 9; 10; 2; 5; 7; 5; 4] e [3; 1; 7; 8; 10; 9; 8; 4; 6; 9] Saída: [4; 9; 10; 7] 8. Construa um programa que permita informar dados para 2 vetores inteiros de 10 posições e apresente o conjunto união dos vetores. Lembrando que conjunto união são todos os elementos que existem em ambos os vetores, mas sem repetição (cada número pode aparecer uma única vez no resultado). (fonte: Forbelone) Entrada: [4; 2; 20; 9; 10; 2; 5; 7; 5; 4] e [3; 1; 7; 8; 10; 9; 8; 4; 6; 9] Saída: [4; 2; 20; 9; 10; 5; 7; 3; 1; 8; 6]
1. Elabore um programa que, dados dois vetores inteiros de 5 posições, efetue as respectivas operações indicadas por outro vetor de 5 posições de caracteres também fornecido pelo usuário, contendo as quatro operações aritméticas em qualquer combinação e armazenando e apresentando os resultados em um terceiro vetor (Fonte: Forbelone) Entrada: [1, 2, -1, 7, 0]; [2, 3, 8, -10, 2]; [+, -, *, /, -]; Saída: [3, -1, -8, -0.7, -2] Resposta do Rodolfo: public class TurmaAB_Exer1{ public static void main (String [] args){ Scanner leia = new Scanner (System.in); int [] x = new int [5]; int [] y = new int [5]; double [] r = new double [5]; String [] o = new String [5]; System.out.println("Leitura do 1º vetor de números inteiros"); for (int i = 0; i<5; i++){ System.out.println("Informe o "+(i+1)+"º número: "); x[i]=leia.nextint(); System.out.println("Leitura do 2º vetor de números inteiros"); for (int i = 0; i<5; i++){ System.out.println("Informe o "+(i+1)+"º número: "); y[i] = leia.nextint(); System.out.println("Leitura de 5 operações"); for (int i = 0; i<5; i++){ System.out.println("Informe o "+(i+1)+"ª operação desejada"); o[i] = leia.next(); for (int i = 0; i< 5; i++){ if (o[i].equals("+")) r[i] = (double)x[i]+y[i]; else if (o[i].equals(" ")) r[i] = (double)x[i] y[i]; else if (o[i].equals("*")) r[i] = (double)x[i]*y[i]; else if (o[i].equals("/")) r[i] = (double)x[i]/y[i]; for (int i = 0; i<5; i++){ System.out.print(r[i]+" ");
2. Desenvolva um programa que leia um vetor de 10 posições inteiras e coloque em ordem crescente, utilizando a seguinte estratégia de ordenação (Fonte: Forbelone): Selecione o elemento do vetor de 10 posições que apresenta o menor valor; troque esse elemento pelo primeiro; repita estas operações, envolvendo agora apenas os 9 elementos restantes (trocando o de menor valor com a segunda posição), depois os 8 elementos restantes (trocando o de menor valor com a terceira posição), depois os 7 últimos restantes; os 6 e assim por diante, até restar um único elemento, o maior deles. Entrada: [22, 3, 9, -1, 4, 6, 11, 3, 8, 1] Saída: [-1, 1, 3, 3, 4, 6, 8, 9, 11, 22] Resposta do Iago, parcialmente correta, corrigida pelo professor: public class TurmaAB_questao2 { public static void main(string[] args) { Scanner sc = new Scanner(System.in); System.out.println("Digite 10 números"); int[] num = new int[10]; for(int i = 0; i < num.length; i++){ num[i] = sc.nextint(); // apesar do resultado correto, // não está em conformidade com o enunciado. /* for (int i = num.length; i >= 1; i ) { for (int j = 1; j < i; j++) { if (num[j 1] > num[j]) { int aux = num[j]; num[j] = num[j 1]; num[j 1] = aux; */ // Segue implementação conforme enunciado: int menor, aux; for (int i = 0; i < 9; i++) { // inicialmente o menor valor é o elemento i menor = i; // procura menor número entre i até 10 for (int j = i+1; j < 10; j++) if (num[j] < num[menor]) menor = j; // armazena posição do menor valor // intercambia num[i] e num[menor] aux = num[i]; num[i] = num[menor]; num[menor] = aux; for(int i = 0; i< num.length; i++){ System.out.println(num[i]);
3. Faça um programa que leia um vetor de valores numéricos de 10 posições e que retorne: a) a média dos valores do vetor; b) o valor mais próximo da média; c) o valor mais distante da média; Entrada: [5; -1; 2.5; 3; 8; 2; 9; 4; 2; 5] Saída: média: 3.95; valor mais próximo: 4; valor mais distante: 9; Resposta de José Sérgio: public class TurmaC_Ex3 { public static void main(string[] args) { double [] num = new double[10]; double media, dist_menor = 0, dist_maior = 0, soma = 0; int pos_prox = 0, pos_dist = 0; Scanner sc = new Scanner(System.in); for (int i = 0; i<10; i++) { System.out.println("Digite o número:" + (i+1)); num[i] = sc.nextdouble(); soma += num[i]; media = soma/10; double dist; for (int i = 0;i<10;i++){ dist = Math.abs(num[i] media); if (i == 0){ pos_dist = pos_prox = i; dist_maior = dist_menor = dist; else { if (dist > dist_maior ){ dist_maior = dist; pos_dist = i; if (dist < dist_menor){ dist_menor = dist; pos_prox = i; System.out.println("Média: "+media); System.out.println("Valor mais próximo "+num[pos_prox]); System.out.println("Valor mais distante "+num[pos_dist]);
4. Crie um programa que leia um vetor de 10 números e gere um segundo vetor cujas posições pares são o dobro do vetor original e as ímpares o triplo. Considere a primeira posição do vetor como sendo 0 (fonte: Forbelone) Entrada: [5; -1; 2.5; 3; 8; 2; 9; 4; 2; 5] Saída: [10, -3; 5; 9; 16; 6; 18; 12; 4; 15] Resposta do Ademar: public class TurmaAB_Ex4 { public static void main(string[] args) { Scanner s = new Scanner(System.in); double[] v1 = new double[10]; double[] v2 = new double[10]; for (int i =0; i<10; i++) { System.out.println("Insira o valor do vetor na posição "+i); v1[i] = s.nextdouble(); if (i %2 == 0) { v2[i] = v1[i]*2; else { v2[i] = v1[i]*3; for (int i =0; i<10; i++) { System.out.println(v2[i]);
5. Desenvolva um programa que permita a leitura de um vetor de 10 números inteiros, e gere e apresente um segundo vetor com os mesmos dados, só que de maneira invertida, ou seja, o primeiro elemento ficará na última posição, o segundo na penúltima posição e assim por diante. Entrada: [5; -1; 2.5; 3; 8; 2; 9; 4; 2; 13] Saída: [13; 2; 4; 9; 2; 8; 3; 2.5; -1; 5] Resposta do Luiz Henrique: public class Exercicio5{ public static void main (String[] args){ Scanner sc = new Scanner(System.in); double vetor1[] = new double[10]; double vetor2[] = new double[10]; for (int i = 0;i<10;i++){ System.out.println("Digite o valor "+(i+1)); vetor1[i] = sc.nextdouble(); for (int i2 = 9; i2>=0;i2 ){ vetor2[i2] = vetor1[i2]; System.out.println(vetor2[i2]);
6. Elabore um programa que leia uma séria de 10 notas de avaliações de alunos, e calcule quantas estão abaixo de 90% da média e quantas estão acima de 110% da média (fonte: Forbelone) Entrada: [4,3; 3,1; 1,7; 9,8; 10; 2,9; 5,8; 7,4; 5,6; 1,9] Saída: média: 5,25; 5 notas estão abaixo de 10% média (4,73); 4 notas estão acima de 110% da média (5,78); Resposta da Aline: public class TurmaAB_Ex6{ public static void main(string []args){ Scanner sc = new Scanner (System.in); double[] notas = new double[10]; int alunos_abaixo=0; int alunos_acima=0; double soma=0, media=0; for (int i = 0; i<10; i++) { System.out.println("Forneça a nota do aluno" + (i+1)); notas[i] = sc.nextdouble(); soma += notas[i]; media = soma / 10; if(notas[i]<media*0.90){ alunos_abaixo++; if(notas[i]>media*1.10){ alunos_acima++; System.out.println(alunos_abaixo+" alunos abaixo da media"); System.out.println(alunos_acima+" alunos acima da media");
7. Construa um programa que permita informar dados para 2 vetores inteiros de 10 posições e apresente a intersecção dos vetores. Lembrando que intersecção são os elementos repetidos em ambos os vetores, mas sem repetição (cada número pode aparecer uma única vez no resultado). (fonte: Forbelone) Entrada: [4; 2; 20; 9; 10; 2; 5; 7; 5; 4] e [3; 1; 7; 8; 10; 9; 8; 4; 6; 9] Saída: [4; 9; 10; 7] Resposta do Pedro, que possui um bug para elementos repetidos com valor 0. Corrigida pelo professor: public class Ex7{ public static void main (String [] args){ Scanner sc = new Scanner (System.in); double[] x = new double[10]; System.out.println("Vetor 1"); for(int i = 0; i < 10; i++){ System.out.println("Digite o número "+(i+1)); x[i] = sc.nextdouble(); /* atribuir valor '0' aos repetidos falha quando há elementos com valor '0' for (int j = i+1; j<10; j++){ if (x[i]==x[j]) x[j]=0; */ double[] y = new double[10]; System.out.println("Vetor 2"); for(int i = 0; i < 10; i++){ System.out.println("Digite o número "+(i+1)); y[i] = sc.nextdouble(); // o vetor z receberá elementos comuns entre // os vetorez x e z double[] z = new double[10]; int k= 1; for (int j = 0; j<10; j++){ if ( x[i] == y[j] ){ k++; // incrementa k z[k] = x[i]; // inclui em z[k] break; /* não funciona em todos os casos for (int j = 0; j<10; j++){ if ( x[i] == y[j] ){ System.out.println(x[i]); break; */ System.out.println("Intersecção:"); boolean repetido = false; for (int i=0; i<k; i++) { for (int j=i 1; j>=0; j ) // verifica se z[i] ocorreu anteriormente if (z[i]==z[j]) { repetido = true; break; if ( repetido ) repetido = false; // retorna a chave para o valor original else System.out.println(z[i]); // primeira ocorrencia de z[i]