追踪任务(构建一个函数图)。 - 页 2

 
sergeev:
一个相同的函数可以从startinit 中调用。这应该被修复。

我可以用手指来做,但你必须要想清楚 ))

像这样。

计算函数的数量,让它成为4,在代码头写上#define X 4

假设一个刻度的最大调用次数为 #define Y 100

我们有一个大小为4×100的矩阵,初始化矩阵=-1

现在,在调用一个函数的入口处,添加一个计数器(图形整形器)的调用,它应该在进入我们的矩阵的自由线上的所需位置X添加代码(1,2,3或4)--谁调用了

我认为你的问题更像是网络图,我怀疑网络图的矩阵早就被开发出来了--你需要谷歌一下

SZY: 好吧,这里已经是主题的第二页了;)

 

IgorM,你建议的存储图的方式被称为 "邻接矩阵"。对于稀疏图来说,这是很不经济的(程序员应该为 "全连接图 "的架构而挨打,等等)。

使用边缘列表要好得多(即我们存储由2个元素组成的一维数组结构--调用函数的 ID和被调用函数的ID;该结构可以补充额外的字段--调用计数器,等等)。

p.s.马塔仪器真的已经开发了很久了 :)

 
lea:

IgorM,你建议的存储图形的方式被称为 "邻接矩阵"。

谢谢,至少我已经开始记得一些东西了,自从我学习这些东西已经15年了,这些东西从来没有在现实生活中使用过))))。- 但不要忘了,"打包数据"(节省内存)--将导致性能损失,因为矩阵的复杂性增加,尽管我可能是错的。
 
MetaDriver:
证明一个想法 的不可能性?
在C++中,记录函数的输入和输出是很容易做到的,
,有析构器和堆栈松动这样的东西。
虽然...对于同样的C++,有一些库可以让你通过堆栈建立代码中任何
点的函数调用 顺序。

所以......每一次返回都意味着更多的电话 :-)。
 
lea:
树是图的一个特例。

是的,这就是我的意思。基于MQL代码的线性--它将是一棵纯粹的树。由于节点不会相互指向。

IgorM:
有一个尺寸为4×100的矩阵,初始化矩阵=-1
现在,在调用函数的入口处,我们增加了对计数器(图形整形器)的调用,它应该在所需的位置X上增加一个代码(1,2,3或4),以进入我们的矩阵的自由行--谁调用的?

是的,我现在看到了。但在我看来,这种方法确实是劳动密集型的,不是在代码方面,而是在资源和分析的准备方面。对于分支,你将不得不做一个三维矩阵。
一般来说,该选项被接受。但现在我们先把它留在摘要的第4页吧 :)

我认为你的问题更像是网络图,我怀疑网络图的数学装置早已被开发出来,你需要谷歌

这项任务既不是一种技术,也不是一种新奇的东西。只是一个简单的函数图。仅此而已。
没有什么新的数学,我们只是需要一个尽可能简化的版本。

 
lea:

使用边缘列表要好得多(即存储由2个元素组成的一维结构数组--调用函数的ID和被调用函数的ID;该结构可以补充额外的字段--调用计数器,等等)。

尤金, 这正是已经做过的事情。

但该代码已经停滞。第三天,我无法入睡,也无法喝酒.... 。:)

我不知道如何使从边(更确切地说是子孙节点)返回到父节点去新边(新子孙节点)。 为了保持这个规则--我们在源代码函数的开头只使用一个追踪函数。

 
sergeev:

我不知道如何使一个肋骨的返回到一个节点上,以进入一个新的分支。


而这一切只用了一个已经向前传递的功能?这就够了--不做任何事情就能获得回报))。嗯,没什么,就是第二页结束了,很快弗拉基米尔 就受不了了))))。
 
alsu:
而这一切只用了一个已经进行了向前传递的功能?这就够了--不劳而获,卷土重来))。嗯,没什么,就是第二页已经结束了,很快弗拉基米尔 就受不了了))))。

上帝与他们同在,与这些页面同在。这个任务很有意思。

你看,这就是你如何能....回滚到父节点可以在新调用的子节点中已经完成。也就是说,当你去找子孙时,系统会先下到树的低层,然后再上到新叫的子孙。

但在这个版本中,你不能做深度超过两个的分支。因为系统总是先回后进。也就是说,所有的功能都将被画在同一水平线上。

因此,人们认为我们将不得不使用一些变量数组,来识别当前的位置。 来继续前进,而不是返回。这正是这种回归的复杂性...

 

在预告片中的 "概念工件",更确切地说,是一个实施的例子。在MT 5上

In()和out()函数需要重写,使其与调用列表一起工作。现在,他们只是将输入和输出打印到标准线程。

坏消息是:我没有保存专题讨论者的一个追踪功能的梦想。对不起,谢尔盖耶夫。:)

好消息:一切正常。

用户手册。

1.宏"_in "被插在每个函数的开头。

2.所有的返回调用都被"_返回 "所取代。

3.在程序的开头写了两个定义

#define _in in(__FUNCTION__);
#define _return out(__FUNCTION__); return


这就是全部。

附加的文件:
rettest.mq5  2 kb
 
sergeev:

这些页面是什么鬼东西。这是一项有趣的任务。

你看,这就是你如何能....回滚到父节点可以在新调用的子节点中已经完成。也就是说,当你切换到一个子代时,系统会先下到树的低层,然后再上到新的被调用的子代。

但在这个变体中,你不能做有两个以上深度的分支。因为系统总是先回后进。也就是说,所有的功能都将被画在同一水平线上。

这样看来,我们将不得不使用一些变量数组,来识别当前的位置。 继续前进,不返回。这正是这次回归的困难所在...

而这样一个奇怪的任务从何而来?如果你可以简单地做两个函数--输入和输出--而不费吹灰之力,这值得在可疑的研究上耗费精力吗?