Baixe o app para aproveitar ainda mais
Prévia do material em texto
Universidade Federal de Itajuba´ Campus Itabira Lista de exerc´ıcios 1 Teste 1, dia 05/09/2013 Obs.: Em todos os Tipos Abstrato de Dados (TAD), considere dados privados e operac¸o˜es pu´blicas. (1) Considere o TAD Ponto composto por uma tupla (x, y) ∈ R2. O TAD tambe´m sera´ composto por operac¸o˜es para atribuir e obter valores dos pontos (gets e sets) ale´m das operac¸o˜es: • distancia: recebe um Ponto como parmˆetro e retorna a distaˆncia entre os dois; • colineares: recebe dois Pontos como paraˆmetros e retorna verdadeiro se os treˆs pontos sa˜o colineares ou falso caso contra´rio. Implemente o TAD Ponto e um int main() para testar suas operac¸o˜es. (2) Considere o TAD Triangulo composto de treˆs Pontos (definidos no exercicio 1) que represen- tam seus ve´rtices. Ale´m disto, as seguintes operac¸o˜es sa˜o definidas: • Construtor: recebe como parmˆetros 6 valores para definir um Triangulo. Caso os valores passados na˜o possam formar um Triangulo, uma mensagem deve ser informada e todos os pontos assumirem valor na origem (0, 0); • perimetro: retorna o per´ımetro do Triangulo; • validar: recebe 3 pontos e retorna verdadeiro se eles podem formar um Triangulo ou falso, caso contra´rio. Implemente o TAD Triangulo, considerando que sera˜o usados ponteiros para armazenar cada um de seus Pontos (utilizar alocac¸a˜o dinaˆmica de memo´ria). Implemente tambe´m e um int main() para testar as operac¸o˜es do TAD. (3) Considere o TAD Circulo composto de um Ponto que define o seu centro e um valor r ∈ R que define o seu raio. As seguintes operac¸o˜es sa˜o definidas para o TAD: • Construtor: recebe como parmˆetros 3 valores: os dois primeiros referentes ao centro e o u´ltimo para o raio (caso seja negativo, uma mensagem deve ser informada); • perimetro: retorna o per´ımetro do Circulo; • area: retorna a a´rea do Circulo; • pontoDentro: recebe um Ponto como paraˆmetro e retorna verdadeiro caso o Ponto esteja dentro do Circulo ou falso, caso contra´rio; • intersepta: recebe um Circulo como paraˆmetro e retorna verdadeiro caso exista intersec¸a˜o entre as circunfereˆncias dos Circulos ou falso, caso contra´rio. Implemente o TAD Circulo e um int main() para testar suas operac¸o˜es. (4) Considere o TAD Fracao que armazena dois valores n, d ∈ N que representam o numerador e o denominador de uma frac¸a˜o. As operac¸o˜es deste TAD sa˜o: • Construtor: recebe como paraˆmetros 2 valores: numerador e denominador da frac¸a˜o. Se denominador for 0, uma mensagem deve ser enviada e o denominador alterado para 1 • valorReal: retorna o valor real da Fracao; • soma: recebe como paraˆmetro uma Fracao e realiza a soma, retornando outra Fracao; • multiplica: recebe uma Fracao e realiza a multiplicac¸a˜o, retornando outra Fracao; • intersepta: recebe um Circulo como paraˆmetro e retorna verdadeiro caso exista intersec¸a˜o entre as circunfereˆncias dos Circulos ou falso, caso contra´rio. Implemente o TAD Fracao e um int main() para testar suas operac¸o˜es. (5) Considere o TAD Pessoa que armazene como dados o nome, o ano de nascimento e o sexo de uma pessoa. As seguintes operac¸o˜es sa˜o definidas para o TAD: • atribuirNome: recebe uma cadeia de caracteres como paraˆmetro e atribui ao nome da Pessoa; • atribuirAno: recebe um valor inteiro e, caso seja va´lido, atribui a` Pessoa e retorna ver- dadeiro. Caso contra´rio, retorna falso; • atribuirSexo: recebe um caractere e, caso seja va´lido, atribui a` Pessoa e retorna verdadeiro. Caso contra´rio, retorna falso; • diferencaIdade: retorna um valor inteiro que determina a diferenc¸a de idade entre as duas pessoas; • Construtor: recebe 3 parametros ( um p/ cada membro) caso ao valor de algum dos parametros seja inva´lido, uma mensagem deve ser exibida Implemente o TAD Pessoa e um int main() para testar suas operac¸o˜es. (6) Em estat´ıstica, entende-se por moda aquele valor que aparece com mais frequeˆncia em uma amostra. Fac¸a um programa onde o usua´rio digite uma quantidade qualquer de valores inteiros maiores que zero (ao digitar um valor negativo, o programa termina a coleta de valores) e enta˜o calcule a moda da amostra. O seu programa deve adotar uma pol´ıtica de alocac¸a˜o/desalocac¸a˜o dinaˆmica de memo´ria que minimize o desperd´ıcio (no ma´ximo 10 ce´lulas podem ser alocadas e nao utilizadas). (7) Suponha que A ⊂ Z e B ⊂ Z sejam conjuntos de nu´meros inteiros na˜o nulos de qualquer cardinalidade. Implemente func¸o˜es em C++ para calcular A ∩ B A ∪B A \B. Cada func¸a˜o devera´ receber um vetor de inteiros para representar A e B (alocados dinamicamente) e retornar um vetor de inteiros contendo o resultado da operac¸a˜o. O vetor resultante na˜o deve conter elementos repetidos e seu tamanho deve ser exatamente o necessa´rio para armazenar o resultado da operac¸a˜o. Em cada um dos vetores, use a primeira ce´lula para determinar quantos elementos existem no vetor (a partir da ce´lula 1). Implemente uma func¸a˜o int main() para realizar os testes.
Compartilhar