PLANNING ET TARIFS / ESF AUTRANS JARDIN D`ENFANT

Transcription

PLANNING ET TARIFS / ESF AUTRANS JARDIN D`ENFANT
Universidade Federal de Itajub´a
Campus Itabira
Lista de exerc´ıcios 1
Teste 1, dia 04/09/2014
Obs1.: Em todos os Tipos Abstrato de Dados (TAD), considere dados privados e opera¸c˜oes
p´
ublicas.
Obs2.: Nas opera¸c˜oes de aloca¸c˜ao dinˆamica de mem´oria, sempre que um espa¸co for alocado ele
deve ser desalocado antes do t´ermino do programa.
(1) Considere o TAD Ponto composto por uma tupla (x, y) ∈ R2 . O TAD tamb´em ser´a composto
por opera¸c˜oes para atribuir e obter valores dos pontos (gets e sets) al´em das opera¸c˜oes:
• distancia: recebe um Ponto como parmetro
ˆ
e retorna a distˆancia entre os dois;
• colineares: recebe dois Pontos como parˆametros e retorna verdadeiro se os trˆes pontos s˜ao
colineares ou falso caso contr´ario.
Implemente o TAD Ponto e um int main() para testar suas opera¸c˜oes.
(2) Considere o TAD Triangulo composto de trˆes Pontos (definidos no exercicio 1) que representam seus v´ertices. Al´em disto, as seguintes opera¸c˜oes s˜ao definidas:
• Construtor: recebe como parmetros
ˆ
6 valores para definir um Triangulo. Caso os valores
passados n˜ao 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 contr´ario.
Implemente o TAD Triangulo, considerando que ser˜ao usados ponteiros para armazenar cada um
de seus Pontos (utilizar aloca¸c˜ao dinˆamica de mem´oria). Implemente tamb´em e um int main()
para testar as opera¸c˜oes 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 opera¸c˜oes s˜ao definidas para o TAD:
• Construtor: recebe como parmetros
ˆ
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 ´area do Circulo;
• pontoDentro: recebe um Ponto como parˆametro e retorna verdadeiro caso o Ponto esteja
dentro do Circulo ou falso, caso contr´ario;
• intersepta: recebe um Circulo como parˆametro e retorna verdadeiro caso exista interse¸c˜ao
entre as circunferˆencias dos Circulos ou falso, caso contr´ario.
Implemente o TAD Circulo e um int main() para testar suas opera¸c˜oes.
(4) Considere o TAD Fracao que armazena dois valores n, d ∈ N que representam o numerador e
o denominador de uma fra¸c˜ao. As opera¸c˜oes deste TAD s˜ao:
• Construtor: recebe como parˆametros 2 valores: numerador e denominador da fra¸c˜ao. 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 parˆametro uma Fracao e realiza a soma, retornando outra Fracao;
• multiplica: recebe uma Fracao e realiza a multiplica¸c˜ao, retornando outra Fracao;
Implemente o TAD Fracao e um int main() para testar suas opera¸c˜oes.
(5) Considere o TAD Pessoa que armazene como dados o nome, o ano de nascimento e o sexo de
uma pessoa. As seguintes opera¸c˜oes s˜ao definidas para o TAD:
• atribuirNome: recebe uma cadeia de caracteres como parˆametro e atribui o nome da Pessoa;
• atribuirAno: recebe um valor inteiro e, caso seja v´alido, atribui a` Pessoa e retorna verdadeiro. Caso contr´ario, retorna falso;
• atribuirSexo: recebe um caractere e, caso seja v´alido, atribui `a Pessoa e retorna verdadeiro.
Caso contr´ario, retorna falso;
• diferencaIdade: retorna um valor inteiro que determina a diferen¸ca de idade entre as duas
pessoas;
• Construtor:
recebe 3 parametros ( um p/ cada membro) caso ao valor de algum dos
parametros seja inv´alido, uma mensagem deve ser exibida
Implemente o TAD Pessoa e um int main() para testar suas opera¸c˜oes.
(6) Em estat´ıstica, entende-se por moda aquele valor que aparece com mais frequˆencia em uma
amostra. Fa¸ca um programa onde o usu´ario digite uma quantidade qualquer de valores inteiros
maiores que zero (ao digitar um valor negativo, o programa termina a coleta de valores) e ent˜ao
calcule a moda da amostra. O seu programa deve adotar uma pol´ıtica de aloca¸ca˜o/desaloca¸c˜ao
dinˆamica de mem´oria que minimize o desperd´ıcio (no m´aximo 5 c´elulas podem ser alocadas e nao
utilizadas).
(7) Suponha que A ⊂ Z e B ⊂ Z sejam conjuntos de n´
umeros inteiros n˜ao nulos de qualquer
cardinalidade. Implemente fun¸c˜oes em C++ para calcular
A∩B
A∪B
A \ B.
Cada fun¸c˜ao dever´a receber um vetor de inteiros para representar A e B (alocados dinamicamente)
e retornar um vetor de inteiros contendo o resultado da opera¸ca˜o. O vetor resultante n˜ao deve
conter elementos repetidos e seu tamanho deve ser exatamente o necess´ario para armazenar o
resultado da opera¸c˜ao. Em cada um dos vetores, use a primeira c´elula para determinar quantos
elementos existem no vetor (a partir da c´elula 1). Implemente uma fun¸c˜ao int main() para realizar
os testes.
(8) Para alocar dinamicamente uma matriz de dimens˜ao m × n, basta declarar um vetor de m
ponteiros (para o tipo de dados que desejar) e ent˜ao cada ponteiro deste vetor apontar´a para um
endere¸co onde ser˜ao armazenadas n c´elulas. Implemente um programa que aloque uma matriz
inteira de dimens˜ao m × n dinamicamente, (onde m e n s˜ao definidos pelo usu´ario). Ap´os isto, o
usu´ario deve preencher a matriz com valores e ent˜ao mostrar na tela esta matriz.
(9) Considere o programa abaixo e responda: Qual o valor de y ao final do programa?
int main()
{
int y, *p, x;
y = 0; p = &y; x = *p; x = 4;
(*p)++; x–; (*p) += x; printf (”y = %d”, y);
return(0);
}

Documents pareils

Version 4 diapos/page

Version 4 diapos/page ‡ SDVGHGLUHFWLRQFODLUHPHQWH[SULPpH

Plus en détail

Amefa Catalogue 2015

Amefa Catalogue 2015 and extensive expertise in manufacturing stainless steel products. We apply high quality standards to all our products to guarantee durability and lasting performance. The DVVXUDQFHRIÀQHTXDOLW\...

Plus en détail