Qualquer pergunta de um PROFI para um SUPER PROFI - 1. - página 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;   
         }   
      }
   } 
 
Muito obrigado pelo código. Mas estou tendo dificuldade em entender como funciona:)
 
Você escreveu corretamente que o problema deve ser resolvido recursivamente. Há um determinado número de elementos. Enquanto o elemento não for o último, a função entra por si mesma com um valor de massa reduzido pelo valor de todos os incrementos nas iterações anteriores. Sobre o último elemento, basta calcular o último elemento residual e imprimir.
 

o que estou perdendo na função que o botão não está visível?

Esta é uma função em uma 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 a função é chamada a partir do roteiro - tudo vai perfeitamente.

O gráfico no topo mostra o texto "String", a própria função retorna a largura correta do botão número 100.

Mas o botão não é visível.

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

ZS
Encontrou o problema - esqueceu de fazer o UpdateWindow .
Obrigado a todos :)


 
como desativar notícias na tabela em MT5????
 
parkhomenko:
como desativar notícias em MT5 que são exibidas no gráfico????

saiba melhoraqui
 

Você tem alguma idéia de como chamar o "Bloco de Notas" do MT4?

Estou cansado de armazenar dados em .txt e abri-los à mão (com o mouse). Gostaria de abrir o arquivo Notepad ..МТ4 /peritos / arquivosdata.txt após completar os cálculos

obrigado

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

como se muda uma condição de mais para menos?

parece que do reino da ficção, se mais ou menos tivesse um valor do tipo int integer, você poderia definir int pl = +;)))

talvez haja uma opção.......

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

como posso mudar o mais do menos na condição?



selecione S=1 ou S=-1. depois multiplique o valor requerido por S

por exemplo, como este:

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

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

Razão: