全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
; g/ p! V4 x5 _( [& x) n" J2 m{
# |" B, B, x, C; m- e/ [' c$ vcase 1: return getitemtype(item) == 1; break;
  \' e3 G  m6 z# e8 C" e# [- ecase 2: return getitemtype(item) == 2||3;break;7 n% b; C/ p; i: S$ L) e6 a9 y9 ?. x
}3 p. z& Z* _3 O9 C
结果成功了。但是,/ X' v2 D% J$ [
如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:. C% C' }/ |7 {3 Y, n1 M: o
switch(port)/ v. O7 A8 U" r3 a
{) b# s  u* c0 b  |7 p& a' Z
case 1: return getitemtype(item) == 1||2; break;
" V- ]8 k! O0 g" Vcase 2: return getitemtype(item) == 3;break;( f9 d2 I# J  ?
}, W6 V+ E* {3 K: U& D  \* N1 M
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
  i) \, @1 z+ {) I1 ^. p有谁有关于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;
+ f/ b6 g" ~- j8 ^" Ycase 2: return getitemtype(item) == 3;
5 ?+ b, ?3 q& z2 V. }2 Q, ?! S; p) g* t7 C
就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;
% e( {) P. P, c3 W5 G2 m' o等于 case 2: return 2||3;5 D4 g3 d# n5 `" r, V( ^
等于: return 1;
; _( y% o: N" U& C' K" L8 L你的第一个程序相当于:7 r- S1 I+ E' P0 V& y
case 1: return getitemtype(item) == 1;
, R2 Q1 K! |5 S3 o; Ncase 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!( w' \2 Q; U7 m8 U$ Y0 A2 i

3 K1 n3 e: ]$ u所以第二个你的程序可以解读为:3 p1 l5 }' k5 Q* u& M
switch(port)
& H# v1 X$ Q3 x/ d{
3 q7 x( v/ b( b* R7 \case 1: return 1;(相当于所有实体可以从出口1流出)
: M! z! I% z2 }2 o% @: Q) A  a, qcase 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)9 K+ W) S  ]: K6 h
}: Z/ Q; x- y' m3 l( m
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。
, y3 @+ J/ H8 r0 R% U; i# f! D. u* _$ k+ J- y
如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;& E+ q% p( {8 P+ t3 V
等于 case 2: return 2||3;7 X: W2 U5 I( x
等于: return 1;
' T5 x  E0 O& Y; ~3 ?' H3 v你的第一个程序相当于:: y: ^; o. O# C$ n- J3 B
case 1: return getitemtype(item) == 1;
% B7 k7 k' R+ ~9 [case 2: return 1;在Megesort中最后一个出口,可 ...% x8 W- j1 q; x. z. W
wj109260758 发表于 2010-6-14 05:15

( D; f% B- N& O, a* {; A0 u
' h7 Z' s7 ]: ~- i0 |7 f3 Z5 c理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。. Y  B, A2 R( y# {( x
return getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真5 a$ L/ V! }) k8 g5 U- p9 _

6 X4 e& r0 d9 {' z3 u这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-7-15 04:20 , Processed in 0.081329 second(s), 14 queries .

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

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