1
resposta

Não consegui fazer o desafio proposto pelo professor. Alguma solução?

Boa tarde, tudo bem?

Estou no curso "Avançando com C++: entenda melhor a linguagem" dentro da aula 4 no vídeo "Const" onde propõe um desafio em torno de 7:10 min.

Já ficou bem confusa a lógica aplicada na parte da função "nao_acertou" que é essa:

bool nao_acertou(std::string& palavra_secreta, const std::map<char, bool>& chutou)
   for (char letra : palavra_secreta)
   {
      if (chutou.find(letra) == chutou.end() || !chutou.at(letra))
      {
         return true;
      }
   }
   return false;

A lógica dentro do IF achei bem complicada, mas é por conta de evitar a modificação no map chutou (definida com const no parâmetro) e com essa lógica é possível... sem o const o if era assim if(!chutou[letra])

E propõe fazer o mesmo na função imprime_palavra:

void imprime_palavra (std::string& palavra_secreta, const std::map<char, bool>& chutou)
{
   for (char letra : palavra_secreta)
   {
      if (chutou[letra])
      {
         std::cout << letra << " ";
      }
      else
      {
         std::cout << "_ ";
      }
   }
   std::cout << std::endl;
}

Como não consigo montar, na minha cabeça, o if adequado que diga ás letras que são falsas sem modificar no map chutou (por conta do const aplicado no map)

1 resposta

Olá Rodrigo! Entendo que você está com dificuldades para entender a lógica aplicada nas funções "nao_acertou" e "imprime_palavra" do desafio proposto pelo professor no curso "Avançando com C++: entenda melhor a linguagem". Vou tentar te ajudar a entender melhor!

Na função "nao_acertou", a lógica aplicada é verificar se cada letra da palavra secreta está presente no mapa "chutou" e se o valor correspondente a essa letra é falso. Caso alguma letra não esteja presente no mapa ou o valor seja falso, a função retorna true, indicando que ainda existem letras não acertadas. Caso contrário, a função retorna false, indicando que todas as letras foram acertadas.

A lógica dentro do if pode parecer um pouco complicada, mas ela é necessária para evitar a modificação do mapa "chutou", que é definido como constante no parâmetro da função. Se o mapa não fosse constante, poderíamos utilizar a expressão "!chutou[letra]" para verificar se a letra foi chutada ou não. No entanto, como o mapa é constante, precisamos utilizar a função "find" para buscar a letra no mapa e verificar se ela foi encontrada ou não. Se a letra não foi encontrada ou o valor correspondente for falso, retornamos true.

Na função "imprime_palavra", a lógica é similar. A função percorre cada letra da palavra secreta e verifica se ela está presente no mapa "chutou". Se a letra estiver presente e o valor correspondente for verdadeiro, ela é impressa. Caso contrário, é impresso um "_" para indicar que a letra não foi acertada.

Entendo que a lógica pode parecer um pouco complexa, mas é importante para garantir que o mapa "chutou" não seja modificado. Se você tiver alguma dúvida específica sobre a implementação dessas funções, posso tentar te ajudar de forma mais detalhada.

Espero ter ajudado a esclarecer suas dúvidas! Bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software