Ir ao conteúdo

Posts recomendados

Postado

Boa tarde, essa é um pedido excepcional , preciso faze um exercício simples em c++, mas não estou conseguindo concentrar por ter dois familiares com covid internado, uem puder me auxliar agradeço seria uma implementação um programa que implemente uma fila de impressão. Para cada arquivo a ser impresso devem ser armazenados: id sequencial da impressão (começando em 1), nome do arquivo e quantidade de folhas. Exceto o id sequencial, as outras informações devem ser digitadas pelo usuário. O programa também deve realizar um controle da quantidade de papel disponível na impressora, permitindo que o usuário realize a “inserção” de mais papel. Antes de inserir um novo documento na fila, o programa deve verificar se há papel suficiente na impressora para realizar a impressão. Se não houver papel suficiente, o programa não deve aceitar a impressão. Desenvolva métodos que permita inserir um arquivo na fila de impressão (retornar falso caso não haja papel); remova um arquivo da fila da impressão (imprimir); liste os arquivos da fila de impressão; permita inserir mais folhas na impressora; retorne o total de folhas disponíveis na impressora,

 

#include "Fila.h"

Fila::Fila() {
    inicio = NULL;
    fim = NULL;
}

bool Fila::vazia() {
    return (inicio == NULL);
}

bool Fila::cheia() {
    return false;
}

bool Fila::inserir(int auxValor) {
    // Inserir um arquivo na fila de impressão;
    // Altere o método inserir:
    PonteiroElemento p;
    p = new elemento;
    p->valor = auxValor;

    if (vazia()) {
        inicio = p;
        fim = p;
    } else {
        fim->proximoElemento = p;
        fim = p;
    }
    p->proximoElemento = NULL;
    return true;
}

bool Fila::remover(int &auxValor) {
    // Remover um arquivo da fila da impressão (imprimir);
    // Altere o método remover:
    PonteiroElemento p;
    if (vazia())
        return false;

    auxValor = inicio->valor;

    p = inicio;
    inicio = inicio->proximoElemento;
    delete p;
    if (inicio == NULL)
        fim = NULL;
    return true;
}

string Fila::listar() {
    // Implementar listagem da fila de impressão;
    // Retornar string no formato:
    // <idImpressao1> - <nomeArquivo1> - <folhas1>\n
    // <idImpressao2> - <nomeArquivo2> - <folhas2>\n
    //
    // Seu código aqui    

}

bool Fila::inserirFolhas(int auxFolhas) {
    // Inserir mais folhas na impressora;
    // Seu código aqui    


    return true;
}

int Fila::listarFolhas() {
    // Retorna o total de folhas disponíveis na impressora;
    // Seu código aqui


}
 

 

a classe fila:

class Fila {
    private:
        struct elemento {
            int valor;
            elemento *proximoElemento;
        };
        typedef elemento *PonteiroElemento;
        PonteiroElemento inicio;
        PonteiroElemento fim;
    public:
        Fila();
        bool vazia();
        bool cheia();
        // alterar
        bool inserir(int auxValor);
        bool remover(int &auxValor);
        // implementar
        string listar();
        int listarFolhas();
        bool inserirFolhas(int auxFolhas);
        bool imprimir();
};

 

 

 e o main

#include <iostream>
#include <cstdlib>
#include <string>

using namespace std;

#include "Fila.cpp"
 

  • Curtir 1
Postado

Seu programa está mais difícil do que precisa ser. E menos flexível.

 

Uma fila é uma fila. De coisas. Qualquer coisa. Neste caso serão pedidos de impressão. Só que não deve fazer diferença.

 

Nunca misture os dados com a estrutura ou com a entrada e saída de valores. Isso só vai trazer problemas.

 

C++ tem filas prontas por exemplo, que você declara com um #include <queue> e diz do que é a fila. E já pode usar os métodos.

 

Não use typedef em C++. Geralmente é desnecessário

 

Ao usar um typedef não crie um para um ponteiro. Isso já está resolvido em C e C++: basta usar um asterisco. Ao criar um nome para isso você só cria um problema novo: ao olhar o nome você precisa se lembrar ou consultar a definição para saber se ele é um ponteiro. Pra que? se elemento é uma struct então elemento* é um ponteiro. Ponteiro para elemento. Chamar isso de PonteiroElemento é, claro, válido mas nada acrescenta exceto um nome de 16 letras para algo que já estava definido.

 

Não use funções sem argumentos. Em geral é um desperdício. Muitas vezes um erro. 

 

NUNCA use globais. Use argumentos.

 

Seu programa só serve para uma única fila de uma única coisa. Porque?

 

Entenda que uma fila é uma estrutura. Uma fila de coisas. Essas estruturas são chamadas containers em C++, coleções em java, por exemplo. A estrutura tem nós, os tais nodes, registros. Cada node está associado a um registro de dados, por um ponteiro ou por uma referência ou mesmo por um registro contido dentro do nó. E em geral está implícita a possibilidade de comparar um nó com outro através de algo dentro do nó, que em geral é chamado CHAVE do registro. No seu caso podia ser o id do serviço de impressão.

 

Uma fila não é um nó, um nó não é um pedido de impressão, um pedido de impressão não é um nó, um nó não é uma fila. Não programe tudo isso junto e misturado. Só vai ter problemas.
 

Se escrever assim, em torno dos dados, terá o resultado melhor e bem mais depressa.

 

Uma classe trivial para esse problema, em Job.h
 

#include <iostream>
using namespace std;

class Job
{
public:
    unsigned    id;
    unsigned    folhas;
    string      arquivo;

public:
    Job(unsigned sequencial, unsigned f, string arq) :
        id(sequencial), folhas(f), arquivo(arq) {};
};

 

Nem precisa de Job.cpp, basta o header.

 

Aí fica claro do que é sua Fila...

 

Por exemplo, o que é inserir() nesse contexto? Inserir um Job numa Fila.

 

Declarou isso:

 

    bool Fila::inserir(int auxValor);

 

É bem menos expressivo... O que você quer é inserir um Job numa FIla. Compare:

 

    bool Fila::inserir(Job& pedido);

 

Se tive Job e Fila escrevendo em torno dos dados poderia ter, partindo do exemplo acima:
 

int main(void)
{
    Job     teste(1, 12, "teste.txt");
    Fila    fila;
    bool res = fila.inserir(teste);
    return 0;
}

 

E fica claro que vai inserir o pedido 1 com 12 páginas, para o arquivo teste.txt

 

Claro que a própria fila poderia numerar os tais serviços, mas não é importante.

 

  • Curtir 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!