Toute question d'un PROFI à un SUPER PROFI - 1. - page 22

 
int start()
  {
//----
   int massa=100,shag=10,kol=4;
   perebor(massa,shag,kol);
//----
   return(0);
  }
//+------------------------------------------------------------------+
void perebor(int massa, int shag, int kol)
   {
   int massiv[];
   ArrayResize(massiv,kol);
   int x=kol;
   int handle = FileOpen("test.csv",FILE_WRITE,' ');
   
   recurs(massa,shag,massiv,x,kol,handle);
   FileClose(handle);
   }
void recurs  (int massa, int shag, int & massiv[], int x, int kol, int handle)
   { 
   int i,y;
   for(i=0;i<=massa;i+=shag)
      {
      if(x-1>0)
         {
         massiv[kol-x]=i;         
         recurs(massa-i,shag,massiv,x-1,kol,handle);                  
         }
      else
         {
         massiv[kol-x]=massa-i;
         for(y=0;y<kol;y++)
            {            
            FileWrite(handle,y," - ",massiv[y]);
            }
         return;   
         }   
      }
   } 
 
Merci beaucoup pour le code. J'ai cependant du mal à comprendre comment cela fonctionne :)
 
Vous avez correctement écrit que le problème doit être résolu de manière récursive. Il y a un nombre donné d'éléments. Tant que l'élément n'est pas le dernier, la fonction entre elle-même avec une valeur de masse réduite de la valeur de tous les incréments des itérations précédentes. Sur le dernier élément, il suffit de calculer le dernier résidu et d'imprimer.
 

Qu'est-ce qui manque dans la fonction pour que le bouton ne soit pas visible ?

Il s'agit d'une fonction dans une DLL :

#define IDB_BUTTON   6500

//------------------------------------------------------------------
int __stdcall CreateBtn(int hWnd)
{
  HWND wnd=(HWND)hWnd; // хендл окна чарта
  HWND pwnd=GetParent(wnd); // получили родителя для создания кнопки
  ShowWindow(wnd, SW_HIDE); // скрыли чарт
  // создали кнопку
  HWND btn=CreateWindow("Button", "DLL BUTTON", WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON, 
                15, 15, 100, 100, pwnd, (HMENU)IDB_BUTTON, (HINSTANCE)GetModuleHandle(NULL), NULL);
  ShowWindow(btn, SW_SHOW); // показали кнопку
  UpdateWindow(btn);

  // нарисовали на ней текст (для проверки что окно кнопки существует)
  HDC hdc = GetDC(btn);
  TextOut(hdc, 0, 0, (LPSTR)"String", 6);
  ReleaseDC(btn, hdc);
  RECT Rect; 
  GetWindowRect(btn,  &Rect); // получили размер
  return(Rect.right-Rect.left);  // вернули для проверки размера
}

lorsque la fonction est appelée depuis le script - tout se passe parfaitement.

Le graphique en haut montre le texte "String", la fonction elle-même renvoie le nombre correct de largeur de bouton 100.

Mais le bouton n'est pas visible.

-------------

ZS
J'ai trouvé le problème - j'ai oublié de faire UpdateWindow .
Merci à tous :)


 
comment désactiver les nouvelles sur le graphique dans MT5 ????
 
parkhomenko:
comment désactiver les nouvelles dans MT5 qui sont affichées sur le graphique ????

savoir mieuxici
 

Avez-vous une idée sur la façon d'appeler "Notepad" à partir de MT4 ?

Je suis fatigué de stocker des données dans un fichier .txt et de les ouvrir à la main (avec la souris). Je voudrais ouvrir le fichier Notepad ..МТ4\experts\files\data.txt après avoir effectué des calculs.

merci

 
#import "shell32.dll"
   int ShellExecuteA(int hwnd, string oper, string prog, string param, string dir, int show);
#import

ShellExecuteA(0, "Open", "notepad.exe", "data.txt", TerminalPath()+"\\experts\\files", 3);
 

comment changer une condition de plus en moins ?

il semble que dans le domaine de la fiction, si le plus ou le moins avait une valeur de type int entier, on pourrait définir int pl = + ;))))

il y a peut-être une option.......

if(......) + ; else -;
 
Martingeil:

comment changer le plus du moins dans la condition ?



sélectionnez S=1 ou S=-1. puis multipliez la valeur requise par S

par exemple comme ceci :

double S(bool b) 
{
  if (b) return(1); else return(-1); 
}

a=123;
Print(a*S(a<0))
Print(a*S(a==123))

Raison: