PROFIからSUPER PROFIへの質問-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を 返します .

しかし、ボタンは表示されません。

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

ZS
問題を発見 - UpdateWindowをやり 忘れた。
皆さん、ありがとうございました :)


 
MT5でチャートにニュースを表示させない方法とは?
 
parkhomenko:
MT5でチャートに表示されるニュースを無効化する方法とは?

ここに 極まれり
 

MT4から「メモ帳」を呼び出す方法について、何かいい方法はありませんか?

データを.txtに保存して、手で(マウスで)開くのは面倒だ。 計算が終わったら、メモ帳のファイル ..МТ4expertsfiles⇄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))