Analise o código C# mostrado abaixo.namespace ConsoleApplica...

Próximas questões
Com base no mesmo assunto
Q567885 Programação
Analise o código C# mostrado abaixo.

namespace ConsoleApplication1 

{

     class Program

     {

         static IEnumerable<int>

            XPTO(int from, int to) {

             for (int i = from; i < to; i+=3) {

                yield return i;

             }

             yield break;

         }

         static void Main()

         {

             foreach (int x in XPTO(-10, 10) {

                 Console.WriteLine(x);

              }

          }

     }



O resultado exibido pelo programa é: 
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

Resposta Correta: B -10, -7, -4, -1, 2, 5, 8

O código apresentado na questão é um exemplo de implementação de um iterador em C# utilizando a palavra-chave yield. Iteradores são construções que permitem a iteração sobre uma coleção sem a necessidade de criar uma coleção temporária, como uma lista ou array, economizando memória e tempo de execução.

A função XPTO declarada retorna uma sequência de números inteiros (IEnumerable<int>) que começa no valor especificado pelo parâmetro from e termina antes de alcançar o valor especificado pelo parâmetro to. Dentro do loop for, a expressão yield return i; é usada para retornar o valor atual de i a cada iteração. Após cada yield return, o estado da função é mantido, e o loop continua até sua próxima execução. O yield break é utilizado para encerrar a geração de valores, mas no presente caso, é redundante visto que o loop for já define a condição de término.

O loop começa com o valor de i igual ao parâmetro from (que é -10) e incrementa i por 3 a cada iteração (i+=3). Portanto, a sequência gerada será: -10, -7, -4, -1, 2, 5, 8. Observe que o valor 8 é o último valor gerado, pois o próximo valor seria 11, que não é menor que o parâmetro to (que é 10), portanto, o loop termina antes de i alcançar 11. Assim, a alternativa correta é a B, pois ela lista exatamente a sequência de números que seriam impressos na tela pelo programa.

Para resolver essa questão com sucesso, é importante ter um bom entendimento de como funcionam os iteradores em C#, a sintaxe do loop for, e o significado das palavras-chave yield return e yield break.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

from = -10
to = 10

não pode esquecer que começa imprimindo o -10, por isso errei na prova.

quando i = 11 -> i+=3 -> 8+3

11 < 10 ? sai do loop e entra no break. Por isso a impressão termina no 8

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo