اصول کامپیوتر 2

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

رشته علوم کامپیوتر

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

osoul2_fall85@yahoo.com

 

نمرات نهایی

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

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

 

تمرین‌ها

حداکثر تا روز 10 بهمن 85

ترجیحا از طریق email درس (osoul2_fall85@yahoo.com) و یا بر روی برگه، CD و یا دیسکت

تابعی به نام POT بنویسید که یک عدد صحیح را دریافت کند و مشخص کند که آیا این عدد توانی از 2 است یا خیر.

1

برنامه‌ای بنویسید که یک عدد صحیح را از کاربر دریافت کرده و آن را به عامل‌های اول تجزیه كند.

2

تابعی بنویسید كه مقدار (cos (x را تا سه رقم اعشار حساب كند. تعریف تابع اینگونه است:

double cos (double x);

توجه کنید که مقدار (cos (x را باید از بسط آن از فرمول زیر محاسبه کنید:

cos (x) = 1 - (x^2)/2! + (x^4)/4! - (x^6)/6! + ...

3

در برنامه‌ای آرایه‌ای 20 عضوی از اعداد صحیح در نظر بگیرید.
الف) تابعی بنویسید كه این آرایه را با اعداد تصادفی در بازه 10 تا 99 مقداردهی كند. تابع را به گونه‌ای بنویسید كه اعداد تصادفی تكراری نباشند.
ب) تابعی بنویسید كه الگوریتم Selection Sort را برای مرتب‌سازی این آرایه پیاده‌سازی كند. این الگوریتم به شرح زیر است:
     - كوچكتری عنصر آرایه را بیابید و آنرا با مكان نخست جابجا كنید.
     - دومین عنصر كوچك را بیابید و آنرا با مكان دوم جابجا كنید.
     - این شیوه را تا آخر ادامه دهید.

نکته: برای ایجاد اعداد تصادفی می‌توانید از تابع ()rand در فایل سرآمد stdlib.h استفاده کنید.

4

برای یك ماتریس m x n:

الف) تابعی بنویسید كه ماتریس را با درایه‌هایی از نوع int به صورت داینامیك ایجاد كند.

int** new_matrix (int m, int n);

ب ) تابعی بنویسید كه درایه‌های ماتریس را با اعداد تصادفی در بازه 100 تا 1000 مقداردهی كند.

void fill_random (int **p, int m, int n);

پ ) تابعی بنویسید كه سطری را كه مجموع اعضای آن از همه بیشتر است پیدا كند.

int max_row (int **p, int m, int n);

ت ) (اختیاری ـ نمره اضافه) تابعی بنویسید كه اعضای ماتریس را به اینصورت مرتب كند: هرستون به طور جداگانه مرتب باشد و نیز ماتریس در سطر اول صعودی باشد.

int sort_matrix (int **p, int m, int n);

5

6. دو ماتریس A (4 x 5)i و B (5 x 4)i را در نظر بگیرید و توابع زیر را بنویسید.
الف ) تابعی بنویسید كه ماتریس A را در B ضرب كند.
ب ) تابعی بنویسید كه سطر n ام ماتریس A را با ستون m ام ماتریس B عوض كند.

6

بزرگترین مقسوم‌علیه مشترك دو عدد به این صورت تعریف میشود كه بزرگترین عدد صحیحی كه هر دو عدد x و y بر آن قابل قسمت باشند. برنامه پیداكردن بزرگترین مقسوم‌علیه مشترک دو عدد را به دو شیوه معمولی و بازگشتی بنویسید.

7

به کمک ساختار struct یک درخت دودویی جستجو با اعداد به ترتیب 13، 8، 20، 10، 24، 9، 11 و 15 ایجاد کنید. هر گره در درخت دودویی جستجو، یک مقدار دارد و همچنین به دو گره دیگر به عنوان دو فرزند چپ و راست خود اشاره می‌کند. فرزند سمت چپ یک گره دارای مقداری کمتر و فرزند سمت راست آن دارای مقداری بیشتر از مقدار گره است. فرض کنید مقدار هیچ دو گره‌ای یکسان نیست. دقت کنید درختی که در نهایت ساخته می‌شود، باید به این شکل باشد:

8

(اختیاری ـ نمره اضافه) ساختار یک درخت دودویی جستجو را با استفاده از یک کلاس پیاده‌سازی کنید. علاوه بر متغیرهای مورد نیاز، توابع زیر را نیز تعریف و پیاده‌سازی کنید:
الف) توابع سازنده (Constructor) و مخرب (Destructor)
ب) تابعی به‌نام insert که یک عدد را به عنوان ورودی می‌گیرد و در صورت نبودن آن در درخت، آن را در مکان مناسب اضافه می‌کند.
ج) تابعی به نام find که یک عدد را به عنوان ورودی می‌گیرد و در صورت وجود آن در درخت مقدار 1 و در غیراینصورت مقدار 0 برمی‌گرداند.
د) تابعی به نام depth که عمق درخت یعنی فاصله ریشه درخت تا دورترین فرزند آن را برمی‌گرداند.
ه) تابعی به نام sort که مجموعه مرتب‌شده مقادیر درخت را در یک آرایه بازمی‌گرداند.

9