Prazo de entrega recomendado:
Você deverá realizar operações em uma fila, implementada como lista ligada.
Um grupo de sociológos está investigando a fila de entrada na boate mais badalada da cidade. O objetivo é demonstrar que a fila de entrada de espaços prestigiados no Brasil não funciona exatamente como esperaríamos: nem sempre quem chega primeiro, entra primeiro.
Nessa boate em particular, cada pessoa na fila é identificada pelo número de seu documento. A primeira pessoa a chegar recebe uma lanterna para facilitar que outras pessoas vejam a fila nas noites mais escuras. Assim, para entrar na fila, você deve procurar a pessoa que está segurado a lanterna, entrar atrás dela e tomar a lanterna para você. Se três pessoas chegarem em sequência, a fila deveria ficar como a na figura abaixo.
Até então não há nada diferente de qualquer outra fila, mas os sociólogos descobriram três fenômenos muito recorrentes, como se fossem regrinhas não escritas.
-
Se quem estiver entrando na fila for filho de algum político, ex-BBB, youtuber de finanças, coach ou herdeiro de um fortuna, ela toma a lanterna para si, mas ao invés entrar atrás de quem entregou a lanterna, entra no início da fila. Ninguém reclama. Veja na figura abaixo o que acontece com a fila quando o herdeiro 3 chega, seguidos de seus amigos 4 e 5, esses pessoas comuns.
-
Um dos benefícios do contrato de trabalho na boate é que funcionários não pagam pela entrada. O que os sociólogos descobriram, no entanto, é que quando um funcionário entra na fila, ele deve se dirigir ao final, independentemente de onde está a lanterna. Na figura seguinte, quando o funcionário 5 recebe a lanterna da pessoa 4, ela vai direto pro final da fila.
Em tempos de pandemia, para entrar na boate todos deveriam estar vacinados, mas nem sempre isso é respeitado. O que acontece de fato é que, quando um fiscal entra na fila, quem ficar logo atrás do fiscal e não estiver vacinado sai da fila para não ser multado. Na figura abaixo, o fiscal 8 acabou de entrar na fila e as pessoas 1, 2 e 4 não estão vacinadas. Assim, a pessoa 1 fica logo atrás do fiscal e sai. Em seguida, a pessoa 2 fica logo atrás do fiscal e também sai. Depois disso, a pessoa 3 fica logo atrás do fiscal, mas não faz nada porque está vacinada. A pessoa 4 não está vacinada, mas como está longe do fiscal, ela não se preocupa. Se alguém não vacinado chegar na fila atrás de um fiscal, ele nem entra na fila e a lanterna continua com o fiscal.
Sua tarefa é colaborar com o estudo e implementar um programa
boate.c
que simula a fila dessa boate.Entrada
Cada linha da entrada corresponde a uma pessoa que está entrando na fila, na ordem de chegada. Uma linha tem três campos: número do documento (inteiro), nome da profissão (string sem espaços com no máximo 25 caracteres) e o estado de vacinação da pessoa (vacinado ou nao-vacinado).
As profissões que entram no começo da fila são identificadas pelas strings
coach
,ex-bbb
,filho-politico
,herdeiro
,youtuber-financas
e um funcionário é identificado pela stringfuncionario
.Dica: para ler as linhas até o final do arquivo, utilize o fato de que
scanf
devolve um número constanteEOF
representando o final de arquivo (end of file), como no exemplo seguinte:while (scanf(...) != EOF) { ... }
Exemplo de entrada
97615 funcionario vacinado 97666 funcionario nao-vacinado 13704 funcionario vacinado 55033 youtuber-financas nao-vacinado 58366 funcionario vacinado 45619 herdeiro nao-vacinado 52213 funcionario nao-vacinado 75608 youtuber-financas vacinado 36149 herdeiro nao-vacinado 45161 ex-bbb nao-vacinado 88657 coach nao-vacinado 82684 youtuber-financas nao-vacinado 27754 funcionario nao-vacinado 13700 funcionario nao-vacinado 61881 youtuber-financas vacinado 93203 funcionario vacinado 86628 coach vacinado 70393 funcionario nao-vacinado 57012 funcionario vacinado 35228 funcionario vacinado
Saída
A saída deve conter a configuração final da fila de acordo com as regras explicadas.
Exemplo de saída
86628 coach vacinado 61881 youtuber-financas vacinado 82684 youtuber-financas nao-vacinado 88657 coach nao-vacinado 45161 ex-bbb nao-vacinado 36149 herdeiro nao-vacinado 75608 youtuber-financas vacinado 45619 herdeiro nao-vacinado 55033 youtuber-financas nao-vacinado 97615 funcionario vacinado 97666 funcionario nao-vacinado 13704 funcionario vacinado 58366 funcionario vacinado 52213 funcionario nao-vacinado 27754 funcionario nao-vacinado 13700 funcionario nao-vacinado 93203 funcionario vacinado 70393 funcionario nao-vacinado 57012 funcionario vacinado 35228 funcionario vacinado
Critérios
É obrigatório utilizar listas ligadas nessa tarefa. Se desejar, separe sua implementação de fila utilizando arquivos
fila.h
efila.c
, neste caso atualize seu Makefile. Para passar na tarefa é necessário implementar pelo menos a primeira regra identificada pelos sociólogos. Lembre-se de liberar toda a memória alocada dinamicamente, utilize o valgrind para garantir que nada ficou alocado.Correção
Esta tarefa será corrigida automaticamente sempre que você realizar um
git push
. Depois de terminada a tarefa, deve-se utilizar o botão na interface de notas para solicitar a correção de um monitor.Turma AB: O peso desta tarefa será 3.