Obrigado, mas já li a primeira ligação antes e a segunda confirma a lógica que utilizei ao escrever o código.
No entanto, estou confuso com esta afirmação no segundo link "... Háoutra variável com o mesmo nome fora deste laço... "Segue-se que o valor de uma variável global permanece o mesmo apesar de dentro do bloco ser declarada uma nova variável com o mesmo nome, mas este disparate porque se declarar uma nova variável, o valor da primeira será apagado, então não compreendo, de que serve usar e armazenar duas variáveis diferentes (local e global), mas com o mesmo valor?
Obrigado, mas já li a primeira ligação antes, e a segunda confirmou a lógica que utilizei ao escrever o código.
No entanto, estou confuso com esta afirmação a partir do segundo link "...fora deste laço há outra variável com o mesmo nome. "Mas isto é um disparate porque se declarar uma nova variável, o valor da primeira será apagado, então não compreendo, de que serve usar e armazenar duas variáveis diferentes (local e global), mas com o mesmo valor?
Na minha opinião, está a escrever disparates. Se declarar uma variável local dentro de um laço ou função, o valor de uma variável global com o mesmo nome não será afectado, mas o compilador avisá-lo-á que declarou uma variável local com o mesmo nome que a variável global existente e que trabalha dentro de uma função ou bloco de código cujo âmbito inclui a variável recentemente declarada não afectará o valor da variável global. Avisa-o sobre isto para que compreenda que se trata de uma nova variável, e para que não espere que o valor da variável global mude depois de deixar o âmbito do bloco no qual declarou uma nova variável com o mesmo nome que a variável global existente.
Em termos simples: tudo dentro do apartamento aplica-se a todos os quartos e é partilhado por todos os quartos (variável global). E tudo o que está dentro de uma sala - aplica-se apenas à sala e não é visível de outras salas (é uma variável local).
Ainda mais simples? Por favor:
Se estragar o ar na casa de banho (localmente), é aí que se faz a confusão. Entretanto, todo o apartamento (globalmente) sabe (como resultado das suas experiências na casa de banho) que é melhor não ir à casa de banho... Mas o ar é um conceito para todo o apartamento, e todos os residentes sabem sobre o ar estragado na casa de banho. Ao mesmo tempo, só a pessoa sortuda que está na casa de banho pode experimentar todas as delícias de mudar o ambiente local dentro do espaço confinado (influência local do valor da variável). O resto de nós sabemos disso, mas não o sentimos. Quando se sai da sanita, perde-se as sensações (valores locais) que se experimenta na sanita e começa-se a respirar ar fresco (obter os valores globais do ar), sabendo, como todos os outros, que há um pontapé nas calças (o resultado da função de contaminação do ar, que afecta a vida global de todo o apartamento)...
Penso que estás a escrever disparates. Se declarar uma variável local dentro de um laço ou função, o valor da variável global com o mesmo nome não será sobrescrito, mas o compilador avisá-lo-á que declarou uma variável local com o mesmo nome que a variável global existente, e trabalhando dentro de uma função ou bloco de código cujo âmbito inclui a variável recentemente declarada, não afectará o valor da variável global. Avisa-o sobre isto para que compreenda que se trata de uma nova variável, e para que não espere que o valor da variável global mude depois de deixar o âmbito do bloco no qual declarou uma nova variável com o mesmo nome que a variável global existente.
Em termos simples: tudo dentro do apartamento aplica-se a todos os quartos e é partilhado por todos os quartos (variável global). E tudo o que está dentro de uma sala - aplica-se apenas à sala e não é visível de outras salas (é uma variável local).
Ainda mais simples? Por favor:
Se estragar o ar na casa de banho (localmente), é aí que se faz a confusão. Entretanto, todo o apartamento (globalmente) sabe (o resultado das suas experiências na casa de banho) que é melhor não ir à casa de banho... Mas o ar é um conceito para todo o apartamento, e todos os ocupantes sabem sobre o ar estragado na sanita. Ao mesmo tempo, só a pessoa sortuda que está na casa de banho pode experimentar todas as delícias de mudar o ambiente local dentro do espaço confinado (influência local do valor da variável). O resto de nós sabemos disso, mas não o sentimos. Quando se sai da sanita, perde-se as sensações (valores locais) que se experimenta na sanita e começa-se a respirar ar fresco (obter os valores globais do ar), sabendo, como todos os outros, que há um pontapé nas calças (o resultado da função de contaminação do ar, que afecta a vida global de todo o apartamento)...
Espero ter-me feito entender
Descobriu a verdade na sua obra - obrigado! Acontece que declarar uma variável dentro de um bloco com o mesmo nome que a variável global leva ao bloqueio de dados da variável global dentro do bloco... E o aviso sobre a variável já declarada não pode ser removido, certo?
-Aleks-: Descobriu a verdade na sua obra - obrigado! Acontece que declarar uma variável dentro de um bloco com o mesmo nome que a variável global resulta no bloqueio de dados da variável global dentro do bloco... e o aviso sobre a variável já declarada não pode ser removido, certo?
Obrigado, mas já li a primeira ligação antes, e a segunda confirmou a lógica que utilizei ao escrever o código.
No entanto, estou confuso com esta afirmação a partir do segundo link "...fora deste laço há outra variável com o mesmo nome. "Mas este disparate porque se declarar uma nova variável, o valor da primeira será apagado, então não está claro para mim, de que serve usar e armazenar duas variáveis diferentes (local e global), mas com o mesmo valor?
Infelizmente não está escrito correctamente :(
void CalculateLWMA(int rates_total,int prev_calculated,int begin,constdouble &price[])
{
inti,limit;
staticint weightsum=0;
double sum=0;
//---if(prev_calculated==0)
{
limit=MA_Period+begin;
//--- set empty value for first limit barsfor(i=0; i<limit; i++) LineBuffer[i]=0.0;
//--- calculate first visible valuedouble firstValue=0;
for(inti=begin; i<limit; i++)
{
int k=i-begin+1;
weightsum+=k;
firstValue+=k*price[i];
}
firstValue/=(double)weightsum;
LineBuffer[limit-1]=firstValue;
}
else
{
limit=prev_calculated-1;
}
for(i=limit;i<rates_total;i++)
{
sum=0;
for(int j=0; j<MA_Period; j++) sum+=(MA_Period-j)*price[i-j];
LineBuffer[i]=sum/weightsum;
}
//---
}
Porque me está a dar o código? Não sei o que procurar nele... ...e não tenho muito tempo. Pode dizer-me para que serve e o que está errado com a ajuda?
Artyom Trishkin: Porque me está a dar o código? Não sei o que procurar nele... ...e estou limitado pelo tempo. Pode dizer-me para que serve e qual é o erro na ajuda.
Bem, não há erro: um laço com i global (azul), e outro laço com i local (vermelho)
if(prev_calculated==0)
{
limit=MA_Period+begin;
//--- set empty value for first limit barsfor(i=0; i<limit; i++) LineBuffer[i]=0.0;//--- calculate first visible valuedouble firstValue=0;
for(inti=begin; i<limit; i++){ int k=i-begin+1; weightsum+=k; firstValue+=k*price[i]; }
firstValue/=(double)weightsum;
LineBuffer[limit-1]=firstValue;
}
Aqui diz em brancohttps://docs.mql4.com/ru/basis/operators/for
https://docs.mql4.com/ru/basis/variables/variable_scope
Obrigado, mas já li a primeira ligação antes e a segunda confirma a lógica que utilizei ao escrever o código.
No entanto, estou confuso com esta afirmação no segundo link "... Háoutra variável com o mesmo nome fora deste laço... "Segue-se que o valor de uma variável global permanece o mesmo apesar de dentro do bloco ser declarada uma nova variável com o mesmo nome, mas este disparate porque se declarar uma nova variável, o valor da primeira será apagado, então não compreendo, de que serve usar e armazenar duas variáveis diferentes (local e global), mas com o mesmo valor?
Obrigado, mas já li a primeira ligação antes, e a segunda confirmou a lógica que utilizei ao escrever o código.
No entanto, estou confuso com esta afirmação a partir do segundo link "...fora deste laço há outra variável com o mesmo nome. "Mas isto é um disparate porque se declarar uma nova variável, o valor da primeira será apagado, então não compreendo, de que serve usar e armazenar duas variáveis diferentes (local e global), mas com o mesmo valor?
Na minha opinião, está a escrever disparates. Se declarar uma variável local dentro de um laço ou função, o valor de uma variável global com o mesmo nome não será afectado, mas o compilador avisá-lo-á que declarou uma variável local com o mesmo nome que a variável global existente e que trabalha dentro de uma função ou bloco de código cujo âmbito inclui a variável recentemente declarada não afectará o valor da variável global. Avisa-o sobre isto para que compreenda que se trata de uma nova variável, e para que não espere que o valor da variável global mude depois de deixar o âmbito do bloco no qual declarou uma nova variável com o mesmo nome que a variável global existente.
Em termos simples: tudo dentro do apartamento aplica-se a todos os quartos e é partilhado por todos os quartos (variável global). E tudo o que está dentro de uma sala - aplica-se apenas à sala e não é visível de outras salas (é uma variável local).
Ainda mais simples? Por favor:
Se estragar o ar na casa de banho (localmente), é aí que se faz a confusão. Entretanto, todo o apartamento (globalmente) sabe (como resultado das suas experiências na casa de banho) que é melhor não ir à casa de banho... Mas o ar é um conceito para todo o apartamento, e todos os residentes sabem sobre o ar estragado na casa de banho. Ao mesmo tempo, só a pessoa sortuda que está na casa de banho pode experimentar todas as delícias de mudar o ambiente local dentro do espaço confinado (influência local do valor da variável). O resto de nós sabemos disso, mas não o sentimos. Quando se sai da sanita, perde-se as sensações (valores locais) que se experimenta na sanita e começa-se a respirar ar fresco (obter os valores globais do ar), sabendo, como todos os outros, que há um pontapé nas calças (o resultado da função de contaminação do ar, que afecta a vida global de todo o apartamento)...
Espero ter-me feito entender
Penso que estás a escrever disparates. Se declarar uma variável local dentro de um laço ou função, o valor da variável global com o mesmo nome não será sobrescrito, mas o compilador avisá-lo-á que declarou uma variável local com o mesmo nome que a variável global existente, e trabalhando dentro de uma função ou bloco de código cujo âmbito inclui a variável recentemente declarada, não afectará o valor da variável global. Avisa-o sobre isto para que compreenda que se trata de uma nova variável, e para que não espere que o valor da variável global mude depois de deixar o âmbito do bloco no qual declarou uma nova variável com o mesmo nome que a variável global existente.
Em termos simples: tudo dentro do apartamento aplica-se a todos os quartos e é partilhado por todos os quartos (variável global). E tudo o que está dentro de uma sala - aplica-se apenas à sala e não é visível de outras salas (é uma variável local).
Ainda mais simples? Por favor:
Se estragar o ar na casa de banho (localmente), é aí que se faz a confusão. Entretanto, todo o apartamento (globalmente) sabe (o resultado das suas experiências na casa de banho) que é melhor não ir à casa de banho... Mas o ar é um conceito para todo o apartamento, e todos os ocupantes sabem sobre o ar estragado na sanita. Ao mesmo tempo, só a pessoa sortuda que está na casa de banho pode experimentar todas as delícias de mudar o ambiente local dentro do espaço confinado (influência local do valor da variável). O resto de nós sabemos disso, mas não o sentimos. Quando se sai da sanita, perde-se as sensações (valores locais) que se experimenta na sanita e começa-se a respirar ar fresco (obter os valores globais do ar), sabendo, como todos os outros, que há um pontapé nas calças (o resultado da função de contaminação do ar, que afecta a vida global de todo o apartamento)...
Espero ter-me feito entender
Descobriu a verdade na sua obra - obrigado! Acontece que declarar uma variável dentro de um bloco com o mesmo nome que a variável global resulta no bloqueio de dados da variável global dentro do bloco... e o aviso sobre a variável já declarada não pode ser removido, certo?
Obrigado, mas já li a primeira ligação antes, e a segunda confirmou a lógica que utilizei ao escrever o código.
No entanto, estou confuso com esta afirmação a partir do segundo link "...fora deste laço há outra variável com o mesmo nome. "Mas este disparate porque se declarar uma nova variável, o valor da primeira será apagado, então não está claro para mim, de que serve usar e armazenar duas variáveis diferentes (local e global), mas com o mesmo valor?
Infelizmente não está escrito correctamente :(
Infelizmente, está mal escrito aí :(
não o diz correctamente na ajuda.
Porque me está a dar o código? Não sei o que procurar nele... ...e estou limitado pelo tempo. Pode dizer-me para que serve e qual é o erro na ajuda.
é o código da ajuda
é "i" no início da função
depois no loop é novamente "i".
é o código da ajuda
é "i" no início da função
então no laço está "i" novamente
Bem, não há erro: um laço com i global (azul), e outro laço com i local (vermelho)