Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] função verificarRepetito é eficiente?

Gostaria de saber se seria melhor utilizar while ao invés de for para achar duplicatas. Detalhe, a posição V[0] contém a quantidade de números disponíveis que pertencem ao conjunto {1, 2, 3, 4, 5, 6, 7, 8, 9}.

bool verificarRepetido(unsigned char V[]) {
    unsigned char i, j;
    for (i = 1; i < 9; i++) { // Percorre o array
        for (j = i + 1; j < 10; j++) { // Compara cada numero com o proximo
            if (V[i] == V[j]) {
                return TRUE; // Retorna TRUE se encontrar duplicatas
            }
        }
    }
    return FALSE; // Retorna FALSE se não houver duplicatas
}
3 respostas
solução!

Olá, Beatriz! Tudo bem?

Vamos analisar a melhor abordagem para o seu problema!

Analisando o código atual:

O código que você compartilhou utiliza dois loops for aninhados para verificar se há números duplicados no array V. Essa abordagem é eficiente e funciona bem para o seu caso.

Avaliando o uso de while:

Em geral, tanto for quanto while podem ser usados para percorrer arrays e encontrar duplicatas. A escolha entre eles depende da clareza e legibilidade do código, bem como da complexidade da lógica de iteração.

No seu caso específico:

  • for: O for é ideal quando você conhece o número exato de iterações que precisa realizar. No seu caso, você sabe que precisa percorrer o array V do elemento 1 até o 9, o que torna o for uma escolha natural.
  • while: O while seria mais adequado se a condição de parada do loop dependesse de uma condição que não fosse diretamente relacionada ao índice do array. Por exemplo, se você estivesse procurando por um valor específico no array e quisesse parar o loop assim que o encontrasse, o while poderia ser uma boa opção.

Por que o for é preferível no seu caso:

  • Clareza e concisão: O for torna o código mais claro e conciso, pois a inicialização, a condição de parada e a atualização do índice são definidos em uma única linha.
  • Legibilidade: O for é mais fácil de ler e entender quando você precisa percorrer um array com um número fixo de iterações.

Exemplo de como você poderia usar while (menos recomendado):

bool verificarRepetido(unsigned char V[]) {
    unsigned char i = 1, j;
    while (i < 9) {
        j = i + 1;
        while (j < 10) {
            if (V[i] == V[j]) {
                return TRUE;
            }
            j++;
        }
        i++;
    }
    return FALSE;
}

Neste exemplo, o código usa dois loops while aninhados para realizar a mesma tarefa que o código original. No entanto, a versão com for é mais clara e concisa.

Espero ter ajudado.

Obrigada pela ajuda.

Fico feliz em ter ajudado! Bons estudos e continue mandando bem.