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

Estou com dúvidas no Desafio: Fors encadeados

Não consegui compreender a situação de como chegou no resultado.

4 respostas

Post o Código

solução!

Vale fazer uma simulação passo a passo!

Acho melhor colocar 2 linhas apenas, pra ficar mais fácil!

O resultado seria:

1
2 4

São 2 linhas, então teríamos qtdLinhas com o valor 2.

int qtdLinhas = 2;

A string triangulo é a saída que vamos montando e mostraremos só no final. Essa string vai começar vazia!

string triangulo = "";

Teremos um for de fora, que vai linha 1 até o total de linhas que, no nosso caso, é 2:

for (int linha = 1; linha <= qtdLinhas; linha++)
{
    //aqui dentro vai o outro for...
    triangulo += "\n";
}

O código de dentro do for vai ser executado 2 vezes, no nosso caso, porque qtdLinhas é 2.

Vai ser executado com a variável linhacom o valor 1 e depois com o valor 2.

A cada vez, ele coloca um \n, que é um ENTER, dentro da string triangulo. Então, no final de tudo, teremos dois ENTER.

Porque não vai ser executado com 3? Porque 3 é maior que 2.

A condição do for, de ser menor que qtdLinhas não é satisfeita e então ele para!

Então, temos o código do for de dentro.

    for (int coluna = 1; coluna <= linha; coluna++)
    {
        triangulo += (linha * coluna) + " ";
    }

A variável coluna começa com 1 e vai até ser menor ou igual à variável linha.

Quando linha for 1, o for de dentro vai executado só 1 vez e a variável coluna terá o valor 1.

Então temos:

linha=1 coluna=1

A variável triangulo vai receber seu valor anterior (por causa do += e o valor de linha vezes coluna. Ou seja, é 1x1, que é 1. Também é colocado um espaço.

Então, nesse ponto, triangulo apenas:

1

A variável coluna é incrementada para 2, mas entra de novo dentro do for de dentro porque 2 não é menor nem igual a 1, que é o valor de linha.

Aí, é executado o for de fora e o valor de linha é incrementando e passa a ser 2.

O for de dentro é executado mais uma vez.

Então temos:

linha = 2 coluna =1

Temos 2x1, que é 2 e é colocado dentro de triangulo que fica:

1
2

Aí, temos a variável coluna incrementada para 2. Dessa vez, o for de dentro é executado novamente porque 2 não é menor mais é igual a 2, o valor de linha.

Então temos:

linha = 2 coluna =2

Aí, teremos 2x2, que é 4.

A variável triangulo que fica:

1
2 4

No final de tudo, é impresso o conteúdo da variável triangulo:

MessageBox.Show(triangulo);

De uma olhada nesse código:

static void Main(string[] args)
        {
            var linha = 5;
            var coluna = 1;
            var trianguloNumerico = string.Empty;

            for (int i = 1; i <= linha; i++)
            {
                coluna = i;
                Console.Write(i + " ");
                for (int j = 2; j <= coluna; j++)
                {
                    Console.Write(i * j + " " );
                }
                Console.WriteLine();
            }
        }

O primeiro "for" controla a impressão somente da primeira colua. Já o segundo "for" a controla a impressão do restante do valores. Ex: se n for 5, então conto o i(que controla as linhas), na primeira passada ele vale 1, depois 2, 3, 4, 5. Ja o segundo for começa com 2, para não imprimir o valor 1 na primeira passda, depois ele imprime "i * j".

1(i) 2 (i) 4 (i j) 3(i) 6(i j) 9(i j) 4(i) 8(i j) 12(i j) 16(i j)

Conseguir compreender, obrigado a todos!