Não consegui compreender a situação de como chegou no resultado.
Não consegui compreender a situação de como chegou no resultado.
Post o Código
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 linha
com 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!