Ir ao conteúdo
  • Cadastre-se

fevilela

Membro Júnior
  • Posts

    7
  • Cadastrado em

  • Última visita

posts postados por fevilela

  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?

    • Curtir 1
  2. @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.

    • Curtir 1
  3. @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. 

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!