[問題] C#轉Fortran
using System;
class Class1
{
static int[,] Z; //宣告二維陣列Z,在method外宣告,遞迴時使用比較方便
static bool[,] Z2; //計算沙崩規模所需要的二維陣列,理由同上
static int disappe; //計算漏沙次數,理由同上
[STAThread]
static void Main(string[] args)
{
//步驟(1) 初始化
Z=new int[50,50]; //50*50二維陣列
Random rd=new Random(); //宣告rd為random類別
for(int i=0;i<50;i++) //跑Z的x軸
for(int j=0;j<50;j++) //跑Z的y軸
Z[i,j]=rd.Next(1,5); //亂數選取1~4放入Z的元素中
//步驟(2)滴沙
int x,y; //宣告x跟y,要作為Z的X軸跟Y軸使用
int n=0; //宣告m計算滴沙次數
while(n<50000) //n小於5萬才繼續執行步驟二三
{
do
{
x=rd.Next(50); //宣告x,並隨機取0~49中的數字
y=rd.Next(50); //宣告y,並隨機取0~49中的數字
Z[x,y]++; //該座標+1
n++; //滴沙次數加1
}while(Z[x,y]<5 && n<50000); //該座標未達到沙崩條件而且滴沙小於5萬次,則繼續滴沙
//步驟(3) 沙崩 & 步驟(4) 漏沙
if(Z[x,y]>=5) //座標達沙崩條件,才執行沙崩
{
Z2=new bool[50,50]; //一樣是50*50
disappe=0; //漏沙統計歸0
slide(x,y); //呼叫「沙崩&漏沙」方法
//步驟(5) 輸出----PS:因為我沒有要存到檔案,所以採逐次輸出到畫面上
int eqsize=0; //統計沙崩規模
for(int i=0;i<50;i++) //跑Z2的x軸
for(int j=0;j<50;j++) //跑Z2的y軸
if(Z2[i,j]) //該點沙崩過
eqsize++; //統計加1
Console.WriteLine(n+"\t"+x+"\t"+y+"\t"+eqsize+"\t"+disappe); //輸出,\t為Tab推齊
}
}
}
static void slide(int x,int y) //靜態、不回傳值的「沙崩&漏沙」方法
{
if(Z[x,y]>=5) //座標達沙崩條件,才執行沙崩
{
Z[x,y]-=4; //該座標減4
Z2[x,y]=true; //表示該點沙崩過
if(x+1<50) //判斷右邊座標是否超出陣列
{
Z[x+1,y]++; //座標加1
slide(x+1,y); //呼叫本身「沙崩&漏沙」方法----PS:遞迴
}
else
disappe++; //漏沙次數加1
if(x>0) //判斷左邊座標是否超出陣列
{
Z[x-1,y]++; //座標加1
slide(x-1,y); //呼叫本身「沙崩&漏沙」方法----PS:遞迴
}
else
disappe++; //漏沙次數加1
if(y+1<50) //判斷上面座標是否超出陣列
{
Z[x,y+1]++; //座標加1
slide(x,y+1); //呼叫本身「沙崩&漏沙」方法----PS:遞迴
}
else
disappe++; //漏沙次數加1
if(y>0) //判斷下面座標是否超出陣列
{
Z[x,y-1]++; //座標加1
slide(x,y-1); //呼叫本身「沙崩&漏沙」方法----PS:遞迴
}
else
disappe++; //漏沙次數加1
}
}
}
這是我手邊現有的一個C#程式
我想把它轉成Fortran
有什麼方法嗎?
還是一定要自己來?
我完全不懂C#...
所以想找高手幫忙
感激不盡!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 122.126.31.253
推
01/10 08:14, , 1F
01/10 08:14, 1F
→
01/10 14:34, , 2F
01/10 14:34, 2F
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章
7
20