تالار گفتمان مانشت
سوال از Linked List - نسخه‌ی قابل چاپ

سوال از Linked List - alwaysPeace - 24 دى ۱۳۹۳ ۱۱:۵۵ ب.ظ

سلام
این سوال رو کتاب ... پاسخش رو گزینه ۱ زده. ولی به نظر من ۲ میشه.لطفا یکی از دوستان سوالو جواب بده ببینم درسته یا نه

[تصویر:  326847_g4aiexjlkzsz0eiv2tna.jpg]

RE: سوال از Linked List - MiladCr7 - 25 دى ۱۳۹۳ ۱۲:۱۷ ق.ظ

سلام دقت کنید تعداد کل المان ها [tex]n 1[/tex] هستش درسته؟؟؟؟اولین مرحله از المان اول میره تا المان [tex]n[/tex] ام یعنی [tex]n[/tex] بار اجرا میشه بار بعدی از عنصر دوم شروع میشه تا المان [tex]n[/tex] ام اجرا میشه پس تعداد دفعات اجرا میشه [tex]n-1[/tex] و بار بعد میشه [tex]n-2[/tex] و...
پس داریم: [tex]1 2 ..... n-1 n=\frac{n(n 1)}{2}[/tex]

RE: سوال از Linked List - alwaysPeace - 25 دى ۱۳۹۳ ۰۹:۰۱ ب.ظ

(۲۵ دى ۱۳۹۳ ۱۲:۱۷ ق.ظ)miladcr7 نوشته شده توسط:  سلام دقت کنید تعداد کل المان ها [tex]n 1[/tex] هستش درسته؟؟؟؟اولین مرحله از المان اول میره تا المان [tex]n[/tex] ام یعنی [tex]n[/tex] بار اجرا میشه بار بعدی از عنصر دوم شروع میشه تا المان [tex]n[/tex] ام اجرا میشه پس تعداد دفعات اجرا میشه [tex]n-1[/tex] و بار بعد میشه [tex]n-2[/tex] و...
پس داریم: [tex]1 2 ..... n-1 n=\frac{n(n 1)}{2}[/tex]

خب بحث منم همینه که اولین المان در حلقه while دوم تا n نمیره. قبل از while اولی میره تو n (همون خط اول)، بعد تو while دومی قبل از این که writeln اجرا بشه دوباره یکی میره جلو (تو خط پنجم) و در واقع while دومی n-1 بار اجرا میشه و همینطور سری دوم میشه n-2 بار چون برای بار دوم while اول یکی میره جلو و به همین ترتیب تا آخر. به نظر من هنوزم گزینه ۲ جوابه.

RE: سوال از Linked List - shayesteb - 25 دى ۱۳۹۳ ۰۹:۱۹ ب.ظ

سلام Smile

اول کد نوشته که p به خونه بعد از l اشاره میکنه پس p به المان اول اشاره میکنه و از المان اول تا ان پیش میریم که n بار تکرار میشه و دفعه بدی که جلقه اجرا میشه یه خونه میریم جلوتر یعنی از المان دوم تا ان پیش میریم که n-1 میشه و همینطوری ادامه پیدا میکنه تا وقتی که حلقه فقط یک بار اجرا بشه.

سوال از Linked List - mnpe - 26 دى ۱۳۹۳ ۰۷:۳۰ ق.ظ

اقا دفه اول q تو حلقه while که به عنصر اخر میرسه و میره داخل while و null میشه و writeln اجرا میشه و بعدش میاد بالا و شرط while رو چک میکنه و میبینه ک null شده.

RE: سوال از Linked List - alwaysPeace - 26 دى ۱۳۹۳ ۰۴:۲۰ ب.ظ

(۲۵ دى ۱۳۹۳ ۰۹:۱۹ ب.ظ)shayesteb نوشته شده توسط:  سلام Smile

اول کد نوشته که p به خونه بعد از l اشاره میکنه پس p به المان اول اشاره میکنه و از المان اول تا ان پیش میریم که n بار تکرار میشه و دفعه بدی که جلقه اجرا میشه یه خونه میریم جلوتر یعنی از المان دوم تا ان پیش میریم که n-1 میشه و همینطوری ادامه پیدا میکنه تا وقتی که حلقه فقط یک بار اجرا بشه.

سلام
ببینید شما اصلا حلقه دوم رو نادیده گرفتید! در صورتی که اصل نکته تو حلقه دومه. شما تعداد دفعات اجرای حلقه اول رو حساب کردید. منم قبول دارم که حلقه اول [tex]\frac{n(n 1)}{2}[/tex] بار اجرا میشه. اما سوال تعداد اجرا شدن writeln رو خواسته.

ببینید تو خط اول p یک واحد زیاد میشه و به المان اول اشاره می کنه. بعد میره تو حلقه while اول.
بعد تو خط سوم p رو میریزه تو q. یعنی الان هم p و هم q هر دو به المان اول اشاره میکنند. حالا q میره تو حلقه (خط چهارم) و نکته اصلی تو خط پنجمه. قبل از اینکه writeln اجرا بشه، دوباره q یک واحد زیاد میشه و میره رو المان بعد از المان اول (المان دوم) و بعد از این writeln اجرا میشه. یعنی writeln تو المان دوم شروع به اجرا شدن میکنه و تا المان آخر پیش میره که میشه n-1 بار . پس اولین بار writeln تعداد n-1 بار اجرا میشه و به همین ترتیب دفعات بعدی یکی کم میشه.
پس در کل writeln تعداد [tex]\frac{n(n-1)}{2}[/tex] بار اجرا میشه .

من وقت ندارم برنامه رو اجرا کنم اما مطمئنم که گزینه دوم درسته. اگه جای دو خط پنجم و ششم عوض بشه و خط پنجم بعد از خط ششم نوشته بشه، اون وقت گزینه اول میشه جواب.

RE: سوال از Linked List - MiladCr7 - 26 دى ۱۳۹۳ ۰۴:۳۱ ب.ظ

(۲۶ دى ۱۳۹۳ ۰۴:۲۰ ب.ظ)alwaysPeace نوشته شده توسط:  
(25 دى ۱۳۹۳ ۰۹:۱۹ ب.ظ)shayesteb نوشته شده توسط:  سلام Smile

اول کد نوشته که p به خونه بعد از l اشاره میکنه پس p به المان اول اشاره میکنه و از المان اول تا ان پیش میریم که n بار تکرار میشه و دفعه بدی که جلقه اجرا میشه یه خونه میریم جلوتر یعنی از المان دوم تا ان پیش میریم که n-1 میشه و همینطوری ادامه پیدا میکنه تا وقتی که حلقه فقط یک بار اجرا بشه.

سلام
ببینید شما اصلا حلقه دوم رو نادیده گرفتید! در صورتی که اصل نکته تو حلقه دومه. شما تعداد دفعات اجرای حلقه اول رو حساب کردید. منم قبول دارم که حلقه اول [tex]\frac{n(n 1)}{2}[/tex] بار اجرا میشه. اما سوال تعداد اجرا شدن writeln رو خواسته.

ببینید تو خط اول p یک واحد زیاد میشه و به المان اول اشاره می کنه. بعد میره تو حلقه while اول.
بعد تو خط سوم p رو میریزه تو q. یعنی الان هم p و هم q هر دو به المان اول اشاره میکنند. حالا q میره تو حلقه (خط چهارم) و نکته اصلی تو خط پنجمه. قبل از اینکه writeln اجرا بشه، دوباره q یک واحد زیاد میشه و میره رو المان بعد از المان اول (المان دوم) و بعد از این writeln اجرا میشه. یعنی writeln تو المان دوم شروع به اجرا شدن میکنه و تا المان آخر پیش میره که میشه n-1 بار . پس اولین بار writeln تعداد n-1 بار اجرا میشه و به همین ترتیب دفعات بعدی یکی کم میشه.
پس در کل writeln تعداد [tex]\frac{n(n-1)}{2}[/tex] بار اجرا میشه .

من وقت ندارم برنامه رو اجرا کنم اما مطمئنم که گزینه دوم درسته. اگه جای دو خط پنجم و ششم عوض بشه و خط پنجم بعد از خط ششم نوشته بشه، اون وقت گزینه اول میشه جواب.

سلام.این چیزی که شما میگی اصلا تاثیری نداره چون در عوضش وقتی توی حلقه دوم q رو null قرار میگیره بازم یه بار اجرا میشه پس این به اون در!!!دوباره میشه n+1 بار اجرا توی بار اول

RE: سوال از Linked List - alwaysPeace - 26 دى ۱۳۹۳ ۱۰:۰۳ ب.ظ

(۲۶ دى ۱۳۹۳ ۰۴:۳۱ ب.ظ)miladcr7 نوشته شده توسط:  سلام.این چیزی که شما میگی اصلا تاثیری نداره چون در عوضش وقتی توی حلقه دوم q رو null قرار میگیره بازم یه بار اجرا میشه پس این به اون در!!!دوباره میشه n+1 بار اجرا توی بار اول

آخ آخ آخ!!!! کاملا درسته! به نظرم اینجا شهامت میخاد که آدم بگه اشتباه کردم که من میگمSmile حواسم به این نبود که در NULL هم یک بار اجرا میشه!!
البته من فکر می کنم خوتون هم اولش به این نکته توجه نکرده بودید! چون شما گفتید: "اولین مرحله از المان اول میره تا المان n ام یعنی n بار اجرا میشه بار بعدی از عنصر دوم شروع میشه" در صورتی در اولین مرحله، writeln زمانی که q در المان دوم هست اجرا میشه و تا المان n ام میره به علاوه یکبار هم در NULL و تو المان اولی هیچ وقت اجرا نمیشه و بار بعدی اجرا از عنصر سوم شروع میشه.

به هر حال خیلی ممنونم.