Sei sulla pagina 1di 10

INSTITUTO POLITÉCNICO DE LEIRIA

ESCOLA SUPERIOR DE TECNOLOGIA E GESTÃO


Departamento de Engenharia Informática

Programação II

(Licenciatura em Engenharia Ambiente e Engenharia e Gestão Industrial)

Enumerações e Estruturas

Exercício 1
Uma determinada escola pretende guardar a seguinte informação acerca dos seus alunos:
número de inscrição
nome
sexo (masculino, feminino)
idade
a) Defina estruturas de dados que permitam:
i) Guardar a informação acerca de um aluno.
ii) Guardar a informação acerca de 1000 alunos.
b) Elabore um programa que permita as seguintes opções:
Inserir aluno
Listar dados acerca de todos os alunos
Listar dados acerca de um aluno
Listar todos os alunos do sexo feminino
Nº de alunos com idade superior a ....
Média das idades
Eliminar aluno
Sair

Para tal elabore funções que permitam:


i) Ler dados acerca de um aluno.
ii) Escrever no ecrã toda a informação acerca de um aluno.
iii) Listar no ecrã a informação acerca de todos os alunos.
iv) Listar no ecrã toda a informação acerca dos alunos do sexo feminino.
v) Calcular nº de alunos com idade superior a um dado valor.
vi) Calcular a média das idades.
vii) Eliminar um aluno.

Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 1/10
Resolução
#include <stdio.h>
#include <conio.h>
#include <ctype.h>

#define LIMITE 1000

typedef enum sexo {masculino, feminino} TSEXO;

typedef struct aluno


{
int numero;
char nome[30];
int idade;
TSEXO sexo;
}TALUNO; /*Dados de 1 aluno */

typedef TALUNO VECT[LIMITE]; /*Dados de 1000 alunos */

/*Protótipos das funções*/

TALUNO InserirAluno(void);
void ListarAluno(TALUNO);
void ListarAlunos(VECT, int);
void ListarFemininos(VECT, int);
int CalcularIdades(VECT, int, int);
float CalcularMedia(VECT, int);
void EliminaAluno(VECT, int*, int);
char menu(void);

void main()
{
char opcao;
int nalunos=0, idade, num;
VECT v_alunos; /*Vector que vai armazenar os dados de todos os
alunos*/

do{
opcao=menu();
if (opcao >='2' && opcao <='6' && nalunos==0){ /*Quando não
existem alunos no vector*/
printf("\n Imposs¡vel - NÆo existem alunos registados");
getch();
}
else
{
switch(opcao)
{
case '1':
if (nalunos<LIMITE)
v_alunos[nalunos++]=InserirAluno();
else
printf("\n Erro - N§ limite de alunos
atingido");
break;
case '2': ListarAlunos(v_alunos, nalunos);
break;
case '3': ListarFemininos(v_alunos, nalunos);
break;

Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 2/10
case '4':
printf("\n Idade a considerar: ");
scanf("%d",&idade);
printf("\n Existe(m) %d aluno(s)",
CalcularIdades(v_alunos, nalunos, idade));
break;
case '5': printf("\n A m‚dia das idades ‚: %f",
CalcularMedia(v_alunos, nalunos));
break;
case '6':
printf("\n Qual o n£mero de inscri‡Æo do
aluno");
scanf("%d",&num);
EliminaAluno(v_alunos, &nalunos, num);
}//swicth
} //else
printf("\n Pressione qualquer tecla para continuar");
getch();
}while(opcao!='0');

}
char menu(void){
char opcao;

do
{
clrscr();
printf("\n 1 - Inserir Aluno");
printf("\n 2 - Listar dados acerca de todos os alunos");
printf("\n 3 - Listar todos os alunos do sexo feminino");
printf("\n 4 - N§ de alunos com idade superior a...");
printf("\n 5 - M‚dia das idades");
printf("\n 6 - Eliminar Aluno");
printf("\n 0 - Sair");
printf("\n\n Escolha uma opçao: ");

opcao = getch();

if(opcao<'0' || opcao>'6'){
printf("ERRO_ Opção inválida");
getch();
}
}while(opcao<'0' ||opcao>'6');

return(opcao);
}

//i
TALUNO InserirAluno(void)
{ /*Ler dados acerca de um aluno*/
char sexo;
TALUNO aluno;

do{
printf("\n N£mero de inscri‡Æo: ");
scanf("%d",&aluno.numero);
if (aluno.numero <= 0)
printf("\n Numero Inv lido - Valor tem de ser
positivo");
}while(aluno.numero <= 0);
Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 3/10
printf("\n Nome: ");
fflush(stdin);
gets(aluno.nome);
do{
printf("\n Sexo: (M)asculino/(F)eminino: ");
scanf("%c",&sexo);
if (toupper(sexo) != 'M' && toupper(sexo) != 'F')
printf("\n Sexo s¢ pode ser M ou F");
}while(toupper(sexo) != 'M' && toupper(sexo) != 'F');
if (toupper(sexo) == 'M')
aluno.sexo = masculino;
else
aluno.sexo = feminino;
printf("\n Idade: ");
scanf("%d",&aluno.idade);

return aluno;
}

//ii
void ListarAluno(TALUNO aluno) /*Escrever no ‚cran a*/
{ /*informa‡Æo de um aluno*/
printf("\n N£mero de inscri‡Æo: %d",aluno.numero);
printf("\n Nome: %s",aluno.nome);
printf("\n Sexo: ");
if (aluno.sexo == masculino)
printf("masculino");
else
printf("feminino");
printf("\n Idade: %d",aluno.idade);
}

//iii
void ListarAlunos(VECT alunos, int nalunos)
{
int i; /*Listar no ‚cran a inf. acerca*/

/*de todos os alunos*/


for(i=0;i<nalunos;i++)
{
printf("\n--------------------------------------------");
ListarAluno(alunos[i]);
}
printf("\n--------------------------------------------");
}

//iv
void ListarFemininos(VECT alunos, int nalunos)
{
int i, cont=0; /*Listar no ‚cran a inf. dos*/

/*alunos de sexo feminino*/


for(i=0;i<nalunos;i++)
if (alunos[i].sexo == feminino)
{
printf("\n--------------------------------------------
");
ListarAluno(alunos[i]);
cont++;
}
if (!cont)
Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 4/10
printf("\n NÆo existem alunos do sexo feminino");
}

//v
int CalcularIdades(VECT alunos, int nalunos, int valor)
{ /*Calcula o n§ de alunos com*/
int i, conta=0; /*idade superior a determinado
valor*/

for(i=0;i<nalunos;i++)
if (alunos[i].idade > valor)
conta++;
return conta;
}

//vi
float CalcularMedia(VECT alunos, int nalunos)
{
int i, soma=0; /*Calcular a m‚dia das idades*/

for(i=0;i<nalunos;i++)
soma+=alunos[i].idade;
return (float)soma/nalunos;
}

//vii
void EliminaAluno(VECT alunos, int *nalunos, int num)
{
int i=0, enc=0, pos=0; /*Eliminar um aluno*/

while(i<*nalunos && !enc)


{
if (alunos[i].numero == num)
{
enc = 1;
pos = i;
}
i++;
}
if (enc) /*Se encontrou o aluno*/
{
for(i=pos;i<*nalunos-1;i++)
alunos[i] = alunos[i+1];
(*nalunos)--;
printf("Aluno eliminado");
}
else
printf("Esse aluno não faz parte da escola");

Exercício 2
A direcção do clube desportivo "SPORT CLUB" pretende um programa que auxilie na gestão da
informação relativa aos seus jogadores. Essa informação consiste em: nome, altura, modalidade
praticada (voleibol, basquetebol, andebol, futebol).

Para tal considere as seguintes declarações:


Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 5/10
typedef enum {voleibol, basquetebol, andebol, futebol} MODALIDADE;
typedef struct {
char nome[30];
float altura;
MODALIDADE mod;
} JOGADOR;
a) Defina a estrutura de dados CLUBE que permita armazenar em memória a informação relativa a
200 jogadores.
b) Elabore a função LeJogador que permite efectuar a leitura dos dados relativos a um jogador.
Considere o seguinte protótipo:
JOGADOR LeJogador(void);
c) Usando a função anterior, elabore uma função que permita efectuar a leitura dos dados relativos a
N jogadores (a indicar pelo utilizador).
d) Elabore uma função que escreva no ecrã a informação relativa a um jogador.
e) Elabore uma função que calcule a percentagem de jogadores que praticam futebol.
f) Elabore uma função que liste no ecrã toda a informação acerca dos jogadores que praticam uma
determinada modalidade.
g) Elabore uma função que liste no ecrã os dados relativos ao jogador de maior altura.
h) Elabore um programa que permita armazenar os dados relativos a N jogadores e a seguir permita as
opções:
Listar dados do jogador com maior altura
Percentagem de jogadores que praticam futebol
Listar jogadores que praticam uma determinada modalidade
Sair

Exercício 3
A livraria “ABC” pretende um programa que auxilie na gestão do seu catálogo de publicações. Essa
informação consiste em:

Titulo,

Ano de Edição,

ISBN (nº da publicação)

Secção Temática (escolares, romances, policiais ).

a) Defina estruturas de dados que permitam:


i) Guardar a informação acerca de um livro.
ii) Guardar a informação acerca de 500 livro.
b) Elabore a função LeLivro que permite efectuar a leitura dos dados relativos a um livro.
c) Elabore uma função que escreva no ecrã a informação relativa a um livro sendo dado o seu ISBN.
Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 6/10
d) Elabore uma função que calcule o número de livros existentes da secção escolares.
e) Elabore a função Menu que apresente no ecrã as seguintes opções:
1- Inserir dados de um livro
2- Mostrar segundo o seu ISBN
3- Mostrar nº de livros da secção escolares
S- Sair

e devolva a opção escolhida pelo utilizador.


f) Elabore um programa (função main) que permita efectuar a gestão da livraria.

Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 7/10
Exercício 4
A empresa de software “Primavera” pretende um programa que auxilie na gestão dos seus clientes.
Essa informação consiste em:

Nome do cliente,

Data da última aquisição,

Nº de Identificação do cliente

Tipo de software adquirido (Gestão, jogos Educativos, Editores ).

a) Defina estruturas de dados que permitam


i) Guardar a informação acerca de um cliente.
ii) Guardar a informação acerca de 1000 clientes.
b) Elabore a função Ledados que permite efectuar a leitura dos dados relativos a um cliente.
c) Elabore uma função que escreva no ecrã a informação relativa a um cliente .
d) Elabore uma função que calcule o número de clientes que compraram jogos educativos.
e) Elabore a função PesquisaCliente que verifica se um determinado cliente já existe sendo dado o
seu número de identificação
f) Elabore a função EliminaCliente- que permite eliminar os dados de um determinado cliente.
g) Elabore uma função que indique qual foi o cliente que recentemente adquiriu software e de que
tipo.
h) Elabore uma função que permite alterar a data da última aquisição de um determinado cliente.
i) Considerando que já se encontra implementada a função Menu com o protótipo:
char Menu(void);

que apresenta no ecrã o seguinte menu de opções:


A- Inserir dados de um cliente
B- Mostrar dados de um cliente sendo dado o seu nº de identificação
C- Elimina cliente
D- Mostra o número de clientes que compraram jogos
E- Mostrar o software que foi recentemente adquirido
F- Alterar data última aquisição
S- Sair

e efectua a leitura da opção desejada.


Elabore um programa que permita executar as opções do menu.

Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 8/10
Exercício 5
Um tribunal pretende um programa que o auxilie na gestão da informação referente aos julgamentos
efectuados.
Considere as seguintes declarações:
typedef enum {condenado, absolvido} RESULTADO;
typedef struct {
int nid; //nº identificação do réu
char nome[30];
RESULTADO cond;
float anosCond; //nº de anos a que foi condenado
}REU;

e pressupondo que um tribunal julga no máximo 200 casos por ano, defina o tipo VReus que deverá
ser uma estrutura de dados capaz de armazenar em memória principal a informação relativa aos 200
julgamentos.

Elabore as funções:

a) ObterDados- que permite obter os dados de um réu.

b) PesquisaReu – verifica se um determinado réu já foi ou não julgado.

c) EliminaReu- que permite eliminar os dados de um determinado réu que já tenha comprido a
sua pena.

d) MostraReu- Mostrar todos os dados dos réus que foram condenados e obtiveram maior pena.

e) MediaReu- Indicar qual a média dos julgamentos que foram considerados culpados.

f) MostraInoc- Mostrar o nome dos réus que foram considerados inocentes.

g) Considerando que já se encontra implementada a função Menu com o protótipo:

char Menu(void);

que apresenta no ecrã o seguinte menu de opções:


A-Obter dados de um réu.
E- Eliminar os dados de um réu, que já tenha comprido a sua pena.
M- Mostrar dados de um réu que obteve maior pena.
I-Mostrar os réus que foram considerados inocentes.
D-Mostrar a média dos julgamentos cujos réus foram considerados culpados .
S- Sair

e efectua a leitura da opção desejada, elabore um programa que permita executar as opções do menu.

Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 9/10
Exercício 6 (exame em 29/09/2004)
Depois de organizar os CD’s que tem em casa reparou que muitos deles estão emprestados a amigos.
Como nunca anotou a quem emprestava cada CD é-lhe impossível saber onde pára cada álbum. Para
resolver este problema decidiu implementar um programa para gerir os empréstimos de CD’s.

Assim, para cada CD deve guardar os seguintes dados:


• NumCD
• Titulo
• AnoEmpréstimo
• Tipo (rock, pop, portuguesa, outro)
• TelefoneEmprestado

Para cada pessoa importa saber:


• Telefone
• Nome
• Morada
• Idade

Nota: O campo “TelefoneEmprestado” indica a pessoa a quem emprestou o CD, isto é, o número de
telefone de uma pessoa serve para a identificar. Não haverá duas pessoas com o mesmo número de
telefone.

Para concretizar este programa implemente, em C:

a) Defina as estruturas de dados para guardar até 200 CD’s e até 50 pessoas.

b) Uma função LerPessoa para obter do utilizador os dados de uma pessoa.

c) A função LerCD que solicite a informação de um CD.

d) Uma função que imprima no ecrã os dados de todos os CDs registados.

e) Uma função para devolver um CD. Um CD está em sua posse quando o campo
TelefoneEmprestado tem o valor 0 (zero).

f) A função void EmprestaCD(int NumCD) que solicita e guarda o número de telefone da pessoa a
quem o CD vai ser emprestado. Esta função deve confirmar se a pessoa em causa existe e caso não
exista deve pedir os dados dela (para tal use a função LerPessoa).

j) A função main do programa que agregue todas as funcionalidades implementadas. Deverá,


adicionalmente, permitir ao utilizador sair do programa.

Folha de exercícios – Estruturas/ Eng. Ambiente e Eng. Gestão Industrial pág 10/10

Potrebbero piacerti anche