Um professor da Fundação de Gessos e Alvenarias (FGA) está oferecendo a disciplina de Estruturação e Desenvolvimento de Alvenarias 1 (EDA-1). Como ele tem muitos alunos, o professor resolveu desenvolver um programa para a geração de diversos relatórios sobre os alunos. Para cada relatório, o professor constroi uma lista encadeada com os dados que interessam, e o objetivo é montar outras listas dividindo os dados de acordo com o que interessa ao professor ver no relatório em questão.
Como o professor entende bem de construção civil apenas, ele nos pediu ajuda para desenvolver esse algoritmo.
Considere uma lista encadeada composta de nós da forma
typedef struct celula {
char matricula[10];
double mediaAtividades;
double mediaProvas;
struct celula *prox;
} celula;
onde matricula
contém a matricula do aluno, mediaAtividades
contém a média das atividades do aluno ao longo do semestre e mediaProvas
contém a média de provas.
Sua tarefa é escrever uma função
void relatorioMediaAtividades (celula *le, celula *l1, celula *l2, double media);
que recebe uma lista encadeada com nó cabeça le
e devolve duas listas encadeadas com nós cabeça l1
e l2
de forma que todos os alunos na lista l1
possuem média de atividades menor ou igual à media
e na lista l2
, média de atividades maior que media
.
Você deve submeter um arquivo contendo
Os #include
necessários para que sua função funcione.
A definição da struct celula
.
A função relatorioMediaAtividades
.
Sua solução deve cumprir os seguintes pré-requisitos:
Você não deve alocar nenhuma nova célula na sua função, apenas manipular os ponteiros dos nós de le
para que estejam em l1
ou l2
.
Você deve considerar que os nós cabeça l1
e l2
já foram alocados antes da chamada para a função relatorioMediaAtividades
.
Como consequência, a lista encabeçada por le
não estará intacta após a chamada à sua função.
Suponha, por exemplo, que a lista le
seja
le -> {140164006, 10.0, 8.0} -> {160016169, 4.0, 2.0} -> {170062465, 9.5, 8.5} -> {190262661, 5.0, 7.0} -> NULL
A chamada
(le, l1, l2, 6.0) relatorioMediaAtividades
deve devolver as listas
l1 -> {160016169, 4.0, 2.0} -> {190262661, 5.0, 7.0} -> NULL
e
l2 -> {140164006, 10.0, 8.0} -> {170062465, 9.5, 8.5} -> NULL