?? maindrive.cs
字號:
using System;
namespace MyPetriNet
{
/// <summary>
/// Class1 的摘要說明。
/// </summary>
class MainDrive
{
public static void initialplaces(Place[] P)
{
int i;
for(i=1;i<8;i++)
{
P[i]=new Place();
P[i].TokenNumber=0;
P[i].PlaceId=i;
}
P[1].PlaceName="A:Wait for Ack 0";
P[2].PlaceName="B:Wait for Ack 1";
P[3].PlaceName="C:Seq 0 on the line";
P[4].PlaceName="D:Ack on the line";
P[5].PlaceName="E:Seq 1 on the line";
P[6].PlaceName="F:Expect 1";
P[7].PlaceName="G:Expect 0";
for(i=1;i<8;i++)
{
Console.WriteLine(P[i].PlaceName.ToString());
}
}
public static void initialTransition(Transition[] T)
{
int i;
for(i=1;i<12;i++)
{
T[i]=new Transition();
T[i].TransitionId=i;
}
T[1].TransitionName="1:Emit 0";
T[2].TransitionName="2:TimeOut";
T[3].TransitionName="3:Emit 1";
T[4].TransitionName="4:TimeOut";
T[5].TransitionName="5:Loss";
T[6].TransitionName="6:Loss";
T[7].TransitionName="7:Loss";
T[8].TransitionName="8:Reject 0";
T[9].TransitionName="9:Reject 1";
T[10].TransitionName="10:Process 0";
T[11].TransitionName="11:Process 1";
for(i=1;i<12;i++)
{
Console.WriteLine(T[i].TransitionName.ToString());
}
}
public static void initialPetriNet(Arc[] A)
{
int i=0;
for(;i<100;i++)
{
A[i]=new Arc();
}
#region Arc to Place
i=0;
A[i].toPlace=true;
A[i].place=1;
A[i++].transition=1;
A[i].toPlace=true;
A[i].place=1;
A[i++].transition=2;
A[i].toPlace=true;
A[i].place=2;
A[i++].transition=3;
A[i].toPlace=true;
A[i].place=2;
A[i++].transition=4;
A[i].toPlace=true;
A[i].place=3;
A[i++].transition=1;
A[i].toPlace=true;
A[i].place=3;
A[i++].transition=2;
A[i].toPlace=true;
A[i].place=4;
A[i++].transition=10;
A[i].toPlace=true;
A[i].place=4;
A[i++].transition=8;
A[i].toPlace=true;
A[i].place=4;
A[i++].transition=11;
A[i].toPlace=true;
A[i].place=4;
A[i++].transition=9;
A[i].toPlace=true;
A[i].place=5;
A[i++].transition=3;
A[i].toPlace=true;
A[i].place=5;
A[i++].transition=4;
A[i].toPlace=true;
A[i].place=6;
A[i++].transition=10;
A[i].toPlace=true;
A[i].place=6;
A[i++].transition=8;
A[i].toPlace=true;
A[i].place=7;
A[i++].transition=11;
A[i].toPlace=true;
A[i].place=7;
A[i++].transition=9;
#endregion
#region Arc to Transition
A[i].toPlace=false;
A[i].transition=1;
A[i++].place=2;
A[i].toPlace=false;
A[i].transition=1;
A[i++].place=4;
A[i].toPlace=false;
A[i].transition=2;
A[i++].place=1;
A[i].toPlace=false;
A[i].transition=3;
A[i++].place=1;
A[i].toPlace=false;
A[i].transition=3;
A[i++].place=4;
A[i].toPlace=false;
A[i].transition=4;
A[i++].place=2;
A[i].toPlace=false;
A[i].transition=5;
A[i++].place=3;
A[i].toPlace=false;
A[i].transition=6;
A[i++].place=4;
A[i].toPlace=false;
A[i].transition=7;
A[i++].place=5;
A[i].toPlace=false;
A[i].transition=8;
A[i++].place=3;
A[i].toPlace=false;
A[i].transition=8;
A[i++].place=6;
A[i].toPlace=false;
A[i].transition=9;
A[i++].place=5;
A[i].toPlace=false;
A[i].transition=9;
A[i++].place=7;
A[i].toPlace=false;
A[i].transition=10;
A[i++].place=3;
A[i].toPlace=false;
A[i].transition=10;
A[i++].place=7;
A[i].toPlace=false;
A[i].transition=11;
A[i++].place=5;
A[i].toPlace=false;
A[i].transition=11;
A[i++].place=6;
#endregion
}
/// <summary>
/// 判斷該Transition是否能被激活
/// </summary>
/// <returns></returns>
public static bool isAcitive(Transition T,Place[] P,Arc[] A)
{
//如果通過Arc連接到該Transition的所有Place都有tokenNum>0
//則該Transition可以被激活
int i;
for(i=0;i<A.Length;i++)
{
if(A[i].transition==T.TransitionId && A[i].toPlace==false)
{
for(int j=1;j<P.Length;j++)
{
if(P[j].PlaceId==A[i].place )
{
if(P[j].TokenNumber<=0)
return false;
}
}
// return true;
}
}
return true;
}
/// <summary>
/// 激活該Transition
/// </summary>
public static void fire(Transition[] T,Place[] P,Arc[] A)
{
for(int i=1;i<12;i++)
{
if (isAcitive(T[i],P,A))
{
Console.WriteLine("Transition "+T[i].TransitionName.ToString()+" has just been fired!");
}
}
// //從轉換左邊的Place中,每個tokenNum-1
// for(int i=0;i<A.Length;i++)
// {
// if(A[i].transition==T.TransitionId && A[i].toPlace==false)
// {
// for(int j=1;j<P.Length;j++)
// {
// if(P[j].PlaceId==A[i].place )
// {
// P[j].desTokenNum();
// }
// }
// }
// }
// //向轉換右邊的Place中,每個tokenNum+1
// for(int i=0;i<A.Length;i++)
// {
//
// if(A[i].transition==T.TransitionId && A[i].toPlace==true)
// {
// for(int j=1;j<P.Length;j++)
// {
// if(P[j].PlaceId==A[i].place )
// {
// P[j].addTokenNum();
// }
// }
// }
// }
}
public static int[] GetRandomPlace()
{
int i=0,length=0;
Random ra=new Random();
int RandomPlace=ra.Next(6)+1;
int[] Result=new int[RandomPlace];
for(i=0;i<RandomPlace;i++)
{
Result[i]=ra.Next(6)+1;
}
for(i=0;i<Result.Length;i++)
{
int j=0;
for(;j<i;j++)
{
if(Result[j]==Result[i])
{
int p=i;
for(;p+1<Result.Length;p++)
{
Result[p]=Result[p+1];
}
Result[p]=0;
length++;
}
}
}
int[] Result1=new int[RandomPlace-length];
for(i=0;i<RandomPlace-length;i++)
{
Result1[i]=Result[i];
// Console.WriteLine(Result1[i].ToString());
}
return Result1;
}
/// <summary>
/// 應用程序的主入口點。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Arc[] arcs=new Arc[100];
Place[] places=new Place[8];
Transition[] transitions=new Transition[12];
Console.WriteLine(" This is A PetriNet Model! On Page 233");
Console.WriteLine(" Now initialize Place:");
initialplaces(places);//初始化處所
Console.WriteLine(" Now initialize Transition:");
initialTransition(transitions);//初始化轉換
Console.WriteLine(" Now initialize PetriNet...");
initialPetriNet(arcs);//初始化弧,即連接整個petrinet
Console.WriteLine(" Now the initialization has been finished.");//初始化完畢
Console.WriteLine("\n\n===========================================================");//模擬書上給定初始狀態A,C,G下的激活情況
Console.WriteLine("If the system is currently in state A,C and G like our book,");
Console.WriteLine("then,the transitions which can be fired are:");
Console.WriteLine("-----------------------------------------------------------");
Console.WriteLine("The current state is:\n "+places[1].PlaceName+", "+places[3].PlaceName+", "+places[7].PlaceName+"\nResult:\n-------");
places[1].addTokenNum();
places[3].addTokenNum();
places[7].addTokenNum();
fire(transitions,places,arcs);//進行一次激活
Console.WriteLine("===========================================================\n\n\n");
randomore: int i=0;
for(i=1;i<8;i++)
{
places[i].TokenNumber=0;
}//還原為初始值
Console.WriteLine("===========================================================");
Console.WriteLine(" Now let's make the current state of the system at random:");
Console.WriteLine("-----------------------------------------------------------");
Console.WriteLine(" The current state which was made at random is:");
int[] randomplace=GetRandomPlace();
for(i=0;i<randomplace.Length;i++)
{
places[randomplace[i]].addTokenNum();
Console.WriteLine(places[randomplace[i]].PlaceName+" ");
}
Console.WriteLine("Result:\n-------");
fire(transitions,places,arcs);
Console.WriteLine("===========================================================");
// bool B=isAcitive(transitions[1],places,arcs);
Console.WriteLine("Press \"R/r\" to get another random;press any key to exit:");
string quit;
quit=Console.ReadLine();
if(quit.Equals("R") || quit.Equals("r"))
{
goto randomore;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -