تالار گفتمان مانشت
مهندسی کامپیوتر - سراسری ۹۱ - نسخه‌ی قابل چاپ

مهندسی کامپیوتر - سراسری ۹۱ - ali.majed.ha - 10 فروردین ۱۳۹۶ ۰۵:۲۳ ب.ظ

با عرض سلام
دوستان لطف می کنید یه توضیحی در مورد سوال زیر بفرمایید. من تا حالا نمونه ی بازگشتی این مثال ها رو ندیدم.
با تشکر

RE: مهندسی کامپیوتر - سراسری ۹۱ - Behnam‌ - ۱۰ فروردین ۱۳۹۶ ۰۷:۰۲ ب.ظ

(۱۰ فروردین ۱۳۹۶ ۰۵:۲۳ ب.ظ)alimamala نوشته شده توسط:  با عرض سلام
دوستان لطف می کنید یه توضیحی در مورد سوال زیر بفرمایید. من تا حالا نمونه ی بازگشتی این مثال ها رو ندیدم.
با تشکر

می‌خوایم بدونیم وقتی تابع برای k فراخوانی شود، چه تغییری نسبت به زمانی که برای k-1 فراخوانی شده پیدا می‌کند.
اولین حلقه، ۱ بار بیشتر اجرا می‌شود چون مقدار n یک واحد افزایش پیدا کرده (قبلا k-1 بود، الان k شده).
دومین حلقه، در تمام حالت‌هایی که برای k-1 اجرا شده بود برای k هم اجرا می‌شود، بعلاوه‌ی این نکته که n یک واحد افزایش پیدا کرده. یعنی قبلا از ۰ تا k-3 بود (شامل خود k-3)، ولی این بار در آخرین بار از ۰ تا k-2 هم اجرا می‌شود که می‌شود k-1 افزایش. مقدار count هم به ازای ۰ تا k-2 اجرا می‌شود، یعنی k-1 بار.
پس جواب می‌شود [tex]T(k)=T(k-1)+1+(k-1)+(k-1)=T(k-1)+2k-1[/tex]

RE: مهندسی کامپیوتر - سراسری ۹۱ - alireza01 - 10 فروردین ۱۳۹۶ ۰۷:۱۷ ب.ظ

سلام و وقت بخیر ...
راه حلی که من برای این سوال دارم این است که به ورودی تابع ( [tex]n[/tex] ) عدد بدهیم تا روند کلی را بدست آوریم و با گزینه ها مقایسه کنیم ...

اگر به [tex]n[/tex] مقدار صفر بدهیم . هیچگاه [tex]++[/tex] نخواهیم داشت ( حلقه اجرا نمیشود ) یعنی [tex]T(0)=0[/tex]
اگر به [tex]n[/tex] مقدار یک بدهیم . تنها یک بار برای بررسی شرط حلقه اول [tex]++[/tex] داریم و بعد از آن خارج میشود یعنی [tex]T(1)=1[/tex]
اگر به [tex]n[/tex] مقدار دو بدهیم و تابع را بررسی کنیم ۴ مرتبه [tex]++[/tex] را خواهیم داشت ( یک مرتبه برای [tex]++[/tex][tex]count[/tex] - یک مرتبه برای حلقه بیرونی که دفعه آخر شرط خروج را چک میکند - و یکی برای حلقه داخلی ) یعنی [tex]T(2)=4[/tex]

حال با این توصیفات به سراغ گزینه ها برویم و فرض میکنیم [tex]T(1)=1[/tex] ، گزینه اول : [tex]T(2)=T(1)+2\ast2+1\: =\: 6[/tex] - گزینه دوم : [tex]T(2)=2\ast T(1)+2-1\: =\: 3[/tex] - گزینه سوم : [tex]T(2)=T(1)+2\ast2-1\: =\: 4[/tex] - گزینه چهارم : [tex]T(2)=2\ast T(1)+2+1\: =\: 5[/tex] که تنها در گزینه سوم به درسی مقدار دهی شده است .

RE: مهندسی کامپیوتر - سراسری ۹۱ - ali.majed.ha - 12 فروردین ۱۳۹۶ ۱۲:۴۲ ب.ظ

با عرض سلام
از دوستان گرامی بسیار سپاسگزارم، موفق و پیروز باشید

RE: مهندسی کامپیوتر - سراسری ۹۱ - msour44 - 12 فروردین ۱۳۹۶ ۰۴:۴۴ ب.ظ

سلام
با احترام به پاسخ دوستان.
به نظر دراین تست تعداد اجرای عملیات ++ (هرسه ) مد نظر طراح نیست در عنوان سوال ذکر شده "تعداد عملیات ++(هر سه) در تابع فوق" یعنی از کلمه اجرا استفاده نشده تا به گزینه ۳ برسیم.برای اطمینان بیشتر کلید سنجش را هم بررسی کردم گزینه ۱ جواب است.و به نظر این تست حذف هم نشده. انچه مسلم است طراح منظور دیگری دارد ولی نتوانسته به طور صحیح منظور خود را بیان کند شاید هم قواعد زبان c را فراموش کرده ویا اینکه در حال تحقیق بر روی الگوریتم های مولد کد بوده ولی با ذکر واژه فراخوانی تابع یک شاهکار خلق کرده.
موضوغ به اینجا ختم نمی شود همین تست با کمی تغییر در کد(بیشتر شبه کد شده ولی با همان مفهوم) با اشاره به ارشد ۹۱ بودن ان در ۶۰۰ مسئله (۱/۶۰)به این صورت پاسخ داده شده:
"در هر اجرای حلقه میانی دو عمل افزایش و در حلقه بیرونی نیز یک عمل افزایش داریم بنابراین رابطه [tex]T(n)=T(n-1)+2n+1[/tex] دزست است توجه کنید که [tex]T(0)=0[/tex] و نیز برای نمونه [tex]T(1)=3[/tex] چون یک عمل افزایش در حلقه اول یک عمل افزایش در حلقه دوم و نیز یک عنل افزایش در سطر ۴(منظورش همان افزیش count)خواهیم داشت."
به نظر در این پاسخ هم ایراد وجو دارد گقته با هر بار اجرا .... در حالی که در حلقه for یک اجرای اضافی وجود دارد که شرط نقض می شود. و در ان اجرا دیگر ++ اجرا نمی شود.یا برای [tex]T(1)=3[/tex] در شرط حلقه دوم متوقف می شویم و فقط یک بار ++ اجرا می شود پس احتمالا باید بحث اجرا را بزاریم کنار.

RE: مهندسی کامپیوتر - سراسری ۹۱ - *tarannom* - 12 فروردین ۱۳۹۶ ۰۵:۳۳ ب.ظ

(۱۰ فروردین ۱۳۹۶ ۰۷:۱۷ ب.ظ)alireza01 نوشته شده توسط:  سلام و وقت بخیر ...
راه حلی که من برای این سوال دارم این است که به ورودی تابع ( [tex]n[/tex] ) عدد بدهیم تا روند کلی را بدست آوریم و با گزینه ها مقایسه کنیم ...

اگر به [tex]n[/tex] مقدار صفر بدهیم . هیچگاه [tex]++[/tex] نخواهیم داشت ( حلقه اجرا نمیشود ) یعنی [tex]T(0)=0[/tex]
اگر به [tex]n[/tex] مقدار یک بدهیم . تنها یک بار برای بررسی شرط حلقه اول [tex]++[/tex] داریم و بعد از آن خارج میشود یعنی [tex]T(1)=1[/tex]
اگر به [tex]n[/tex] مقدار دو بدهیم و تابع را بررسی کنیم ۴ مرتبه [tex]++[/tex] را خواهیم داشت ( یک مرتبه برای [tex]++[/tex][tex]count[/tex] - یک مرتبه برای حلقه بیرونی که دفعه آخر شرط خروج را چک میکند - و یکی برای حلقه داخلی ) یعنی [tex]T(2)=4[/tex]

حال با این توصیفات به سراغ گزینه ها برویم و فرض میکنیم [tex]T(1)=1[/tex] ، گزینه اول : [tex]T(2)=T(1)+2\ast2+1\: =\: 6[/tex] - گزینه دوم : [tex]T(2)=2\ast T(1)+2-1\: =\: 3[/tex] - گزینه سوم : [tex]T(2)=T(1)+2\ast2-1\: =\: 4[/tex] - گزینه چهارم : [tex]T(2)=2\ast T(1)+2+1\: =\: 5[/tex] که تنها در گزینه سوم به درسی مقدار دهی شده است .
منم دقیقا همین راهو رفتم.منتهی اصا سنجش معلوم نیست چی میگه که شده گزینه ۱/
سوالش یه چیزه منظور طراح سوالش یه چیز دیگه. باید جلو سوال مینوشتن لطفا مطابق با ذهنیات طراح سوال، حل کنید نه طبق صورت سوالSmile

RE: مهندسی کامپیوتر - سراسری ۹۱ - Behnam‌ - ۱۲ فروردین ۱۳۹۶ ۰۹:۳۲ ب.ظ

(۱۲ فروردین ۱۳۹۶ ۰۴:۴۴ ب.ظ)msour44 نوشته شده توسط:  سلام
با احترام به پاسخ دوستان.
به نظر دراین تست تعداد اجرای عملیات ++ (هرسه ) مد نظر طراح نیست در عنوان سوال ذکر شده "تعداد عملیات ++(هر سه) در تابع فوق" یعنی از کلمه اجرا استفاده نشده تا به گزینه ۳ برسیم.برای اطمینان بیشتر کلید سنجش را هم بررسی کردم گزینه ۱ جواب است.و به نظر این تست حذف هم نشده. انچه مسلم است طراح منظور دیگری دارد ولی نتوانسته به طور صحیح منظور خود را بیان کند شاید هم قواعد زبان c را فراموش کرده ویا اینکه در حال تحقیق بر روی الگوریتم های مولد کد بوده ولی با ذکر واژه فراخوانی تابع یک شاهکار خلق کرده.
موضوغ به اینجا ختم نمی شود همین تست با کمی تغییر در کد(بیشتر شبه کد شده ولی با همان مفهوم) با اشاره به ارشد ۹۱ بودن ان در ۶۰۰ مسئله (۱/۶۰)به این صورت پاسخ داده شده:
"در هر اجرای حلقه میانی دو عمل افزایش و در حلقه بیرونی نیز یک عمل افزایش داریم بنابراین رابطه [tex]T(n)=T(n-1)+2n+1[/tex] دزست است توجه کنید که [tex]T(0)=0[/tex] و نیز برای نمونه [tex]T(1)=3[/tex] چون یک عمل افزایش در حلقه اول یک عمل افزایش در حلقه دوم و نیز یک عنل افزایش در سطر ۴(منظورش همان افزیش count)خواهیم داشت."
به نظر در این پاسخ هم ایراد وجو دارد گقته با هر بار اجرا .... در حالی که در حلقه for یک اجرای اضافی وجود دارد که شرط نقض می شود. و در ان اجرا دیگر ++ اجرا نمی شود.یا برای [tex]T(1)=3[/tex] در شرط حلقه دوم متوقف می شویم و فقط یک بار ++ اجرا می شود پس احتمالا باید بحث اجرا را بزاریم کنار.

در کل این مدل تست‌هایی که صرفاً در یک ۱+ و ۱- تفاوت دارند به نظرم موش و گربه بازی هست. حداقل در این تست. اگر مثلاً تست در مورد مرتب کردن بود و یک گزینه [tex]n\cdot\log(n)[/tex] و گزینه‌ی دیگه [tex]\log(n!)[/tex] بود اون موقع ارزش علمی داشت ولی این سوال به نظرم مسخره هست. اگر منظور این هست که داوطلب امتحان بشه که در بار آخر حلقه اجرا نمی‌شود ولی عمل ++ انجام می‌شود، می‌توان تست خیلی بهتری طرح کردو البته شک دارم این موضوع که عمل ++ بار آخر اجرا می‌شود ولی حلقه اجرا نمی‌شود اون قدر موضوع مهمی باشه که به عنوان سؤال کنکور برای داوطلبی که کل کتاب CLRS رو خونده مطرح بشه.
البته باز سرفصل‌ها و سوالات این درس در مقابل سر فصل‌ها و سوالاتی که به عنوان معماری کامپیوتر به خورد داوطلبان داده می‌شه نقش طلا رو داره.

RE: مهندسی کامپیوتر - سراسری ۹۱ - Saman - 12 فروردین ۱۳۹۶ ۱۰:۰۶ ب.ظ

یه سری سوال دیگه هست اگه اون ها و پاسخ هاشون رو ببینید واقعا اعصابتون بهم میریزه. همه ی کتاب های موجود در بازارم غلط پاسخشون دادن. نشون به اون نشونی که یکی از همونا آی تی ۹۵ هم بود!!
سوالات معمولا ترجمه سوالات خارج از ایرانه. بعد طراح میاد با عقل ناقصش دستکاری میکنه و همه چیزو خراب میکنه!!

RE: مهندسی کامپیوتر - سراسری ۹۱ - *tarannom* - 12 فروردین ۱۳۹۶ ۱۰:۱۲ ب.ظ

خدا ازشون نگذره که آینده ما رو به بازی گرفتنSad خو یه سال وقت داری بشین ۴ تا سوال درست طرح کن.معلوم نیست بین خواب و بیداری طرح میکنن که اخر ۴ تا سوال از ۶ تای شبکه رو غلط میدن ؟یا ۵ دیقه قبل از شروع آزمون؟Huh
اینم از داده الگوریتماشون.....