PDA

View Full Version : مشکل با random walk



Rapture
دوشنبه 23 اردیبهشت 1392, 16:23 عصر
سلام
من توی برنامه نویسی خیلی تازه کار هستم. الان میخوام یک برنامه ی random walk براساس brownian motion بنویسم ولی متاسفانه نمیدونم چطوری باید شرط های کافی رو برای برنامه مشخص کنم.
برنامه باید در یک آرایه ی دو بعدی 100 در 100 شروع بشه و از [0,0] شروع به حرکت بکنه. تعداد قدم ها رو هم باید به عنوان n از ورودی بگیره. بعد باید به شکل اتفاقی به یکی از مسیر های چپ، راست، بالا یا پایین حرکت بکنه. بعد باید بسنجه و ببینه کدوم یکی از مسیر ها براش باز هست و یا اینکه از آرایه خارج میشه یا نه. در صورتی که اینطور نبود به حرکت ادامه میده (مسیر باید اتفاقی باشه). اینکار رو باید تا زمانی که امکان داره انجام بده.

static void Main(string[] args)
{
int row = 100;
int col = 100;
int[,] matrix;
matrix = new int[row, col];
int n;
Console.WriteLine("Enter the number of steps:");
n = int.Parse(Console.ReadLine());
const int up = 1;
const int down = 2;
const int left = 3;
const int right = 4;
int number=0;
for (int i=0;i<100;i++)
{
for (int j = 0; j < 100; j++)
matrix[i, j] = number;
}
Random randomdirection = new Random();
for (int counter = 0; counter < n; counter++)
{
int direction = randomdirection.Next(1,5);
while (direction==1)
{
if ((++row)<100 && matrix[++row,col]==0)
{
matrix[++row,col]=++number;
}
}



}

}


این کل کدی هست که من تونستم بنویسم.
متاسفانه واقعا تازه کار هستم در این زمینه.

Rapture
دوشنبه 23 اردیبهشت 1392, 16:26 عصر
آها. راستی نباید از متد استفاده بشه. فقط از آرایه و شرط و حلقه باید استفاده بشه. :(

لطفا یکی یه راهنمایی بکنه. نمیخوام کد رو بهم بدید فقط یکم راهنمایی کنید که دقیقا باید چطوری ادامه بدم؟
اون شرطی که گذاشتم درست عمل میکنه؟

Rapture
دوشنبه 23 اردیبهشت 1392, 20:00 عصر
دوستان چقدر کمک میکنید واقعا. مرسی.
یکم برنامه رو تغییر دادم و مشکل اینجاست که یک سری صفر رو پشت سر هم روی صفحه نشون میده.
اصلا درست کار نمیکنه. یعنی هیچ کس نیست که یکم راهنمایی بکنه؟

static void Main(string[] args)
{
Random randomObject = new Random();
int randomDirection;
int[,] mainarray;
int row=10;
int col=10;
mainarray=new int[row,col];
int number=0;
for (int b=0;b<row;b++)
{
for (int c=0;c<col;c++)
mainarray[b,c]=number;
}

while (true)
{
int n;
Console.WriteLine("Enter the number of steps: ");
n = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i < n; i++)
{
randomDirection = randomObject.Next(1, 5);
if (randomDirection == 1 && row < 0 && row < 10)
mainarray[++row, col] = ++number;
if (randomDirection == 2 && row < 0 && row < 10)
mainarray[--row, col] = ++number;
if (randomDirection == 3 && col < 0 && col < 10)
mainarray[row, ++col] = ++number;
if (randomDirection == 4 && col < 0 && col < 10)
mainarray[row, --col] = ++number;
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
Console.Write(mainarray[i,j]);
}
}
Console.ReadKey();
}

Mahmoud.Afrad
سه شنبه 24 اردیبهشت 1392, 01:29 صبح
طول قدم رو بگیر.
صفحه را پاک کن.
آرایه را چاپ کن.
سطر و ستون جایگاه قبلی را نگه دار.
سطر و ستون جدید رو محاسبه کن و با شرط بررسی کن از حدود مجاز خارج نشه.
اگر سطر و ستون جدید معتبر بود با Console.SetCursorPosition کرسر را در موقعیت قبلی ست کن و با تغییر رنگ اونو به اصطلاح غیرفعال کن. سپس به سطر و ستون جدید برو و با تغییر رنگ اونو فعال کن.