Qualsiasi domanda da un PROFI a un SUPER PROFI - 1. - pagina 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;   
         }   
      }
   } 
 
Grazie mille per il codice. Ho difficoltà a capire come funziona però:)
 
Hai scritto correttamente che il problema dovrebbe essere risolto ricorsivamente. C'è un dato numero di elementi. Finché l'elemento non è l'ultimo, la funzione si inserisce con un valore di massa ridotto del valore di tutti gli incrementi nelle iterazioni precedenti. Sull'ultimo elemento, calcola semplicemente l'ultimo residuo e stampa.
 

Cosa mi manca nella funzione che il pulsante non è visibile?

Questa è una funzione in una 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);  // вернули для проверки размера
}

quando la funzione viene chiamata dallo script - tutto va perfettamente.

Il grafico in alto mostra il testo "String", la funzione stessa restituisce il numero corretto di larghezza del pulsante 100.

Ma il pulsante non è visibile.

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

ZS
Ho trovato il problema - ho dimenticato di fare UpdateWindow .
Grazie a tutti :)


 
come disabilitare le notizie sul grafico in MT5????
 
parkhomenko:
come disabilitare le notizie in MT5 che vengono visualizzate sul grafico????

conoscere meglioqui
 

Avete qualche idea su come chiamare "Notepad" da MT4?

Sono stanco di memorizzare i dati in .txt e aprirli a mano (con il mouse). Vorrei aprire il file Notepad ..МТ4\experts\files\data.txt dopo aver completato i calcoli

grazie

 
#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);
 

come si cambia una condizione da più a meno?

sembra che dal regno della finzione, se più o meno avesse un valore di tipo intero int, si potrebbe impostare int pl = +;)))

forse c'è un'opzione.......

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

come posso cambiare il più dal meno nella condizione?



selezionare S=1 o S=-1. poi moltiplicare il valore richiesto per S

per esempio in questo modo:

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

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