Você está na página 1de 5

Universidade Federal de Ouro Preto UFOP

Instituto de Cincias Exatas e Biolgicas ICEB


Departamento de Computao DECOM
Disciplina: Algoritmos e Estruturas de Dados I CIC102
Professor: David Menotti (menottid@gmail.com)

Lista de Exerccios sobre


Tipos de Dados Abstratos (TDA) e Estruturas de Dados em C
1) Escreva uma especificao de tipos de dados abstratos (TDA) para os nmeros
complexos, a + bi, onde abs(a + bi) sqrt(a2 + b2), (a + bi) + (c + di) (a + c) + (b +
d)i, (a + b) * (c + di) (a * c b * d) + (a * d + b * c)i e (a + bi) (-a) + (-b)i.
Ento, implemente (cm C/C++ ou Java) nmeros complexos, conforme especificado
acima, usando estruturas com partes reais e complexas. Escreva rotinas para somar,
multiplicar e negar (inverter) tais nmeros.

2) Vamos supor que um nmero real seja representado por uma estrutura em C, como
esta:

struct realtype
{
int left;
int right;
};

onde left e right representam os dgitos posicionados esquerda e direita do ponto decimal,
respectivamnete. Se left for um inteiro negativo, o nmero real representado ser negativo.

a. Escreva uma rotina para inserir um nmero real e criar uma estrutura
representado esse nmero;
b. Escreva uma funo que aceite essa estrutura e retorne o nmero real
representado por ela.
c. Escreva rotinas add, substract e multiply que aceitem duas dessas estruturas e
definam o valor de uma terceira estrutura para representar o nmero que seja a
soma, a diferena e o produto, respectivamente, dos dois registros de entrada.

3) Suponha que um inteiro precise de quatro bytes, um nmero real precise de oito bytes
e um caractere precise de um byte. Pressuponha as seguintes definies e declaraes:

struct nametype
{
char first[10];
char midinit;
char last[20];
};
Universidade Federal de Ouro Preto UFOP
Instituto de Cincias Exatas e Biolgicas ICEB
Departamento de Computao DECOM
Disciplina: Algoritmos e Estruturas de Dados I CIC102
Professor: David Menotti (menottid@gmail.com)

struct person
{
struct nametype name;
int birthday[2];
struct nametype parentes[2];
int income;
int numchildren;
char address[20];
char city[10];
char state[2];
};

struct person p[100];

se o endereo inicial de p for 100, quais sero os endereos inicias (em bytes) de cada um dos
seguintes?

a. p[10]
b. p[200].name.midinit
c. p[20].income
d. p[20].address[5]
e. p[5].parents[1].last[10]

4) Suponha dois vetores, um de registros de estudantes e outro de registros de


funcionrios. Cada registro de estudante contm membros para um ltimo nome, um
primeiro nome e um ndice de pontos de graduao. Cada registro de funcionrio
contm membros para um ltimo nome, um primeiro nome e um salrio. Ambos os
vetores so classificados em ordem alfabtica pelo ltimo e pelo primeiro nome. Dois
registros com o ltimo e o primeiro nome iguais no aparecem no mesmo vetor.
Escreva uma funo em C para conceder uma aumento de 10% a todo funcionrio que
tenha um registro de estudante cujo ndice de pontos de graduao seja maior que 3.0.

5) Escreva uma funo semelhante do exerccio anterior, mas pressupondo que os


registros dos funcionrios e estudantes sejam mantidos em dois arquivos externos
classificados, em vez de em dois vetores classificados.

6) Usando a representao de nmeros racionais apresentada abaixo, escreva rotinas para


somar, subtrair e dividir tais nmeros.

typedef struct struct RATIONAL


{ {
int numerator; int numerator;
int denominator; int denominator;
} RATIONAL; };
Universidade Federal de Ouro Preto UFOP
Instituto de Cincias Exatas e Biolgicas ICEB
Departamento de Computao DECOM
Disciplina: Algoritmos e Estruturas de Dados I CIC102
Professor: David Menotti (menottid@gmail.com)

7) Implemente uma funo equal que determine se dois nmeros racionais, r1 e r2, so
iguais ou no reduzindo primeiramente r1 e r2 a seus termos mnimos e verificando
em seguida a igualdade.

8) Um mtodo alternativo para implementar a funo equal citada na questo anterior


seria multiplicar o denominador de cada nmero pelo numerador do outro e testar a
igualdade dos dois produtos. Escreva uma funo equal2 para implementar esse
algoritmo. Qual dos dois mtodos prefervel?

9) Definir e declarar o registro cuja representao grfica dada a seguir.

REG
NOME literal
SALRIO numrico
IDADE SEXO

numrico lgico

10) Escrever uma funo para atribuir um valor ao campo de nome SALRIO do registro
REG, descrito no exerccio anterior. Escreva tambm um programa (funo main) para
utilizar a funo criada.

11) Uma indstria faz a folha mensal de pagamentos de seus empregados baseada no
seguinte: Existe uma tabela com os dados do funcionrio

CADASTRO
FICHA
NOME HORAS NORMAIS
1 (literal) (numrico)
2
3 INSCRIO CLASSE HORAS EXTRAS
4 (numrico) (numrico) (numrico)

100

Fazer um algoritmo que processe a tabela e emita, para cada funcionrio seu
contracheque cujo formato dado a seguir:

NMERO DE INSCRIO: NOME:


SALRIO HORAS NORMAIS:
SALRIO HORAS EXTRAS:
DEDUO INSS:
SALRIO LQUIDO:

O salrio de referncia dever ser lido previamente.


Universidade Federal de Ouro Preto UFOP
Instituto de Cincias Exatas e Biolgicas ICEB
Departamento de Computao DECOM
Disciplina: Algoritmos e Estruturas de Dados I CIC102
Professor: David Menotti (menottid@gmail.com)

O salrio referente s horas extras calculado acrescentando 30% ao salrio-hora


normal.
O desconto do INSS de 11% do salrio bruto (salrio correspondente s horas
normais trabalhadas + salrio correspondente s horas extras).
Para o clculo do salrio, considerar que existem duas classes de funcionrios, a classe
1, cujo salrio 1,3 vezes o salrio de referncia, e a classe 2, cujo salrio 1,9 vezes o
salrio de referncia.

12) Para evitar erros de digitao de sequncias de nmeros de importncia fundamental,


como a matrcula de um aluno, o CPF do Imposto de Renda, o nmero de conta
bancria, geralmente adiciona-se ao nmero um dgito verificador. Por exemplo, o
nmero de matrcula 811057 usado como 8110573, onde 3 o dgito verificador,
calculado da seguinte maneira:
a. Cada algarismo do nmero e multiplicado por um peso comeando de 2 e
crescendo de 1 em 1, da direita para a esquerda:
8 7, 1 6, 1 5, 0 4, 5 3, 7 2;

b. Somam-se as parcelas obtidas:


56 + 6 + 5+ 0 + 15 + 14 = 96;

c. Calcula-se o resto da diviso desta soma por 11:


96 divido por 11 d resto 8 (96 = 8 11 + 8);

d. Subtrai-se de 11 o resto obtido:


11 8 = 3;

e. Se o valor encontrado for 10 ou 11, o dgito verificador ser 0; nos outros


casos, o dgito verificar o prprio resto da diviso.

Escrever um algoritmo capaz de:


1) Ler um conjunto de registros contendo, cada um, o nmero de uma conta bancria,
o dgito verificador deste nmero, o saldo da conta e o nome do cliente. O ltimo
registro, que no deve ser considerado contm o nmero de conta igual a zero.
2) Utilizando o esquema de verificao acima, imprimir duas listas de clientes
distintas no seguinte formato de sada:

CONTAS DE NMERO CORRETO


413599-7 987,30 Jacinto Pereira
111118- 121,99 Campos Sales
06
...

CONTAS DE NMERO ERRADO


765432-1 335,66 Jnia Faria
...
Universidade Federal de Ouro Preto UFOP
Instituto de Cincias Exatas e Biolgicas ICEB
Departamento de Computao DECOM
Disciplina: Algoritmos e Estruturas de Dados I CIC102
Professor: David Menotti (menottid@gmail.com)

13) Defina um Tipo Abstrato de Dados TMatriz, para representar matrizes quadradas de
tamanho n. Implemente as operaes para somar e multiplicar 2 matrizes. Implemente
ainda a operao do clculo da matriz inversa.

14) Voc dever implementar um tipo abstrato de dados TConjunto para representar
conjuntos de nmeros inteiros. Seu tipo abstrato dever armazenar os elementos do
conjunto e o seu tamanho n. Considere que o tamanho mximo de um conjunto 20
elementos e use arranjos de 1 dimenso (vetores) para a sua implementao. Seu TAD
deve possuir procedimentos (ou funes quando for o caso) para:
a. criar um conjunto vazio;
b. ler os dados de um conjunto;
c. fazer a unio de dois conjuntos;
d. fazer a interseo de dois conjuntos;
e. verificar se dois conjunto so iguais (possuem os mesmos elementos);
f. imprimir um conjunto;

Exerccios extrados de (Referncias)

[1] Aaron M. Tenenbaum, Yedidyah Langsam, Moshe J. Augenstein, Estruturas de Dados


Usando C, Makron Books/Pearson Education, 1995.
[2] Aaron M. Tenenbaum, Yedidyah Langsam, Moshe J. Augenstein, Data Strcutures Using
C, Prentice-Hall International Editions, 1995.
[3] Harry Farrer, Christiano Gonalves Becker, Eduardo Chaves Faria, Helton Fbio de
Matos, Marcos Augusto dos Santos, Miriam Loureno Maia, Algoritmos Estruturados, LTC
Editora, 3. edio, Rio de Janeiro, 1999.