Skip to content

Trabalho C Filas Simples (FIFO e Circular)

Nirton Afonso edited this page Jun 18, 2026 · 1 revision

Trabalho C – Filas Simples (FIFO e Circular)

Visão Geral

Neste trabalho, você deverá implementar filas simples em linguagem C usando vetor de struct.

A fila é uma estrutura em que o primeiro elemento a entrar é o primeiro a sair. Esse comportamento é conhecido como FIFO, do inglês First In, First Out.

Além da fila normal, este trabalho também utiliza fila circular simples. A fila circular reaproveita posições do vetor usando o operador de módulo.

Modelo geral:

#define MAX 100

Registro fila[MAX];
int inicio = 0;
int fim = 0;
int quantidade = 0;

Para avançar uma posição circularmente:

fim = (fim + 1) % MAX;

O objetivo principal é praticar:

  • inserção no fim da fila;
  • remoção do início da fila;
  • consulta do próximo elemento;
  • controle de inicio, fim e quantidade;
  • fila circular com vetor;
  • atendimento por prioridade ou rotação;
  • salvamento e carregamento em CSV.

Antes de Escolher o Tema

Este trabalho exige atenção com os índices do vetor, principalmente na fila circular.

  • Se você quer simular atendimento com duas filas e regra de prioridade, escolha C1 - Atendimento Bancário.
  • Se você quer um tema mais direto sobre prioridade, escolha C2 - Fila de Impressão.
  • Se você quer trabalhar com rotação em fila circular, escolha C3 - Escalonador de Processos (Round-Robin).

Leia cada tema antes de decidir. A escolha deve considerar não apenas o assunto, mas também a estrutura exigida.


Tema C1 – Atendimento Bancário

Ideia do Tema

Você irá simular um sistema de atendimento bancário com senhas normais e preferenciais. O programa deverá manter duas filas:

  • uma fila normal simples para senhas normais;
  • uma fila circular simples para senhas preferenciais.

Este tema é interessante porque combina duas estruturas e exige uma regra clara para decidir quem será atendido primeiro.

Campos do Registro

Campo Tipo Descrição
senha int Senha de atendimento
tipo char N para normal ou P para preferencial
horario char[20] Horário de chegada

Estruturas Exigidas

  • Fila normal simples para senhas normais.
  • Fila circular simples para senhas preferenciais.

Regra de Atendimento

A regra sugerida é chamar 2 senhas normais para cada 1 senha preferencial. Também é permitido implementar uma regra configurável, desde que ela esteja clara no menu e no relatório.

Operações Esperadas

  • Gerar senha e enfileirar na fila correta.
  • Chamar próximo respeitando a regra de atendimento.
  • Exibir as duas filas.
  • Buscar senha.
  • Cancelar senha.

Exemplo de Fluxo

Entram: N1, N2, P3, N4, P5
Atendimento sugerido: N1, N2, P3, N4, P5

Se uma das filas estiver vazia, o programa deve continuar atendendo pela fila que ainda tiver elementos.


Tema C2 – Fila de Impressão

Ideia do Tema

Você irá simular uma fila de impressão com trabalhos normais e prioritários. Trabalhos prioritários devem ser processados antes dos normais.

Este tema é uma boa escolha para quem quer implementar duas filas com uma regra de atendimento mais simples do que a do banco.

Campos do Registro

Campo Tipo Descrição
id int Identificador do trabalho de impressão
arquivo char[50] Nome do arquivo
paginas int Quantidade de páginas
tipo char N para normal ou P para prioritário

Estruturas Exigidas

  • Fila normal simples.
  • Fila circular simples para trabalhos prioritários.

Regra de Atendimento

Sempre processe um trabalho prioritário se existir. Se não houver trabalho prioritário, processe um trabalho normal.

Operações Esperadas

  • Enfileirar trabalho.
  • Processar próximo, exibindo os detalhes e removendo da fila.
  • Listar ambas as filas.
  • Buscar trabalho por ID.
  • Cancelar trabalho.

Exemplo de Fluxo

Fila normal: arquivo_a.pdf, arquivo_b.pdf
Fila prioritária: contrato.pdf
Próximo processado: contrato.pdf

Tema C3 – Escalonador de Processos (Round-Robin)

Ideia do Tema

Você irá simular um escalonador de processos usando Round-Robin. Nesse modelo, cada processo recebe um pequeno tempo de execução chamado quantum. Se o processo não terminar nesse tempo, ele volta para o fim da fila circular.

Este tema é uma boa escolha para entender melhor a utilidade prática da fila circular.

Campos do Registro

Campo Tipo Descrição
pid int Identificador do processo
nome char[30] Nome do processo
prioridade int Prioridade do processo
tempoRestante int Tempo restante de execução

Estrutura Exigida

  • Fila circular simples única.

Funcionamento

O escalonador percorre a fila circular executando cada processo por um quantum fixo, por exemplo, 2 unidades de tempo.

Depois da execução:

  • se o processo ainda tiver tempo restante, ele volta para a fila;
  • se o processo terminar, ele é removido da fila.

Operações Esperadas

  • Adicionar processo.
  • Executar próximo e simular o quantum.
  • Listar fila de prontos.
  • Consultar próximo processo.
  • Remover processo, simulando matar o processo.

Exemplo de Fluxo

Processo P1: tempo 5
Quantum: 2

Primeira execução: P1 fica com tempo 3
Segunda execução: P1 fica com tempo 1
Terceira execução: P1 termina e sai da fila

Funcionalidades Obrigatórias

O programa deve implementar:

  • Enfileirar: inserir no fim.
  • Desenfileirar: remover do início ou atender.
  • Consultar próximo: espiar o início sem remover.
  • Listar: exibir toda a fila.
  • Salvar CSV: gravar os dados atuais em arquivo.
  • Carregar CSV: reconstruir a fila a partir do arquivo.
  • Menu interativo com opções numéricas.

Roteiro Sugerido de Implementação

  1. Defina a struct do registro.
  2. Implemente primeiro uma fila normal simples.
  3. Teste enfileirar, desenfileirar e listar.
  4. Implemente a fila circular simples com inicio, fim e quantidade.
  5. Teste os casos de fila vazia, fila cheia e fila com vários elementos.
  6. Adapte a estrutura ao tema escolhido.
  7. Implemente busca e cancelamento.
  8. Implemente salvar em CSV.
  9. Implemente carregar do CSV.
  10. Teste a regra de atendimento ou rotação.

Exemplo de Arquivo CSV - Tema C1

senha;tipo;horario
1;N;09:05
2;P;09:06
3;N;09:07

Funcionalidades Extras Sugeridas

  • Estatísticas de atendimento, como total atendido e tempo médio de espera.
  • Salvar o estado das duas filas em arquivos separados.
  • Salvar o estado das duas filas em uma única seção estruturada.
  • Configuração da proporção de prioridade no menu.
  • Confirmação antes de cancelar senhas, processos ou trabalhos.
  • Relatório simples de atendimentos ou execuções realizadas.
  • Implementação com alocação dinâmica e encadeamento, conforme a página de orientações de extra.

Observações Importantes

  • Trate fila cheia antes de enfileirar.
  • Trate fila vazia antes de desenfileirar.
  • Na fila circular, use módulo para avançar os índices.
  • Teste quando fim chega ao final do vetor e precisa voltar para o começo.
  • Teste também o caso em que a fila possui apenas um elemento.

Clone this wiki locally