3
respostas

Alguem poderia me ajudar ??? POR FAVOR

Como vi a dificuldade de muitas pessoas, fiquei mais tranquilo, bateu super o desânimo porque não consegui entender de jeito nenhum o papel do 'for' dentro da função e entaõ essa parte de o array "serie[i]" me deixou muito confuso, já vi e revi vários códigos dos meus amigos aqui no fórum porém ainda estou com dúvidas , se alguém puder me explicar nem que seja de uma forma que use if e else por exemplo, o importante é que eu entenda o funcionamento do código antes de qualquer coisa, aqui está o código inteiro pelo professor, se alguém puder me ajudar , eu vou agradecer muito !!! Não quero desistir do curso mas esses problemas que impossibilita de fazer me deixa super pra baixo hahaha, certamente a minha maior e unica duvida é na estrutura do for e como ele faz pra pegar o array e como cada valor dentro do array se torne a altura do retângulo :D

<canvas width="600" height="400"></canvas>

<script>

    function desenhaRetangulo(x, y, largura, altura, cor) {
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.fillStyle=cor;
        pincel.fillRect(x,y, largura, altura);
        pincel.strokeStyle='black';
        pincel.strokeRect(x,y, largura, altura);
    }

    function desenhaTexto(x , y, texto) {
        var tela = document.querySelector('canvas');
        var pincel = tela.getContext('2d');

        pincel.font='15px Georgia';
        pincel.fillStyle='black';
        pincel.fillText(texto, x, y);    
    }

    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;
        }
    }

    var cores = ['blue','green','yellow', 'red'];
    var serie2015 = [50,25,20,5];
    var serie2016 = [65,20,13,2];

    desenhaBarra(50, 50, serie2015, cores, '2015');
    desenhaBarra(150, 50, serie2016, cores, '2016');

</script>
3 respostas

Eae beleza? Vou tentar explicar de uma forma que entenda, porém antes de falar do for em específico, precisamos entender algumas coisas antes. A respeito de arrays, como fazemos para acessar um elemento dentro do array? Por exemplo, se pegarmos o array que você chamou de serie2015, e quisermos o primeiro valor, que é 50, então fazemos assim: serie2015[0], ou seja: Vá no array, e pegue o item que está no índice zero, que é o primeiro índice de qualquer array (É isso mesmo, começa com zero e não com um). Se eu quiser o segundo valor do serie2015, que é 25, então fica serie2015[1], e assim por diante... Dito isto, vamos para sua função, mas vou focar apenas no for, e para o exemplo, vou utilizar a primeira chamada que você fez da função desenhaBarra que ficou assim desenhaBarra(50, 50, serie2015, cores, '2015');. Perceba que na sua função você passou 5 parâmetros - function desenhaBarra(x, y, serie, cores, texto), e quando você chama a função, também passa os valores dos parâmetros, e neste caso, o terceiro parâmetro, que é "serie", você atribuiu a ele o array "serie2015" na hora que chamou a função. Vamos para a estrutura do for: for (var i = 0; i < serie.length; i++), perceba que há três etapas aqui no for:

1ª etapa:var i = 0...inicialmente, meu i vale zero 2ª etapa:i < serie.length...i é menor do que o tamanho do array serie (que neste caso é o serie2015, ou seja, serie.length = 4, pois o array serie2015 tem 4 elementos) ? 3ª etapa:i++...i = i + 1, pega o valor de i que você tem e soma um.

Rodei o programa e cheguei no for - inicialmente ele vai executar a 1ª etapa (criar uma variável e atribuir o valor zero a ela), e então ele vai para a 2ª etapa: 0 < 4 ? Sim, zero é menor do que 4, e aqui que pode começar a confusão, ele não vai para a 3ª etapa, ao invés disso, ele vai executar a próxima linha, que neste caso é: var altura = serie[i];. Neste momento, como o i vale zero (1ª etapa), então ele está dizendo assim: var altura = serie[0]. Lembra que lá no começo, eu expliquei sobre acessar os elementos do array: serie2015[0], serie2015[1], é a mesma coisa, ou seja: var altura = 50, pois o primeiro valor do array serie2015, que tem indice 0 é 50. Próxima linha: desenhaRetangulo(x, y + somaAltura, 50, altura, cores[i]), mesma coisa, ele vai substituir o cores[i] por cores[0], que neste caso é blue. E a última linha: somaAltura = somaAltura + altura;, somaAltura começa valendo zero, em cima do for está escrito isso, e a nossa altura é 50 como vimos acima, então: somaAltura = 0 + 50 portanto somaAltura = 50. Pronto, terminei de executar o primeiro for, e agora? Agora sim, ele vai para 3ª etapa: Soma 1 ao i, e então i passa a valer 1. A partir de agora, ele não executa mais a 1ª etapa (A 1ª etapa é executada somente no primeiro loop do for), então ele vai para a 2ª etapa: i < serie.length = 1 < 4 ? Sim, 1 é menor do que 4, então ele vai novamente para a próxima linha: var altura = serie[i], porém agora, i vale 1, então: var altura = serie[1] = var altura = 25, pois, 25 é o segundo elemento do array serie2015, ou seja, está no índice 1. Ai ele faz a mesma coisa com o cores na segunda linha, até chegar na terceira: somaAltura = somaAltura + altura;, no momento, somaAltura vale 50 lembra? Então: somaAltura = somaAltura(50) + altura(25) = somaAltura = 75. Após isso ele vai para a 3ª etapa, e soma 1 ao i ou seja, 1 vale 2 agora, e executa a 2ª etapa, e assim por diante, até o momento que i valer 4, ai quando ele for para a segunda etapa: i < serie.length = 4 < 4 ?Não, 4 = 4, então ele para de executar o for, porém neste momento, quando i valer 4, ele já passou por todos os elementos do array serie2015, e este é o objetivo do for: Quero executar algo em todos os elementos do meu array. A explicação ficou bem grande, mas espero ter ajudado a entender um pouco como funciona o for, se tem alguma dúvida, pode comentar aqui. Um conselho: Como a explicação ficou grande, leia apenas 1 frase, e tente entender esta frase, e somente após entender, prossiga na leitura, pois eu acredito que se você ler tudo sem dar pausas, vai ser difícil entender.

Puts matheus, você salvou muito !!! Claro, eu como estou aprendendo acho dificil eu já pensar nessa maneira de primeira, a minha questão em si era entender o que cada coisa estava fazendo e você explicou com muita clareza !! Puts, fiquei mo feliz hehee porque quase estava desistindo desse exercício, só uma coisa se tiver como esclarecer mais é no caso dentro do for, na parte desenhaRetangulo(x, y + somaAltura, 50, altura, cores[i]); porque o y é somado com a altura , e porque tem novamente altura , essa parte me confundiu ainda um pouco, confesso... fora isso eu realmente consegui entender o funcionamento da função,do for e do array!! Esclareceu muito !!! Obrigado mesmo :D

Vou ser sincero João, eu nao assisti o curso então não vou poder explicar muito, mas vendo o código e tal, essa parte do desenhaRetangulo é mais ou menos o seguinte: A função desenha um retangulo, então como parâmetros eu preciso - da posição x (horizontal) e da posição y (vertical) desse retangulo, a largura dele, a altura dele e sua cor.

Acredito que no final ele vai desenhar um gráfico, com um retângulo de cada cor um em cima do outro. Então, a cada vez que for executado o for, eu preciso somar a posição y dele, que é a posição vertical, com a soma das alturas dos outros retângulos, por que se não, vão ficar todos os retângulos no mesmo lugar, e não um em cima do outro. Logo em seguida, eu preciso da altura especifico deste retângulo, e por isso eu chamo a altura novamente.

Resumindo: a somaAltura, está somando a altura dos outros retângulos, e você vai utilizar ele pra definir a posição de cada retângulo, sempre somando com a posição inicial y, ou seja: Tenho uma coluna com vários retângulos, em qual posição cada um dos meus retângulos vão estar? Resposta: y + somaAltura. Enquanto a altura em si, é a altura de cada um dos retângulos ou seja: Agora que eu já sei qual posição cada retângulo vai estar, qual a altura de cada retângulo? Resposta: altura. Não sei se deu pra entender, mas espero ter ajudado, se ficou alguma dúvida comenta aqui novamente.