Você está na página 1de 7

1

Programao
Licenciatura em Engenharia Informtica: 1 ano - 2 semestre 2013/2014

Guio laboratorial n. 2
Estruturas
Tpicos da matria:
- Estruturas e funes.
- Arrays de estruturas.
- Definies de tipos.
- Unions.

Bibliografia:
K. N. King, C Programming: A Modern Approach: Captulo 16.

Nota: antes da implementao deve definir uma estratgia genrica para cada um dos
exerccios propostos.

1. Considere que necessita de armazenar informao sobre figuras geomtricas num espao com
duas dimenses.
a) Crie tipos estruturados que lhe permitam representar um ponto e um rectngulo.
b) Desenvolva uma funo que inicialize uma estrutura do tipo rectngulo. Toda a informao
necessria deve ser fornecida pelo utilizador. A funo devolve a estrutura inicializada.
c) Desenvolva uma funo que devolva a rea de uma estrutura do tipo rectngulo passada
como argumento;
d) Desenvolva uma funo que verifique se uma estrutura do tipo rectngulo passada como
argumento um quadrado. Se for, a funo deve devolver 1. Caso contrrio, devolve 0.
e) Desenvolva uma funo que receba, como argumentos, uma estrutura do tipo rectngulo e um
ponto e devolva 1 se o ponto estiver dentro do rectngulo.
f) Desenvolva uma funo que desloque um rectngulo no plano. A funo recebe trs
argumentos: um ponteiro para o rectngulo o deslocar, o deslocamento ao longo do eixo xx e
o deslocamento ao longo do eixo yy.
g) Declare uma tabela que permita armazenar 4 rectngulos. A tabela deve ser uma varivel
local da funo main(). Utilize a funo desenvolvida na alnea b) para preencher todos os
elementos da tabela.
h) Desenvolva uma funo que verifique se numa tabela onde estejam armazenados vrios
rectngulos existem dois que tenham a mesma rea. A funo recebe como argumentos o
endereo do primeiro elemento da tabela e o nmero de elementos que esta contm. Como
resultado, deve devolver o valor 1 se existirem dois rectngulos com a mesma rea (devolve 0
se todos os rectngulos tiverem reas diferentes).
2
2. A polcia pretende armazenar informao sobre um conjunto de criminosos. Para cada um dos
criminosos, a informao a armazenar a seguinte: nome, altura (em cm) e peso (em Kg).
a) Crie um tipo estruturado que permita guardar a informao relativa a um criminoso;
b) Declare uma tabela que permita armazenar um mximo de 100 criminosos. A tabela deve ser
uma varivel local da funo main().
Aps ter declarado a tabela, inicialize-a com os criminosos: {Joao Ratao, 175 cm, 120 Kg};
{Gato das Botas, 199 cm, 67 Kg}; {Mancha Negra, 150 cm, 80 Kg}; {Etelvina Seabra,
156 cm, 45 Kg}.
c) Desenvolva uma funo que escreva no monitor a informao relativa a um criminoso. A
funo recebe, como argumentos, um ponteiro para o incio da tabela, o nmero de elementos
que esta contm e a posio em que se encontra a estrutura relativa ao criminoso pretendido;
d) Desenvolva uma funo que procure suspeitos de um determinado crime. A funo recebe,
como argumentos, um ponteiro para o incio da tabela, o nmero de elementos que esta
contm, o peso aproximado e a altura aproximada do suspeito. Deve percorrer a tabela e
escrever no monitor a informao relativa a criminosos cuja diferena de peso e de altura no
seja superior a 10% dos valores indicados como argumento.
e) Desenvolva uma funo que permita retirar da tabela a informao relativa a uma pessoa. A
funo recebe, como argumentos, um ponteiro para o incio da tabela, o nmero de elementos
que esta contm e o nome da pessoa a retirar. Se existir algum com esse nome na tabela a
sua estrutura deve ser eliminada. Devolve como resultado o nmero de elementos que
ficaram na tabela aps a eliminao.


3. Pretende-se criar uma agenda para armazenar nmeros de telefone (nome, rede e nmero).
a) Crie um tipo estruturado que lhe permita armazenar essa informao.
b) Declare uma tabela que lhe permita armazenar 100 nmeros de telefones. A tabela deve ser
uma varivel local da funo main().
c) Desenvolva uma funo que inicialize uma estrutura do tipo telefone. passado como
argumento um ponteiro para a estrutura a inicializar. Os dados so fornecidos pelo utilizador.
d) Desenvolva uma funo que liste todas as pessoas cujo telefone pertena a uma determinada
rede. A funo recebe como argumentos um ponteiro para o incio da tabela, o nmero de
elementos que esta contm e a indicao de qual a rede em causa.
e) Desenvolva uma funo que descubra todas as pessoas que vivem na mesma casa. Considere
que duas pessoas vivem na mesma casa se tiverem o mesmo nmero de telefone;
f) Desenvolva uma funo para retirar da tabela a informao relativa a uma pessoa cujo nome
passado como parmetro. Pode assumir que os nomes so nicos.
g) Criar um programa que inicialize tabela com informao sobre determinado nmero de
pessoas (o nmero de pessoas introduzido atravs da linha de comando). A seguir deve
listar todas as pessoas que pertencem a uma determinada rede (cuja identificao tambm
passado como argumento da linha de comando). Finalmente, o programa deve pedir ao
utilizador que introduza o nome de uma pessoa para ser retirada da tabela.
3
4. O aeroporto de Coimbra pretende um programa para gerir a informao relativa s partidas de
voos. Cada voo identificado por: nmero do voo, nome da companhia, cidade destino e hora de
partida (horas e minutos).
a) Crie um tipo estruturado chamado struct tempo que permita armazenar as componentes de
uma determinada hora de um dia (horas e minutos).
b) Crie um tipo estruturado chamado struct voo que permita armazenar a informao relativa a
um voo. O campo que armazena a hora de partida deve ser do tipo struct tempo.
c) Desenvolva uma funo que escreva o contedo dos campos de uma varivel estruturada do
tipo struct voo. A funo recebe como argumento a varivel j preenchida.
d) Desenvolva uma funo que permita introduzir informao relativa a um novo voo.
passado como argumento um ponteiro para a estrutura a inicializar.
e) Desenvolva uma funo que altere a hora de partida de um voo. Recebe como argumento um
ponteiro para uma estrutura j preenchida e solicita ao utilizador as novas componentes da
hora para efectuar a alterao.
f) Desenvolva uma funo que verifique se um determinado voo j partiu. Recebe como
argumentos uma estrutura do tipo struct voo onde est armazenada a informao do voo e
uma estrutura do tipo struct tempo onde est armazenada a hora actual. Devolve 1 se o voo j
tiver partido, ou 0, se isso ainda no tiver acontecido.
g) Declare uma tabela que lhe permita armazenar informao relativa a 300 voos. A tabela deve
ser uma varivel local da funo main().
h) Desenvolva uma funo que permita adicionar novos voos tabela. A funo recebe como
argumentos um ponteiro para o incio da tabela e um ponteiro para o inteiro que indica
quantos voos existem. o utilizador que indica quantas novas entradas quer inserir e que
especifica a informao relativa a cada um dos novos voos. A funo deve actualizar a tabela
e o inteiro referenciado pelo segundo argumento, indicando quantos voos passam a existir.
i) Desenvolva uma funo que liste a informao completa de todos os voos armazenados na
tabela. A funo recebe como argumentos um ponteiro para o incio da tabela e o nmero de
voos que esta contm.
j) Desenvolva uma funo que verifique quais os voos que partem nos prximos 30 minutos.
Deve ser escrito o nmero, o destino e o tempo que falta para a partida de cada um desses
voos. Um ponteiro para o incio da tabela de voos, o nmero de elementos que esta contm e
a hora actual so passados como argumentos.
k) Desenvolva uma funo que retire da tabela todos os voos que j partiram. So passados
como argumentos um ponteiro para o incio da tabela, um ponteiro para um inteiro que indica
quantos voos esta contm e a hora actual. A funo deve actualizar a tabela e o contador de
voos.
l) Crie um programa que construa um menu com o seguinte formato:
1. Introduzir novos voos
2. Listar todos os voos
3. Listar proximos voos
4. Actualizar tabela de voos
5. Terminar
4
O programa deve fazer a gesto das seleces que o utilizador for efectuando. Termina a
execuo quando for seleccionada a opo 5.

Sugesto: Utilize a seguinte funo para obter a hora actual do sistema. O resultado devolvido
numa estrutura do tipo struct tempo.
#include <stdio.h>
#include <time.h>

/* Estrutura auxiliar para guardar as componentes da hora */
struct tempo{
int h, m;
};

struct tempo hora_actual()
{
time_t a;
struct tm* b;
struct tempo actual;

time(&a);
b = localtime(&a);
actual.h = b->tm_hour;
actual.m = b->tm_min;
return actual;
}

/* Exemplo de utilizao da funo hora_actual() */
int main()
{
struct tempo t = hora_actual();

printf(" So %2.2d:%2.2d\n", t.h, t.m);
return 0;
}

Proposta de trabalho: Altere o programa de gesto do aeroporto de modo a que os voos fiquem
ordenados na tabela por hora de partida. Efectue as alteraes necessrias nas funes que
implementou.


5. O dono de um circo pretende armazenar a informao relativa s diferentes famlias de animais
que fazem parte do circo. Para cada famlia, a informao relevante a seguinte: nome, n. de
elementos adultos, n. de crias, custo dirio da famlia e nome do treinador.
a) Crie um tipo estruturado que lhe permita armazenar essa informao;
b) Declare uma tabela que lhe permita armazenar informao relativa a 50 famlias. A tabela
deve ser uma varivel local da funo main(). As estruturas relativas s vrias famlias
5
esto ordenadas na tabela por ordem decrescente do custo de manuteno dirio. Inicialize a
tabela com a seguinte informao (no est necessariamente na ordem certa):
- Famlia Tigre, 2 adultos, 4 crias, 500! custo dirio, treinador Mrio Mata.
- Famlia Elefante, 2 adultos, 1 cria, 1234! custo dirio, treinador Joo Romeu.
- Famlia Pinguim, 10 adultos, 3 crias, 79! custo dirio, treinador Artur Pato.
- Famlia Tarntula, 4 adultos, 26 crias, 45! custo dirio, treinadora Lusa Silva.
c) Desenvolva uma funo que adicione uma nova famlia ao circo. A informao sobre a nova
famlia deve pedida ao utilizador. Certifique-se que aps ter inserido a informao relativa
nova famlia, a tabela continua ordenada.
d) Desenvolva uma funo que altere o nmero de elementos de uma famlia. A funo recebe o
endereo da estrutura a alterar e a variao no nmero de adultos e no nmero de crias (a
variao pode ser negativa ou positiva)


6. A pizzaria Pepe Verde decidiu informatizar a sua cozinha. A informao que deve ser
armazenada a seguinte:
- existem 6 ingredientes bsicos necessrios para a confeco das pizzas: queijo, tomate,
fiambre, cebola, pimentos, cogumelos. necessrio saber, em cada momento, qual a
quantidade em stock de cada ingrediente;
- existem 5 tipos de pizzas. Cada pizza identificada pelo nome, tempo de cozedura, preo
e quantidade necessria de cada um dos ingredientes;

a) Crie as estruturas de dados necessrias para armazenar toda a informao;
b) Inicialize as estruturas com informao sua escolha;
c) Desenvolva uma funo que verifique se existem ingredientes necessrios para fabricar uma
determinada pizza. A funo deve receber como argumento a informao sobre qual a pizza a
fabricar e uma referncia que lhe permita aceder estrutura de dados onde esto armazenadas
as quantidades em stock dos ingredientes. A funo devolve 1 se existirem ingredientes
suficientes ou 0 no caso contrrio;
d) Desenvolva uma funo que actualize o preo de uma determinada pizza. A funo recebe
como argumento o novo preo e uma referncia que lhe permita aceder informao sobre a
pizza que vai ser modificada.
e) Desenvolva uma funo que escreva no monitor os nomes de todas as pizzas que demorem
menos tempo a cozinhar do que um determinado valor. A funo recebe como argumento o
tempo mximo de cozedura permitido e uma referncia para a estrutura de dados onde est
armazenada a informao sobre todas as pizzas.

Nota: ao resolver as alneas c) a e) deve assumir que as estruturas onde est armazenada a
informao so locais (para ter acesso a elas deve utilizar os argumentos das diferentes funes);




6
7. Considere as seguintes definies:
# define MAXP 100

enum categoria {LIVRO, REVISTA, JORNAL};

struct data {
int dia, mes, ano;
};
struct pub {
char nome[50];
struct data d_entrada;
char cota[10];
enum categoria tipo;
union {
char autor[50];
int numero;
struct data d_publicacao;
} u;
};

int main()
{
struct pub catalogo[MAXP];
int n_pub = 0;

....
}
O array catalogo serve para armazenar informao relativa a um conjunto de publicaes de
uma biblioteca. Considere que existem trs tipos de publicaes: livros, revistas e jornais.
Alm da informao geral: nome, data de entrada, cota e tipo de
publicao, cada publicao tem uma informao especfica: autor do livro,
nmero da revista ou data de publicacao do jornal.
A varivel inteira n_pub indica quantas publicaes existem no array catalogo. Varia entre 0
(no existe informao sobre nenhuma publicao) e MAXP (o array est completamente cheio).
Tanto o catalogo como n_pub so variveis locais da funo main().
A informao no array catalogo est ordenada por tipo de publicao: primeiro devem surgir
todos os livros, em segundo lugar surgem as revistas e, no final, aparecem os jornais. Os
elementos de cada categoria esto organizados por ordem de insero no array.
a) Desenvolva uma funo que permita inserir uma nova publicao no array catalogo. Os
dados para inicializao so fornecidos pelo utilizador.
b) Desenvolva uma funo que mostre toda a informao armazenada no array.
c) Desenvolva uma funo que escreva no monitor os ttulos de todos os livros que tenham sido
escritos por um autor cujo nome passado como argumento;
d) Desenvolva uma funo que elimine do catlogo todos os jornais que tenham sido publicados
antes de 1995;
7

8. Considere que, num determinado jardim zoolgico, existem animais de trs tipos: mamferos,
rpteis e peixes (cada um dos animais s pertence a um dos grupos). Cada animal identificado
pelas seguintes caractersticas:
Nome, pas de origem e idade
caso seja mamfero -> perodo de amamentao (inteiro)
caso seja rptil -> o seu habitat natural (mximo 10 caracteres)
caso seja peixe -> indicao se de gua doce ou salgada (caracter)
Estabelea as estruturas de dados que possibilitem representar:
a) um animal;
b) um conjunto de 100 animais;
c) Desenvolva uma funo que permita inicializar a estrutura de dados criada na alnea b) com
N animais. O valor N passado como argumento para a funo.
d) Descobriu-se que o utilizador cometeu um erro ao inicializar a estrutura de dados relativa a
um golfinho, uma vez que o considerou como sendo um peixe de gua salgada. Desenvolva
uma funo que localize o erro na estrutura de dados e o corrija.

Nota: A estrutura de dados criada na alnea b) deve ser uma varivel local da funo main(),
logo necessrio utilizar os mecanismos habituais de comunicao entre funes (argumentos e
valor devolvido) para resolver as alneas c) e d).

Você também pode gostar