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:



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:


5. Definir uma classe que represente um círculo.

Esta classe deve possuir
métodos Privados para:
  1. calcular a área do círculo;
  2. calcular a distância entre os centros de 2 círculos;
  3. calcular a circunferência do círculo.
E métodos Públicos para:
  1. definir o raio do círculo, dado um número real;
  2. aumentar o raio do círculo, dado um percentual de aumento;
  3. definir o centro do círculo, dada uma posição (X,Y);
  4. imprimir o valor do raio;
  5. imprimir o centro do círculo.
  6. 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. 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: 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:
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:
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:
A cada operação de movimento, mostre na tela a distância percorrida e a quantidade de combustível restante.



FIM.