作者vic24680 (就是爱实况)
看板C_Sharp
标题[问题] C#转Fortran
时间Wed Jan 10 01:11:25 2007
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
1F:推 sheauren:语言这种东西 慢慢看还是看的懂得 01/10 08:14
2F:→ Turbine:阿弥陀佛 Fortran很旧了ㄟ 真的会有人写这种转换工具吗 01/10 14:34