مبانی کامپیوتر و برنامه‌سازی

دانشگاه قم ـ دانشکده علوم پایه

رشته ریاضی کاربردی

نیمسال اول سال تحصیلی 85 ـ 86

 

نمرات نهایی

نمرات نهایی (PDF)

ریز نمرات تمرینها (PDF)

 

تمرین‌ها

روز امتحان پایان‌ترم، 11 بهمن 85

بر روی برگه (ترجیحا)، یا  CD و یا دیسکت

برنامه‌ای بنویسید که یک عدد Integer را از کاربر دریافت کرده و عکس آن را در خروجی نمایش دهد. (مثلا با گرفتن عدد 23147 عدد 74132 را نمایش دهد.)

1

برنامه‌ای بنویسید که مختصات دو نقطه از یک خط را دریافت کرده و معادله خط را به‌صورت y = ax + b نمایش دهد.

2

برنامه‌ای بنویسید که عدد صحیح N را از کاربر دریافت کرده و دنباله 0 تا N را به شکل زیر نمایش دهد:

0  ,1  ,2  ,3  ,4  ,5  ,6  ,7  ,8  ,9

19 ,18 ,17 ,16 ,15 ,14 ,13 ,12 ,11 ,10

20 ,21 ,22 ,23 ,24 ,25 ... N

3

یک function به نام Top بنویسید که يک عدد حقيقي را دريافت کند و به کمک عملیات ریاضی، سقف آن را برگرداند (سقف يک عدد حقيقي، کوچکترين عدد صحيح بزرگتر از آن عدد است).

4

تابعي به نام Digits بنویسید که يک عدد صحيح را دريافت کرده و تعداد رقم‌هاي آن را برگرداند.

5

آرایه‌ای دو بعدی تعریف کنید که محدوده اندیس‌های آن از طریق 4 ثابت به نام‌های Min1 و Max1 و Min2 و Max2 تعیین می‌شود. سپس مقدار هر خانه از آرایه را برابر ضرب دو اندیس آن قرار دهید و جدول ضرب حاصل را به صورتی شکیل نمایش دهید.

6

(اختیاری ـ نمره اضافه) تابعي به نام PowerOfTwo بنویسید که يک عدد صحيح را دريافت کند و مشخص کند که آيا اين عدد تواني از 2 است يا خير.

7

(اختیاری ـ نمره اضافه) برنامه‌ای بنویسید که یک عدد Integer را از کاربر دریافت کرده و آن را به عامل‌هاي اول تجزيه كند.

8

 

پروژه پایان‌ترم

روز امتحان پایان‌ترم، 11 بهمن 85

بر روی CD (ترجیحا) و یا دیسکت

برنامه‌ای بنویسید که امکان بازی XO را در یک تخته 3x3 برای دو کاربر فراهم کند و برنده را معرفی کند. برنامه باید هر بار تخته را با مهره‌های X و O و مکان‌های خالی را نیز با اعداد بین 1 تا 9 نمایش دهد و مشخص کند نوبت کدام بازیکن است. هر بازیکن در نوبت خود یک عدد از مکان‌های خالی را وارد می‌کند و برنامه باید شکل جدید تخته و موقعیت بازی را دوباره بازسازی کند.

(نوذری، موسی‌زاده)(احمدپور، تقی‌خانی)

1

برنامه‌ای بنویسید که امکان بازی XO را در یک تخته 3x3 بین کامپیوتر و یک کاربر فراهم کند و برنده را معرفی کند. برنامه باید ابتدا مشخص کند چه کسی بازی را آغاز می‌کند و هر بار تخته را با مهره‌های X و O و مکان‌های خالی را نیز با اعداد بین 1 تا 9 نمایش دهد. بازیکن در نوبت خود یک عدد از مکان‌های خالی را وارد می‌کند و برنامه باید شکل جدید تخته و موقعیت بازی را دوباره بازسازی کند.

ـــ

2

معمولا بين ساكنين يك اتاق دانشجویی مرسوم است كه هرگاه خريدي براي اتاق انجام شد (مثلا خريد ميوه)، يكي از دانشجويان آن را می‌پردازد و در انتهاي هر ماه يا هر ترم، مجموع هزينه‌هاي اتاق محاسبه و به نسبت مساوي بین افراد تقسيم می‌شود. مثلا فرض كنيد در يك اتاق چهار دانشجو به نام‌هاي علي، سلمان، محمد و اميد ساكن هستند. ليست مخارج ‌چند روز آنها به اين صورت است (پرداخت‌كننده هزينه ــ مبلغ هزينه به تومان): (علي ــ 1800)، (محمد ــ 3000)، (اميد ــ 2200)، (اميد ــ 300)، (علي ــ 1000)، (سلمان ــ 700)
حال اگر مجموع هزينه‌هاي اتاق را محاسبه كنيم، برابر 9000 تومان و سهم هر يك از اين چهار نفر 2250 تومان خواهد بود. حال بر اساس جدول قبل، مبلغ پولي كه هر يك از دانشجويان تاكنون پرداخته است را به دست مي‌آوريم و اختلاف آن با 2250 تومان را به عنوان بدهي يا طلبكاري وي از ديگران منظور مي كنيم (نام دانشجو ــ مجموع هزينه ــ بدهكار/ طلبكار ــ مقدار بدهي/ طلب): (علي ــ 2800 ــ طلبكار ــ 550)، (سلمان ــ 700 ــ بدهكار ــ 1550)، (محمد ــ 3000 ــ طلبكار ــ 750)، (اميد ــ 2500 ــ طلبكار ــ 250)

برنامه‌ای بنویسید که ابتدا تعداد دانشجويان ساكن اتاق (حداكثر ده نفر!) را دريافت كند و سپس اسم تك‌تك اين دانشجويان را از كاربر بخواهد (اسم هيچ دو دانشجويي نباید يكسان باشد). پس از انجام اين عمل، برنامه در انتظار فرمان باقي مي‌ماند. هميشه باید چک کرد که كاربر نام‌ها و مقادير درست به برنامه بدهد. كاربر مي تواند دو نوع فرمان به برنامه بدهد:
1- فرمان N به معني هزينه جديد: پس از دادن اين فرمان برنامه ابتدا از كاربر نام فردي كه هزينه بر عهده وي بوده است و سپس مقدار هزينه به تومان دريافت مي‌شود.
2- فرمان C به معناي محاسبه: پس از دريافت اين فرمان، برنامه ابتدا مجموع هزينه اتاق و سهم هر فرد از هزينه را نمايش داده و سپس جدولي را نمايش مي دهد كه در سطرهاي آن نام هر دانشجو، مجموع هزينه‌هاي او، وضعيت بدهكاري يا طلبكاري و مبلغ بدهكاري يا طلبكاري وي به ديگران را نمايش مي دهد. پس از اجراي اين فرمان برنامه خاتمه مي يابد.

راهنمايي: براي نوشتن اين برنامه ابتدا يك ركورد تعريف كنيد كه اطلاعات مربوط به هر دانشجو (نام و مجموع هزينه‌هاي وي) در آن ذخيره شود. يك آرايه از نوع اين ركورد براي ذخيره‌سازي ليست دانشجويان و همچنين يك متغير براي نگهداري جمع كل هزينه‌هاي انجام شده در نظر بگيريد.

(ع.ولی، ز.ولی)

3

برنامه‌اي بنويسيد که در يک صفحه شطرنج که در آن فقط مهره‌هاي وزير قرار دارند، ابتدا از کاربر بخواهد که تعداد مهره‌ها (حداکثر 12 مهره) و موقعیت هر مهره (سطر و ستون) را وارد کند. سپس برنامه باید مشخص کند که کدام زوج از وزيرهاي اين صفحه يکديگر را تهديد مي‌کنند. يک زوج وزير همديگر را تهديد مي‌کنند اگر هم‌سطر، هم‌ستون و يا هم‌قطر باشند. به عنوان مثال اگر چینش مهره‌ها به صورت زير باشد:

1 . . 2 . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . 3 . .
. . . 4 . . 5 .
. . . . 6 . . .

در آن صورت هفت زوج وزير زير يکديگر را تهديد مي‌کنند:
(1,2) ـ (1,3) ـ (1,5) ـ (2,4) ـ (3,5) ـ (4,5) ـ (4,6)

(حسینی رکن‌آبادی، سالارکیا، عروجلو)

4

برنامه‌اي بنويسيد كه با دریافت عدد n (حداکثر 100)، به تعداد n سه‌تايي c، x و y دريافت كند كه مقدار اول يك كاراكتر و دو مقدار بعدی مختصات در صفحه نمايش است. سپس همه كاراكترهاي داده شده را در مختصات داده شده براي هر كاراكتر به نمايش در آورد.

راهنمايي: براي نوشتن اين برنامه ابتدا يك ركورد به نام CharPoint تعريف كنيد و سپس يك آرايه به نام list از نوع CharPoint كه در واقع ليست نقاط و مختصات آنها را تشكيل مي‌دهد.

(صالحی، صانعی، حسینی میرک‌آبادی)

5

برنامه‌اي بنويسيد كه با گرفتن يك عبارت رياضي، نتيجه محاسبه آن را چاپ نمايد. یک عبارت ریاضی مجموعه‌اي از اعداد اعشاري مثبت يا منفي، عملگرهاي +، -، ×، /، پرانتز باز و بسته و توابع مثلثاتي شامل sin، cos، و tan مي‌باشد. در صورتي كه عبارت قابل محاسبه نيست، پيغام مناسب داده شود. اولویت‌های ریاضی نیز باید رعایت شوند (اول پرانتز، بعد علامت منفی، بعد ضرب و تقسیم، بعد جمع و تفریق). مثالهایی از عباراتی که برنامه باید بتواند حساب کند:

sin (3.5 + 2.54 / 12)
cos (3 * sin (2 + 5 * 7) – 1) + 6
-4.14 * (2.17 + 6 – 5.73) / 8.5

(عیسی‌نیا، قربان‌نیا، میرزاامینی، زمانی)

6

برنامه‌اي بنويسيد كه امکان بازی فکربکر را برای کاربر فراهم کند، به این ترتیب که ابتدا کامپیوتر یک ترکیب 6 تایی غیرتکراری از بین 10 رنگ آبی، سبز، زرد، قرمز، نارنجی، بنفش، طوسی، نقره‌ای، قهوه‌ای و طلایی را انتخاب می‌کند و به کاربر اجازه می‌دهد که ترکیب را حدس بزند و هر بار کامپیوتر به ازای هر رنگ درست ولی در غیر جایگاه، یک مهره سفید و به ازای هر رنگ درست و در جایگاه، یک مهره سیاه نمایش می‌دهد. کاربر حداکثر 16 بار فرصت حدس‌زدن دارد و الا کامپیوتر پیروز می‌شود.

(چهرقانی، جورابیان)

7

برنامه‌اي بنويسيد كه امکان بازی فکربکر را برای کامپیوتر فراهم کند، به این ترتیب که ابتدا کاربر یک ترکیب 4 تایی غیرتکراری از بین 6 رنگ آبی، سبز، زرد، قرمز، نارنجی و بنفش را انتخاب می‌کند و سپس کامپیوتر ترکیب را حدس می‌زند و هر بار کاربر به ازای هر رنگ درست ولی در غیر جایگاه، یک مهره سفید و به ازای هر رنگ درست و در جایگاه، یک مهره سیاه اعلام می‌کند. کامپیوتر حداکثر 10 بار فرصت حدس‌زدن دارد و الا کاربر پیروز می‌شود.

(فرح‌زاد، آقامیری، ملایی، عرب بافرانی)

8

دوست شما تعدادي نقطه روي محور حقيقي x ها مي‌گذارد. شما بايد کمترين تعداد پاره‌خط به طول 1 روي محور رسم کنيد طوري که هر نقطه دوست شما روي حداقل يکي از اين پاره‌خط‌ها قرار گيرد. مثلا فرض کنيد دوست شما 10 نقطه به مختصات زير را روی محور حقيقي x ها مشخص کرده است:
3.25،   2.5،   3.0،   5.1،   2.77،   6.0،   5.3،   8.0،   2.56،   8.1
کافي است شما سه پاره خط به طول 1 با بازه‌هاي زير رسم کنيد تا همه نقاط درون اين بازه‌ها قرار بگيرند:
[2.5  تا  3.5]   [5.1  تا  6.1]   [8.0  تا  9.0]
واضح است اين کار را با تعداد کمتري پاره‌خط نمي‌توان انجام داد. ابتدا يک راه‌حل خوب و يک الگوريتم دقيق و مشخص براي مسأله پیدا کنید و سپس بر اساس الگوريتم خود برنامه‌اي بنويسيد که با دريافت تعداد و سپس مختصات نقاط روی محور حقيقي x ها، بازه‌هاي يافته‌شده را به صورت بالا نمايش دهد. فرض کنيد حداکثر 100 نقطه داده مي‌شود.

(اختردانش، اسلامی‌نیا، مقدم‌نژاد)

9

مرتب‌سازی (Sorting) مجموعه‌ای از اعداد را به سه روش Bubble Sort، Heap Sort و Insertion Sort به طور کامل توضیح دهید و برای هر روش یک برنامه پاسکال بنویسید که 10 عدد زیر را مرتب کند:
210, 74, 32, 1, 1020, 898, 472, 200, 11, 54

(کهریزی، ارباب‌صادفی)

10

مرتب‌سازی (Sorting) مجموعه‌ای از اعداد را به دو روش Merge Sort و Shell Sort به طور کامل توضیح دهید و برای هر روش یک برنامه پاسکال بنویسید که 10 عدد زیر را مرتب کند:
210, 74, 32, 1, 1020, 898, 472, 200, 11, 54

(ترابی، قاسمی)

11

مرتب‌سازی (Sorting) مجموعه‌ای از اعداد را به دو روش Selection Sort و Shaker Sort به طور کامل توضیح دهید و برای هر روش یک برنامه پاسکال بنویسید که 10 عدد زیر را مرتب کند:
210, 74, 32, 1, 1020, 898, 472, 200, 11, 54

(حیدری، علوی)

12

مرتب‌سازی (Sorting) مجموعه‌ای از اعداد را به روش Quick Sort به طور کامل توضیح دهید و برای این روش یک برنامه پاسکال بنویسید که 10 عدد زیر را مرتب کند:
210, 74, 32, 1, 1020, 898, 472, 200, 11, 54

(شعبانی)

13

پشته و صف و کاربرد آنها را توضیح دهید و یک برنامه پاسکال بنویسید که یک پشته و یک صف هر کدام به ظرفیت 20 خانه ایجاد کند و کارکرد آنها را نشان دهد.

(سبحانی، هاشمیان)

14

لیست پروژه‌ها  (PDF)