You are on page 1of 6

DCC107 - Laboratrio de Programao II Lista de Exerccios 2 TADs

Parte 1 - Domnio de dados

1. 2.

Conceitos

Qual a diferena entre TAD e domnio de dado?


Exemplos

D pelo menos 3 exemplos de tipos de dados. Pelo menos um exemplo deve ser um tipo primitivo e pelo menos um deve ser um TAD. Mostre, para cada exemplo, por que ele pode ser considerado um tipo de dados. 3.
Enumerao

Formule denies por enumerao para as estaes e para os meses do ano. 4.


Domnios

Dena domnios apropriados para: a) b) c) d) e) f) retas, dadas por dois de seus pontos; endereos, dados por rua e nmero; voos, dados por distncia e tempo de durao; ponto no globo terrestre, dados por latitude e longitude; contas bancrias, dadas por nmero, saldo e nome do correntista; carros nacionais, com as informaes: identicao (composta de estado e placa), ano de registro e se tem infraes registradas; g) carros estrangeiros, com as informaes: pas de origem, data de entrada e placa.

5.

Domnios com vetores

Dena os seguintes domnios: a Polinmio com coecientes reais: 5.2x3 + 4.7x2 + 2.0x 4.0 b Uma matriz 3 5 de reais pode ser vista como um vetor composto de 3 linhas, cada uma delas sendo, por sua vez, um vetor com 5 componentes reais. Dena um domnio baseado nesta ideia. 1

6.

Polinmio genrico

Um polinmio nas variveis x, y e z consiste de vrios termos. Cada termo pode ser visto como uma qudrupla consistindo do coeciente em x, y e z e do coeciente do termo. Formule uma denio de domnio para representar tais polinmios conforme esta ideia.
Parte 2 - TAD

1.

TAD Inteiro

Um TAD (Tipo Abstrato de Dados) nada mais nada menos que um tipo de dados denido pelo usurio. Podemos denir TADs a partir da combinao de tipos primitivos ou at mesmo outros TADs previamente denidos. Logo, basicamente no h grande diferena nos algoritmos que fazamos antes de comearmos a usar TADs. O que muda so os tipos com os quais trabalhamos. Imagine uma situao hipottica em que quisssemos denir um TAD Inteiro que imitasse o comportamento do tipo primitivo int. Como um TAD, no podemos usar os operadores +,,,/ etc.. Dena um conjunto de operaes (atravs de procedimentos e funes) para este TAD que permitam substituir o uso dos operadores mencionados. Estas operaes devem realizar as operaes bsicas que o tipo primitivo int normalmente suporta. Dena tambm operaes para leitura e impresso de variveis do tipo. OBS.: Foque apenas nos prottipos
das operaes. O domnio de dados ser uma nica varivel do tipo inteiro.

2.

PA Inteiro

Crie um PA (Programa Abstrato) que crie duas variveis do tipo Inteiro imaginado no exerccio anterior e execute as operaes matemticas bsicas com ele. Faa tambm o mesmo programa utilizando o tipo primitivo int. Veja a similaridade entre os dois programas. Qual a diferena bsica? 3.
Centro Geomtrico

Considerando o TAD ponto implementado, crie uma operao que receba um vetor de pontos (Ponto *v)) e calcule o centro geomtrico desse conjunto de pontos usando a seguinte expresso
x = xi , n y = yi n

onde xi e yi representam as coordendas x e y do ponto i e x e y as coordenadas do ponto que representa o centro geomtrico. Essa operao deve atribuir aos campos do ponto encapsulado as coordenadas do centro geomtrico calculado. 4.
TAD Circulo

Abaixo encontra-se a denio do TAD Circulo presente no arquivo circulo.h. Os dados armazenados para representar um crculo so o seu raio e o seu centro, sendo o centro do tipo Ponto (TAD Ponto j implementado). Use a denio do TAD abaixo e implemente, no arquivo circulo.c (MI), 2

as operaes listadas no TAD. Arquivo circulo.h:


1 2 3 4 5 6 7 8 9 10 11 12 }; public: Circulo(float r, float x, float y); float area(); bool pontoInteriorAoCirculo(Ponto *p); ~Circulo; class Circulo { private: float raio; Ponto *centro;

5.

TAD Quadrado

Usando o TAD Ponto, implementado em sala de aula, implemente o TAD quadrado.


criar um quadrado liberar a memria ocupada por um quadrado acessar um ponto do quadrado atribuir/alterar um ponto do quadrado consultar se um ponto x est dentro ou fora do quadrado

6.

TAD Triangulo

Usando o TAD Ponto, implementado em sala de aula, implemente o TAD Triangulo usando 3 objetos do tipo ponto para representar os vrtices v1, v2 e v3 do tringulo. Implemente as operaes:
criar um tringulo (obs.: vericar se os pontos formam um tringulo) liberar a memria ocupada por um tringulo acessar um ponto do tringulo atribuir/alterar um ponto do tringulo consultar se um ponto x est dentro ou fora do tringulo

7.

TAD VetorDeTriangulos

Crie um TAD VetorDeTriangulos que representa um vetor de 50 posies contendo 50 tringulos. O TAD deve possuir um procedimento Adiciona, que adiciona um tringulo na prxima posio vazia do vetor, se houver espao, ou retorna uma mensagem de erro caso no haja. 8.
PA TriCirculo

Faa um programa em C++ em que o usurio entre com o nmero de crculos e o nmero de tringulos (TADs denidos em exerccios anteriores). O programa deve alocar dinamicamente um vetor para guardar a quantidade de crculos e de tringulos digitados pelo usurio. 3

DICA: Lembre-se que um vetor um ponteiro para o primeiro elemento deste vetor. 9.
TAD Matriz

No exerccio 4.3 da Lista 0, denimos um conjunto de procedimentos e funes para trabalhar com matrizes e implementamos a funo main para testar os procedimentos implementados. Construa um TAD Matriz para representar uma matriz bidimensional m n e que realize as operaes contidas naquele exerccio. Como voc mudaria os prottipos daquelas funes para se adequarem ao seu TAD? Alm daquelas, implemente as seguintes operaes: i. ii. iii. iv. 10. Um construtor que inicialize com zero os elementos da matriz Uma operao para consultar um elemento a partir dos ndices i e j Uma operao para atribuir um elemento na posio (i, j ) da matriz Uma operao para imprimir na tela a matriz

Faa um PA para testar seu TAD e as operaes implementadas.


TAD Racional

Implemente um tipo abstrato de dados para representar nmeros racionais. Um nmero racional o quociente de dois nmeros inteiros. A denio do tipo apresentada a seguir:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 }; public: Racional(int a, int b); Racional* soma(Racional *rac2); Racional* subtracao(Racional *rac2); Racional* multiplicacao(Racional *rac2); Racional* divisao(RAcional *rac2); void imprime(); bool ehIgual(Racional *rac2); ~Racional(); class Racional { private: int numerador; int denominador;

11.

TAD Complexo

Dena um TAD para representar nmeros complexos, com suas operaes bsicas. Em seguida, desenvolva o MI do TAD que voc deniu. Faa um PA para testar o seu TAD. 12.
TAD Conjunto

Suponha o TAD Conjunto como denido a seguir. Os dados necessrios para representar um conjunto de inteiros so um vetor de valores booleanos e o seu tamanho mximo. Cada ndice do vetor representa um inteiro. O 4

valor false representa a ausncia desse inteiro no conjunto, e o valor true representa a existncia do mesmo no conjunto (exemplo abaixo). Desenvolver o construtor, o destrutor e as operaes do MI deste TAD.
Insere: insere o elemento x no conjunto Pertence: verica se o elemento x pertence ao conjunto Uniao: realiza a unio do conjunto encapsulado com c2, e guarda o

resultado no conjunto encapsulado Intersecao: cria e retorna um novo conjunto que a interseo do conjunto encapsulado com c2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 }; public: Conjunto(int n); void Insere(int x); bool Pertence(int x); void Uniao(Conjunto *c2); Conjunto* Intersecao(Conjunto *c2); ~Conjunto(); class Conjunto { private: bool *v; int tam;

13.

TAD Vetor3D

Considere o TAD Vetor3D abaixo, que representa um vetor matemtico com coordenadas (x, y, z ). Desenvolver o construtor e as operaes do TAD.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 public: Vetor3D(float xx, float yy, float zz); float getX(); float getY(); float getZ(); void setX(float xx); void setY(float yy); void setZ(float zz); Vetor3D* Copia(); float Norma(); void Normaliza(); class Vetor3D { private: float x, y, z;

17 18 19 20 };

float ProdutoEscalar(Vetor3D *v2); Vetor3D* ProdutoVetorial(Vetor3D *v2); ~Vetor3D();

14. 15.

PA Vetor3D

Desenvolva um PA que utilize o TAD Vetor3D do exerccio anterior.


TADs no PARE

Lembrando o sistema PARE implementado no exerccio 6.4 da Lista 0, modique-o para que utilize o conceito de TADs. Redena as structs Aluno e Disciplina como classes e inclua os procedimentos e funes implementados como operaes pertinentes a cada classe. Inclua tambm as funes de arquivos do exerccio 7.4 daquela mesma lista. Em seguida, modique a funo main j implementada (PA) para testar os seus novos TADs. 16.
Biblioteca

Faa um programa para gerenciar uma biblioteca. Para tal, crie um TAD Livro que conter os campos ttulo, autor, editora, ano e um booleano chamado emprestado que servir para controlar se o livro est na biblioteca ou se est emprestado. Crie tambm um campo codigo que receber um valor inteiro positivo nico representando o cdigo de cada livro. Crie um TAD Biblioteca para armazenar um vetor contendo todos os livros da biblioteca. Todos os elementos do vetor devem ser inicializados com NULL. Crie um PA (Programa Abstrato) que cria uma biblioteca com 500 livros. O programa dever fornecer um menu com as seguintes opes, que devem ser operaes do TAD Biblioteca: (a) Incluir livro (nessa opo sero lidos todos os campos de um livro que ser armazenado na primeira posio disponvel do vetor); (b) Listar livros (Exibe todos os livros cadastrados); (c) Consulta livro (Exibe na tela as informaes de um livro especco atravs de seu cdigo); (d) Empresta livro (pede o cdigo do livro e caso esteja na biblioteca, executa o emprstimo); (e) Recebe livro (altera o campo emprestado de zero para um. O acesso do livro feito atravs de seu cdigo). (f) Lista livros emprestados. (g) Lista livros disponveis para emprstimo. Todas as opes acima sero implementadas como operaes do TAD Biblioteca. EXTRA: Armazene os livros includos em um arquivo texto e carregue este mesmo arquivo toda vez que o programa for iniciado, de maneira similar ao que foi feito com o sistema acadmico no exerccio anterior.

You might also like