PDA

View Full Version : حلقه های تو در تو ؟؟؟؟؟؟؟



hesam_vb_vig
پنج شنبه 13 فروردین 1388, 12:46 عصر
میشه در مورد حلقه ها تو در تو توضیح بدید ؟؟؟؟؟؟؟؟



من هر چی میخونم حالیم نمیشه

--

حلقه ی داخلی از حلقهی بیرونی تبعیت میکنه ؟؟؟؟؟؟؟


اگه لطف کنید چندتا مثال بزنید


ممنون میشم

================================================== ====
جستجو کردم اما ....

shervin_agh67
پنج شنبه 13 فروردین 1388, 13:09 عصر
به ازی هر بار شمارنده بیرونی حلقه داخلی به ازای تعداد شمارندش تکرار میشه . به طور مثال اگه یک حلقه n تکرار بشه و یک حلقه داخلیش به ازای m بار انجام بشه در کل حلقه داخلی m*n بار انجام میشه.برای حلقه های داخلی تر هم همین مراحل برقراره . برای کسب اطلاعات بیشتر به کتاب طراحی الگوریتم ها مراجعه شود.

hesam_vb_vig
پنج شنبه 13 فروردین 1388, 14:02 عصر
میشه با چند تا مثال توضیح بدید ؟؟؟؟؟؟

این کتابی که معرفی کردید پی دی اف هست ؟

rnm123
پنج شنبه 13 فروردین 1388, 16:00 عصر
دوست عزیز ببینید مطمئنا میدانید هر حلقه به تعداد شمارنهد آن تکرار میشود مثلا:


for (int i=1; i<= 10; i++)

حلقه فوق 10 مرتبه شروع میشود یعنی از زمانی که i مساوی یک است تا زمانی که مساوی 10 میشود
حالا در داخل این حلقه یک حلقه دیگر در نظر بگیرید مثل کد زیر :


for(int i=1;i<=10; i++)
{
for(int j=1;j<=12;j++)
{
...
}
}

خوب در کد بالا حلقه اول 10 بار تکرار میشود این به چه معنا است . یعنی دستورات داحل حلقه اول 10 بار تکرار میشوند منجمله حلقه دوم به عبارتی دیگر در هر بار اجرای حلقه اول حلقه درونی یکبار اجرا می شود.
راحت تر بگویم دستورات داخل حلقه j صد و بیست بار تکرار میشوند چطوری ؟
در دور اول حلقه بیرونی حلقه درونی یکبار بطور کامل دستورات دورنی خود را اجرا میکند (12بار ) در دور دوم هم همچنین به عبارتی دیگر حلقه درونی عینا همانند یک دستور در هر بار اجرای حلقه بیرونی یکبار بطور کامل ( به تعداد شمارنده خود) دستورات خود را اجرا میکند

hesam_vb_vig
پنج شنبه 13 فروردین 1388, 18:00 عصر
ممنون دوست عزیز من تو حلقه های تکرار مشکلی ندارم اما در حلقه های تودرتو چرا !!!!!(چون سی واسه الکترونیک کار کردم و تو خیلی از دستورا مشکلی ندارم چون تقریبا شبیه هم هستند )

که با راهنمایی شما تقریبا حل شد

میشه لطف کنید یه حلقه ی 4تایی رو هم بررسی کنید ؟

در مورد دستور foreach هم اگه میشه توضیح و مثال بزنید (چون تو سی نبوده)


ممنون

rnm123
پنج شنبه 13 فروردین 1388, 21:42 عصر
دوست عزیز کد زیر را در نظر بگیرید:


int i2=0;
int j2=0;
int k2=0;
int p2=0;
for (int i=1 ; i<=10; i++)
{
i2++;
for ( int j= 1; j<=10; j++)
{
j2++;
for(int k = 1;k<=10;k++)
{
k2++;
for(int p=1;p<=10; p++)
p2++;
}
}
}

جواب اجرای این کد به صورت زیر خواهد بود :
i2 = 10
j2=100
k2=1000
p2=10000
فکر کنم در این مورد اشکالی نداشته باشید
بیرونی حلقه دستورات خود را که شامل سه حلقه درونی هم هست 10بار تکرار میکند بگذارید بهتر توضیح بدهم. دور اول حلقه بیرونی را با هم بررسی کنیم :
در حلقه بیرونی i مقدار 1 میگیرد و به مقدار i2 یک واحد اضافه میکند و بعد میرود سراغ حلقه j . در این لحظه شمارنده j مقدار یک میگیرد و وارد حلقه میشود در داخل این حلقه متغیر j2 مقدار یک میگیرد و حلقه k را اجرا میکند . در این لحظه باز شمارنده حلقه k برابر یک شده و وارد حلقه سوم میشود و در درون حلقه متغیر k2 را برابر یک میگیرد و حلقه چهارم را اجرا میکند در این لحظه شمارنده حلقه چهارم یعنی p برابر یک شده و نشانگر برنامه وارد حلقه میشود . حالا نکته این جاست . تا اینجا که برنامه اجرا شده است مقادیر شمارنده های i و j و k برابر یک هستند و شمارنده p شروع میکند از یک تا ده شمرده و متغیر p2 را یکی یکی اضافه میکند که در نهایت به ده میرسد. حالا که حلقه p تمام شده از حلقه P خارج میشود ولی هنوز حلقه سوم یعنی k تمام نشده و شمارنده آن در این لحظه مقدار 2 میگیرد و بار دیگر حلقه p یکبار بطور کامل اجرا میشود این کار تا آنجایی انجام میشود که حلقه k هم به ده برسد تازه در اینمرحله j به عدد 2 می رسد و باید تمام این مراحل گقته شده را تا 10 مرتبه تکرار کند و زمانی که این حلقه هم تمام شد تازه حلقه بیرونی فقط یکبار انجام شده و باید 10 مرتبه دیگر تمام کارهای گفته شده را انجام دهد.
به عبارتی دیگر در کد بالا حلقه i ده مرتبه حلقه J را تکرار میکند ولی این حلقه خود 10 مرتبه حلقه K را تکرار میکند و خود این حلقه 10 مرتبه حلقه P را تکرار میکند در نهایت نتایج فوق بدست می آید. همچنین میتوانی کد فوق را در VS نوشته و بصورت خط به خط اجرا کنی تا منطق برنامه کاملا بدستت آید.
در مورد FOREACH هم باید بگویم اگر برای یک حلقه تعداد شمارش ها مشخص نباشد از این مورد استفاده میکنیم یعنی نمیتوانیم از حلقه for استفاده کنیم چون در حلقه for باید یک حد بالا برای شمارنده حلقه مشخص کنیم مثلا از یک تا ده ولی در foreach این مورد نیست مثلا میتوانی بگویی برای هر کاراکتر موجود در رشته ورودی کارهای زیر را انجام بده در این مورد دیگر لازم اول طول رشته را بدست آوری و آنرا به عنوان حد بالا به حلقه for معرفی کنی

احمد سامعی
پنج شنبه 13 فروردین 1388, 23:24 عصر
مفهوم اجراي foreach يكم پيچيده و بايد چند بار چند مثال ببنيد تا بفهميد در كجا چه كاربرد هايي دارد
در حلقه هاي معمولي مثل for يا do يا while شما فقط شمارنده داريد
اما در foreach شما بايد بر روي يك مجموعه خواص و در هر بار اجراي حقله بر روي يكي از اعضاء كاري انجام دهيد و براي اين كار بايد يك نمونه هم از آن مجموعه بسازيد
مثلاً مجموعه شما مي تواند يك string يا آرايه يا يك كالكشن باشد كه در هر مورد عضو فرق مي كنيد مثلاً در string عضو بدست آمده كه بايد نمونه سازي شود يك char مي باشد اما در يك كالكشن يك object و در يك آرايه از تايپ همان مثلاً

int[] i = new int[10];
كه عضو نمونه شده يك int مي باشد.
اما يك مثال عملي در اين مثال شما نام چند فايل كه كاربر انتخاب كرده وارد يك مجموعه مي كنيد تا بعداً از آنها استفاده كنيد شما چون تعداد فايل هاي انتخابي را نمي دانيد از اين حلقه استفاده مي كنيد
در ضمن براي دريافت نام آنها و افزودن به مجموعه چون اين نام ها در قالب يك آرايه هستند ابتدا بايد يك آرايه با تعداد فايل ها بسازيد سپس آن ها رو يكي در for وارد اين آرايه كنيد اما با استفاده از حلقه foreach اين كار ساده تر و كوتاه تر مي باشد


OpenFileDialog openFileDialo1 = new OpenFileDialog();
if(openFileDialog1.showDialog() == DialogResult.Ok)
{
ArrayList names = new ArrayList();
foreach(string str in openFileDialog1.FileNames)
{
names.Add(str.Clone());
}
}‌‌‍

hesam_vb_vig
جمعه 14 فروردین 1388, 13:10 عصر
آقای Mahdi.Kiani خواهشا پاک نکنید چرا محتوا نداشت ؟؟؟؟؟؟؟؟؟؟؟

حلقه ها رو که مشکل داشتم پرسیدم یاد گرفتم موند دستور foreach که اونم متوجه نشدم چون 3روزه که شروع کردم من گفتم مثال بیشتر بزنید و درمورد برنامه توضیح بدید

این شد فاقد محتوا ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟!!!!!!!!!

حتما محتوا اینه که شما هر چی ما نوشتیم پاک کنید !!

shervin_agh67
جمعه 14 فروردین 1388, 13:34 عصر
در تکمیل صحبت های دوستان و پایان این دعوا :
مفهوم foreach یک مقداری پیچیدست و به generic ها مربوط میشه . اصولا هر شی ای که از IEnumerable ارث بری کرده باشه قابل استفاده در این ساختاره . مثلا آرایه ها ، دیتاست ها و ... .خیلی از کلاسهای دات نت از این اینترفیس ارث بری دارن حتی کلاس string هم قابل استفادست .در این ساختار شما یک متغیر بدون نوع (anonymous type)رو در ابتدا از یک نوع قابل شمارش یا Enumerable که همون آرایه شما هست تعریف می کنید(البته شما می تونید نوع متغیر رو هم تعیین کنید ولی ضرورتی نداره) در این صورت شما برای پیمایش یک آرایه دیگه از روش شمارنده در حلقه for استفاده نمی کنید بلکه حلقه خودش به طور خودکار جلو میره و هر دفعه متغیر بدون نوع شما به خانه بعدی آرایه اشاره داره. به این مثال دقت کن :



int[] x=new int[]{1,2,3,4,5,6,7,8,9,10};
foreach(var item in x)
{
messageBox.show(item.tostring());
}

در اینجا ما یک متغیر به نام item در ابتدای حلقه تعریف کردیم که نوعش معلوم نیست و مقدارش برابر آرایه x هست در این حلقه شمارنده تعریف نشده و هر دفعه که حلقه جلو میره متغیر item به خونه بعدی آرایه اشاره می کنه .
حالا اگر به جای یک آرایه عددی یک متغیر رشته ای تعریف می کردی متغیر item هر دفعه به یک کاراکتر اون اشاره می کرد.
مثالهای پیچیدش رو در LINQ می تونی ببینی که وقتی حرفه ای شدی می تونی امتحان کنی و ببینی چقدر کار رو راحت می کنه.
برای کسب اطلاعات بیشتر کتاب Professional C#2008 : WROX فصل نهم generic ها رو مطالعه کن . اگه خواستی من اون فصل رو برات پی دی اف می کنم می فرستم .
امیدوارم مشکلت با آقای کیانی حل شده باشه .

hesam_vb_vig
جمعه 14 فروردین 1388, 13:50 عصر
خیلی ممنون اگه منظورتون این کتابه Wrox_Beginning_Microsoft_Visual_C_Sharp_2008_May_2 008 lk hdk من این کتابو دانلود کردم


ممنون دوست عزیز

shervin_agh67
جمعه 14 فروردین 1388, 13:53 عصر
نه منظورم نسخه پیشرفته(professional) این کتاب رو می گم این نسخه beginning کتابه .

hesam_vb_vig
جمعه 14 فروردین 1388, 14:01 عصر
اگه لطف کنید که ممنون میشم

اگه کل کتابو دارید که دیگه خیلی ممنون میشم :خجالت:

shervin_agh67
جمعه 14 فروردین 1388, 14:03 عصر
آره کلشو دارم ولی حجمش 21 مگابایته . لینک کتاب رو می دم برو دانلودش کن . پیغامات رو چک کن.

hesam_vb_vig
جمعه 14 فروردین 1388, 14:27 عصر
دوست عزیز اگه لینک مستقیمشو میدادی بهتر نبود؟! :لبخند:

حالا کارت 2باره شد :ناراحت:لینک بده ممنون:خجالت:

خواستم پیغام خصوصی بدم که نگن بی محتواست اما قانون نذاشت دیگه !!

تعداد پستام کم بود نشد

shervin_agh67
جمعه 14 فروردین 1388, 14:51 عصر
طبق قوانین فعالیتهای Warez در این سایت ممنوعه . بنابراین لینکشو با پیغام فقط می تونم برات بفرستم.
باشه یک لینک دیگه ارسال می کنم .

hesam_vb_vig
جمعه 14 فروردین 1388, 16:30 عصر
اگه میشه لینک مستقیم بده اینترنتم قاط زده هی اررور صفحه میده

ممنون

shervin_agh67
جمعه 14 فروردین 1388, 16:44 عصر
دوتا فصلش که به دردت میخورد رو آپلود کردم . لینکش ارسال شد.