Ir ao conteúdo
  • Cadastre-se

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


Visitante

Posts recomendados

@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

 

Link para o comentário
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?

 

Link para o comentário
Compartilhar em outros sites

@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);
		
}

 

Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

@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

Link para o comentário
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

 

Link para o comentário
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;
}

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

@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

Link para o comentário
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++?

 

Link para o comentário
Compartilhar em outros sites

@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 ?

Link para o comentário
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;
}

 

Link para o comentário
Compartilhar em outros sites

@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 

Link para o comentário
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?

 

Link para o comentário
Compartilhar em outros sites

@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 

Link para o comentário
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?

Link para o comentário
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;
}

 

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