2
respostas

Dificuldade de entender a lógica dos laços

Oi, pessoal, eu tenho tido muita dificuldade de entender a lógica dos laços de repetição.

function desenhaBarra (x, y, serie, cores, texto) {

        desenhaTexto(x, y - 10, texto)

        var somaAltura = 0;

        for (var i = 0; i < serie.length; i++) {
            var altura = serie[i];
            desenhaRetangulo(x, y + somaAltura, 50, altura, cores[i]);
            somaAltura = somaAltura + altura;
        }

    }

Eu não consigo compreender qual é o papel que as variáveis i e somaAltura têm dentro dessa função. A somaAltura puxa o valor de somaAltura + altura, e essa altura corresponde aos valores de [50, 25, 20, 5] ou [65, 20, 13, 2] (das variáveis serie2015 e serie2016)? E a variável i é de índice, e corresponde ao tamanho de 4 índices que aparecem dentro dos colchetes (pelo length puxado de serie)?

Pensando nisso, fiz dessa maneira:

function desenhaBarra (x, y, serie, cores, texto) {

        desenhaTexto(x, y - 10, texto);

        var somaAltura = 0;
        var indice = 0;

        while(indice < serie.length) {

            var altura = serie[indice];
            desenhaRetangulo(x, y + somaAltura, 50, altura, cores[indice]);
            somaAltura = somaAltura + altura;
            indice = indice + 1;

        }

    }

Deu certo, e eu acho que entendi que o indice ou i, quando dentro do [i] de serie puxa os valores do colchete das variáveis. É isso? Se alguém puder detalhar esses conceitos lógicos pra mim, eu agradeço; acho que a aula não foi o suficiente.

2 respostas

Boa tarde, Thomas!

Os laços for() e while() têm a mesma finalidade. Já as variáveis "i" e "índice" correspondem a posição dentro do vetor.

Exemplo:

vetor [i] = [50, 25, 20, 5];
i = 0 --> vetor [0] == 50; 
i = 1 --> vetor [1] == 25; 
i = 2 --> vetor [2] == 20; 
i = 3 --> vetor [3] == 5; 

O laço for(início; condição; fim_iteração) funciona da seguinte maneira:

for (var i = 0; i < serie.length; i++)

Primeira iteração:

//Supondo serie.lenght == 4
for (var i = 0; 0 < 4; i = 0 + 1) // Passa pelo bloco dentro do for()
var altura = serie[0];
somaAltura = 0 + altura; // A função somaAltura é basicamente um acumulador

Segunda iteração:

for (CAMPO IGNORADO; 1 < 4; i = 1+1) //Passa pelo bloco dentro do for()
var altura = serie[1];
somaAltura = somaAltura + altura; //Desta vez, o somaAltura é diferente de zero.

Segue essa lógica até a última iteração

Quinta iteração:

for (CAMPO IGNORADO; 4 < 4; i = 4+1) // Condição falsa, não passa pelo bloco dentro do for()

No While() você fez a mesma coisa, praticamente. A diferença foi quando você declarou/iniciou a variável i e quando incrementou.

Oi, Yan. Obrigado pela resposta. Acho que ajudou a ilustrar melhor o conceito lógico.