Olá professor, tudo bem ? Creio que há um problema no seu código na parte da remoção e na parte da busca de números. No caso da tabela estar vazia e todas a posições estiverem disponíveis (por exemplo caso o usuário tiver inserido e retirado valores em todas as opções válidas dentro do "range" de max_posicoes) seu loop não irá se encerrar. Gostaria de saber se é isso mesmo. Fora isso foi uma ótima aula gosto muito da sua didática e da sua forma descomplicada de esplicar.
só vamo... mas confesso q to meio perdido... apos acabar a maratona de video-aulas vou da umas pesquisadas adicionais. só anotando aqui os pontos pra dps rever.
Professor Douglas, sua aula é a minha salvação! Só ficaria ainda mais fácil se tivesse um rabisco dos esquemas que vc fala durante a explicação, aí o tonto aqui entendia que era uma beleza 🙃
Professor, parabéns pelo canal! Não seria necessário um tratamento no método Inserir para evitar ficar em loop se todos os elementos já estiverem ocupados?
Obriago João, então, por isso a quantidade de elementos do vetor deve ser maior que a quantidade máxima de elementos a ser inserido, para sempre ter posições vazias que ajudam a otimizar a busca e que evita esse loop. Lógico que se inserirmos e removermos muitos elementos, é possível que todas as posições estejam ocupadas ou disponíveis (removidas), nesse caso, o insert não entraria em loop, pq ela para em posições disponíveis, mas a busca entraria em loop infinito se buscar um elemento que não está na tabela, pois este não para posições disponíveis. Mas caso, ocorra isso, a tabela hash estaria tão suja, que a busca seria o mesmo que uma busca sequencial, e portanto, ela não teria mais seu valor inicial que é de otimizar buscas.
@@ProfessorDouglasMaioli Faltou a verificação que o número máximo de elementos é menor que o tamanho do vetor. Creio que seria oportuno colocar tal consistência na entrada desses dados. Fica a sugestão. Obrigado pela aula. Muito boa como sempre.
Vicente, entendi agora a questão do João, precisaria mesmo colocar um If (estacheio) para avisar se tentarem colocar mais elementos na tabela hash que o número máximo de elementos.
@@ProfessorDouglasMaioli Sim, pois se o vetor estiver cheio poderá entrar em looping. A outra forma é testar se o número máximo de elementos é menor que o tamanho do vetor assim que forem definidos tais parâmetros (na entrada de dados) e dar mensagem de erro se tal regra não for respeitada pedindo novos valores.
Então, já tem a função estacheio, ela verifica se o número de elementos é igual o máximo de elementos, essa parte de verificar se o máximo elemento é menor que o tamanho do vetor, acho melhor fazer no main, pq já avisa pro usuário esse erro e já pede pra ele digitar novamente.
Professor na função buscar qual a finalidade do parâmetro bool& busca? Ele vem como false entra no while e passa para true se o elemento foi encontrado. Ok. Mas pra quê?
Então, a gente da como entrada um objeto aluno só com o RA para ver se acha aquele RA e assim saiba qual o nome do aluno que tem aquele RA, se encontra, a função tem que retornar o aluno com RA e nome. Mas pode ser que não encontre o aluno e a função tem que dar um jeito de informar que o RA não foi encontrado, uma forma é a variável busca, se sair false aquele RA não foi encontrado e se a busca voltar true, o RA foi achado. Você poderia não usar a variável busca e ver se quando a função voltar se no nome aparece um espaço " ", se sim então o RA não foi encontrado, se não o aluno foi encontrado e tem aquele nome, o problema de fazer desse jeito é que na hora de inserir um aluno a pessoa insira errado somente um espaço. Por isso, o melhor é essa variável busca pra dizer que o aluno foi encontrado ou não.
estrutura[local] = Aluno(-2, " "); fica dando esse erro no Aluno: chamada de um tipo de classe sem operador apropriado ou funções de conversão para o tipo ponteiro para função. o erro só sai quando faço algo completamente sem noção que é isso: Estrutura[Local] = Aluno ;(-2, " "); não compilei pq não tô entendendo nada...
Oi Erika, na classe Aluno você colocou os dois construtores Aluno? O padrão sem entrada e o outro com entrada? Outra coisa que pode dar esse erro. Você chamou a classe? #include "aluno.h"?
@@ProfessorDouglasMaioli sim eu fiz exatamente como você, eu digitei cada linha conforme vc ia fazendo na vídeo aula, já olhei mil vezes pra comparar o código que foi postado na descrição com o que eu fui digitando e esse erro só saiu qdo coloquei ; Não me pergunte como, mas compilou e rodou certinho, só que eu qro entender o pq... E na outra tabela sem colisão deu erro na parte do aluno aux, ficou pedindo pra eu colocar ; tbm e dizendo que o aux não estava declarado, fui lá deletei o que eu tinha digitado, copiei o seu código na descrição, colei por cima, salvei e continuou dando o mesmo erro....
É bem complexo, mas com sua explicação fica muito fácil entender.
Que bom Anderson .... Muito obrigado 👍
muito bom, valeu Douglas
Obrigado Cristian 👍
Olá professor, tudo bem ?
Creio que há um problema no seu código na parte da remoção e na parte da busca de números. No caso da tabela estar vazia e todas a posições estiverem disponíveis (por exemplo caso o usuário tiver inserido e retirado valores em todas as opções válidas dentro do "range" de max_posicoes) seu loop não irá se encerrar. Gostaria de saber se é isso mesmo. Fora isso foi uma ótima aula gosto muito da sua didática e da sua forma descomplicada de esplicar.
só vamo... mas confesso q to meio perdido... apos acabar a maratona de video-aulas vou da umas pesquisadas adicionais. só anotando aqui os pontos pra dps rever.
Professor Douglas, sua aula é a minha salvação! Só ficaria ainda mais fácil se tivesse um rabisco dos esquemas que vc fala durante a explicação, aí o tonto aqui entendia que era uma beleza 🙃
Professor, parabéns pelo canal!
Não seria necessário um tratamento no método Inserir para evitar ficar em loop se todos os elementos já estiverem ocupados?
Obriago João, então, por isso a quantidade de elementos do vetor deve ser maior que a quantidade máxima de elementos a ser inserido, para sempre ter posições vazias que ajudam a otimizar a busca e que evita esse loop. Lógico que se inserirmos e removermos muitos elementos, é possível que todas as posições estejam ocupadas ou disponíveis (removidas), nesse caso, o insert não entraria em loop, pq ela para em posições disponíveis, mas a busca entraria em loop infinito se buscar um elemento que não está na tabela, pois este não para posições disponíveis. Mas caso, ocorra isso, a tabela hash estaria tão suja, que a busca seria o mesmo que uma busca sequencial, e portanto, ela não teria mais seu valor inicial que é de otimizar buscas.
@@ProfessorDouglasMaioli Faltou a verificação que o número máximo de elementos é menor que o tamanho do vetor. Creio que seria oportuno colocar tal consistência na entrada desses dados. Fica a sugestão. Obrigado pela aula. Muito boa como sempre.
Vicente, entendi agora a questão do João, precisaria mesmo colocar um If (estacheio) para avisar se tentarem colocar mais elementos na tabela hash que o número máximo de elementos.
@@ProfessorDouglasMaioli Sim, pois se o vetor estiver cheio poderá entrar em looping. A outra forma é testar se o número máximo de elementos é menor que o tamanho do vetor assim que forem definidos tais parâmetros (na entrada de dados) e dar mensagem de erro se tal regra não for respeitada pedindo novos valores.
Então, já tem a função estacheio, ela verifica se o número de elementos é igual o máximo de elementos, essa parte de verificar se o máximo elemento é menor que o tamanho do vetor, acho melhor fazer no main, pq já avisa pro usuário esse erro e já pede pra ele digitar novamente.
Professor na função buscar qual a finalidade do parâmetro bool& busca? Ele vem como false entra no while e passa para true se o elemento foi encontrado. Ok. Mas pra quê?
Então, a gente da como entrada um objeto aluno só com o RA para ver se acha aquele RA e assim saiba qual o nome do aluno que tem aquele RA, se encontra, a função tem que retornar o aluno com RA e nome. Mas pode ser que não encontre o aluno e a função tem que dar um jeito de informar que o RA não foi encontrado, uma forma é a variável busca, se sair false aquele RA não foi encontrado e se a busca voltar true, o RA foi achado. Você poderia não usar a variável busca e ver se quando a função voltar se no nome aparece um espaço " ", se sim então o RA não foi encontrado, se não o aluno foi encontrado e tem aquele nome, o problema de fazer desse jeito é que na hora de inserir um aluno a pessoa insira errado somente um espaço. Por isso, o melhor é essa variável busca pra dizer que o aluno foi encontrado ou não.
Entendi! Obrigado 👍
Parabéns pelo aniversário do Canal 👏👏👏👏
estrutura[local] = Aluno(-2, " ");
fica dando esse erro no Aluno: chamada de um tipo de classe sem operador apropriado ou funções de conversão para o tipo ponteiro para função.
o erro só sai quando faço algo completamente sem noção que é isso: Estrutura[Local] = Aluno ;(-2, " ");
não compilei pq não tô entendendo nada...
Oi Erika, na classe Aluno você colocou os dois construtores Aluno? O padrão sem entrada e o outro com entrada? Outra coisa que pode dar esse erro. Você chamou a classe? #include "aluno.h"?
@@ProfessorDouglasMaioli sim eu fiz exatamente como você, eu digitei cada linha conforme vc ia fazendo na vídeo aula, já olhei mil vezes pra comparar o código que foi postado na descrição com o que eu fui digitando e esse erro só saiu qdo coloquei ;
Não me pergunte como, mas compilou e rodou certinho, só que eu qro entender o pq...
E na outra tabela sem colisão deu erro na parte do aluno aux, ficou pedindo pra eu colocar ; tbm e dizendo que o aux não estava declarado, fui lá deletei o que eu tinha digitado, copiei o seu código na descrição, colei por cima, salvei e continuou dando o mesmo erro....
Mas quando coloca esse ; roda normal neh? E quando vc pega todos os arquivos que eu postei e manda rodar eles? Da certo sem esse ;?
@@ProfessorDouglasMaioli não, não dá certo.... eu tenho que colocar ; aí sim roda certinho.
Só que qria entender pq disso...
Estou com os mesmos erros que voce?
Como conseguiu resolver?