Ir ao conteúdo
  • Cadastre-se

C++ Algoritmo - atividades sobre filas


Ir à solução Resolvido por arfneto,

Posts recomendados

Boa noite!

Fiz essa atividade sobre filas e encaminhei ela segunda, 28/11, ainda não recebi um feedback, mas gostaria de saber se ficou minimamente decente.

 

#include <iostream>
#include <queue>
using namespace std;

void display_queue(queue<string>q);
void display_queue(queue<string>q)
{
    while(!q.empty()) 
	{
        	cout << q.front() << " - ";
    		q.pop();
	}
}

int main()
{
    int x;
    string y;
    queue<string> clientes;
    cout<< "DIGITE 1 para adicionar um novo cliente no final da fila \n";
    cout<< "DIGITE 2 para remover o cliente do inicio da fila \n";
    cout<< "DIGITE 3 para imprimir todos os clientes da fila \n";
    cout<< "DIGITE 4 para imprimir a quantidade de clientes na fila \n";
    cout<< "DIGITE 5 para excluir os clientes da fila \n";
    while (x != 5)
	{
        	cout << "ESCOLHA ALGUM CASO:" << endl;
        	cin >> x;
        	switch (x)
		{
            		case 1:
				{
                			cout << "digite o nome" << endl;
                			cin >> y;
                			clientes.push(y);
                			cout << "cliente adicionado a fila" << endl;
				}
					break;
            		case 2:
				{
                			clientes.pop();
                			cout << "cliente removido da fila" << endl;
				}
            				break;
            		case 3:
				{
                			cout << "fila atual: ";
                			display_queue(clientes);
                			cout << endl;
				}
            				break;
            		case 4:
				{
                			cout << "tamanho da fila: " << clientes.size() << endl;
				}
            				break;
            		case 5:
				{
                			terminate;
				}
					break;
		}
	}
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Solução
void display_queue(queue<string>q);
void display_queue(queue<string>q)
{
    while(!q.empty()) 
	{
        	cout << q.front() << " - ";
    		q.pop();
	}
}

 

Pra que isso?

 

A razão de ter um protótipo é colocar isso em outro arquivo. Ou no mínimo deslocar isso para o fim do programa, deixando SEMPRE main() no iniício. O protótipo seguido da função não faz sentido.

 

Sua função display_queue() também faz pouco sentido. Ela sugere mostrar mas na verdade esvazia a fila...

 

E claro que devia ser uma função da classe. Você vê que tem algo errado quando passa a fila como argumento. E está passando por valor. Cuidado com isso. Está copiando a fila todinha. Claro que da segunda vez em diante vai estar vazia

 

    cout << "DIGITE 1 para adicionar um novo cliente no final da fila \n";
    cout << "DIGITE 2 para remover o cliente do inicio da fila \n";
    cout << "DIGITE 3 para imprimir todos os clientes da fila \n";
    cout << "DIGITE 4 para imprimir a quantidade de clientes na fila \n";
    cout << "DIGITE 5 para excluir os clientes da fila \n";

 

Se tem um menu escreva uma função que mostra o menu e retorna a opção. O simples.

 

Não use 5 cout de uma linha. Use um cout de 5 linhas. É como 50x mais rápido. Pra que vai chamar a função uma vez para cada linha?

 

E não use std::endl. Use o simples e recomendado '\n'

 

    int x;

// ...
 
    while (x != 5)

 

Isso está errado e o compilador deve ter avisado. Trate todas as mensagens de erro. Leia todas. Habilite TODAS. Como sabe o valor inicial de x? Inicialize todas as varáveis.

 

        case 5:
        {
            terminate;
        }

 

Pra que chamar terminate aqui e não um simples return? E onde estão os parenteses? std::terminate é uma função e não um comando.

 

 

Claro que como está passado a fla por valor pode esvaziar porque será uma cópia, mas se a fila tiver milhares de registros  vai sair caro. Era mesmo isso que queria fazer? Normalmente em pilhas e filas NÃO existe essa função porque não serve pra nada exceto algum teste. E não é preciso testar a STL em algo tão simples. Numa fila ou pilha não importa o conteúdo. Só o primeiro. E o último no caso da fila. Se precisa de fato listar elementos use uma lista

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!