Fila de impressão em C++

1. Fila de impressão em C++

skjdeecedcnfncvnrfcnrncjvnjrnfvjcnjrjvcjrvcj
Londreslondres

(usa Parabola)

Enviado em 15/05/2025 - 20:31h

Olá. Tudo bem.

Quero implementar uma fila de impressão em C++ com os conceitos teóricos de fila (FIFO).

Na minha lista, há três prioridades: 3 (alta), 2 (média), 1 (nenhuma). O meu objetivo é imprimir os elementos nessa ordem.

#include <iostream>

class Elemento{
public:
std::string nome;
int prioridade;
Elemento* proximo;
Elemento(std::string nome, int prioridade){
this->nome = nome;
this->prioridade = prioridade;
this->proximo = nullptr;
}
};

class Fila{
public:
Elemento *primeiro, *ultimo;
Fila(){
primeiro = ultimo = nullptr;
}
void inserir(Elemento* novo){
if(primeiro == nullptr)
primeiro = ultimo = novo;
else{
ultimo->proximo = novo;
ultimo = novo;
}
}
void remover(){
primeiro = primeiro->proximo;
}
Elemento* espiar(){
return primeiro;
}
};

int main(){
Fila* fila = new Fila;
fila->inserir(new Elemento("documento.odt", 2));
fila->inserir(new Elemento("folder.pdf", 1));
fila->inserir(new Elemento("planilha.ods", 1));
fila->inserir(new Elemento("atividade.odt", 3));
fila->inserir(new Elemento("apresentacao.odp", 2));

while(fila->primeiro != nullptr){
if(fila->espiar()->prioridade == 3){
std::cout << "Imprimindo: " << fila->espiar()->nome << " - prioridade: " << fila->espiar()->prioridade << std::endl;
} else {
fila->inserir(new Elemento(fila->espiar()->nome, fila->espiar()->prioridade));
}
fila->remover();
}


while(fila->primeiro != nullptr){
if(fila->espiar()->prioridade == 2){
std::cout << "Imprimindo: " << fila->espiar()->nome << " - prioridade: " << fila->espiar()->prioridade << std::endl;
} else {
fila->inserir(new Elemento(fila->espiar()->nome, fila->espiar()->prioridade));
}
fila->remover();
}


while(fila->primeiro != nullptr){
if(fila->espiar()->prioridade == 1){
std::cout << "Imprimindo: " << fila->espiar()->nome << " - prioridade: " << fila->espiar()->prioridade << std::endl;
} else {
fila->inserir(new Elemento(fila->espiar()->nome, fila->espiar()->prioridade));
}
fila->remover();
}


}


Ao compilar e executar, não funciona como eu queria. Só imprime atividade.odt - prioridade: 3 e depois trava.

Queria que imprimisse todos da fila por ordem de prioridade.

OBS. Este código é para fins acadêmicos. Por isso, não quero usar lista. Apenas fila (FIFO).


  


2. Re: Fila de impressão em C++

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 15/05/2025 - 20:32h

Olá!

Entendi que você está tentando implementar uma lista de impressão utilizando uma fila com prioridades em C++. O problema que você mencionou ocorre devido à forma como os elementos estão sendo tratados e re-inseridos na fila durante a impressão. Vamos ajustar o seu código para que ele funcione conforme o esperado.

Aqui estão algumas correções para que todos os documentos sejam impressos da maneira certa:

1. Adicione uma verificação para não re-inserir o elemento que já foi impresso.
2. Use uma abordagem mais limpa para iterar por prioridades.

Aqui está a versão corrigida do seu código:

```cpp
#include <iostream>
#include <vector>
#include <algorithm>

class Elemento {
public:
std::string nome;
int prioridade;
Elemento* proximo;

Elemento(std::string nome, int prioridade) {
this->nome = nome;
this->prioridade = prioridade;
this->proximo = nullptr;
}
};

class Fila {
public:
Elemento *primeiro, *ultimo;

Fila() {
primeiro = ultimo = nullptr;
}

void inserir(Elemento* novo) {
if (primeiro == nullptr)
primeiro = ultimo = novo;
else {
ultimo->proximo = novo;
ultimo = novo;
}
}

void remover() {
if (primeiro != nullptr) {
Elemento* temp = primeiro;
primeiro = primeiro






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts