Yeni başlayanlardan sorular MQL5 MT5 MetaTrader 5 - sayfa 497

 

Teşekkür ederim ama daha önce ilk linki okumuştum ikincisi de kodu yazarken kullandığım mantığı doğrulamış.

Ancak, ikinci bağlantıdan gelen bu ifade "...   bu döngünün dışında, aynı ada sahip başka bir değişken hareket eder ... ", bundan, blok içinde aynı ada sahip yeni bir değişken bildirilecek olmasına rağmen global değişkenin değerinin aynı kalacağını takip eder, ama bu saçmalık, çünkü yeni değişken bildirirseniz, eskisinin değerinin üzerine yazılacağı için, o zaman iki farklı değişkeni (yerel ve global) kullanmanın ve saklamanın amacının ne olduğu bana açık değil. aynı değer?

 
-Aleks- :

Teşekkür ederim ama daha önce ilk linki okumuştum ikincisi de kodu yazarken kullandığım mantığı doğrulamış.

Ancak, ikinci bağlantıdan gelen bu ifade "...   bu döngünün dışında, aynı ada sahip başka bir değişken hareket eder ... ", bundan, blok içinde aynı ada sahip yeni bir değişken bildirilecek olmasına rağmen global değişkenin değerinin aynı kalacağını takip eder, ama bu saçmalık, çünkü yeni değişken bildirirseniz, eskisinin değerinin üzerine yazılacak , o zaman benim için net değil, iki farklı değişkeni (yerel ve global) kullanmanın ve saklamanın amacı nedir, ancak aynı değer?

Bana göre saçma sapan yazıyorsun. Bir döngü içinde yerel bir değişken bildirirseniz, bu bir işlev olsun, aynı ada sahip global bir değişkenin değerinin üzerine yazılmaz, ancak aynı kalır, ancak derleyici sizi yerel olarak bildirdiğiniz konusunda uyarır. zaten var olan bir global ile aynı ada sahip bir değişken ve kapsamında yeni bildirilen bir değişkene sahip fonksiyon veya kod bloğu içinde çalışmak global değişkenin değerini etkilemez. Bunun yeni bir değişken olduğunu anlamanız ve aynı isimle yeni bir değişken tanımladığınız bloğun kapsamı dışına çıktıktan sonra global bir değişkenin değerinin değişmesini beklememeniz için sizi bu konuda uyarır. mevcut bir küresel olarak.

Basit bir şekilde: dairenin içindeki her şey - her şey tüm odalar için geçerlidir ve tüm odalarda daire tarafından paylaşılır (küresel değişken). Ve odanın içindeki her şey sadece odaya aittir ve diğer odalardan görünmez (bunlar yerel değişkenlerdir).

Daha da kolay? Rica ederim:

Tuvaletteki havayı bozduysanız (yerel olarak), o zaman orada bozulur. Aynı zamanda, tüm apartmanda (küresel olarak) biliyorlar (tuvalet deneylerinizin sonucu) tuvalete gitmemenin daha iyi olduğunu ... Ama hava tüm daire için bir kavram ve tüm kiracılar biliyor tuvaletteki bozuk hava. Aynı zamanda, yalnızca tuvalette olan şanslı kişi, sınırlı alan içindeki yerel durumu değiştirmenin tüm zevklerini tam olarak deneyimleyebilir (değişkenin değerinin yerel etkisi). Diğerleri bunu biliyor ama hissetmiyorlar. Tuvaletten çıktığınızda tuvalette yaşadığınız duyumları (yerel değerler) kaybedersiniz ve temiz hava solumaya başlarsınız (küresel hava değerleri alırsınız), bu sırada herkes gibi itmede bir tekme olduğunu bilerek ( enfeksiyon fonksiyonunun sonucu hava, tüm dairenin genel yaşam sürecini etkiler) ...

umarım net anlatabilmişimdir

 
Artyom Trishkin :

Bana göre saçma sapan yazıyorsun. Bir döngü içinde yerel bir değişken bildirirseniz, bu bir işlev olsun, aynı ada sahip global bir değişkenin değerinin üzerine yazılmaz, ancak aynı kalır, ancak derleyici sizi yerel olarak bildirdiğiniz konusunda uyarır. zaten var olan bir global ile aynı ada sahip bir değişken ve kapsamında yeni bildirilen bir değişkene sahip fonksiyon veya kod bloğu içinde çalışmak global değişkenin değerini etkilemez. Bunun yeni bir değişken olduğunu anlamanız ve aynı isimle yeni bir değişken tanımladığınız bloğun kapsamı dışına çıktıktan sonra global bir değişkenin değerinin değişmesini beklememeniz için sizi bu konuda uyarır. mevcut bir küresel olarak.

Basit bir şekilde: dairenin içindeki her şey - her şey tüm odalar için geçerlidir ve tüm odalarda daire tarafından paylaşılır (küresel değişken). Ve odanın içindeki her şey sadece odaya aittir ve diğer odalardan görünmez (bunlar yerel değişkenlerdir).

Daha da kolay? Rica ederim:

Tuvaletteki havayı bozduysanız (yerel olarak), o zaman orada bozulur. Aynı zamanda, tüm apartmanda (küresel olarak) biliyorlar (tuvalet deneylerinizin sonucu) tuvalete gitmemenin daha iyi olduğunu ... Ama hava tüm daire için bir kavram ve tüm kiracılar biliyor tuvaletteki bozuk hava. Aynı zamanda, yalnızca tuvalette olan şanslı kişi, sınırlı alan içindeki yerel durumu değiştirmenin tüm zevklerini tam olarak deneyimleyebilir (değişkenin değerinin yerel etkisi). Diğerleri bunu biliyor ama hissetmiyorlar. Tuvaletten çıktığınızda tuvalette yaşadığınız duyumları (yerel değerler) kaybedersiniz ve temiz hava solumaya başlarsınız (küresel hava değerleri alırsınız), bu sırada herkes gibi itmede bir tekme olduğunu bilerek ( enfeksiyon fonksiyonunun sonucu hava, tüm dairenin genel yaşam sürecini etkiler) ...

umarım net anlatabilmişimdir

Opuslarındaki gerçeği keşfettiler - teşekkürler! Bir bloğun içinde bir global değişkenle aynı ada sahip bir değişken bildirmek, blok içindeki global değişkenden veri engellemeye yol açar... ve önceden bildirilmiş bir değişken hakkında bir uyarı, onu kaldıramayacağınız anlamına gelir, değil mi?
 
-Aleks- :
Opuslarındaki gerçeği keşfettiler - teşekkürler! Bir bloğun içinde bir global değişkenle aynı ada sahip bir değişken bildirmek, blok içindeki global değişkenden veri engellemesine yol açar... ve önceden bildirilmiş bir değişken hakkında bir uyarı, onu kaldıramayacağınız anlamına gelir, değil mi?
Böyle.
 
Artyom Trishkin :
 void CalculateLWMA( int rates_total, int prev_calculated, int begin, const double &price[])
  {
   int         i,limit;
   static int weightsum= 0 ;
   double      sum= 0 ;
//---
   if (prev_calculated== 0 )
     {
      limit=MA_Period+begin;
       //--- set empty value for first limit bars
       for (i= 0 ; i<limit; i++) LineBuffer[i]= 0.0 ;
       //--- calculate first visible value
       double firstValue= 0 ;
       for ( int i=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;
     }
//---
  }
kılavuzda yanlış
 
-Aleks- :

Teşekkür ederim ama daha önce ilk linki okumuştum ikincisi de kodu yazarken kullandığım mantığı doğrulamış.

Ancak, ikinci bağlantıdan gelen bu ifade "...   bu döngünün dışında, aynı ada sahip başka bir değişken hareket eder ... ", bundan, blok içinde aynı ada sahip yeni bir değişken bildirilecek olmasına rağmen global değişkenin değerinin aynı kalacağını takip eder, ama bu saçmalık, çünkü yeni değişken bildirirseniz, eskisinin değerinin üzerine yazılacağı için, o zaman iki farklı değişkeni (yerel ve global) kullanmanın ve saklamanın amacının ne olduğu bana açık değil. aynı değer?

Maalesef yanlış yazılmış :(

 void CalculateLWMA( int rates_total, int prev_calculated, int begin, const double &price[])
  {
   int          i ,limit;
   static int weightsum= 0 ;
   double      sum= 0 ;
//---
   if (prev_calculated== 0 )
     {
      limit=MA_Period+begin;
       //--- set empty value for first limit bars
       for (i= 0 ; i<limit; i++) LineBuffer[i]= 0.0 ;
       //--- calculate first visible value
       double firstValue= 0 ;
       for ( int i =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;
     }
//---
  }
 
pako :

Maalesef yanlış yazılmış :(

Peki, peki ve sonuç harflerle yapılabilir, aksi takdirde kodu yarasadan hemen tanıyamıyorum.
 
pako :
kılavuzda yanlış
Neden bana bir kod veriyorsun? İçinde ne arayacağımı anlamıyorum ... ve zamanla sınırlı. Tüm bunların ne için olduğunu ve yardımdaki hatanın ne olduğunu bir şekilde söyleyebilir misiniz?
 
Artyom Trishkin :
Neden bana bir kod veriyorsun? İçinde ne arayacağımı anlamıyorum ... ve zamanla sınırlı. Tüm bunların ne için olduğunu ve yardımdaki hatanın ne olduğunu bir şekilde söyleyebilir misiniz?

bu yardımdan gelen kod

işlevin başında "i" olduğunu bildir

daha sonra döngüde "i" tekrar bildirilir

 
pako :

bu yardımdan gelen kod

işlevin başında "i" olduğunu bildir

sonra "i" döngüde tekrar bildirilir

Eh, bir hata değil: global i (mavi) ile bir döngü ve yerel i (kırmızı) ile başka bir döngü

 if (prev_calculated== 0 )
     {
      limit=MA_Period+begin;
       //--- set empty value for first limit bars
       for ( i = 0 ; i <limit; i ++) LineBuffer[ i ]= 0.0 ;
       //--- calculate first visible value
       double firstValue= 0 ;
       for ( int i =begin; i <limit; i ++)
         {                           
         int k= i -begin+ 1 ;           
         weightsum+=k;              
         firstValue+=k*price[ i ];    
         }                           
      firstValue/=( double )weightsum;
      LineBuffer[limit- 1 ]=firstValue;
     }