Analise a função a seguir:
int descubra(int vet[], int n, int k)
{
    int x=0;
    int y=0;
    for(int i=0; i<n; i++){
        if(vet[i]<k){ // comparação 1
            x+=vet[i];
        }
        if(vet[i]>k){ // comparação 2
            y+=vet[i];
        }
    }
    return y-x;
}
a) O que essa função retorna?
b) Quantas vezes a comparação 1 é realizada?
c) Quantas vezes a comparação 2 é realizada?

Passo 1

O enunciado apresenta a função descubra que recebe um vetor vet[] de tamanho n e um valor inteiro k. Ela percorre todos os elementos do vetor, faz duas comparações em cada iteração—uma para somar em x os valores menores que k e outra para somar em y os valores maiores que k—e por fim retorna a diferença entre essas somas. O conteúdo envolvido é iteração sobre vetor, somatórios condicionais e contagem de comparações.

Passo 2

Vamos entender o que são x e y depois do laço for:
  • x acumula todos os elementos de vet tais que cada elemento é menor que k. Em notação de somatório,
x = sumsubstack0 <= i < n vet[i] < k vet[i]
  • y acumula todos os elementos de vet tais que cada elemento é maior que k. Em notação de somatório,
y = sumsubstack0 <= i < n vet[i] > k vet[i]
A função retorna o valor
y - x,
ou seja, a diferença entre a soma dos elementos maiores que k e a soma dos elementos menores que k.

Passo 3

Para cada iteração do laço for (que ocorre para i=0,1,dots,n-1, total de n iterações), a comparação 1 (vet[i] < k) é avaliada exatamente uma vez. Logo, a comparação 1 é realizada n vezes.
De modo análogo, em cada uma das mesmas n iterações a comparação 2 (vet[i] > k) também é avaliada exatamente uma vez. Portanto, a comparação 2 é realizada n vezes.

Resposta

a) A função retorna a diferença entre a soma dos elementos de vet maiores que k e a soma dos elementos menores que k.
b) A comparação 1 é realizada n vezes.
c) A comparação 2 é realizada n vezes.

Exercícios relacionados