GuilanCS | علوم کامپیوتر
1.04K subscribers
1.61K photos
60 videos
225 files
1.01K links
💻انجمن علمی علوم کامپیوتر دانشگاه گیلان

🔶اینستاگرام انجمن:https://instagram.com/csguilan

🔷ارتباط با دبیر انجمن(اسماعیل ذوالفقاری):
@anon7vip


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

💡با توجه به اینکه برنامه به قسمت‌های کوچک‌تر تقسیم بندی می‌گردد، بنابراین اشکال زدایی (debugging) آن ساده‌تر خواهد بود.
💡خوانایی و درک برنامه ساده‌تر می‌گردد.
💡اعمال تغییرات در برنامه ساده‌تر انجام می‌گیرد.
آخرین مزیتی را که می‌توان مورد اشاره قرار داد، داشتن محیط مجتمع برنامه نویسی است که به طور خلاصه به آن IDE گفته می‌شود. مترجم پاسکال قابلیت ترجمه برنامه‌ها را در دو حالت مجتمع و خط فرمان دارا می‌باشد. در حالت اول می‌توان برنامه را درون ویراستار مخصوص پاسکال نوشته و اجرا کرد. این ویراستار دارای امکانات ویرایشی متعددی می‌باشد که موجب ایجاد سرعت و سهولت در نوشتن برنامه می‌گردد. در حالت دوم می‌توان برنامه را با استفاده از هر ویراستاری تهیه نموده سپس عمل ترجمه را از طریق خط فرمان سیستم‌عامل ویندوز انجام داد. پس از ذکر مزایای زبان پاسکال بهتر است به معایب آن اشاره داشته باشیم. نداشتن قابلیت انعطاف، نداشتن قابلیت انتقال و عدم امکان تعریف رکورد با طول متغیر، از جمله معایب این زبان هستند.
💎پایان معرفی زبان برنامه نویسی پاسکال


🌴🌱🌿🍀🍃🌷🌼🌸💐🌳🌲🎄🌵
📝 قسمت دوم آموزش الگوریتم 📝


🌴🌱🌿🍀🍃🌷🌼🌸💐🌳🌲🎄🌵
اجازه بدید یک خلاصه از مباحث جلسه ی قبل رو خدمت شما عرض کنم . در جلسه ی گذشته با یکسری از تعاریف اولیه ی مرتبط با الگوریتم و فلوچارت آشنا شدیم و همچنین ویژگی های الگوریتم رو بیان کردیم . کمی هم درباره ی کارآمدی الگوریتم مطالبی ارائه کردیم .
اما در این جلسه به طور کلی میخوایم درباره ی کارآمدی الگوریتم صحبت کنیم . همونطور که گفته شد ، ملاک و معیار کارایی یک الگوریتم ، پیچیدگی زمانی و پیچیدگی فضاست . ما دراین سری از آموزش ها بیشتر درباره ی پیچیدگی زمانی صحبت میکنیم .
اما اجازه بدید کمی راجع به پیچیدگی فضا صحبت کنیم تا بعد مفصل بریم سراغ پیچیدگی زمانی
شبه کد زیر رو در نظر بگیرید :
float OP1(float a , float b , float c){
return a+b+c*a/a+c+2.0 ;
}
این برنامه یک عبارت خاصی رو محاسبه میکنه و نتیجه رو برمیگردونه. فضای مورد نیاز برای یک چنین برنامه ای شامل دو بخش ثابت و متغیر است . بخش ثابت ، مستقل از بعضی ویژگی های ورودی و خروجی هست و شامل فضای دستور العمل ، فضای لازم برای ذخیره ی کد برنامه ، فضای لازم برای متغیر های ساختاری با اندازه ی ثابت و ثابت ها و غیره هست . بخش متغیر هم شامل فضای لازم برای متغیر های ساختاری و تغییر پذیر برنامه هست که وابسته به نمونه ی موجود در مسئله هستن . همچنین این بخش شامل فضای لازم برای متغیر های مرجع و پشته ی بازگشتی هم هست .
فضای لازم برای هر برنامه ای مثل P رو اگر S(P) فرض کنیم ، میشه به صورت S(P)=c+sp نوشت که توی اون c یک مقدار ثابت هست و sp مشخصات نمونه ی مسئله هست .
برای برنامه ای که بالا گفتیم ، نمونه ی مسئله با حروفی نشون داده شدن (a,b,c). با این فرض که همه ی این مقادیر در یک کلمه از حافظه ذخیره بشن متوجه میشیم فضای مورد نیاز برای تابع درون مسئله ، مستقل از ویژگی های نمونه هست . پس sp برابر صفر هست .
اما بریم سراغ پیچیدگی زمانی .
پیچیدگی زمانی یعنی مقدار زمانی که یک کامپیوتر برای اجرای کامل یک برنامه لازم داره . هر برنامه یکسری مراحلی داره و از دستوراتی تشکیل شده . معمولا برای تشخیص زمان اجرای برنامه هم به مراحل اجرای برنامه توجه می کنند . اما یک مرحله از برنامه رو میشه به عنوان یک قسمت بامعنی از نظر دستوری تعریف کرد که زمان اجرای اون به ویژگی های نمونه بستگی نداره . تعداد مراحلی که به هر کدوم از دستورات برنامه باید نسبت داده بشه ، به ماهیت اون دستور بستگی داره .
حالا برای آشنایی بیشتر میایم تعداد مراحل لازم برای اجرای برخی از دستورات موجود در یک زبان استاندارد ، مثلا ++C ، رو بررسی میکنیم . البته تعداد مراحل ذکر شده برای برخی دستورات به صورت تقریبی هستن و ممکنه توی برنامه های مختلف تغییر کنن ولی اغلب اوقات به همین شکل هستن .
📝تمامی توضیحات در این زبان دارای صفر مرحله هست . یعنی برای توضیحات هیچ مرحله ای درنظر گرفته نمیشه .
----------------
📝 دستور های تعریفی و اعلان هم مرحله ای ندارن ( دارای صفر مرحله هستن .) منظور از دستور های تعریفی ، دستوراتی هستند که متغیر ها، ثابت ها ، توابع یا نوع دسترسی رو مشخص میکنن
----------------
📝 هر عبارت دارای 1 مرحله هست . ( به جز عبارات فراخوانی توابع )
----------------
📝 تعداد مراحل عمل انتساب <a>=<b> برابر با تعداد مراحل <b> هست . که a شامل یک متغیر و b شامل یک عبارت هست . البته اگه aتابعی از ویژگی های نمونه باشه ، اونوقت تعداد مراحل انتساب برابر با مجموع اندازه ی متغیر و تعداد مراحل عبارت هست .
📝دستور شرطی if else هم 1 مرحله داره .
..................................
📝حلقه ی for(a;b;c) هم دارای b+c مرحله هست . (منظور از b و c ، تعداد مراحل اونهاست . )
...................................
📝فراخوانی توابع و دستورات مدیریت حافظه دارای 1 مرحله هستن .
شبه کد زیر رو در نظر بگیرید :
float sum1(float *a , const int n)
1. {
2. float s=0 ;
3. for ( int i=0;i<n;i++)
4. s=s+a[i];
5, return s;
6. }
☝️ این شبه کد ، مجموع عناصر درون یک آرایه ی n عضوی رو برمیگردونه.
خط اول این برنامه ، مرحله ای نداره
خط دوم دارای 1 مرحله هست
خط سوم که یک حلقه ی تکرار هست ، دارای n+1 مرحله هست .
خط چهارم هم n مرحله داره . (اگرچه عمل انتساب هست ولی n بار داره تکرار میشه . )
خط پنجم دارای 1 مرحله هست .
خط ششم هم مرحله ای نداره .