全球FlexSim系统仿真中文论坛

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

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

[复制链接]
跳转到指定楼层
1#
ws-lk 发表于 2010-6-12 16:50:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在source里面设了三种产品,mergesort的output有两个端口,我想端口1输送一种产品,端口2输送两种产品,代码如下:
8 A2 J5 k7 ^, F+ H{
' f/ ^7 T! Z8 [7 ]9 U' m: l" jcase 1: return getitemtype(item) == 1; break;6 i# R2 ?. q, {% A
case 2: return getitemtype(item) == 2||3;break;* w0 W+ i8 z6 e7 s8 @2 `" {6 s$ P
}
8 K9 g, j2 p/ c: ?4 \3 H结果成功了。但是,
5 V# B5 u8 F8 S$ I如果我将端口1设为输送两种产品,端口2设为输送一种产品,代码:
( f1 Y! I. _# [2 Lswitch(port)+ R/ h7 r- W! K$ i8 I' G
{
  O5 H8 X3 `, H/ ], Pcase 1: return getitemtype(item) == 1||2; break;, h7 N4 Q" c. V; l3 i2 F8 W" n
case 2: return getitemtype(item) == 3;break;
! {- U1 g' I/ d}" \, j" M9 _: Z2 m3 ^, z3 s6 K, N
产生的结果为:端口1上出现3种产品,端口2没有产品。这是怎么回事呢?
8 U, q3 g( I  \" J8 b: z; |有谁有关于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;
2 q/ Q. h) Q1 T" Y( pcase 2: return getitemtype(item) == 3;0 C+ @: q% \3 j4 s# n* g" g

4 f; X3 x7 h% B: R就可以实现
5#
wj109260758 发表于 2010-6-14 05:15:56 | 只看该作者
case 2: return getitemtype(item) == 2||3;% a$ N7 B2 k# B
等于 case 2: return 2||3;
& W+ W% i9 C, J( m* D等于: return 1;
4 ?/ [& z2 _3 @0 q9 r* _你的第一个程序相当于:
+ b0 B3 s8 N; ~' U; \6 |case 1: return getitemtype(item) == 1; + c) g) W- [2 r7 B3 b7 W- O
case 2: return 1;在Megesort中最后一个出口,可用来将在所有其他临时实体从最后一个输出端口发送出去。所以,可以实现功能!
: r; \7 {: I" M2 K
. A, t/ w; G0 w* a. u所以第二个你的程序可以解读为:. q+ O& P0 ]! r4 z1 J# P
switch(port)
% w, T/ F9 o6 C( S* K* ?- p0 v{) n7 x+ g- d  S$ c8 e$ n
case 1: return 1;(相当于所有实体可以从出口1流出)0 [' |8 ]9 |# x" ]$ I2 }# T
case 2: return getitemtype(item) == 3;(ITEM3从出口也可流出)8 Y; ^2 |+ |6 v- d. X4 ]2 K; L- U
}$ K9 R6 F, e5 U' A
由于第一个出口优先于出口2,所以ITEM3 一直从出口1流出。1 h( {- U3 W2 H# m: P

" {2 w# O' U  Z如有错误,请指教。
6#
domcylai 发表于 2012-2-6 16:14:14 | 只看该作者
case 2: return getitemtype(item) == 2||3;
% r' A& @$ _( {& |+ K+ v: s% ?, Q等于 case 2: return 2||3;
: h9 X; U' c( q' R2 z6 R9 K3 `等于: return 1;, R6 o  k! y4 S5 @( Q& L: v8 i: }
你的第一个程序相当于:
4 ?% Q0 V  e% ~5 U2 p" ?& Ecase 1: return getitemtype(item) == 1; $ E; ~. [9 s% \7 F, ~' p
case 2: return 1;在Megesort中最后一个出口,可 ...
- c1 [2 Y6 A0 J0 b7 Twj109260758 发表于 2010-6-14 05:15
% m1 S9 O% I1 I8 r1 {8 x* M
. I5 C/ P5 M; L
理解有些问题啊,这个触发是一个判断,当每个item到达一个port(端口)时触发一次,然后判断触发:如果为真则发送,如果为假则不发送。
& D& w/ _- l4 h+ y$ `" |  a1 h5 b3 Sreturn getitemtype(item) == 2||3   相当于判断两次,只要一次为真则整体为真,判断的条件是:getitemtype(item) == 2 和 3 ,  3总为真; y" ^" E! ?% Q: V' @) h" b

8 R% B. s7 b. q% w7 o8 q  A* e这种写法是不正确的,而return getitemtype(item) == 2||getitemtype(item) == 3  则判断两次,所以要注意这种细节。
7#
vivion 发表于 2012-3-30 11:19:05 | 只看该作者
感觉还是没有看懂到底为什么会出现这种情况?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-28 14:30 , Processed in 0.079104 second(s), 13 queries .

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

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