全球FlexSim系统仿真中文论坛

搜索
查看: 3835|回复: 6
打印 上一主题 下一主题

Mergesort上产品类型与端口数目不相等的问题

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:7 c$ y1 y5 O. d# J5 k: o  G
{4 N4 ?$ Z: E% Q; k1 G* P1 S- u
case 1: return getitemtype(item) == 1; break;; m2 v  D; h+ `& J2 n7 j6 q
case 2: return getitemtype(item) == 2||3;break;
0 {2 ], _! h/ e0 w% t}
% e  }* O5 ?/ W+ B2 J结果成功了。但是,2 J4 f( v6 D  }1 u0 N
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
9 T, W2 j+ e9 I1 ^+ M+ j4 lswitch(port)1 c: J* M: [1 F8 _5 V( f
{! U1 \; d7 f' ?% ?" _. t( n
case 1: return getitemtype(item) == 1||2; break;
4 i3 b. N- E& y0 x3 gcase 2: return getitemtype(item) == 3;break;
9 }+ i2 `% i) O) B9 u}
, f" u% {9 S$ Z$ `# I6 d9 N产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?7 a% Y4 t5 B6 U7 p. Y' b" j6 a5 t! }
有谁有关于Megesort的详细介绍吗?
2#
wj109260758 发表于 2010-6-14 01:17:42 | 只看该作者
很奇怪,我也发现了
3#
wj109260758 发表于 2010-6-14 01:31:00 | 只看该作者
convery 却可以
4#
wj109260758 发表于 2010-6-14 04:42:12 | 只看该作者
写成case 1: return getitemtype(item) == 1||getitemtype(item)==  2;
' J( Q: ^" s  G# i" Qcase 2: return getitemtype(item) == 3;4 P: [: R; A8 r0 P% q
4 a4 y  L0 I3 x- V+ d+ e1 ~2 X
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
, q9 u2 }# K1 O# |, q等于 case 2: return 2||3;& P% N% y3 ]3 J, I
等于: return 1;
8 ^8 N& c5 s$ ]1 e) w$ C& O6 @3 k你的第一个程序相当于:
. y. ~' |, J. Z, s6 {& ^case 1: return getitemtype(item) == 1; 6 s4 K6 B* R9 x
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
# ~, n" C" D8 o' E
' ^) _0 @+ C& [所以第二个你的程序可以解读为:
* }" ^' `, S& D- J" mswitch(port)
* Q+ R. h" S" v, C/ q{# @& @: k  k* K6 _4 q0 n! S
case 1: return 1;(相当于所有实体可以从出口1流出)
7 o& [0 a6 k/ D+ rcase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)
1 W3 ]% }  X) [: `) U}' u9 H! L5 i: f
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。' ]& l7 z$ u$ p" t6 B, P5 c

9 w9 n5 ^7 _/ e+ n7 @* C) {如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;0 B  P) s6 P2 T
等于 case 2: return 2||3;
$ `* x6 @# M* b# b" A. @; m" \等于: return 1;
- r# k: O. K9 Y: ]) Z4 d0 T" \, C你的第一个程序相当于:
  Q  Q; ]5 h; n* S2 gcase 1: return getitemtype(item) == 1;
; v* T; o: S6 ]: P" ^5 ycase 2: return 1;在Megesort中最后一个出口,可 ...
9 V0 m+ u6 ^. N; p. @wj109260758 发表于 2010-6-14 05:15

6 a$ ~& `4 X/ c( m# [
1 Z1 W+ I. p5 {+ z4 X! s理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
; D: A2 Z3 D: P( Z# J9 [3 ~* freturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真
/ @# l- @% ^7 a4 q" V  P
  H! _6 v4 @# j% }% U' L这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|手机版|Archiver|全球FlexSim系统仿真中文论坛 ( 京ICP备14043114号-2 )

GMT+8, 2024-6-1 18:47 , Processed in 0.069387 second(s), 14 queries .

Powered by Discuz! X3.3© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表