الگوریتمستان

برنامه‌نویسی، طراحی الگوریتم و حل مسئله‌های الگوریتمی

 
در صورت ناخوانا بودن نوشته‌ها، از مرورگر دیگری استفاده کنید.
نوشته‌ها با برچسب برنامه‌نویسی ++C نوشته‌ها با برچسب برنامه‌نویسی ++C - الگوریتمستان الگوریتمستان الگوریتمستان
نوشته‌ها با برچسب «

برنامه‌نویسی ++C

»

زبان برنامه‌نویسی ++C دو کلاس set و unordered_set را برای پیاده‌سازی مفهوم مجموعه (ظرفی با عناصر غیرتکراری) دارد.

کلاس set علاوه بر بررسی تکراری نبودن عناصر، آنها را به صورت مرتب ذخیره می‌کند. پس اگر بخواهیم برای نگه داشتن عناصری از کلاس دلخواه خودمان از set استفاده کنیم، باید حداقل عملگر > را سربارگذاری کرده باشیم تا ظرف set قابلیت تشخیص ترتیب عناصر را داشته باشد. اما گاهی تعریف کوچکتر بودن برای کلاس مقدور نیست یا از لحاظ مفهومی معنی ندارد. در چنین شرایطی می‌توانیم از کلاس unordered_set استفاده کنیم.

ادامه ...

منظور از ظرف یا نگهدارنده (Container) ساختمان داده‌ای‌ست که دسته‌ای از اطلاعات را در خود نگه می‌دارد. آنچه که این ساختمان‌ها را از هم متمایز می‌کند، نوع تخصیص حافظه، نوع دسترسی و کارایی درج و حذف عنصر در آنها است که به برخی از آنها کاربری‌های ویژه می‌دهد.

در ادامه با انواع این نوع ساختمان داده‌ها در زبان برنامه‌نویسی ++C نسخه‌ی C++11 آشنا می‌شویم. با توجه به گسترده بودن این بحث، جزئیات بیشتر هر کلاس را در «پیوندها برای مطالعه‌ی بیشتر» بخوانید.

ادامه ...

فایل سرآیند (هدر فایل) algorithm از جمله فایل‌های سرآیند تعاریف کتابخانه‌ قالب استاندارد (STL) زبان برنامه‌نویسی ++C‌ است که به طور عمده شامل توابعی برای کار با مجموعه‌ای از داده‌ها (آرایه‌ها و لیست‌ها) است. با استفاده از این توابع به راحتی می‌توان با تنها یک خط کد عملیات جستجو، مرتب‌سازی، شمارش و بررسی یک خاصیت در تمامی داده‌های یک بازه‌ی مشخص را انجام داد.

در استفاده از این توابع باید به این نکته توجه داشت که هر کدام از آنها فرآیندهایی داخلی دارند که اگرچه از مرتبه‌ی زمانی بهینه است، اما لزوما قابل چشم‌پوشی نیست. به عبارت دیگر، دلیل استفاده از این توابع، حذف مرتبه‌ی زمانی برخی الگوریتم‌های مورد نیاز در برنامه نیست؛ بلکه تنها کدنویسی آنها را ساده می‌کند. در ادامه تعریف و عملکرد برخی از این توابع آمده است.

ادامه ...

اجتناب از بررسی تساوی در اعداد اعشاری

اعداد اعشاری در محاسبات ریاضی - مانند عمل تقسیم یا محاسبه‌ی توابع مثلثاتی و غیره - ممکن است حاوی مقدار بسیار ناچیزی خطا باشند که عموما ناشی از عملیات گرد کردن و قطع کردن نتایج مراحل میانی محاسبات هستند. در چنین حالتی به کار بردن عملگر تساوی لزوما به نتیجه‌ی درست ختم نمی‌شود. به عنوان مثال:

  

float f

/* f عملیات محاسباتی روی متغیر */

if(f == 0.0){

    /*

ادامه ...

یکی از روش‌های مرتب‌سازی، روش مرتب‌سازی حبابی (Bubble Sort) است که به آن روش تعویض استاندارد (Standard Exchange) نیز می‌گویند. این روش شامل چند مرحله است که در هر مرحله یک عنصر از لیست به طور قطع در محل مناسب خود قرار می‌گیرد.

لیست زیر را در نظر بگیرید که می‌خواهیم به صورت صعودی (از کوچک به بزرگ) مرتب کنیم:

  

4  3  8  1  6  2

  

ادامه ...

توابع دوست کلاس‌ها از‌ جمله موارد بحث برانگیز برنامه‌نویسی شی‌ءگرا به زبان ++C هستند. چرا که یکی از اصول اساسی شیءگرایی، یعنی پنهان‌سازی اطلاعات، را نقض می‌کنند. با این وجود به خاطر کاربردهای متعددی که دارند از حضورشان نمی‌توان چشم‌پوشی کرد.

به زبان ساده، توابع دوست یک کلاس توابعی هستند که عضو کلاس نیستند، اما به تمامی داده‌ها و توابع خصوصی و محافظت شده‌ی آن دسترسی دارند.

یک مثال ساده

  

class myclass {

    friend void print_a(myclass);

ادامه ...

همانطور که می‌دانید، شیوه‌ی معرفی اشیاء کلاس‌های تعریف شده در ++C همانند متغیرهای عادی هستند. به عنوان مثال اگر کلاسی به نام myclass تعریف کرده باشیم، عبارت زیر یک شیء از این کلاس به نام a تعریف می‌کند:

  

myclass a;

  

اما اشیاء کلاس یک تفاوت اساسی با متغیرهای معمولی (مانند int ،float ،char و ...) دارند و آن عدم پشتیبانی از عملگرها است. در واقع عملگر انتساب (=) تنها عملگر قابل استفاده برای اشیاء کلاس است. اشیاء کلاس به صورت پیش‌فرض از عملگرهای دیگر (همانند + ، - ، / ، >> ، & و * و ...) پشتیبانی نمی‌کنند. اگر b ،a‌ و c سه شیء از کلاس myclass باشند، عبارت زیر کامپایل نمی‌شود:

ادامه ...

زبان برنامه‌نویسی C از دو نوع متغیر پشتیبانی می‌کند: متغیرهای معمولی و اشاره‌گرها (متغیرهای حاوی آدرس حافظه). زبان ++C نوع سومی را به این مجموعه اضافه کرده است: متغیرهای مرجع (Reference).

متغیرهای مرجع از روی دو نوع دیگر ساخته می‌شود و به نوعی می‌توان گفت نام مستعار برای متغیر اصلی به حساب می‌آید. برای تعریف متغیر مرجع از عملگر & استفاده می‌کنیم:

  

زبان برنامه‌نویسی ++C از کلاس‌های حافظه‌ی‌ (Storage Classes) مختلفی برای تعریف متغیرها پشتیبانی می‌کند.

  

کلاس حافظه‌ی اتوماتیک (auto)

این کلاس اصلی‌ترین کلاس حافظه‌ی زبان ++C محسوب می‌شود. متغیرهایی که توسط این کلاس تعریف می‌شوند، با خروج از محدوده‌ی تعریف به طور خودکار از بین می‌روند. بنابراین تمامی متغیرهای عادی از این نوع کلاس هستند. یعنی شما برای مشخص کردن کلاس حافظه اتوماتیک نیاز به انجام کار خاصی ندارید. اما برای تاکید بر اتوماتیک بودن کلاس حافظه، می‌توانید از کلمه‌ی کلیدی auto استفاده کنید. به عنوان نمونه، دو عبارت زیر هم ارز هستند:

ادامه ...

آرایه‌های دو بعدی کاربردهای بسیاری از جمله جداول و ماتریس‌ها دارند. اهمیت تعریف آرایه‌های پویای دو بعدی کمتر از آرایه‌های یک بعدی نیست. آرایه‌های پویای دو بعدی یک ویژگی جالب در مقایسه با آرایه‌ی ایستا دارند. شما با تعریف پویای آرایه‌های دو بعدی می‌توانید جداول غیرمستطیلی تشکیل دهید. در واقع وقتی آرایه‌های دو بعدی را به صورت پویا ایجاد می‌کنید، این اختیار را دارید که تعداد ستون‌های هر ردیف را متفاوت انتخاب کنید.

به قطعه کد زیر توجه کنید:

  

int **table;

ادامه ...

الگوریتمستان در تلگرام

   

 

پیوند کوتاه:
»  کتاب Competetive Programming
معرفی کتاب Competitive Programming برای علاقه‌مندان به شرکت در مسابقات برنامه‌نویسی و المپیاد کامپیوتر با قابلیت دانلود نسخه‌ی الکترونیکی
»  sync_with_stdio در زبان ++C
نکته‌ای در مورد کارایی عملیات ورودی و خروجی در زبان برنامه‌نویسی ++C و عملکرد تابع sync_with_stdio
»  نکته‌ای در محاسبه‌ی زمان اجرای کد
در مورد تفاوت توابع clock و time در زبان برنامه‌نویسی ++C برای محاسبه‌ی زمان اجرای برنامه
»  هدر فایل bits/stdc++.h
معرفی هدرفایل bits/stdc++.h برای کاهش زمان آماده شدن کد مسابقات برنامه‌نویسی
»  نکته‌ای از مسأله‌ی Graphical Editor
استفاده از stringstream در حل سوالات مسابفات برنامه‌نویسی با زبان برنامه‌نویسی ++C
»  تابع popen در زبان ++C
روش اجرای برنامه‌ای دیگر داخل کد ++C و استفاده از خروجی آن
»  نکته‌ای در استفاده از map
نکته‌ای در مورد استفاده از ساختمان داده‌ی map با مثالی به زبان برنامه‌نویسی ++C
برچسب‌ها
#الگوریتم‌های تقسیم و غلبه #مسابقه برنامه نویسی #مسابقات برنامه‌نویسی ACM #ویدئوی آموزشی #الگوریتم‌های گراف #الگوریتم‌های عقبگرد #الگوریتم #سوالات UVa Online Judge #حل سوالات Timus Online Judge #ترجمه فارسی سوالات کتاب Programming Challenges #کتاب مسابقات برنامه‌نویسی #جستجوی اول عمق #مسأله‌های برنامه‌نویسی #نمونه سوال مسابقه ACM #نمونه سوال فارسی مسابقات ACM #برنامه‌نویسی ++C #مسابقه برنامه‌نویسی #نکات برنامه‌نویسی #تمرین مسابقه‌ی برنامه‌نویسی ای‌سی‌ام #آمادگی المپیاد کامپیوتر #حل سوالات مسابقات برنامه‌نویسی #ماتریس #صف #نمونه سوال فارسی مسابقه‌ی ACM #وبلاگ #آموزش برنامه‌نویسی ++C #تکنیک‌های طراحی الگوریتم #حل سوالات UVa Online Judge #سوالات برنامه‌نویسی #درخت‌ها #آموزش طراحی الگوریتم #مسابقات برنامه‌نویسی #الگوریتم‌های برنامه‌نویسی پویا #سوالات مسابقات برنامه‌نویسی بیان #الگوریتم‌های مسیریابی #معرفی وب‌سایت #آموزش ساختمان داده‌ها #نمونه سوال فارسی مسابقات برنامه‌نویسی #برنامه‌نویسی #ساختمان داده #الگوریتم دایکسترا #ترجمه‌ی فارسی سوالات ACM #دانلود کتاب #مسئله‌ی کوله‌پشتی #حل سوالات ACM-ICPC #Python #الگوریتم‌های کوتاهترین مسیر #گراف #ترجمه‌ی فارسی سوالات UVa Online Judge #تمرین المپیاد کامپیوتر #نمونه سوالات مسابقه برنامه‌نویسی #تمرین مسابقه برنامه‌نویسی #الگوریتم‌های حریصانه #پیمایش گراف #مسأله‌های الگوریتمی #تمرین طراحی الگوریتم #الگوریتم فلوید-وارشال #جستجوی اول سطح #آمادگی مسابقه ACM #الگوریتم‌های بازگشتی #کتاب الگوریتم #ترجمه‌ی فارسی سوالات برنامه‌نویسی #کتابخانه قالب استاندارد ++C #درخت پوشا #آموزش الگوریتم #مسئله‌های برنامه‌نویسی #الگوریتم‌های مرتب‌سازی #سوالات چالشی برنامه‌نویسی #منبع آموزشی #مسئله‌های الگوریتمی #سوالات مسابقات ACM-ICPC #آمادگی مسابقه برنامه‌نویسی #حل مسئله‌‌ی الگوریتمی #محاسبات ریاضی #کتاب الکترونیکی