Ir ao conteúdo
  • Cadastre-se

fevilela

Membro Júnior
  • Posts

    12
  • Cadastrado em

  • Última visita

Reputação

2
  1. Pessoal, alguém pode me ajudar nesse exercício? Hoje o dia amanheceu tenso e os analistas sêniores tiveram que sair às pressas para uma reunião fora da empresa. Você ficou como guardião (guardiã) do setor e nem eram 10h da manhã, um funcionário trainee estava com um problema com um diagrama de classe que ele precisava resolver; como não conseguiu, veio pedir seu auxílio. Chegou já perguntando: - O que você acha que está errado com esse modelo de classes? Poderia me ajudar me explicando? Porque eu fiz ontem e o professor disse que está errado... - Veja o modelo (Figura do anexo) : Por sorte, o erro era bastante simples de perceber. A. Responda descrevendo o que há de errado com essa modelagem. Eu respondi essa questão da seguinte maneira: O Diagrama de classe descreve duas ligações da classe jogador para o time de basquete e futebol. No entanto a seta utilizada é o símbolo de composição, onde uma classe está contida na outra “vive” e constitui outra. Se o objeto da classe que contem for destruído, as classes da agregação decomposição serão destruídas juntamente, já que as mesmas fazem parte da outra. A composição impõe o sentido de que um objeto todo não existe sem duas partes. O relacionamento que deveria ser utilizado é definido pelo símbolo, onde um objeto pode existir e ser útil sem um outro objeto que o acompanha. Nesse caso o C.B. Basquete e C.B. Futebol podem existir sem um jogador. Porém meu professor me disse que está incorreto, já tem dias que estou tentando mas não estou conseguindo, vocês podem me ajudar?
  2. 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?
  3. @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
  4. @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.
  5. @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.
  6. @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.
  7. @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.
  8. 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!