تور لحظه آخری
امروز : شنبه ، 14 مهر 1403    احادیث و روایات:  امام محمد باقر(ع):كار خير و صدقه، فقر را مى‏بَرند، بر عمر مى‏افزايند و هفتاد مرگ بد را از صاحب...
سرگرمی سبک زندگی سینما و تلویزیون فرهنگ و هنر پزشکی و سلامت اجتماع و خانواده تصویری دین و اندیشه ورزش اقتصادی سیاسی حوادث علم و فناوری سایتهای دانلود گوناگون شرکت ها




آمار وبسایت

 تعداد کل بازدیدها : 1820837009




هواشناسی

نرخ طلا سکه و  ارز

قیمت خودرو

فال حافظ

تعبیر خواب

فال انبیاء

متن قرآن



اضافه به علاقمنديها ارسال اين مطلب به دوستان آرشيو تمام مطالب
archive  refresh

Trace این برنامه -


واضح آرشیو وب فارسی:سایت ریسک: Trace این برنامه draria 14 آبان 1387, 17:41دوست عزیز the_king () میتونی این برنامه رو Trace کنی ؟ مخصوصا حلقه هاش و قسمتهای پایینی using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { int n, i, j, temp; Console.Clear(); Console.Write("Please enter n : "); n=int.Parse(Console.ReadLine()); int[] a = new int[n]; for (i = 0; i < n; i++) { Console.Write ("Please enter A[" + (i+1) + "] : "); a[i] = int.Parse(Console.ReadLine()); } for (i = 0; i < n - 1; i++) for (j = i + 1; j < n; j++) if (a[i] < a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for (i = 0; i < n; i++) Console.WriteLine ("A[" + (i+1) + "] = " + a[i]); Console.ReadKey(true) ; } } } the_king 14 آبان 1387, 18:42دوست عزیز the_king () میتونی این برنامه رو Trace کنی ؟ مخصوصا حلقه هاش و قسمتهای پایینی همیشه کد هایتان در بین تگی که دکمه مربوط به Code یعنی می سازد قرار دهید. اینطوری هم کد به هم نمی ریزد و هم چپ به راست چاپ می شود و هم تو رفتی سطر ها از بین نمی رود. این کد های زیر که گمان نمی کنم نیازی به توضیح داشته باشند، مخصوصا که بصورت مشترک در پروژه های کنسولی بطور خودکار درج می شود : using System; using System.Collections.Generic; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { } } } ابتدا متغیر n را برای خواندن تعداد اندیس های آرایه ، متغیر i را برای مشخص کردن یک اندیس از آرایه، jمتغیر را برای مقایسه یک اندیس از آرایه با سایر اندیس ها (مرتب سازی آرایه) و متغیر temp را برای نگه داشتن موقت مقدار یک اندیس از آرایه (در هنگام تعویض مقدار دو اندیس آرایه) تعریف می کنیم : int n, i, j, temp; صفحه نمایش را پاک می کنیم : Console.Clear(); پیغام مناسبی را برای گرفتن مقدار n چاپ می کنیم : Console.Write("Please enter n : "); یک رشته string را از ورودی می خوانیم (Console.ReadLine) و به یک عدد int تبدیلش می کنیم (int.Parse) و در داخل متغیر n قرار می دهیم. (در یک کلام یک عدد را در متغیر n می خوانیم) : n=int.Parse(Console.ReadLine()); آرایه a را با تعداد اندیس های n و از نوع int می سازیم : int[] a = new int[n]; یک حلقه را با متغیر i می سازیم که برای پیمایش کلیه اندیس های آرایه a مناسب باشد : for (i = 0; i < n; i++) { پیغام مناسبی چاپ می کنیم که از کاربر بخواهد که اندیس i+1 (چون اندیس های آرایه از 0 شروع می شوند ولی بطور معمول کاربران اندیس اول را 1 فرض می کنند، در هنگام نمایش شماره اندیس یک واحد به i اضافه می کنیم.) آرایه را وارد نماید : Console.Write ("Please enter A[" + (i+1) + "] : "); یک رشته string را از ورودی می خوانیم (Console.ReadLine) و به یک عدد int تبدیلش می کنیم (int.Parse) و در داخل اندیس i ام آرایه a قرار می دهیم. (در یک کلام یک عدد را در اندیس i ام a می خوانیم) : a[i] = int.Parse(Console.ReadLine()); پس از خاتمه یافتن حلقه for ای که با متغیر i پیمایش نمودیم، تمامی عنصر های آرایه a خوانده شده اند : } با متغیر i یک حلقه می سازیم که بجز آخرین اندیس آرایه a سایر اندیس های آنرا پیمایش کند : for (i = 0; i < n - 1; i++) با متغیر j یک حلقه داخلی (داخل حلقه for ای که با i ساخته بودیم) می سازیم که تمامی اندیس های آرایه a که بعد از اندیس i هستند را پیمایش کند (همواره پیمایش متغیر j از یک اندیس بعد از i آغاز می شود) : for (j = i + 1; j < n; j++) اگر اندیس i ام آرایه a از اندیس j ام آرایه a کوچکتر است، پس ترتیب آرایه از نظر نزولی صحیح نیست : if (a[i] < a[j]) { اگر ترتیب آرایه از نظر نزولی صحیح نیست پس باید مقدار اندیس i ام آرایه a با اندیس j ام آرایه a تعویض شود، این عمل در سه مرحله انجام می شود و متغیر temp در این میان نقش یک واسطه را بازی می کند : temp = a[i]; a[i] = a[j]; a[j] = temp; در هر حال پس از اجرای دو حلقه تو در توی i و j، آرایه از نظر نزولی مرتب شده است : } یک حلقه با متغیر i تشکیل می دهیم که برای پیمایش تمامی اندیس های آرایه a مناسب باشد : for (i = 0; i < n; i++) با پیغام مناسبی، مقدار اندیس i ام آرایه a را چاپ می کنیم (چون اندیس های آرایه از 0 شروع می شوند ولی بطور معمول کاربران اندیس اول را 1 فرض می کنند، در هنگام نمایش شماره اندیس یک واحد به i اضافه می کنیم و بجای مقدار i مقدار i+1 را نمایش می دهیم) Console.WriteLine ("A[" + (i+1) + "] = " + a[i]); از کاربر می خواهیم که پیش از خروج از برنامه، زحمت فشار دادن یک کلید از صفحه کلید را بکشد : Console.ReadKey(true) ; لطفا در هنگام مطرح کردن سوال هایتان کاربر خاصی را مخاطب قرار ندهید، احساس یک ارتباط صرفا دو سویه ای که با مورد سوال قرار دادن یک کاربر خاص ایجاد می شود، سایر دوستان را در پاسخگویی به گفتگو ها دلسرد می کند. لطفا با مخاطب قرار دادن کلیه دوستان،سایر کاربران را برای پاسخ گویی به سوالات ترغیب کنید. draria 14 آبان 1387, 21:30متشکر . فقط یه نکته چرا یک حلقه را با متغیر i می سازیم که برای پیمایش کلیه اندیس های آرایه a مناسب باشد با پیغام مناسبی، مقدار اندیس i ام آرایه a را چاپ می کنیم (چون اندیس های آرایه از 0 شروع می شوند ولی بطور معمول کاربران اندیس اول را 1 فرض می کنند، در هنگام نمایش شماره اندیس یک واحد به i اضافه می کنیم و بجای مقدار i مقدار i+1 را نمایش می دهیم رو چند بار استفاده کردید بعد نکته بعدی اینکه از کجا باید دقیق بفهمیم متغیرها ی داخل for رو چطوری بنویسیم . for (i = 0; i < n; i++) for (i = 0; i < n - 1; i++) و .... the_king 14 آبان 1387, 22:31متشکر . فقط یه نکته چرا یک حلقه را با متغیر i می سازیم که برای پیمایش کلیه اندیس های آرایه a مناسب باشد با پیغام مناسبی، مقدار اندیس i ام آرایه a را چاپ می کنیم (چون اندیس های آرایه از 0 شروع می شوند ولی بطور معمول کاربران اندیس اول را 1 فرض می کنند، در هنگام نمایش شماره اندیس یک واحد به i اضافه می کنیم و بجای مقدار i مقدار i+1 را نمایش می دهیم رو چند بار استفاده کردید دوبار تکرار شده است، چون دقیقا دوبار باید پیغام مشابهی به کاربر داده شود، بار اول زمانی است که عناصر آرایه را از او دریافت می کنیم و کاربر باید بداند که مثلا آن عددی که از او دریافت می شود داخل [A[5 قرار می گیرد : A[5] : بار دوم هم زمانی است که عناصر مرتب شده را چاپ می کنیم، مثلا پیش از چاپ مقدار اندیس پنجم آرایه این عبارت را نمایش می دهیم : A[5] = چون هم روال دریافت مقدار اندیس های آرایه و هم روال چاپ اندیس های آرایه، نیاز به یک حلقه دارد که از اول تا آخر آرایه را پیمایش کند، بدیهی است که هم کد آنها یکسان است و هم توضیحات کد آنها. بعد نکته بعدی اینکه از کجا باید دقیق بفهمیم متغیرها ی داخل for رو چطوری بنویسیم . for (i = 0; i < n; i++) for (i = 0; i < n - 1; i++) و .... کدی که در روال مرتب سازی نوشتم را در نظر بگیرید : for (i = 0; i < n - 1; i++) for (j = i + 1; j < n; j++) الگوریتم های مشخص و معروف اندیس های شروع و پایانی دارند که از قبل تعیین شده است. این دو حلقه تو در تو جزئی از روال عادی الگوریتم مرتب سازی حبابی هستند، هدف اصلی این است که اندیس های هر عضو از آرایه را با بقیه عضو ها مقایسه کنیم. پس حلقه i از صفر شروع می شود ولی هیچگاه شامل آخرین اندیس آرایه نخواهد بود، چرا؟ چون دیگر بعد از آخرین عنصر آرایه دیگر عنصری نیست که بخواهیم با آن مقایسه اش کنیم. برای همین i باید از n - 1 کوچکتر باشد. کم کردن یک از n تضمین می کند که i آخرین عضو آرایه را در روال خود اجرا نکند. اندیس j هم نباید از i کوچکتر باشد، چرا؟ چون i همانطور که افزایش می یابد اندیس ها را مرتب می کند و اندیس های قبلتر از i مرتب هستند. به همین دلیل نیازی به مقایسه مجدد ندارند. یعنی j >= i همچنین بدیهی است که مقایسه کردن یک عضو با خودش فایده ای ندارد پس j برابر خود i هم نیست، پس همیشه j از i + 1 شروع می شود. اندیس انتهایی j هم که آخرین عضو آرایه است. حالا این کد زیر را در نظر بگیرید : for (i = 0; i < n ; i++) for (j = 0 ; j < n; j++) دقت کنید که هر دو اندیس i و j مقدار شروع و پایان یکسانی دارند، جالب اینکه این دو حلقه for می توانند بجای دو حلقه ای که من نوشته بودم بکار روند، یعنی مرتب سازی را بدون مشکل انجام می دهند. تنها عیبشان این است که دوباره کاری و کار بیهوده هم انجام می دهد، مثلا اندیس 5 را با اندیس 5 مقایسه می کند در حالی که همواره ایندو با هم برابر اند. به بیان ساده تر کندتر از نمونه قبلی عمل می کند وگرنه اجرایش صحیح است.




این صفحه را در گوگل محبوب کنید

[ارسال شده از: سایت ریسک]
[مشاهده در: www.ri3k.eu]
[تعداد بازديد از اين مطلب: 844]

bt

اضافه شدن مطلب/حذف مطلب







-


گوناگون

پربازدیدترینها
طراحی وب>


صفحه اول | تمام مطالب | RSS | ارتباط با ما
1390© تمامی حقوق این سایت متعلق به سایت واضح می باشد.
این سایت در ستاد ساماندهی وزارت فرهنگ و ارشاد اسلامی ثبت شده است و پیرو قوانین جمهوری اسلامی ایران می باشد. لطفا در صورت برخورد با مطالب و صفحات خلاف قوانین در سایت آن را به ما اطلاع دهید
پایگاه خبری واضح کاری از شرکت طراحی سایت اینتن