زمان 135 :دقیقه آزمون پایان ترم طراحی و پیادهسازی زبانهای برنامه نویسی خرداد 1401
نمره شماره دانشجویی: سؤال نام و نام خانوادگی:
استفاده از هیچ منبعی در طول امتحان مجاز نمی باشد. •
آزمون از 9سؤال تشکیل شده است. •
در صورتی که در سؤالی با ابهام روبرو شدید ،فرض خود را بنویسید و متناسب با آن جواب را ارائه کنید )در طول امتحان •
سؤال چندانی پاسخ داده نمی شود(.
پس از اتمام )در مدت 2ساعت و 15دقیقه( ،بلفاصله نسبت به آماده سازی جواب وبارگذاری آن در قس@@مت پای@@ان ت@@رم •
تمرینهای درس اقدام نمایید )ذکر نام و نام خانوادگی فراموش نشود( .پس از پایان وق44ت ،مطل44ب جدی44دی اض44افه
نشود 25 .دقیقه برای آپلود فایل در نظر شده است ).شروع آزمون - 15:00 :پایان - 17:15 :فرصت آپلود ت44ا
(17:40
الف( Elliptical Referenceدر چه نوع دادهای مطرح میباشد و چیست(3) e 1
ب( Name Type Equivalenceرا تعریف کنید(2) .
ج( Closureچیست و نوع حافظه ی متغیرهای محلی آن از چه نوعی باید باشد(3) e
14
د( تفاوت Coroutineو تابع در چیست(2) e
ه( تفاوت call-by-nameو call-by-needدر چیست(2) e
و( در چه مواقعی call-by-nameو call-by-referenceهمانند یکدیگر رفتار می کنند(2) e
اگر زبانی از ساختارهای ) Union(1و ) (2نوع داده ی شمارشی enumپش@@تیبانی کن@@د ،در ه@@ر ی@@ک از ای@@ن دو م@@ورد بط@@ور 2
4
جداگانه ،اگر چه خصوصیتی داشته باشد به یک زبان Strongly Typedنزدیک تر می باشدe
آدرس عنصر ] A[2][5][8در آرایه ی سه بعدی ] int A[0..4][4..6][6..10در صورتی که در حافظه بصورت 3
3
Column Majorذخیره شده باشد ،هر 4 intبایت اشغال کند و آدرس شروع آرایه 1000باشد را محاسبه نمایید.
9 قطعه کد زیر را در نظر بگیرید .در خط ،4فضایی که qبه آن اشاره می کند ،آزاد می شود .نتیجه ی اجرای این برن@@امه نی@@ز در 4
سمت راست نمایش داده شده است.
;(1)int *p = new int
;(2)*p = 10
;(3)int *q = p
;(4)delete q
;(5)int *r = new int
;(6)q = new int
;(7)*q = 5
الف( کدام خط این کد منجر به Dangling Pointerمیشود و برای کدام اشاره گرeچرا(2) e
ب( مطابق شکل ،پس از اجرای خط 5چه اتفاقی افتاده است(2) e
ج( روش Tombstoneرا برای رفع این مشکل بر روی مثال اعمال کرده و شکل نهایی را نمایش دهید(3) .
د( در چه صورت استفاده از روش Locks and Keysبرای مثال داده شده میتواند با مشکل روبرو شود(2) .
زمان 135 :دقیقه آزمون پایان ترم طراحی و پیادهسازی زبانهای برنامه نویسی خرداد 1401
نمره شماره دانشجویی: سؤال نام و نام خانوادگی:
برنامهی زیر را در زبان C++در نظر بگیرید .شکل حاصل از آن نیز مشخص شده است. 5
الف( روش Reference Countingبرای مشخص شدن حافظه های garbageرا در محل های ) (2) ،(1و ) (3اعمال
کرده و شماره گره های garbageتشخیص داده شده را مشخص کنید )برای هر محل ،ش44کل ج44داگانه رس44م کنی44د و
اطلعات مورد نیاز روش را برای گرههای مختلف مشخص کنید(.
Reference ب( اگر از روش Mark and Sweepاستفاده شود ،در کدام محل ها garbage ،متفاوتی نسبت به روش
Countingبدست خواهد آورد eچراe
{)(int main
9 ;node *f = new node
;node *q = p
{)for (int i=0;i<5;i++
;q->next = new node
;q = q->next
}
;node *p = f->next->next
;q->next = p->next
;f = null
–-------> 1
;p = null
–-------> 2
;q = null
–-------> 3
;return 0
}
تعریف تابع زیر مربوط به زبانی است که در آن برای پارامترهای تابع میتوان مقدار پیش فرض ) (Default Valueدر نظر 6
گرفت .این زبان از هر دو مورد Positional Parametersو Keyword Parametersپشتیبانی میکند.
)function Mul(A : Integer; B:Integer := 10 ; C:Integer ; D:Integer := 2
;return Integer
6 با توجه به این تعریف ،به موارد زیر پاسخ دهید.
الف( تمام روش هایی که این تابع را با مقادیر 5برای Aو 30برای Cمیتوان فراخوانی کرد را بنویسید )مقادیر Bو Dنباید به
تابع ارسال شوند تا همان مقادیر پیش فرضشان برای آنها در نظر گرفته شود(4) .(.
ب( تعریف این تابع را برای زبانی که فقط از Positional Parametersپشتیبانی می کند ،باز نویسی کنید(2).
با چه نوع ارسال پارامتر تابعی ) value، result، value-result، referenceو یا ،(nameبرنامه ی زیر منجر به 7
جابجایی مقادیر xو yتعریف شده در mainشده و در نتیجه در خروجی ابتدا 30و سپس 20را نمایش می دهد .تمام ن@@وع
ارسال هایی که جواب درست میدهند را فقط نام ببرید و روشهایی که جواب غلط میدهند را با ذکر دلیل مشخص کنید ک@@ه
برایشان چه اتفاقی صورت می گیرد.
;int x = 0, y = 10
{)void swap(int a, int b
;int t = a
7 a = b
b = t
;return
}
{)(void main
;int x = 20, y = 30
;)swap(x, y
;)print(x, y
;return
}
زمان 135 :دقیقه آزمون پایان ترم طراحی و پیادهسازی زبانهای برنامه نویسی خرداد 1401
نمره شماره دانشجویی: سؤال نام و نام خانوادگی:
َشخصی ادعا کرده است که اگر کد زیر را در هر زبانی پیادهسازی کند ،برنامه خاتمه پذیر نخواهد بود .ادعای ای@@ن ش@@خص را از 8
لحاظ انواع ارسال پارامتر به تابع بررسی کنید.
{)void func(int a,int b
)if (b==0
3 ;return 0
else
;)return func(a,b
}
{)(void main
;))func(func(1,1),func(0,0
}
کد زیر را در نظر بگیرید .اطلعات چندان دقیقی از زبان در اختیار نداریم .بر اساس قوانین scopeمتغیره@@ا و محی@@ط ارج@@اع 9
تابع در زمان ارسال بصورت پارامتر ،این برنامه چه مقادیری را ممکن است در خروجی نمایش دهد eمقادیر ممک@@ن خروج@@ی را
همراه با دلیل ذکر کنید.
x: integer := 0
y: integer := 0
)procedure f(z: integer
9 )print(z+y
)procedure g(p: procedure
y: integer := 10
)p(x
)(procedure h
x: integer := 100
y: integer := 20
)g(f
)(h
موفق باشید -کشت کاران 64