Ir ao conteúdo
  • Cadastre-se

fevilela

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

Tudo que fevilela postou

  1. Pessoal, eu preciso implementar uma função para acessar elemento(pilha, elemento), que quando dada uma pilha, acessa o dado escolhido, tirando-o da estrutura e os demais elementos continuam armazenados depois da remoção. Depois que for removido a função deve retornar a posição do elemento na pilha (considerando o topo como elemento de posição 1).Se esse elemento não estiver na pilha retorne -1. Por exemplo: entrada: 5 3 6 8 1 9 8 Saída: 3 9 1 6 3 Eu tenho o seguinte código base: #include <iostream> using namespace std; class noh { friend class pilha; private: int dado; // poderia ser outro tipo de variável noh* prox; }; // pilha dinamicamente encadeada class pilha { private: noh* topo; int tamanho; public: pilha(); ~pilha(); void push(int d) { empilha(d); } void empilha(int d); int pop() { return desempilha(); } int desempilha(); // retorna o topo da pilha int espia(); // espia o topo da pilha bool vazia(); void limpaPilha(); //limpa a pilha }; /* implementar os métodos da pilha */ // Implementar aqui int acessaElemento(pilha& p1, int elemento){ // Implementar aqui } int main() { pilha p1; int n, numero, elemento; cin >> n; while (n > 0) { cin >> numero; p1.empilha(numero); n--; } cin >> elemento; cout << acessaElemento(p1,elemento) << endl; while (not p1.vazia()) { cout << p1.desempilha() << " "; } cout << endl; return 0; } Como eu posso preencher esses espaços?
  2. @arfneto sim, só não entendi a parte da função listar, porque no codigo tem a parte que fala que eu não posso alterar a class. E quando eu altero a marca e coloco para buscar novamente ele fala que o produto não foi encontrado
  3. @arfneto o código que ele mandou foi o seguinte: #include <iostream> #include <vector> using namespace std; struct produto { string nome; string marca; string descricao; produto(); }; produto::produto() { nome.clear(); marca.clear(); descricao.clear(); } class portfolio { private: // *** AVISO: Não altere os atributos privados da classe *** produto* listaDeProdutos; int quantidadeDeProdutos; int capacidadeMaxima; public: portfolio(int capacidade); ~portfolio(); void inserirNovoProduto(const produto& umProduto); bool buscarProduto(const string& nome, produto& umProduto); void redimensionarCapacidade(); friend void simularMudancaDeMarca(portfolio umPortfolio, string marcaAntiga, string novaMarca); }; portfolio::portfolio(int capacidade) { quantidadeDeProdutos = 0; capacidadeMaxima = capacidade; listaDeProdutos = new produto[capacidadeMaxima]; } portfolio::~portfolio() { delete [] listaDeProdutos; } void portfolio::inserirNovoProduto(const produto& umProduto) { if (quantidadeDeProdutos == capacidadeMaxima) { // vetor cheio, precisa redimensionar redimensionarCapacidade(); } listaDeProdutos[quantidadeDeProdutos] = umProduto; quantidadeDeProdutos++; } bool portfolio::buscarProduto(const string& nomeParaBusca, produto& umProduto) { int posicaoAtual = 0; while (posicaoAtual < quantidadeDeProdutos and listaDeProdutos[posicaoAtual].nome != nomeParaBusca) posicaoAtual++; // se posicaoAtual não for menor que quantidade de produtos, é porque não encontrou if (posicaoAtual < quantidadeDeProdutos) { umProduto = listaDeProdutos[posicaoAtual]; return true; } return false; } void portfolio::redimensionarCapacidade() { #warning implemente este metodo! } void simularMudancaDeMarca(portfolio umPortfolio, string marcaAntiga, string novaMarca) { // *** AVISO: Não altere esta função *** for (int i = 0; i < umPortfolio.quantidadeDeProdutos; i++) { if (umPortfolio.listaDeProdutos[i].marca == marcaAntiga) cout << umPortfolio.listaDeProdutos[i].nome << " " << novaMarca << endl; } cout << endl; } int main() { // *** AVISO: Não altere a função principal, o main() *** int capacidadeInicial; cout << "Produtos - Aplicativo para Controlar Portfolio\n" << "Entre com capacidade máxima inicial: "; cin >> capacidadeInicial; portfolio meuPortfolio(capacidadeInicial); cout << "Portfolio - Escolha a Opção:\n" << "i - inserir novo produto\n" << "b - buscar por um dado produto a partir do nome\n" << "m - simular mudança de marca\n" << "s - para sair do programa" << endl; char opcaoDoMenu; produto umProduto; string nome; string marcaAntiga, marcaNova; cin >> opcaoDoMenu; while (opcaoDoMenu != 's') { switch(opcaoDoMenu) { case 'i' : cout << "Entre com dados do produto (nome, marca, descrição):" << endl; cin >> umProduto.nome >> umProduto.marca >> umProduto.descricao; meuPortfolio.inserirNovoProduto(umProduto); break; case 'b' : cout << "Entre com nome do produto para busca: "; cin >> nome; if (meuPortfolio.buscarProduto(nome, umProduto)) cout << umProduto.nome << " " << umProduto.marca << " " << umProduto.descricao << endl << endl; else cout << "Produto não encontrado!" << endl << endl; break; case 'm' : cout << "Entre com marca antiga e atual: "; cin >> marcaAntiga >> marcaNova; simularMudancaDeMarca(meuPortfolio,marcaAntiga,marcaNova); break; case 's' : // não faz nada, espera retorno ao while para sair break; default: cout << "Opção inválida!" << endl; break; } cout << "Portfolio - Escolha a Opção:\n" << "i - inserir novo produto\n" << "b - buscar por um dado produto a partir do nome\n" << "m - simular mudança de marca\n" << "s - para sair do programa" << endl; cin >> opcaoDoMenu; } return 0; } No caso a gente deveria completar a função void portfolio::redimensionarCapacidade() e resolver a falha de segmentação.
  4. @arfneto Claro, esse é o enunciado: Um sistema em desenvolvimento permite controlar o portfólio de um escritório de publicidade. No momento, ele só permite a inserção e busca de produtos. Falta implementar, inclusive, o redimensionamento do vetor de produtos. O redimensionamento ocorrerá de acordo com a estratégia que foi sorteada para você. Além disso, foi desenvolvida uma função externa à classe para simular a mudança de marca de alguns produtos. A função já está testada e não pode ser alterada. Entretanto, o uso dessa função gera falha de segmentação. A interface do programa (a função main()) também não pode ser alterada, bem como os atributos privados da classe. Sua tarefa é corrigir o problema com essa função externa, bem como implementar o redimensionamento do vetor de produtos.
  5. @V!OLADOR Eu fiz de forma bem semelhante, porém o professor não quer que eliminas essas partes, não consigo achar outra maneira. @codigo rápido tipo, quando eu coloco para mudar a marca e depois de mudar peço para procurar novamente ele fala que o produto não foi encontrado.
  6. @wagner2029 Então eu também achei, porém no enunciado pede dessa forma. A falha de segmentação que eu realmente não estou conseguindo arrumar.
  7. Pessoal eu escrevi um codigo, esse codigo tem que cadastrar o nome, marca e descrição e tem que dobrar o tamanho do vetor a cada redimensionamento. Porém quando eu cadastro um novo produto e coloco para mudar a marca ele faz tranquilo porém ocorre uma falha de segmentação. Alguém poderia me ajudar com isso? O código é esse: #include <iostream> #include <vector> using namespace std; struct produto { string nome; string marca; string descricao; produto(); }; produto::produto() { nome.clear(); marca.clear(); descricao.clear(); } class portfolio { private: // *** AVISO: Não altere os atributos privados da classe *** produto* listaDeProdutos; int quantidadeDeProdutos; int capacidadeMaxima; public: portfolio(int capacidade); ~portfolio(); void inserirNovoProduto(const produto& umProduto); bool buscarProduto(const string& nome, produto& umProduto); void redimensionarCapacidade(); friend void simularMudancaDeMarca(portfolio umPortfolio, string marcaAntiga, string novaMarca); }; portfolio::portfolio(int capacidade) { quantidadeDeProdutos = 0; capacidadeMaxima = capacidade; listaDeProdutos = new produto[capacidadeMaxima]; } portfolio::~portfolio() { delete [] listaDeProdutos; } void portfolio::inserirNovoProduto(const produto& umProduto) { if (quantidadeDeProdutos == capacidadeMaxima) { // vetor cheio, precisa redimensionar redimensionarCapacidade(); } listaDeProdutos[quantidadeDeProdutos] = umProduto; quantidadeDeProdutos++; } bool portfolio::buscarProduto(const string& nomeParaBusca, produto& umProduto) { int posicaoAtual = 0; while (posicaoAtual < quantidadeDeProdutos and listaDeProdutos[posicaoAtual].nome != nomeParaBusca) posicaoAtual++; // se posicaoAtual não for menor que quantidade de produtos, é porque não encontrou if (posicaoAtual < quantidadeDeProdutos) { umProduto = listaDeProdutos[posicaoAtual]; return true; } return false; } void portfolio::redimensionarCapacidade() { //#warning implemente este metodo! std::vector<produto> listaDeProdutos; produto umProduto; listaDeProdutos.erase(listaDeProdutos.begin()+2); listaDeProdutos.push_back(umProduto); } void simularMudancaDeMarca(portfolio umPortfolio, string marcaAntiga, string novaMarca) { // *** AVISO: Não altere esta função *** for (int i = 0; i < umPortfolio.quantidadeDeProdutos; i++) { if (umPortfolio.listaDeProdutos[i].marca == marcaAntiga) cout << umPortfolio.listaDeProdutos[i].nome << " " << novaMarca << endl; } cout << endl; } int main() { // *** AVISO: Não altere a função principal, o main() *** int capacidadeInicial; cout << "Produtos - Aplicativo para Controlar Portfolio\n" << "Entre com capacidade máxima inicial: "; cin >> capacidadeInicial; portfolio meuPortfolio(capacidadeInicial); cout << "Portfolio - Escolha a Opção:\n" << "i - inserir novo produto\n" << "b - buscar por um dado produto a partir do nome\n" << "m - simular mudança de marca\n" << "s - para sair do programa" << endl; char opcaoDoMenu; produto umProduto; string nome; string marcaAntiga, marcaNova; cin >> opcaoDoMenu; while (opcaoDoMenu != 's') { switch(opcaoDoMenu) { case 'i' : cout << "Entre com dados do produto (nome, marca, descrição):" << endl; cin >> umProduto.nome >> umProduto.marca >> umProduto.descricao; meuPortfolio.inserirNovoProduto(umProduto); break; case 'b' : cout << "Entre com nome do produto para busca: "; cin >> nome; if (meuPortfolio.buscarProduto(nome, umProduto)) cout << umProduto.nome << " " << umProduto.marca << " " << umProduto.descricao << endl << endl; else cout << "Produto não encontrado!" << endl << endl; break; case 'm' : cout << "Entre com marca antiga e atual: "; cin >> marcaAntiga >> marcaNova; simularMudancaDeMarca(meuPortfolio,marcaAntiga,marcaNova); break; case 's' : // não faz nada, espera retorno ao while para sair break; default: cout << "Opção inválida!" << endl; break; } cout << "Portfolio - Escolha a Opção:\n" << "i - inserir novo produto\n" << "b - buscar por um dado produto a partir do nome\n" << "m - simular mudança de marca\n" << "s - para sair do programa" << endl; cin >> opcaoDoMenu; } return 0; }

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!