PDA

View Full Version : سوال: حذف سطر از یک آرایه دو بعدی



hamid##
جمعه 11 آذر 1390, 15:28 عصر
سلام دوستان من پس از مرتب سازی آرایه ام می خوام یک سطرشو حذف کنم تا مقایسمو بتونم ادامه بدم مثلا سطر min رو می تونی کمک کنید چطوری می تونم این کارو انجام بدم؟:متفکر:

bozhmehrani
جمعه 11 آذر 1390, 18:59 عصر
نه نه نه نه اشتباه میکنی دیگه
شما نباید سلولی از آرایه ات حذف کنی فقط اونو جابه جا کن
ولی واسه مینیمم گیری از آرایه ات این کارا هم لازم نیس
شما اولین خونه آرایه ات رو مینیمم فرض کن و تو یه متغییر بریز بعد یه حلقه بنویس به طول آرایه ات یکی یکی سلول هارو با اون متغییر مقایسه کن اگه بزرگتر مساوی بود که هیچی ولی در غیر این صورت (کوچکتربود)اونو مینیم میگیری و این روند ادامه داره... تا آخرین سلول آرایه ات

hamid##
جمعه 11 آذر 1390, 19:15 عصر
خودم هم فهمیدم اشتباه می کنم.مین رو با سطر اول جابجا کردم و ادامه دادم. منتهاش درست کار نمی کنه لطفا یک نگاه بندازید:لبخندساده: اینم کده مرتب سازی :
int y=0;
sky = a;
int min=0;
//int s=0;
int tx=0;
int th=0;
int tx2 = 0;
int low = 0;
for (int f = 0; f<i; f++)
{
low++;
tx= sky[low,0];
th= sky[low,1];
tx2=sky[low,2];
sky[low,0]=sky[min,0];
sky[low,1]=sky[min,1];
sky[low,2]=sky[min,2];
sky[min,0]=tx;
sky[min,1]=th;
sky[min,2]=tx2;
min = 0;





for (y = 0; y < i-1; y++)


if (sky[y+1, 0] < sky[min, 0])
min = y+1;

}

loknatesabz
شنبه 12 آذر 1390, 08:57 صبح
سلام
متوجه سوالتون نشدم :متفکر:واضح تر توضیح بدید تا اگه میتونم کمک کنم.شما میخواید عنصر مینیمم رو توی کل آرایه پیدا کنید؟ آرایه رو بر چه اساسی میخواید مرتب کنید؟ کل کدی که نوشتید و جواب نداده رو برام بذارید تا ببینم.

hamid##
شنبه 12 آذر 1390, 11:41 صبح
می خوام بر اساس ستون اول آرایه ،اون رو مرتب کنم. ستون اول همون tx هستش. فقط ستون اول مهمه.

bozhmehrani
شنبه 12 آذر 1390, 13:03 عصر
ببین یه روش خیلی راحت تر ازاین حرفا که خود سیشارپ درنظر گرفته
array.sort()
ورودی همه چی میگیره
شما میتونی اون ستون اول آرایه تو، تو یه آرایه یه بعدی دیگه بریزی و به عنوان ورودی به تابعی که بالا نوشتم بدی

hamid##
شنبه 12 آذر 1390, 20:11 عصر
ببینید من میخوام آرایه دو بعدیمو مرتب کنم برحسب ستون اول والسلام.من ستون اولمو نمی خوام. من کل آرایه دو بعدیمو میخوام منتهاش باید مرتب بشه و اونی باید اول بیاد که ستون اولش از همه کوچکتره و به صورت صعودی همین جوری مرتب شه.

hamid##
شنبه 12 آذر 1390, 22:32 عصر
آرایه ام رو بر اساس ستون اول.تو روخدا کمک کنید.

asadegha
شنبه 12 آذر 1390, 22:43 عصر
درست توضیح بده ببینیم چی می خوای.
می خوای کل آرایه بر اساس ستون اول مرتب بشه؟ یعنی می خوای کل آرایه بر اساس ستون اول مرتب بشه؟

asadegha
شنبه 12 آذر 1390, 23:07 عصر
یه برنامه برات نوشتم ببین همینو می خوای.
78687

hamid##
یک شنبه 13 آذر 1390, 12:02 عصر
خیلی خوب بود ممنون. یک سوال داشتم این روش پیچیدگی الگوریتممو زیاد نمیکنه؟در ضمن sky یک متغیر سراسری هست چطوری اونو با یک تابع مرتب کنم و بعد ازش استفاده کنم.

asadegha
یک شنبه 13 آذر 1390, 16:18 عصر
خیلی خوب بود ممنون. یک سوال داشتم این روش پیچیدگی الگوریتممو زیاد نمیکنه؟در ضمن sky یک متغیر سراسری هست چطوری اونو با یک تابع مرتب کنم و بعد ازش استفاده کنم.

روش های دیگه هم هست.
این به نظر من خوبه.
آرایه ای که داری خیلی بزرگه؟ که پیچیدگی برات مهمه؟

asadegha
یک شنبه 13 آذر 1390, 16:25 عصر
خوب sky سراسریه درسته؟
هم میتونی به عموان پارامتر بفرستیش به تابع و هم اینکه چون سراسریه از خود آرایه sky می تونی مستقیما استفاده کنی.
تمام اون چیزایی که تو رویداد کلیک باتن نوشته شده رو توی یک تابع بنویس.
سوال داشتی باز بپرس.

این واسه استفاده از sky بصورت سراسری:

void SortSky()
{
for (int i = 0; i < sky.GetUpperBound(0); i++)
{
int min = i;
for (int j = i + 1; j <= sky.GetUpperBound(0); j++)
{
if (sky[min, 0] > sky[j, 0])
{
min = j;
}
}
for (int j = 0; j <= sky.GetUpperBound(1); j++)
{
int t = sky[min, j];
sky[min, j] = sky[i, j];
sky[i, j] = t;
}

}
}


اینم ارسال به صورت پارامتر

void SortSky(ref int [,] a)
{
for (int i = 0; i < a.GetUpperBound(0); i++)
{
int min = i;
for (int j = i + 1; j <= a.GetUpperBound(0); j++)
{
if (a[min, 0] > a[j, 0])
{
min = j;
}
}
for (int j = 0; j <= a.GetUpperBound(1); j++)
{
int t = a[min, j];
a[min, j] = a[i, j];
a[i, j] = t;
}

}
}

asadegha
یک شنبه 13 آذر 1390, 16:30 عصر
حالا میتونی این طوری هم تابع رو تعریف کنی:
int[,] SortSky(int [,] a)
{
for (int i = 0; i < a.GetUpperBound(0); i++)
{
int min = i;
for (int j = i + 1; j <= a.GetUpperBound(0); j++)
{
if (a[min, 0] > a[j, 0])
{
min = j;
}
}
for (int j = 0; j <= a.GetUpperBound(1); j++)
{
int t = a[min, j];
a[min, j] = a[i, j];
a[i, j] = t;
}

}
return a;
}