Universidade Federal de Goiás Instituto de Informática 1ª Prova de Introdução a Programação 06/04/11 Instruções: A prova deve ser realizada individualmente e sem consultas. As respostas deverão ser implementadas na linguagem Java. A prova terá a duração de 90 minutos. Considere em todas as questões que o usuário fornecerá somente valores válidos individualmente cada um. 5. Não é necessário formatar os números de saída. Por exemplo, 100.67777 ou 100.68 são equivalentes. 1. 2. 3. 4. Questão 1 (valor 3,0 pontos): Uma locadora de filmes tem as seguintes regras para aluguel de fitas. - De segunda, terça e quarta: um desconto de 30% em cima do preço normal; domingo preço normal; e quinta, sexta e sábado: acréscimo de 20% do preço normal; - Aluguel de fitas comuns: preço normal e aluguel de lançamentos: acréscimo de 13% em cima do preço normal. Desenvolva um programa em Java para ler o preço normal de aluguel da fita (em R$), o dia ser locado (domingo, segunda, terça, … ou sábado - considerando códigos 1, 2, 3, …, 7 respectivamente) e a categoria do filme alugado (comum ou lançamento). Calcular e imprimir o preço final que será pago pela fita. Considere que o cliente só pode alugar uma fita por um dia. Questão 2 (valor 3,0 pontos): Números palíndromos são aqueles que escritos da direita para esquerda ou da esquerda para direita tem o mesmo valor. Faça um programa em linguagem Java que dada um número inteiro de 5 dígitos, calcule e escreva se este número é palíndromo. Exemplos de entrada e saída: Entrada (uma de cada vez) Saída 19291 é um número palíndromo. 12345 não é um número palíndromo. Questão 3 (valor 4,0 pontos): Crie um programa em Java que avalie o resultado final de um jogo-da-velha. O jogo-da-velha consiste na marcação de um sinal – geralmente X ou O em uma grade formada de 3x3 células, onde o vencedor é aquele que primeiro formar uma linha, coluna ou diagonal. Suponha que cada célula será fornecida pelo usuário, de cima para baixo e da esquerda para direita, de forma sequencial, ou seja, C1 a C9, considerando que o valor 0 (zero) significa célula não marcada, 1 (um) célula marcada pelo jogador 1 e 1 (menos um) célula marcada pelo jogador 2. Considere que programa receberá os nove valores válidos e depois fornecer um dos resultados: A – Jogo Inválido; B – Vitória do Jogador 1; C - Vitória do Jogador 2; D – Empate. A seguir foram desenhados 4 casos, ilustrando as situações de A a D respectivamente: Dica: note que a soma dos valores dos elementos de uma coluna, linha ou diagonal determina se houve preenchimento completo na mesma por um jogador. Por exemplo, se a soma dos valores de uma coluna totalizar -3, significa que a mesma foi fechada pelo jogador 2. Colinha: Boa Prova! Universidade Federal de Goiás Instituto de Informática Gabarito da 1ª Prova de Introdução a Programação Questão 1: Uma locadora de filmes tem as seguintes regras para aluguel de fitas. - De segunda, terça e quarta: um desconto de 30% em cima do preço normal; domingo preço normal; e quinta, sexta e sábado: acréscimo de 20% do preço normal; - Aluguel de fitas comuns: preço normal e aluguel de lançamentos: acréscimo de 13% em cima do preço normal. Desenvolva um programa em Java para ler o preço normal de aluguel da fita (em R$), o dia ser locado (domingo, segunda, terça, … ou sábado - considerando códigos 1, 2, 3, …, 7 respectivamente) e a categoria do filme alugado (comum ou lançamento). Calcular e imprimir o preço final que será pago pela fita. Considere que o cliente só pode alugar uma fita por um dia. Resposta: import java.util.Scanner; public class Questao1{ public static void main(String args[]){ double preco_normal, preco, preco_pagamento; int dia_semana; String tipo_filme; Scanner leitor = new Scanner(System.in); System.out.println("Informe o tipo de filme: "); tipo_filme = leitor.nextLine(); System.out.println("Informe o preço normal do filme: "); preco_normal = leitor.nextDouble(); System.out.println("Informe o dia da semana da locação: "); dia_semana = leitor.nextInt(); preco_pagamento = preco_normal; //Verifica o dia da semana da locação //Se é segunda, terça ou quarta desconta 30% if(dia_semana == 2 || dia_semana == 3 || dia_semana == 4) preco_pagamento = preco_pagamento - preco_normal*0.3; //Se é quinta, sexta ou sábado acrescenta 20% else if(dia_semana == 5 || dia_semana == 6 || dia_semana == 7) preco_pagamento = preco_pagamento + preco_normal*0.2; //Verifica se é filme comum ou lançamento if(tipo_filme.equals("lançamento")) preco_pagamento = preco_pagamento + preco_normal*0.13; System.out.println("O preço a pagar é de "+preco_pagamento); } } Questão 2: Números palíndromos são aqueles que escritos da direita para esquerda ou da esquerda para direita tem o mesmo valor. Faça um programa em linguagem Java que dada um número inteiro de 5 dígitos, calcule e escreva se este número é palíndromo. Exemplos de entrada e saída: Entrada (uma de cada vez) Saída 19291 é um número palíndromo. 12345 não é um número palíndromo. Resposta: import java.util.Scanner; public class Questao2{ public static void main(String args[]){ int numero, numero1, numero2, numero3, numero4, numero5, resto; Scanner leitor = new Scanner(System.in); System.out.println("Informe um número com 5 dígitos: "); numero = leitor.nextInt(); //decompõe o número numero1 = numero / 10000; resto = numero % 10000; numero2 = resto / 1000; resto = resto % 1000; numero3 = resto / 100; resto = numero % 100; numero4 = resto / 10; numero5 = resto % 10; //verifica se é palíndromo if( (numero1 == numero5) && (numero2 == numero4) ) System.out.println("O número "+numero+" é palíndromo"); else System.out.println("O número "+numero+" não é palíndromo"); } } Questão 3: Crie um programa em Java que avalie o resultado final de um jogo-da-velha. O jogo-da-velha consiste na marcação de um sinal – geralmente X ou O em uma grade formada de 3x3 células, onde o vencedor é aquele que primeiro formar uma linha, coluna ou diagonal. Suponha que cada célula será fornecida pelo usuário, de cima para baixo e da esquerda para direita, de forma sequencial, ou seja, C1 a C9, considerando que o valor 0 (zero) significa célula não marcada, 1 (um) célula marcada pelo jogador 1 e 1 (menos um) célula marcada pelo jogador 2. Considere que programa receberá os nove valores válidos e depois fornecer um dos resultados: A – Jogo Inválido; B – Vitória do Jogador 1; C - Vitória do Jogador 2; D – Empate. A seguir foram desenhados 4 casos, ilustrando as situações de A a D respectivamente: Dica: note que a soma dos valores dos elementos de uma coluna, linha ou diagonal determina se houve preenchimento completo na mesma por um jogador. Por exemplo, se a soma dos valores de uma coluna totalizar -3, significa que a mesma foi fechada pelo jogador 2. Resposta: import java.util.Scanner; public class JogoDaVelha { public static void main(String[] args) { int c1, c2, c3, c4, c5, c6, c7, c8, c9, h1, h2, h3, v1, v2, v3, d1, d2; boolean vit1=false, vit2=false; Scanner sc = new Scanner(System.in); System.out.println("Forneça os 9 valores para cada célula:"); c1 = sc.nextInt(); c2 = sc.nextInt(); c3 = sc.nextInt(); c4 = sc.nextInt(); c5 = sc.nextInt(); c6 = sc.nextInt(); c7 = sc.nextInt(); c8 = sc.nextInt(); c9 = sc.nextInt(); h1 = c1 + c2 + c3; h2 = c4 + c5 + c6; h3 = c7 + c8 + c9; v1 = c1 + c4 + c7; v2 = c2 + c5 + c8; v3 = c3 + c6 + c9; d1 = c1 + c5 + c9; d2 = c3 + c5 + c7; vit1 = h1 == 3 || h2 == 3 || h3 == 3 || v1 == 3 || v2 == 3 || v3 == 3 || d1 == 3 || d2 == 3; vit2 = h1 == -3 || h2 == -3 || h3 == -3 || v1 == -3 || v2 == -3 || v3 == -3 || d1 == -3 || d2 == -3; if ( vit1 && vit2 ) System.out.println("Jogo inválido"); else if ( vit1 ) System.out.println("Vitória do jogador 1"); else if ( vit2 ) System.out.println("Vitória do jogador 2"); else System.out.println("Empate"); } }