PUCRS
Faculdade de Informática
Programação em C/C++
Exercícios sobre
CLASSES em C++
1. Crie
uma classe para
representar uma pessoa, com os atributos privados de nome, idade e
altura. Crie os métodos públicos
necessários para sets
e gets e também um
métodos para imprimir os dados de uma pessoa.
2. Crie uma
classe Agenda que armazena 10 pessoas e seja capaz de
operações como:
class Agenda{
Pessoa
Povo[10];
public:
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 imprimePovo(); // imprime todos os dados de todas as
pessoas da agenda
void imprimePessoa(int i); // imprime os dados da pessoa que
está na posição 'i' da agenda
};
// ---------------------------------------
Teste sua genda com o programa apresentado abaixo.
#include <iostream>
#include "Agenda.h"
int main () {
char linha[] = "------------------------------------------------\n";
Agenda A;
A.armazenaPessoa("Abel", 22, 1.78);
A.armazenaPessoa("Tiago", 20, 1.80);
A.imprimePovo();
cout << linha;
int posicao = A.buscaPessoa("Tiago");
if (posicao > 0)
A.imprimePessoa(posicao);
cout << linha;
A.removePessoa("Tiago");
A.imprimePovo();
cout << linha;
return 0;
}
3. 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
(0=térreo),
total de andares no prédio, excluindo 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 vazios);
- entra:
para acrescentar uma pessoa no elevador (só deve acrescentar se
ainda houver
espaç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);
- get....:
métodos para obter cada um dos os dados armazenados.
4. Crie uma classe em
C++ chamada Relogio para armazenar um horário, composto por
hora, minuto e segundo. A classe deve representar esses componentes de
horário e deve apresentar os métodos descritos a seguir:
- um método chamado setHora, que deve receber o
horário desejado por parâmetro (hora, minuto e segundo);
- um método chamado getHora para retornar o
horário atual, através de 3 variáveis passadas por
referência;
- um método para avançar
o horário para o próximo segundo (lembre-se de atualizar
o minuto e a hora, quando for o caso).
5. Definir uma classe
que represente um círculo.
Esta classe deve possuir métodos Privados para:
- calcular a área do círculo;
- calcular a distância entre os centros de 2
círculos;
- calcular a circunferência do círculo.
E métodos Públicos para:
- definir o raio do círculo, dado um número
real;
- aumentar o raio do círculo, dado um percentual
de aumento;
- definir o centro do círculo, dada
uma posição (X,Y);
- imprimir o valor do raio;
- imprimir o centro do círculo.
- imprimir a área do círculo.
Criar um programa principal
para testar a classe.
6. Implemente
uma televisão. A televisão tem um controle de
volume do som e um controle de seleção de canal.
- O controle de volume permite aumentar ou diminuir a
potência do volume de som em uma unidade de cada vez.
- O
controle de canal também permite aumentar e diminuir o
número do canal
em uma unidade, porém, também possibilita trocar para um
canal indicado.
- Também devem existir métodos para
consultar o valor do volume de som e o canal selecionado.
No programa principal, crie uma televisão e troque de canal
algumas
vezes. Aumente um pouco o volume, e exiba o valor de ambos os atributos.
7. Implemente um
condicionador de ar. O condicionador possui 10
potências diferentes. Cada unidade da potência do
condicionador diminui a temperatura do ambiente em 1.8oC. A
variação que o condicionador consegue causar está
no intervalo [0oC - 18oC], ou seja, zero graus de
variação quando desligado e dezoito graus de
variação quando ligado na potência máxima.
Através de um sensor, o
condicionador é informado da temperatura externa. Dada essa
temperatura
e a potência selecionada, o condicionador calcula e retorna a
temperatura do ambiente.
No programa principal, crie dois
condicionadores. Informe duas temperaturas externas diferentes para
cada um (ex: 25oC e 31o), ajuste o segundo em
potência máxima (10) e o primeiro em potência
média (5). Finalmente,
exiba a temperatura resultante de cada ambiente.
8. Implemente um carro.
O tanque de combustível do carro armazena no máximo 50
litros de gasolina. O carro consome 15 km/litro. Deve ser
possível:
- Abastecer o carro com uma certa quantidade de gasolina;
- Mover o carro em uma determinada distância
(medida em km);
- Retornar a quantidade de combustível e a
distância total percorrida.
No programa principal, crie 2 carros. Abasteça 20 litros no
primeiro e
30 litros no segundo. Desloque o primeiro em 200 km e o segundo em 400
km. Exiba na tela a distância percorrida e o total de
combustível
restante para cada um.
9. Definir uma classe que
represente uma lista de
inteiros.
Esta classe deve armazenar os dados em um vetor de inteiros de tamanho
10.
Deve existir um vetor auxiliar de que indique, na posição
Vaux[i], qual o próximo elemento da lista após o elemento
que está na posição 'i'.
Na figura abaixo, considere que a lista inicia na posição
3.
No vetor auxiliar, o valor -1 indica que a posição
correspondente no vetor 'dados' está vazia. Por sua vez, o
valor -2 indica que a posição correspondente no vetor
'dados' é o último elemento da lista.
Índice |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
Dados |
10 |
1 |
VAZIO |
9 |
VAZIO |
11 |
34 |
VAZIO |
VAZIO |
VAZIO |
VAZIO |
Vetor
Auxiliar(próximo) |
5 |
6 |
-1 |
0 |
-1 |
1 |
-2 |
-1 |
-1 |
-1 |
-1 |
Ao ser impressa, esta lista deve apresentar os seguintes valores: 9,
10, 11, 1, 34.
A classe de deve ter métodos para:
-
Inserção:
este método deve inserir um dado (int) na lista,
após o último dado inserido. Este método deve
retornar 1 quando conseguir inserir e 0 quando não houver mais
espaço na lista. Internamente, a inserção deve ser
feita no primeiro espaço livre do vetor de dados;
-
Remoção:
Remover um elemento da lista
dado seu valor. Este método deve
retornar 1 quando conseguir remover e 0 quando o dado não
existir na lista;
-
Impressão:
Imprime os dados na lista na ordem que foram inseridos.
void
ListaEncadeadaComVetor::imprimeLista()
{
int pos = inicio;
cout << "Lista: ";
cout << "Inicio: " << pos << endl;
for(int i=0; i< TAM; i++)
{
cout << Dados[pos] << "(" << pos << ")";
pos = Aux[pos];
if (pos == -2)
break;
else cout << ", ";
}
cout << endl;
}
Sugestão para definição da classe:
#include <iostream>
using namespace std;
const int TAM = 10;
class ListaEncadeadaComVetor{
int inicio;
int Dados[TAM];
int Aux[TAM];
int achaPosUltimo();// Este método faz a busca do último a partir dos
// dados da lista e não a partir do vetor auxiliar
int achaPosLivre(); // Este método faz a busca de um espaço lvre
// a partir do vetor auxiliar
public:
ListaEncadeadaComVetor ();
int insereDado(int D);
int removeDado(int D);
void imprimeLista();
};
10. Implemente
um Veículo. O veículo é composto por
várias partes: um motor, um tanque de combustível e 4
pneus.
O funcionamento do veículo depende das suas partes, da seguinte
forma:
- Motor
- Possui uma potência (em hp), uma taxa fixa de
consumo (em km/litro) e um tanque de combustível (ver abaixo).
- Possui um comando para avançar uma
determinada quantidade de km. Se a pressão de mais de um pneu
(ver abaixo) estiver abaixo de 20 lb, o consumo do veículo
aumenta em 30%. Se não houver combustível suficiente, o
veículo avança até o tanque esvaziar.
- Tanque de Combustível
- Possui uma determinada capacidade e quantidade
atual de combustível (ambos em litros).
- Pode ser abastecido com uma certa
quantidade de combustível, limitado à sua capacidade
máxima.
- Pneu
- Cada pneu possui uma determina pressão (em
lb).
- Pode ser calibrado com determinada
pressão informada (positiva ou negativa, sendo somada à
atual).
Implemente as classes acima, usando composição quando
necessário. Modularize o código e crie um Makefile
para compilar
o projeto (ou use o Code::Blocks).
Lembre-se de implementar gets e sets
necessários, bem como construtores adequados.
No programa principal, faça as seguintes
operações:
- Instancie um veículo cujo motor tem 71 hp,
consumo de 12 km/litro, tanque com capacidade para 50 litros, pneus
dianteiros com 27 lb e traseiros com 23 lb.
- Abasteça o tanque com 30 litros.
- Exiba na tela as informações sobre cada
componente do veículo.
- Avance 300 km.
- Reduza a pressão do pneu traseiro esquerdo para
17 lb.
- Avance 100 km.
- Reduza a pressão do pneu dianteiro direito para
18 lb.
- Abasteça mais 10 litros.
- Avance 200 km.
A cada operação de movimento, mostre na tela a
distância percorrida e a quantidade de combustível
restante.
FIM.