Ir ao conteúdo
  • Cadastre-se
Visitante

C++ Código em C++, Pilhas

Posts recomendados

  • Autor do tópico
  •    1
    Visitante

    @arfneto E que assim eu preciso fazer um código que uma pilha tem esses valores fixos 1 8 1 0 4 3 1 1 e eu preciso passar esse valor para uma segunda pilha mais esse valor como e uma pilha eu tiro ele de cima ficaria 1 1 3 4 0 1 8 1, ai eu queria saber como ficaria um código fazendo esse tipo de exemplo

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    3 minutos atrás, Ronald Tavares disse:

    um código que uma pilha tem esses valores fixos 1 8 1 0 4 3 1 1 e eu preciso passar esse valor para uma segunda pilha mais esse valor como e uma pilha eu tiro ele de cima ficaria 1 1 3 4 0 1 8 1, ai eu queria saber como ficaria um código fazendo esse tipo de exemplo

     

    Rodou o programa que eu te mostrei? Você já sabe como fazer. Apenas não prestou atenção.

     

    O programa que te mostrei enche a pilha toda então não tem como você não saber colocar esses valores lá

    pilha vazia
    -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

    Com isso

    	int valor = -10;
    	while( um.empilha(valor) )
    		valor = valor + 1;

    Então se escrever

    // valores fixos 1 8 1 0 4 3 1 1
    	um.empilha(1);
    	um.empilha(8);
    	um.empilha(1);
    	um.empilha(0);
    	um.empilha(4);
    	um.empilha(3);
    	um.empilha(1);
    	um.empilha(1);

    ia fazer o que? e se chamar imprime() vai mostrar... 

    pilha vazia
    1 8 1 0 4 3 1 1

    Não seria a mesma coisa? Ao invés de começar de -10 e ir até encher a pilha onde só cabem 10...

     

    Mas não respondeu de novo a algo que eu te perguntei. Entendeu que do modo como foi escrito isso não tem como saber se a pilha está vazia?

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Certo desculpa não prestão muita atenção nas pergurtas que você me faz como eu disse não tenho muito conhecimento portanto não quero responder o que eu não sei poderia me informar o código seria isso pois deu um erro

    #include <iostream>
    
    using namespace std;
    
    struct Pilha
    {
    	int p[10];
    	int capacidade;
    	int posicao;
    
    	Pilha() : capacidade(10), posicao(0) {};
    
    	int      desempilha();
    	bool     empilha(int);
    	int      imprime();
    };
    
    int main(int argc, char** argv)
    {
    	Pilha um;
    	um.imprime();
    
    	int valor = -10;
    	while (um.empilha(valor))
    		valor = valor + 1;
    
    	um.imprime();
    
    	return 0;
    }
    
    int Pilha::desempilha()
    {
    	return 0;
    }
    
    bool Pilha::empilha(int valor)
    {	// pode nao caber
    	if (posicao > (capacidade - 1)) return false;
    	p[posicao] = valor;
    	posicao = posicao + 1;
    	return true;
    }
    
    int Pilha::imprime()
    {
    	if (posicao == 0)
    	{
    		cout << "pilha vazia" << endl;
    		return 0;
    	};
    	
    	// ok tem gente
    	for (int i = 0; i < posicao; i = i + 1)
    		cout << p[i] << " ";
    	cout << endl;
    	return 0;
    	
    	
    	int valor = -10;
    	
    	while( um.empilha(valor) )
    		valor = valor + 1;
    		um.empilha(1);
    		
    		
    	um.empilha(8);
    	um.empilha(1);
    	um.empilha(0);
    	um.empilha(4);
    	um.empilha(3);
    	um.empilha(1);
    	um.empilha(1);
    		
    }

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Para colocar em outra pilha é apenas uma outra coisa. Nada tem a ver com a primeira e por isso essas linguagens são legais.

     

    Quando você desempilha algo o valor vem na função. E então é só um valor. Se você tem outra pilha e quer colocar lá não faz a menor diferença:

    • desempilha() retorna um int. Só isso.
    • empilhaI() empilha um int. Só isso.

    Então

    	um.empilha(1);
    	um.empilha(8);
    	um.empilha(1);
    	um.empilha(0);
    	um.empilha(4);
    	um.empilha(3);
    	um.empilha(1);
    	um.empilha(1);
    	um.imprime();
    
    	Pilha outra;
    
    	valor = um.desempilha(); // tira de uma
    	outra.empilha(valor); // poe na outra
    	// ou assim para copiar outro
    	outra.empilha(um.desempilha());
    	outra.empilha(um.desempilha());
    	cout << "a segunda pilha com 3 caras" << endl;
    	outra.imprime();

    mostra

    pilha vazia
    1 8 1 0 4 3 1 1
    a segunda pilha com 3 caras
    1 1 3

     

    adicionado 1 minuto depois
    4 minutos atrás, Ronald Tavares disse:

    não prestão muita atenção nas pergurtas que você me faz como eu disse não tenho muito conhecimento portanto não quero responder o que eu não sei poderia me informar o código seria isso pois deu um erro

     

    Sério? Se não vai prestar muita atenção às perguntas, e responder, porque acha que eu devo te responder? assim não funciona...

    adicionado 4 minutos depois
    8 minutos atrás, Ronald Tavares disse:

    que eu não sei poderia me informar o código seria isso pois deu um erro

     

    não deu pra entender o que quer dizer com isso.

     

    Se deu um erro não diga que deu um erro. Diga QUE erro é esse.

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Certo então o código ficaria assim 

    #include <iostream>
    
    using namespace std;
    
    struct Pilha
    {
    	int p[10];
    	int capacidade;
    	int posicao;
    
    	Pilha() : capacidade(10), posicao(0) {};
    
    	int      desempilha();
    	bool     empilha(int);
    	int      imprime();
    };
    
    int main(int argc, char** argv)
    {
    	Pilha um;
    	um.imprime();
    
    	int valor = -10;
    	while (um.empilha(valor))
    		valor = valor + 1;
    
    	um.imprime();
    
    	return 0;
    }
    
    int Pilha::desempilha()
    {
    	return 0;
    }
    
    bool Pilha::empilha(int valor)
    {	// pode nao caber
    	if (posicao > (capacidade - 1)) return false;
    	p[posicao] = valor;
    	posicao = posicao + 1;
    	return true;
    }
    
    int Pilha::imprime()
    {
    	if (posicao == 0)
    	{
    		cout << "pilha vazia" << endl;
    		return 0;
    	};
    	// ok tem gente
    	for (int i = 0; i < posicao; i = i + 1)
    		cout << p[i] << " ";
    	cout << endl;
    	return 0;
    	
    	int valor = -10;
    	while( um.empilha(valor) )
    		valor = valor + 1;
    		um.empilha(1);
    		
    		
    	um.empilha(8);
    	um.empilha(1);
    	um.empilha(0);
    	um.empilha(4);
    	um.empilha(3);
    	um.empilha(1);
    	um.empilha(1);
    	um.imprime();
    
    	Pilha outra;
    
    	valor = um.desempilha(); // tira de uma
    	outra.empilha(valor); // poe na outra
    	// ou assim para copiar outro
    	outra.empilha(um.desempilha());
    	outra.empilha(um.desempilha());
    	cout << "a segunda pilha com 3 caras" << endl;
    	outra.imprime();
    }

     

    21.png

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Acho que está lendo e copiando sem pensar. o tal loop while era um exemplo para você ver como é simples encher a pilha e mostrar os 10 números que estavam lá dentro, de -10 a -1.

     

    O que é esse código todo no final de imprime(), que era só para, digamos, imprimir....??

     

    Esse

    pilha vazia
    1 8 1 0 4 3 1 1
    a segunda pilha com 3 caras
    1 1 3

    É o resultado desse programa

    #include <iostream>
    
    using namespace std;
    
    struct Pilha
    {
    	int p[10];
    	int capacidade;
    	int posicao;
    
    	Pilha() : capacidade(10), posicao(0) {};
    
    	int      desempilha();
    	bool     empilha(int);
    	int      imprime();
    };
    
    int main(int argc, char** argv)
    {
    	int valor = 0;
    	Pilha um;
    	um.imprime();
    
    	//int valor = -10;
    	//while( um.empilha(valor) )
    	//	valor = valor + 1;
    
    	um.empilha(1);
    	um.empilha(8);
    	um.empilha(1);
    	um.empilha(0);
    	um.empilha(4);
    	um.empilha(3);
    	um.empilha(1);
    	um.empilha(1);
    	um.imprime();
    
    
    	Pilha outra;
    
    	valor = um.desempilha();
    	outra.empilha(valor);
    	// ou assim para copiar outro
    	outra.empilha(um.desempilha());
    	outra.empilha(um.desempilha());
    	cout << "a segunda pilha com 3 caras" << endl;
    	outra.imprime();
    
    	return 0;
    }
    
    int Pilha::desempilha()
    {
    	if (posicao == 0) return INT_MIN;
    	posicao = posicao - 1;
    	return p[posicao];
    }
    
    bool Pilha::empilha(int valor)
    {	// pode nao caber
    	if (posicao > (capacidade - 1)) return false;
    	p[posicao] = valor;
    	posicao = posicao + 1;
    	return true;
    }
    
    int Pilha::imprime()
    {
    	if (posicao == 0)
    	{	cout << "pilha vazia" << endl;
    		return 0;
    	};
    	// ok tem gente
    	for (int i = 0; i < posicao; i = i + 1)
    		cout << p[i] << " ";
    	cout << endl;
    
    	return 0;
    }

    E veja ai que imprime só imprime...

     

    Eu já disse 3 vezes eu acho, mas do modo como está isso não tem como saber se desempilha() funcionou...

     

    É preciso definir algo. Ou um marcador, tipo um número que marca o fim da lista, ou uma função que diz se a lista est;a vazia.

     

    Entende isso? É essencial. Ou não vai funcionar.

     

    Pra não dizer que eu não expliquei:

     

    Na pilha de C++, a que esta na biblioteca da linguagem, a pilha funciona com 3 comandos: push() pop(0 e top().

     

    • push(0 coloca um cara
    • top() traz o próximo, mas não desempilha
    • pop() tira o de cima

    Pode fazer assim, ou usar uma constante, tipo um valor -345678, um marcador para indicar fim da pilha, e não aceitar que empilhe esse valor.

     

    Pode usar uma função vazia() que retorna true se a pilha est;a vazia. Mas tem que fazer algo

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Olha o código funcionou, eu entendi o que você quer dizer com as 3 funções , ai eu queria saber, ele só esta retornando 3 elemento, como eu faria para retornar os que falta ?

    14.png

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    1 minuto atrás, Ronald Tavares disse:

    eu entendi o que você quer dizer com as 3 funções , ai eu queria saber, ele só esta retornando 3 elemento, como eu faria para retornar os que falta

     

     

    que tal desempilhar os outros cinco?????

    Não entendeu que é só isso?

     

    Mas entenda, pela quarta vez vou dizer: precisa ter uma maneira de parar de desempilhar quando a pilha est;a vazia. Eu escrevo e você não responde., porque parece obcecado com conseguir uma resposta pronta e seguir adiante.

     

    Vou até dizer uma:

    	int      desempilha();
    	bool     empilha(int);
    	int      imprime();
    	bool     vazia();

    Acrescentando uma função vazia() que faz o óbvio: retorna true se a pilha está vazia. Assim pode resolver.

     

    Para tirar de uma pilha:

    • enquanto ela não está vazia desempilha. Já sabe como

    Para colocar numa pilha:

    • enquanto tiver algo para por e se ela não estiver cheia, empilhe

    Para tirar de uma pilha e colocar numa outra pilha:

    • enquanto a pilha original não estiver vazia:
      desempilha da primeira
      empilha na segunda

      Nada mais. Pode ser bem curtinho
      	while (um.vazia() == false)
      	{
      		valor = um.desempilha();
      		outra.empilha(valor);
      	}; 

      O código de vazia:

    bool Pilha::vazia()
    {
    	return posicao == 0;
    }

     

     

     

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Certo eu entendi e como eu faço essas 3 Estruturas de Tirar de uma e empilhar para outra, tem um local onde eu coloco essa função de desempilhar  

    adicionado 1 minuto depois

    @arfneto E que assim meu conhecimento referente a pilha é bem pequeno 

    adicionado 2 minutos depois

    @arfneto Por isso fico perdido nas perguntas que você faz

    adicionado 6 minutos depois

    @arfneto Mensagem que aparece utilizando a função que você me passou.

    11.png

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    ?

     

    Como assim?

     

    Que são essas 3 estruturas que você entendeu?

     

    3 minutos atrás, Ronald Tavares disse:

    tem um local onde eu coloco essa função de desempilhar  

     

    Tem, mas ela já está lá. É a função desempilhar()

     

    3 minutos atrás, Ronald Tavares disse:

    Tirar de uma e empilhar para outra

     

    Que tal o que eu escrevi?

    	while (um.vazia() == false)
    	{
    		valor = um.desempilha();
    		outra.empilha(valor);
    	}; 

    Não parece fazer sentido? Enquanto a pilha um não está vazia tira um valor dela e coloca na pilha outra ?

     

    Estive vendo o material que postou, o Estrutura_de_Dados.pdf 

     

    É muito ruim e cheio de erros. Recomendo muito usar um livro. E lá fala de C até onde eu vi. Onde entrou C++?

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Olha referente ao livro pode ser que entre c++ mais aprofundado nos outros capítulos esse é só a primeira matéria, mais referente ao código como ele ficaria ?, pode fazer o código e me mostrar pois conforme a imagem pode ser que eu tenha feito algo de errado

    adicionado 3 minutos depois

    @arfneto Utilizando o exemplo que você me deu, deu um Erro conforme a imagem ai queria saber como ficaria o código ?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

     

     

    image.png.a31cfbf457f88c25db233fe302a9ec2c.png

     

    Porque esse trecho de código está no meio das funções empilha() e vazia() ? 

    adicionado 1 minuto depois

    A declaração da Pilha vai ficar assim, com a nova função

    struct Pilha
    {
    	int p[10];
    	int capacidade;
    	int posicao;
    
    	Pilha() : capacidade(10), posicao(0) {};
    
    	int      desempilha();
    	bool     empilha(int);
    	int      imprime();
    	bool     vazia();
    };

    E lá no fim você coloca a função. Com todas as 4 linhas.

    bool Pilha::vazia()
    {
    	return posicao == 0;
    }

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto onde ele ficaria ?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Se fala da cópia, deve estar depois de ter criado o original, certo? 

     

    Você já escreveu algum programa antes deste?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Vou te enviar o código para você

    analisar e me informar onde é o local certo desse código, referente a pilha é o primeiro, mais fora isso fiz Quiz e alguns jogos estratégicos

    #include <iostream>
    
    using namespace std;
    
    struct Pilha
    {
    	int p[10];
    	int capacidade;
    	int posicao;
    	
    	
    
    	Pilha() : capacidade(10), posicao(0) {};
    
    	int      desempilha();
    	bool     empilha(int);
    	int      imprime();
    	bool     vazia();
    };
    
    int main(int argc, char** argv)
    {
    	int valor = 0;
    	Pilha um;
    	um.imprime();
    
    	//int valor = -10;
    	//while( um.empilha(valor) )
    	//	valor = valor + 1;
    
    	um.empilha(1);
    	um.empilha(8);
    	um.empilha(1);
    	um.empilha(0);
    	um.empilha(4);
    	um.empilha(3);
    	um.empilha(1);
    	um.empilha(1);
    	um.imprime();
    
    
    	Pilha outra;
    
    	valor = um.desempilha();
    	outra.empilha(valor);
    	// ou assim para copiar outro
    	outra.empilha(um.desempilha());
    	outra.empilha(um.desempilha());
    	cout << "Pilha 2" << endl;
    	outra.imprime();
    
    	return 0;
    }
    
    int Pilha::desempilha()
    {
    	if (posicao == 0) return INT_MIN;
    	posicao = posicao - 1;
    	return p[posicao];
    }
    
    bool Pilha::empilha(int valor)
    {	// pode nao caber
    	if (posicao > (capacidade - 1)) return false;
    	p[posicao] = valor;
    	posicao = posicao + 1;
    	return true;
    }
    
    while (um.vazia() == false)
    	{
    		valor = um.desempilha();
    		outra.empilha(valor);
    	};
    	bool Pilha::vazia()
    {
    	return posicao == 0;
    }
    
    int Pilha::imprime()
    {
    	if (posicao == 0)
    	{	cout << "pilha 1" << endl;
    		return 0;
    	};
    	// ok tem gente
    	for (int i = 0; i < posicao; i = i + 1)
    		cout << p[i] << " ";
    	cout << endl;
    
    	return 0;
    	
    	}

     

    adicionado 0 minutos depois

    @arfneto Como eu disse referente a pilha eu sou bem novato 

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Você tem um programa que coloca os oito valores numa pilha e copia os primeiros 3 para a outra.

     

    E em um código de 5 linhas que copia todos de uma pilha para outra

     

    E não sabe onde poderia colocar esse código para que, ao invés de copiar apenas 3, copie todos os que estão na primeira pilha?

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Certo, eu estou confuso nessa parte como eu disse meu conhecimento referente a pilha é muito básico você poderia me auxiliar por favor 

    adicionado 2 minutos depois

    @arfneto Estou tendo um conhecimento melhor por que você tá me explicando se não estaria bem pior 

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    5 minutos atrás, Ronald Tavares disse:

    eu estou confuso nessa parte como eu disse meu conhecimento referente a pilha é muito básico você poderia me auxiliar por favor

     

    Eu estou auxiliando você há duas horas

     

    Eu te escrevi um programa e expliquei como declarar e usar as funções todas. E o problema aqui parece não ter nada a ver com pilhas.
     

     

    634274791_pilhaum.png.2a5adae3458a2f3d8a520d5404d7ecd8.png

     

    Esse é o programa que está rodando. E você tem o código que falta. Não pode só trocar um trecho pelo outro?

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Fiz o processo em 3 lugares e apareceu esse Erro111.thumb.png.25779ffa79c0aeb2d4bf9f486bdf12b0.png

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Eu não entendo o que está fazendo.

     

    Porque não lê o programa e vai lá onde tem copiava os 3 e troca pelo código que copia todos? 

     

    Isso são instruções de programa, não são linhas colocadas a olho. Você coloca as instruções onde elas fazem sentido, para fazer o que você precisa...

    	int valor = 0;
    	Pilha uma;
    	uma.imprime(); // vazia claro
    
    	uma.empilha(1);
    	uma.empilha(8);
    	uma.empilha(1);
    	uma.empilha(0);
    	uma.empilha(4);
    	uma.empilha(3);
    	uma.empilha(1);
    	uma.empilha(1);
    	uma.imprime(); // esta com os oito caras
    
    	// para copiar basta tirar os caras de uma e... copiar
    	// como desempilha() retorna um int, vamos usar vazia() para parar de copiar
    	Pilha outra;
    	while (uma.vazia() == false)
    	{
    		valor = uma.desempilha();
    		outra.empilha(valor);
    	};
    	outra.imprime(); // a nova pilha

     

    Algo assim

    #include <iostream>
    using namespace std;
    
    struct Pilha
    {
    	int p[10];
    	int capacidade;
    	int posicao;
    
    	Pilha() : capacidade(10), posicao(0) {};
    
    	int      desempilha();
    	bool     empilha(int);
    	int      imprime();
    	bool     vazia();
    };
    
    int main(int argc, char** argv)
    {
    	int valor = 0;
    	Pilha uma;
    	uma.imprime(); // vazia claro
    
    	uma.empilha(1);
    	uma.empilha(8);
    	uma.empilha(1);
    	uma.empilha(0);
    	uma.empilha(4);
    	uma.empilha(3);
    	uma.empilha(1);
    	uma.empilha(1);
    	uma.imprime(); // esta com os oito caras
    
    	// para copiar basta tirar os caras de uma e... copiar
    	// como desempilha() retorna um int, vamos usar vazia() para parar de copiar
    	Pilha outra;
    	while (uma.vazia() == false)
    	{
    		valor = uma.desempilha();
    		outra.empilha(valor);
    	};
    	outra.imprime(); // a nova pilha
    
    	return 0;
    };	// main()
    
    int Pilha::desempilha()
    {
    	posicao = posicao - 1;
    	return p[posicao];
    }
    
    bool Pilha::empilha(int valor)
    {	// pode nao caber
    	if (posicao > (capacidade - 1)) return false;
    	p[posicao] = valor;
    	posicao = posicao + 1;
    	return true;
    }
    
    int Pilha::imprime()
    {
    	if (posicao == 0)
    	{	cout << "pilha vazia" << endl;
    		return 0;
    	};
    	// ok tem gente
    	for (int i = 0; i < posicao; i = i + 1)
    		cout << p[i] << " ";
    	cout << endl;
    	return 0;
    }
    
    bool Pilha::vazia()
    {
    	return posicao == 0;
    }

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  •    1
    Visitante

    @arfneto Certo deu Certo queria te agradecer pela paciência e também por me ajudar , de verdade Obrigado, você me ajudou muito, com seu conhecimento, Obrigado mesmo e desculpa incomodar.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro 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 publicações 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...

    Aprenda_a_Ler_Resistores_e_Capacitores-capa-3d-newsletter.jpg

    EBOOK GRÁTIS!

    CLIQUE AQUI E BAIXE AGORA MESMO!