Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA LISTA DE EXERCÍCIOS 1 Disciplina: Programação Orientada a Objetos Prof.: Ricardo Augusto Pereira Franco *Observações: - Para todos os exercícios práticos, crie uma classe Main que contenha exemplos e que execute seu código (as demais classes). - Caso a classe Main não seja implementada/enviada, a resolução do respectivo exercício será desconsiderada (nota=0,00). - As questões dissertativas deverão ser realizadas de forma manuscrita e enviada (no formato de figura ou .pdf). - Compacte todos os exercícios e submeta apenas um arquivo compactado. Questões 1. Elaborar um programa que efetue a apresentação do valor da conversão em real (R$) de um valor lido em dólar (US$). O algoritmo deverá solicitar o valor da cotação do dólar e, também, a quantidade de dólares disponíveis com o usuário. 2. A Loja Mamão com Açúcar está vendendo seus produtos em 5 (cinco) prestações sem juros. Faça um programa que receba um valor de uma compra e mostre o valor das prestações. 3. O custo ao consumidor de um carro novo é a soma do custo de fábrica com a percentagem do distribuidor e dos impostos (aplicados, primeiro os impostos sobre o custo de fábrica, e depois a percentagem do distribuidor sobre o resultado). Supondo que a percentagem do distribuidor seja de 28% e os impostos 45%. Implemente um programa que leia o custo de fábrica de um carro e informe o custo dele ao consumidor. 4. Escrever um algoritmo que leia dois valores inteiro distintos e informe qual é o maior. Além disso, informe se esses dois valores inteiros estão no intervalo entre 100 e 200. 5. Criar um programa que retorne dois números aleatórios de 0 a 100 e informe qual desses números é o maior e o menor. 6. Escrever um algoritmo para uma empresa que decide dar um reajuste a seus funcionários de acordo com os seguintes critérios: a) 50% para aqueles que UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA ganham menos do que três salários-mínimos; b) 20% para aqueles que ganham entre três até dez salários mínimos; c) 15% para aqueles que ganham acima de dez até vinte salários mínimos; d) 10% para os demais funcionários. Receba como entrada o nome do funcionário, seu salário e o valor do salário-mínimo. Em seguida, calcule o seu novo salário reajustado. Imprima na tela o nome do funcionário, o reajuste e seu novo salário. Forneça, também, quanto à empresa irá aumentar sua folha de pagamento. 7. Defina, com suas palavras, os seguintes termos da Programação Orientada a Objetos: a) Abstração; b) Objeto; c) Mensagem; d) Classe; e) Parâmetro; f) Encapsulamento. 8. Criar um programa que receba 10 valores inteiros e armazene-os em um vetor. Posteriormente o programa deve varrer o vetor e mostrar a soma, a média, o vetor em ordem inversa e gerar um novo vetor com o quadrado dos valores. 9. Armazenar em um vetor uma quantidade de números informada pelo usuário inicialmente. Mostrar o vetor em ordem crescente e em ordem decrescente. Solicitar um novo valor do usuário e informar se existe ou não no vetor e em que posição. 10. Criar uma classe Filme da seguinte forma: a) Um Filme tem código, nome, gênero, ano e autor principal, sendo todos privados; b) Cada atributo deve ter seus métodos de acesso públicos; c) O construtor deve inicializar apenas o código e o nome do filme; d) Os demais atributos devem ser atualizados usando os métodos sets necessários. e) Criar uma classe Principal que receba dados de filmes, através da classe Scanner, e crie vários filmes até que seja digitado o código 0, mostrando após a criação os dados do filme. 11. Escreva em Java uma classe Ponto2D que represente um ponto no plano cartesiano. Além dos atributos por você identificados, a classe deve oferecer os seguintes membros: a) Construtores sobrecarregados que permitam a inicialização do ponto: i) Por default (sem parâmetros) na origem do espaço 2D; ii) Num local indicado por dois parâmetros do tipo double (indicando o valor de abcissa e ordenada do ponto que está sendo criado); iii) Em um local indicado por outro ponto. UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA b) Métodos de acesso (getter/setter) dos atributos do ponto; c) Métodos sobrecarregados de movimentação do ponto com os mesmos parâmetros indicados para os construtores; d) Método de comparação semântica do ponto (equals); e) Método de representação do objeto como String; f) Método que permita calcular a distância euclidiana do ponto que recebe a mensagem, para outro ponto; g) Método que permita a criação de um novo ponto no mesmo local do ponto que recebeu a mensagem (clone); 12. Escreva uma classe que represente um país. Um país tem como atributos o seu nome, o nome da capital, sua dimensão em Km² e uma lista de países com os quais ele faz fronteira. Represente a classe e forneça os seguintes construtores e método: a) Construtor que inicialize o nome, capital e a dimensão do país; b) Métodos de acesso (obter/get) para as propriedades indicadas no item (a); c) Um método que permita verificar se dois países são iguais. Dois países são iguais se tiverem o mesmo nome e a mesma capital; d) Um método que define quais outros países fazem fronteira (note que um país não pode fazer fronteira com ele mesmo); e) Um método que retorne a lista de países que fazem fronteira; f) Um método que receba um outro país como parâmetro e retorne uma lista de vizinhos comuns aos dois países. 13. Escreva uma classe cujos objetos representam alunos matriculados em uma disciplina. Cada objeto dessa classe deve guardar os seguintes dados do aluno: matrícula, nome, 2 notas de prova e 1 nota de trabalho. Escreva os seguintes métodos para esta classe: a) media: calcula a média final do aluno (cada prova tem peso 2,5 e o trabalho tem peso 2); b) final: calcula quanto o aluno precisa para a prova final (retorna zero se ele não for para a final). 14. Escreva em Java uma classe que represente um círculo no plano cartesiano. Forneça os seguintes membros de classe: a) Um construtor que receba o raio e um ponto (o centro do círculo); b) Um construtor que receba o raio e posicione o círculo na origem do espaço cartesiano; c) Métodos de acesso ao atributo raio do círculo; d) Métodos inflar e desinflar, que, respectivamente, aumentam e diminuem o raio do círculo de um dado valor; e) Métodos sobrecarregados, inflar e desinflar, que, respectivamente, aumentam e diminuem o raio do círculo em uma unidade; h) Métodos sobrecarregados mover, que: UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA i) por default (sem parâmetros) levam o círculo para a origem do espaço 2D; ii) movem o círculo para um local indicado por dois parâmetros do tipo double (indicando o valor da abcissa e da ordenada do ponto para onde o círculo se move); iii) movem o círculo para o local indicado por outro ponto. f) Método que retorna a área do círculo. 15. Crie uma classe denominada Elevador para armazenar as informações de um elevador dentro de um prédio. A classe deve armazenar o andar atual (térreo = 0), total de andares no prédio (desconsiderando o térreo), capacidade do elevador e quantas pessoas estão presentes nele. A classe deve também disponibilizar os seguintes métodos: • Inicializa: que deve receber como parâmetros a capacidade do elevador e o total de andares no prédio (os elevadores sempre começam no térreo e vazio); • Entra: para acrescentar uma pessoa no elevador (só deve acrescentar se ainda houverespaço); • Sai: para remover uma pessoa do elevador (só deve remover se houver alguém dentro dele); • Sobe: para subir um andar (não deve subir se já estiver no último andar); • Desce: para descer um andar (não deve descer se já estiver no térreo); Encapsular todos os atributos da classe (criar os métodos set e get). 16. Crie uma classe Agenda que pode armazenar 10 pessoas e que seja capaz de realizar as seguintes operações: • void armazenaPessoa(String nome, int idade, float altura); • void removePessoa(String nome); • int buscaPessoa(String nome); //informa em que posição da agenda está a pessoa • void imprimeAgenda(); //imprime os dados de todas as pessoas da agenda • void imprimePessoa(int index); //imprime os dados da pessoa que está na posição “i” da agenda. 17. Criar um programa que leia um cpf (9 primeiros dígitos) e o valide. Pesquise a fórmula para validação de CPF. - Cálculo do primeiro dígito: Separar os 9 dígitos e multiplicar cada um pelos números de 2 a 10 da direita para a esquerda (ex: 111444777 → 1*10+1*9+1*8+4*7+4*6+4*5+7*4+7*3+7*2). A soma é dividida por 11. Se o resto da divisão for < 2, o dígito é 0, senão, o dígito será a subtração de 11 com o resto da divisão. UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA Ex: 111444777 → soma = 162/11 = 14 resto 8, logo o dígito será 11-8 = 3 → 111444777.3X - Cálculo do segundo dígito: Acrescenta o primeiro dígito calculado e executa a mesma regra multiplicando de 2 a 11 da direita para a esquerda (ex: 1114447773 → 1*11+1*10+1*9+4*8+4*7+4*6+7*5+7*4+7*3+3*2). A soma é dividida por 11. Se o resto da divisão for < 2, o dígito é 0, senão, o dígito será a subtração de 11 com o resto da divisão. Ex: 111444777.3 → soma = 204/11 = 18 resto 6, logo o dígito será 11-6 = 5 → 111444777.35 18. Escreva uma classe Pessoa em Java que representa uma pessoa numa árvore genealógica. A pessoa possui um nome, um pai e uma mãe (que também são pessoas). Forneça os seguintes membros para a classe: a) Construtores sobrecarregados que: i) inicialize o nome da pessoa, bem como seus antecessores (pai e mãe); ii) inicialize o nome da pessoa, e coloque seus antecessores para null; b) Um método que verifique a igualdade semântica entre duas pessoas (as pessoas são iguais se possuem o mesmo nome e a mesma mãe); c) Um método que verifique se duas pessoas são irmãs; d) Um método que verifique se uma pessoa é antecessora da pessoa que recebeu a mensagem (é seu pai ou sua mãe, ou antecessor do pai ou antecessor da mãe). 19. Precisa-se criar um cadastro dos moradores de um edifício para que possam ter acesso através de um código ou digital. Para isso, é preciso criar uma classe para representar os moradores do condomínio com informações importantes para o cadastro. Essas informações são: nome, cpf, celular, data de nascimento, sexo, bloco, apartamento e código de acesso. a. Criar também uma classe que será responsável pelo cadastro dos moradores. Essa classe deve permitir que o usuário entre com os dados de cada morador e, para cada morador, criar o objeto (instância) e mostrar os dados do objeto criado, ou seja, do morador cadastrado. b. Criar uma outra classe que também será uma classe de cadastro porém utilizando um meio de armazenamento em vetores. O usuário deve entrar com os dados do morador, o sistema cria a instância e armazena em um vetor de moradores até o término a entrada de dados. Após o término, o sistema varre o vetor e mostra os dados de todos os moradores cadastrados. c. Testar as classes criadas na classe main. Obs.: a entrada de dados do usuário deve ser através de um laço a cada cadastro deve ter uma pergunta se deseja ou não cadastrar mais um morador. 20. Considere a seguinte situação: Um banco deseja controlar os dados de todos os tipos de pessoas que se relacionam com os seus sistemas, tanto funcionários UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA quanto clientes. Para isso, foram levantadas algumas informações sobre características de cada tipo de pessoa. a. Um caixa de banco é um funcionário e tem como características: nome, telefone, matricula, salário, horário; b. Um gerente é um funcionário e tem como características: nome, telefone, matrícula, salário, bonificação (fixa mensal) e um tipo (PF para gerente de pessoa física ou PJ para jurídica); c. Um cliente tem como características: nome, telefone, idade, cpf, status (“A” – ativo, “I” - inativo) d. Escreva as classes, com seus atributos, necessárias para representar o enunciado usando as boas práticas (atributos protegidos e métodos públicos). Obs.: não usar o conceito de herança. - Escreva os métodos das classes de acordo com os seguintes requisitos: Todos os funcionários do banco podem ter aumento de salário sendo que este é aplicado através da chamada de um método que recebe como parâmetro um percentual e atualiza o salário somando o salário atual com esse percentual; Todos os funcionários devem ter um método que retorna o total de recebimento anual do funcionário sendo que os gerentes recebem, além do salário, a bonificação mensal; Todo funcionário, ao ser criado, deve ter obrigatoriamente a matrícula e o nome; Para a criação de um cliente devem ser informados todos os dados e o status inicial de criação é sempre ativo (criação de construtor); Também é possível desativar um cliente invocando um método chamado desativar que verifica se o cliente está ativo e trocar o seu estado para inativo; O cliente deve ter um método para mostrar seus dados concatenados com a informação se ativo ou inativo; Ex: “Maria – Tel:2345-6697 – idade: 20 anos – cpf: 8889989898 - ativo” Todas as classes devem ter os métodos gets e sets necessários. - Escrever uma classe de Cadastro para instanciar tipos de pessoas diferentes: • criar um funcionário caixa; • configurar seu horário, telefone e salário; • aumentar o salário com um percentual de 20% do funcionário; • mostrar os dados do funcionário e o recebimento anual; • criar um funcionário gerente; • configurar telefone, salário, bonificação e tipo; • aumentar o salário em 10% do gerente; • mostrar os dados do funcionário e o recebimento anual; • criar 3 instâncias de cliente: cliente1, cliente2, cliente3; • desativar um dos clientes usando o método criado anteriormente; UNIVERSIDADE FEDERAL DE GOIÁS INSTITUTO DE INFORMÁTICA • mostrar seus dados através do método criado para mostrar os dados do cliente.
Compartilhar