دانشگاه صنعتی شریف دانشکده مهندسی کامپیوتر مبانی برنامهسازی امید غیبی پروژه دوم :نوشتن کتابخانهی محاسباتی و ساختن یک نرمافزار محاسبهگر گرافیکی طراح پروژه پیمان فخاریان 0 مقدمه توابع محاسباتی ،آماری و ریاضیاتی در اکثر پروژههای مهندسی امروز ،بسیار مورد استفاده قرار میگیرند .متلب 1به عنوانِ ی آماده در آن ،در چنین پروژههایی استفاده میشود .پاشنهی یک ابزار مهندسی قوی ،به دلیلِ وجودِ توابعِ ریاضیات ِ ل2 آشی ِ متلب ،سرعت بسیار کم آن است .در مقابل ،زبان برنامهنویسی Cو C++به دلیل سرعت باالی آن ،میتواند در کارهای ی بسیار بهتری نسبت به متلب داشته باشد .مشکل بزرگ این زبان ،عد ِم وجود کتابخانههای مناسبِ مهندسی ،کارآی ِ ریاضیاتی است .هدف این پروژه ،نوشتن یک کتابخانهی ریاضی-مهندسی است که بتوان آن را به یک محیط کدزنی3 افزود ،از آن استفاده کرد و ازین طریق ،در راه توسعهی علم قدم برداریم و کا ِر سایر مهندسان را آسان کنیم! هدف ن Cیا C++مینویسید که بتوان آن را به راحتی در اختیار دیگر مهندسان شما در این پروژه ،یک کتابخانهی استاندار ِد زبا ِ قرار داد .این کتابخانه ،مجموعهای از تواب عِ ریاضیاتی ،محاسباتی و آماری است .همچنین در این پروژه ،شما توانایی استفاده از دیگر کتابخانهها و کار با رابطهای کاربریِ گرافیکی 4را کسب میکنید .از اهدافِ دیگر این پروژه ،تواناییِ انجامِ یک ی طراحی پروژهی گروهی برای شما و آشنایی با مفاهی ِم گزارشنویسی ،زمانبندی و مدیریت پروژه و آشنایی با روند اصل ِ نرمافزار است. ریز پروژه پروژه شاملِ نوشتن یک کتابخانهی ریاضی ،محاسباتی و آماری است .کتابخانهی شما از چند فایلِ سرآمد 5تشکیل میشود ل جداگانه با فرمت .cیا .cppنوشته میشود. که هر فایل ،شامل چندین تابع 6است .هرکدام از توابعِ شما ،در یک فای ِ فهرستِ این توابع در ادامه آمده است .تمامیِ توابعِ خواسته شده ،باید توسط خود شما نوشته شده باشد و استفاده از ک ِد سایرین قابلِ قبول نیست؛ با این وجود ،میتوانید از توابع نوشته شده در اینترنت کمک بگیرید .بدیهتا استفاده ازین کدها به صورت «بگیر و بنداز» 7قابلِ قبول نیست و باید تسلطِ کاملی روی آنها و الگوریتمشان داشته باشید و در صورتی که در تحویل حضوری از شما خواسته شد ،آنها را بازنویسی کنید؛ بنابراین کدزنی ،تنها از سویِ شخصِ شما قابل قبول است. همچنین شما میتوانید از تمامیِ اطالعات خود از هر آنچه در زبان Cو C++وجود دارد ،استفاده کنید و در این زمینه، محدودیتی نخواهید داشت. 1 MATLAB ی آن ،چشم اسفندیار! یا معادلِ ایران ِ 3 )Integrated Development Environment (IDE 4 )Graphical User Interface (GUI 5 Header file 6 function 7 Copy & Paste 2 1 همچنین میتوانید از هر نرمافزارِ کدزنیِ دلخواهِ خود استفاده کنید؛ با این وجود استفاده از نرمافزار Devعمال محکوم به شکست است(!)؛ زیرا اکثر کتابخانههای گرافیکی بر روی آن نصب نمیشوند .برای استفادهی بهتر از محیط گرافیکی، ن محیط کدزنی استفاده کنید؛ هرچند که هیچ محیطی وجود ندارد که میتوانید از Eclipseو یا Visual Studioبه عنوا ِ ی رابطهای کاربری گرافیکی با آن تطبیق داشته باشند. تمام ِ برای نوشتن توابع ،به استفاده از کتابخانههای دیگری نیاز پیدا میکنید .برای نوشتنِ توابعِ محاسباتیِ خود ،نمیتوانید از توابعِ آمادهی هیچ کتابخانهی دیگری 8استفاده کنید ولی برای رسم نمودارهای خود و یا استفاده از توابعِ ساده ریاضیاتی9 و موارد مشابه ،میتوانید از کتابخانههای دیگر استفاده کنید. در نهایت ،با استفاده از کتابخانهای که نوشتهاید ،یک نرمافزا ِر محاسبهگر میسازید! این محاسبهگر باید به صورت گرافیکی باشد .برای این کار میتوانید از کتابخانههای رایگان استفاده کنید. پروژه در سه فاز اجرا میشود .در فاز نخست ،باید صورت پروژه را مورد تحلیلِ اولیه قرار دهید ،درک کلی از صورت پروژه پیدا کنید ،سواالتی که برایتان پیش میآید و پاسخهای احتمالی آنها را بنویسید و ورودیها و خروجیهای خود را آماده کنید .همچنین در این فاز باید تمامی سندهای الزم را ایجاد کنید .فهرست این موارد در ادامه آمده است. در فاز دوم ،اسکلتِ توابع نوشته میشود .منظور از اسکلت توابع ،نام و ورودیها و خروجیهای توابع و ارتباط بین آنهاست؛ ی سرآمدها ،توابع و واحد گرافیکی در این بخش صورت میگیرد. بنابراین تحلیل درست صورت پروژه و طراحیِ کل ِ ی توابعِ این فاز ،باید بر اساسِ فاز سوم ،پیادهسازیِ پروژه ،نوشتن کتابخانهها و ایجادِ واحد محاسبهگرِ گرافیکی است .تمام ِ طراحیِ فاز قبلی باشد. فهرست توابع -1توابع ریاضیاتی توابع مثلثاتی و معکوس آن (به عنوان مثال sin(x) ،و ))arcsine(x توابع نمایی و لگاریتمی توابع چندجملهای با توانهای گویا محاسبه ب.م.م ،ک.م.م و محاسبات مبنایی اعداد (مبنای 16نیز پیادهسازی شود) محاسبه اعداد اول کوچکتر از مقداری معین تابع تولید عوامل اولِ یک عدد به عنوان مثال gsl به عنوان مثال math.h 2 8 9 توابع باال و ترکیبِ آنها میتواند به عنوان توابع ریاضیاتی مطرح شود .محاسبه مقدار این توابع و بهکارگیری آنها در توابع بعدی (محا سباتی و آماری) بر عهده شماست .به عنوان نمونه ،تابعی مانند 1 )))ln(𝑠𝑖𝑛(𝑐𝑜𝑠(√𝑥+𝑥^2 توسط کتابخانههای شما پشتیبانی میشود! برای این کار میتوانید از cmathکمک بگیرید. -2توابع محاسباتی - 10 انتگرال 11معین در روش روش سیمپسون13 - مشتق14 - یافتن ریشهها روش ذوزنقه12 نیوتن-رافسون15 روش تقسیم به - - درونیابی 17و نصف16 برونیابی18 روش نیوتون19 روش الگرانژ20 برازش منحنی 21به توابع معروف فهرستی ازین توابع در فایلهای پیوست وجود دارد .از پیادهسازی توابع دیگر نیز استقبال میشود. - روشهای کنترل نقطهای Spline ،Bezierو B-Spline این سه مورد در طراحیِ هواپیما بیشترین کاربرد را دارد! - محاسبه جمع ،ضرب و عملیاتهای ریاضی دیگر روی یک یا چند ماتریس - یافتن دترمینان ماتریس 10 Numerical methods Integration 12 Trapezoidal method 13 Simpson 1/3 or 3/8 method 14 Differentiation 15 Newton-Raphson method 16 Bisection method 17 Interpolation 18 Extrapolation 19 Newton Backward/Forward 20 Lagrange 21 Curve fitting 11 3 - حل چند معادله ،چند مجهول خطی روش کرامر22 روش گاوس23 - حل چند معادله ،چند مجهول غیر خطی - محاسبات برداری (ضرب داخلی ،خارجی و )... - محاسبات حجم nبعدی برای این مورد ،میتوانید به کتاب ریاضی 2مراجعه کنید! - یافتن معادلهی مشخصه ،بردار ویژه و مقادیر ویژه کلیه محاسبات باید با دقتِ دلخواهِ کاربر (حداکثر در یک متغیر )doubleانجام شود .به عنوان مثال ،چنانچه بخواهیم )) log(sin(xرا با دقت دو رقم اعشار انجام دهیم ،باید ) sin(xرا با دو رقم اعشار دقت انجام دهیم و سپس خروجی ِ با دقت دو رقم اعشا ِر آن را به ) log(yبدهیم تا یک خروجی با دقت دو رقم اعشار تولید کند. برای هرکدام از موارد باال ،در صورت نیاز منحنی مربوط به آن را رسم کنید .برای رسم منحنی ،نمودار و هیستوگرام میتوانید از کتابخانههایی مانن ِد wxmathplot ،plplot ،gnuplotو دیگر کتابخانههای مشابه استفاده کنید. -3توابع آماری و احتمالی - تولید اعداد تصادفی در بازههای مختلف - توزیع برنولی24 - توزیع نرمال25 - محاسبات میانگین ،واریانس ،مُد و توابعِ احتمالی و آماری مشابه مشخصا یکی از اهدافِ توابع آماری ،تولید نمونههای تصادفی 26از توزیعها و تعدادِ مختلف ،رسم نمودار و تحلیل آنهاست؛ بنابراین رسمِ نمودارهای مختلف برای تمامی این توزیعها برعهده شماست .برای رسم نمودار میتوانید از کتابخانههای آماده استفاده کنید که تعدادی از آنها در باال نام برده شد. 22 Cramer Gaussian Elimination 24 Bernoulli distribution 25 Normal distribution 26 Random 23 4 نرمافزار محاسبهگر حال با استفاده از کتابخانهای که ساختهاید ،یک نرمافزار محاسبهگر مینویسید .در عمل ،نرمافزار محاسبهگ ِر شما شبی ِه یک ماشین حسابِ پیشرفته خواهد شد! برای این نرمافزار ،وجو ِد یک محیط گرافیکی الزم است که برای ایجاد آن ،میتوانید از کتابخانههایی مانندِ wxwidgets ،GTKmm ،GTK ،QTو دیگر کتابخانههای مشابه استفاده کنید .نمونهی یک محیط گرافیکی (البته در زبان متلب!) در شکل زیر آمده است. با توجه به اینکه آشنایی با کتابخانههای گرافیکی ،نصب آنها و یادگیری طرز کار آنها فرآیندی نسبتا پیچیده است(!)، بهتر است از اکنون به دنبال یادگیری آن باشید. فاز اول فاز اول ،تشکیل تیم پروژه و آشنایی با صورت پروژه و درک خواستههای آن است .مواردی که در این فاز باید اجرا کنید، به شرح زیر است. 5 -1تشکیل تیم پروژه ی دیگر وجود ندارد .بهتر است که در تیم پروژه ،گروههای سه نفره هستند و امکان وجودِ گروههای با تعداد اعضا ِ انتخابِ اعضای تیم و انتخاب سرگروه دقت کنید! امکان تعویض گروه پس از تشکیل تیم پروژه وجود ندارد. -2نوشتن یک گزارش درباره تیم پروژه ،هدفِ تیم و صورت پروژه ،سواالت پیشآمده و پاسخهای آنها ،درک صورت پروژه و رفع ابهامات ،انتخاب محیطهای کدزنی و گرافیکی و موارد مشابه .همچنین در این فاز ،تقسیمبندی وظایف هر عضو گروه باید مشخص شود. این گزارش به عنوان قرارداد بینِ کارفرما (ما!) و شما است! تعداد صفحات آن بین 5-3صفحه باشد و نکات نگارشی و گزارشنویسی در آن رعایت شده باشد. ک آن با ن یک Spread sheetدر گوگل درایو از سوی سرگروه ،استفاده از آن به عنوان تقویمِ گروه و اشترا ِ -3ساخت ِ اعضای گروه و جیمیل peyman.f.peyman نام فایل خود را مجموعهی نامِ خانوادگیِ اعضای گروه بگذارید (به عنوان مثال :خاتمی -احمدینژاد -روحانی). ی اعضای گروه و اشتراک آن با جیمیل peyman.f.peyman -4ساختن یک سند 27در گوگل درایو از سوی تمام ِ در این سند ،در صورت نیاز گزارشهای خود را مینویسید .نام این سند را شماره دانشجویی خود بگذارید. -5تشکیل یک حساب 28کاربری در codeanywhereاز سوی تمامیِ اعضای گروه و اشتراکِ آن با دیگر اعضا و جیمیل maloosjaan ش آن را در تقویم گوگل درایو کدهایی که به مرور مینویسید ،در این سایت قرار می دهید و عالوه بر آن ،گزار ِ (شماره )3ثبت میکنید. ی پنج مورد باال تا ساعت 23:59یازدهم خرداد باید صورت گرفته باشد. ی فاز اول ،یازده ِم خرداد است و تمام ِ مهلت خروج ِ گزارش خود را در قالبِ یک فایلِ PDFدر جاج ثبت کنید .نیازی به ثبت گزارش از سویِ تمامیِ اعضای گروه نیست؛ کافی است که یکی از اعضای تیم این کار را انجام داده باشد. فاز دوم در این فاز ،طراحی سرآمدها ،توابع و نوشتن اسکلتِ آنها انجام میشود .پیادهسازی شما در فاز بعدی باید بر اساسِ طراحی ل نامِ توابع ،ورودیها و خروجیهای آنها ،کامنتگذاری آنها و موارد مشابه است .نمونهای از شما باشد .اسکلت توابع شام ِ اسکلت یک کتابخانه پیوست شده است. مهلتِ خروجیِ فاز دوم ،نهم تیر است .تمامیِ فایلهای خود را (سرآمدها و توابع) در یک فایل زیپ قرار داده و تا ساعت 23:59نهم تیر در جاج ثبت کنید .کا فی است که این کار توسط یکی از اعضای گروه انجام شود .همچنین در صورتی که Doc Account 6 27 28 در این فاز می خواهید قراردادِ خود را تغییر دهید (همان گزارشِ فاز اول!) ،گزارش خود را بازنویسی کنید و همراه با سای ِر فایلها در جاج ثبت کنید. فاز سوم فاز سوم ،پیادهسازیِ کامل پروژه بر اساسِ طراحیِ فاز قبلی است .در انتهای این فاز ،کتابخانه و نرمافزار گرافیکی شما باید آماده باشد .تمامیِ فایل های خود را در قالبِ یک فایل زیپ آماده کنید و تا تاریخ معین در جاج ثبت کنید .تحویل حضوری احتماال در تاریخ 17-16تیرماه خواهد بود و قبل از تحویل حضوری ،باید فایل خود را در جاج ثبت کرده باشید .همچنین در این فاز ،یک گزارش نهایی سه صفحهای از مشکالتِ خود در طول اجرای پروژه بنویسید. سخن آخر پروژهی طرح شده ،به حجم وسیعی از جستوجو نیاز دارد! برای این کار میتوانید از گوگل استفاده کنید! احتماال با بعضی از الگوریتمهای گفته شده تاکنون روبرو نشدهاید .برای آشنایی با آنها میتوانید از اسالیدها و کتاب پیوست شده و همچنین گوگل استفاده کنید .همچنین در کار با کتابخانه های دیگر و مخصوصا کار با محیط گرافیکی و نصب آن ،با مشکالت زیادی روبرو میشوید .تمامیِ این مراحل به عهده شماست! می توانید از دانشجویان دانشکده کامپیوتر کمک بگیرید؛ هرچند که بهترین راه ،جستوجو در اینترنت است .در طراحی کتابخانهی خود ،به هیچ عنوان از گوگل کمک نگیرید! طراحی نرم افزار ،بخشی است که کامال باید بر خودتان متکی باشید و آن را بدون کمکِ بیرونی انجام دهید؛ هرچند که در یافتن الگوریتمها ،کدها و ...میتوانید از اینترنت کمک بگیرید! تمامی تاریخهای تحویل فازها به صورت نهایی 29است و با بسته شدن جاج ،امکان بارگذاری با تاخیرِ آن وجود ندارد. گزارشنویسی در فایلهای گوگل درایو codeanywhere ،و ثبت در تقویم روزانه باید انجام شود .تمامیِ این موارد با یکدیگر تطبیق داده میشود؛ بنابراین فکر کنید که با یک پروژه ی واقعی روبرو هستید و ما به عنوان کارفرما و مدیرِ کل پروژه دائما، کار شما را بررسی میکنیم. سواالت خود را در گروه درس مطرح کنید. موفق باشید Hard deadline 7 29
© Copyright 2026 Paperzz