PDA

View Full Version : مقادیر آرایه رو می خوام بلعکس کنم



KhanDaii
سه شنبه 09 آبان 1391, 07:57 صبح
سلام

سوالی داشتم خدمت اساتید

من یه آرایه 10 عضوی دارم که از 0 تا 9 شماره گذاری شده

حالا می خوام کاری کنم که ایندکسش بلعکس بشه.

یعنی مقدار خونه 0 بره توی خونه 9 و مقدار خونه 9 بیاد تویه خونه 0. (با استفاده از حلقه)


مثلا :

اگه آرایمون مثل آرایه زیر باشه:

ایندکس | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
مقدار |10| 20 | 30 | 40 | 50 | 60 | 70 | 80 | 90 | 100

تبدیل بشه به :

ایندکس | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
مقدار |100| 90 | 80 | 70 | 60 | 50 | 40 | 30 | 20 | 10

harani
سه شنبه 09 آبان 1391, 08:44 صبح
کاری نداره که میتونی از کد زیر استفاده کنی (ولی تست کن نمیدونم درست نوشتم یا نه)


int[] a;//s
void ReverseValuesArray(int[] b)//d
{
for (int i = b.Lenght - 1; i >= 0 ; i++)//s
{
for (int i = 0 ; j < a.Lenght ; j++)//s
{
a[j] = b[i];//f
}

}
}

tooraj_azizi_1035
سه شنبه 09 آبان 1391, 08:49 صبح
سلام


using System;

class Program
{
static void Main()
{
// Input array.
int[] array = { 1, 2, 3 };

// Print.
foreach (int value in array)
{
Console.WriteLine(value);
}
Console.WriteLine();

// Reverse.
Array.Reverse(array);

// Print.
foreach (int value in array)
{
Console.WriteLine(value);
}
Console.WriteLine();

// Reverse again.
Array.Reverse(array);

// Print.
foreach (int value in array)
{
Console.WriteLine(value);
}
}
}

Output

1
2
3

3
2
1

1
2
3

Nima_kyan
سه شنبه 09 آبان 1391, 10:13 صبح
کاری نداره که میتونی از کد زیر استفاده کنی (ولی تست کن نمیدونم درست نوشتم یا نه)


int[] a;//s
void ReverseValuesArray(int[] b)//d
{
for (int i = b.Lenght - 1; i >= 0 ; i++)//s
{
for (int i = 0 ; j < a.Lenght ; j++)//s
{
a[j] = b[i];//f
}

}
}

سلام
ضمن تشکر از دوستمون harani (http://barnamenevis.org/member.php?256621-harani) باید بگم کدتون خیلی مشکل داره.
اول اینکه شمارشگر حلقه اول باید --i باشه که شما اشتباها ++i گذاشتن.
دوم اینکه تعریف شمارشگر حلقه دوم به جای i باید j باشه.
سوم اینکه متغییر آرایه ای a وقتی که خالی باشه قطعا طولش با طول آرایه b که قبلا پر شده برابر نیست پس استفاده از Length (که اشتباها Lenght تایپ شده) در حلقه دوم در این کد مناسب نیست.
چهارم اینکه اصلا این مثال نیازی به استفاده از دو حلقه نداره. (تعداد تکرار دستور داخل حلقه دوم در کد بالا 100 بار خواهد بود که باید 10 بار باشه)
در کل نتیجه بدست آمده از کد بالا بسیار متفاوت از چیزی که دوستمون خواسته خواهد شد.


من یه آرایه 10 عضوی دارم که از 0 تا 9 شماره گذاری شده

حالا می خوام کاری کنم که ایندکسش بلعکس بشه.

یعنی مقدار خونه 0 بره توی خونه 9 و مقدار خونه 9 بیاد تویه خونه 0. (با استفاده از حلقه)
شما میتونید از همچین کدی استفاده کنید:

int i = b.Length-1;
for (int j = 0; j < b.Length; j++)
{
a[j] = b[i];
i -= 1;
}

harani
سه شنبه 09 آبان 1391, 14:12 عصر
سلام
ضمن تشکر از دوستمون harani (http://barnamenevis.org/member.php?256621-harani) باید بگم کدتون خیلی مشکل داره.
اول اینکه شمارشگر حلقه اول باید --i باشه که شما اشتباها ++i گذاشتن.
دوم اینکه تعریف شمارشگر حلقه دوم به جای i باید j باشه.
سوم اینکه متغییر آرایه ای a وقتی که خالی باشه قطعا طولش با طول آرایه b که قبلا پر شده برابر نیست پس استفاده از Length (که اشتباها Lenght تایپ شده) در حلقه دوم در این کد مناسب نیست.
چهارم اینکه اصلا این مثال نیازی به استفاده از دو حلقه نداره. (تعداد تکرار دستور داخل حلقه دوم در کد بالا 100 بار خواهد بود که باید 10 بار باشه)
در کل نتیجه بدست آمده از کد بالا بسیار متفاوت از چیزی که دوستمون خواسته خواهد شد.


شما میتونید از همچین کدی استفاده کنید:

int i = b.Length-1;
for (int j = 0; j < b.Length; j++)
{
a[j] = b[i];
i -= 1;
}
دوست عزیز از چی ایراد مگیری همینطوری !! من خودم اکثراً کدامو تست میکنم بعد به عنوان پاسخ میذارم اینو هینطوری نوشتم لزومی نداشت اینقدر از کد داغون منو ایراد بگیرین میتونستی فقط جواب خودتونو بنویسید .خودمم گفتم بهش از درست بودنش مطمئن نیستم و تست کن.
در ضمن تا وقتی که پاسخ صحیح آقای tooraj_azizi_1035 (http://barnamenevis.org/member.php?41757-tooraj_azizi_1035) ( یعنی Array.Reverse(array);) نیازی به پاسخهای ما نیست .

Nima_kyan
سه شنبه 09 آبان 1391, 16:41 عصر
دوست عزیز از چی ایراد مگیری همینطوری !! من خودم اکثراً کدامو تست میکنم بعد به عنوان پاسخ میذارم اینو هینطوری نوشتم لزومی نداشت اینقدر از کد داغون منو ایراد بگیرین میتونستی فقط جواب خودتونو بنویسید .خودمم گفتم بهش از درست بودنش مطمئن نیستم و تست کن.
در ضمن تا وقتی که پاسخ صحیح آقای tooraj_azizi_1035 (http://barnamenevis.org/member.php?41757-tooraj_azizi_1035) ( یعنی Array.Reverse(array);) نیازی به پاسخهای ما نیست .
دوست عزيز قراره اينجا ما بيايم و به كسي كه سوال ميكنه درصورت امكان كمك كنيم نه اينكه با جواب اشتباهمون گمراهش كنيم.
اين رو نوشتم كه در پاسخ هامون يه خورده بيشتر دقت كنيم چون از اين قبيل پاسخ ها زياده تو تايپك ها.

Salar Ashgi
سه شنبه 09 آبان 1391, 19:25 عصر
اصلا نیاز به هیچگونه بحث و جدلی نیست !



int[] ar = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
Array.Reverse(ar);

roolinjax
سه شنبه 09 آبان 1391, 20:35 عصر
با سلام خدمت دوستان
اول تذکر بدم که کمی ادب بخرج بدین
من کوچیک همه تون هستم اما جدیدا حس می کنم لحن صحبت هامون بسیار بد و زننده شده ، طوری که اصلا شایسته ی شما که بزرگوار هستین و البته تحصیلکرده نیست.
دوم اینکه به این قسمت از فرمایشات ایجاد کننده ی تاپیک دقت کنید.


یعنی مقدار خونه 0 بره توی خونه 9 و مقدار خونه 9 بیاد تویه خونه 0. (با استفاده از حلقه)
این یعنی اینکه ایشون نمی خواد از توابع آماده (Reverse)برای کارش استفاده کنه ، پس با کمال ادب جواب آقای کیان بهترین و کاملترین جوابه.
با تشکر و عذرخواهی بابت حرفایی که زدم.
موفق باشید

tooraj_azizi_1035
چهارشنبه 10 آبان 1391, 09:14 صبح
این یعنی اینکه ایشون نمی خواد از توابع آماده (Reverse)برای کارش استفاده کنه
موفق باشید

ما هنوز مطمئن نیستیم که ایشون اصرار دارند از حلقه استفاده کنند یا خیر؟

متد Reverse کمترین هزینه را دارد.

و حتماً چرایش رو هم بگن تا بفهمیم چرا نمی خوان از متد آماده استفاده کنند.

Salar Ashgi
چهارشنبه 10 آبان 1391, 17:12 عصر
من پست بالا رو به دقت مطالعه نکرده بودم ، مثل اینکه کاربر گرامی tooraj_azizi_1035 ، به متد Reverse در بالا اشاره کرده اند.
به هر حال اگر هدف فقط صرف انجام این کار هست ، که متود Reverse اینکار رو به بهترین شکل انجام میده و اگر نه هدف آموزشی
از این مساله مطرح هست ، باز مشکلی نخواهد بود.

حل با یک حلقه For :



void swap(ref int a,ref int b)
{
int temp = a;
a = b;
b = temp;
}


int[] ar = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 };
for (int i = 0; i < ar.Length/2; i++)
swap(ref ar[i], ref ar[ar.Length - i - 1]);


تابع Swap : جهت تعویض مقدار دو متغیر .

FastCode
چهارشنبه 10 آبان 1391, 22:38 عصر
اگر سوال خود الگوریتم هست:
int P = 0;
while(P < (A.Length >> 1))
{
var M = A[P];
A[P] = A[A.Length - P];
A[A.Length - P] = M;
P++;
}