Любые вопросы от ПРОФИ к СУПЕРПРОФИ - 1. - страница 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;   
         }   
      }
   } 
 
Огромное спасибо за код. Правда я с трудом понимаю как он работает:)
 
Вы правильно писали, что задача должна решаться рекурсивно. Есть заданное количество элементов. Пока элемент не последний функция входит сама в себя с уменьшенным значением масса на величину всех приростов в предыдущих итерациях. На последнем элементе простое последнее вычисление остатка и печать.
 

что я упустил в функции, что не видна кнопка ?

Это функция в 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);  // вернули для проверки размера
}

при вызове функции из скрипта - всё проходит идеально.

На чарте в верху отображается текст "String", сама функция возвращает верное число ширины кнопки 100 .

Но кнопка не видна.

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

ЗЫ
Нашел проблему - забыл UpdateWindow сделать.
Всем спасибо :)


 
как отключить в MT5 новости которые на графике отображаются????
 
parkhomenko:
как отключить в MT5 новости которые на графике отображаются????

здесь лучше знают
 

у когонить есть наработки по вызову "Блокнота" из МТ4?

чет устал складывать инфу в .txt и затем открывать руками(мышей), хотелось бы участок кода который мог бы открыть "Блокнотом" файл ..МТ4\experts\files\data.txt по окончанию расчетов

спс

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

как поменять плюс на минус по условию?

выглядит как из области фантастики, если бы плюс или минус имели бы значение типа целого числа int, можно было бы задать типа int pl = +;)))

может есть какой то вариант.......

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

как поменять плюс на минус по условию?



по условию выбрать S=1 или S=-1. а потом умножить требуемую величину на S

например так:

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

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

Причина обращения: