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

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

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

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

»

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

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

ادامه ...

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

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

  

float f

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

if(f == 0.0){

    /*

ادامه ...

توابع دوست کلاس‌ها از‌ جمله موارد بحث برانگیز برنامه‌نویسی شی‌ءگرا به زبان ++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;

ادامه ...

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

پیش از شروع بحث دو مطلب مهم را یادآوری می‌کنم:

1- تک تک بایت‌های حافظه برای خود آدرسی دارند که یک عدد صحیح و مثبت است. این آدرس دقیقا مانند کد پستی عمل می‌کند. یعنی کاملا منحصربفرد بوده و می‌توان از آن برای ارجاع به بایت استفاده کرد.

ادامه ...

یکی از امکانات جالب و مفید زبان ++C قالب‌ها (Templates) هستند که انعطاف زیادی به کدنویسی می‌دهند.

فرض کنید در یک برنامه نیاز به تعویض مقادیر دو متغیر هست. یعنی مثلا می‌خواهیم مقادیر a و b را با هم عوض کنیم. اگر a و b از نوع صحیح باشند، تابع جابجایی می‌تواند به این صورت باشد:

  

void swap(int &a, int &b){

ادامه ...

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

  

type name[number of elements];

  

که در آن type یکی از انواع داده‌های استاندارد ++C، ساختمان و یا کلاس است. number of elements هم تعداد اعضا یا عناصر آرایه را مشخص می‌کند که باید عدد ثابتی باشد. مثلا عبارت زیر یک آرایه‌ی 10 عضوی از اعداد اعشاری به نام arr تعریف می‌کند:

ادامه ...

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

   

 

پیوند کوتاه:
برچسب‌ها
#آمادگی المپیاد کامپیوتر #معرفی وب‌سایت #جستجوی اول عمق #گراف #ساختمان داده #کتاب الکترونیکی #ترجمه‌ی فارسی سوالات UVa Online Judge #منبع آموزشی #الگوریتم‌های گراف #سوالات مسابقات ACM-ICPC #جستجوی اول سطح #سوالات برنامه‌نویسی #دانلود کتاب #الگوریتم‌های بازگشتی #مسئله‌های برنامه‌نویسی #مسابقه برنامه نویسی #سوالات مسابقات برنامه‌نویسی بیان #تمرین طراحی الگوریتم #مسابقات برنامه‌نویسی ACM #الگوریتم #پیمایش گراف #آمادگی مسابقه ACM #الگوریتم‌های مرتب‌سازی #نمونه سوال مسابقه ACM #الگوریتم‌های کوتاهترین مسیر #درخت‌ها #الگوریتم‌های مسیریابی #آموزش الگوریتم #صف #تمرین مسابقه‌ی برنامه‌نویسی ای‌سی‌ام #حل سوالات ACM-ICPC #الگوریتم‌های برنامه‌نویسی پویا #آمادگی مسابقه برنامه‌نویسی #مسئله‌های الگوریتمی #آموزش طراحی الگوریتم #حل سوالات Timus Online Judge #ماتریس #نمونه سوالات مسابقه برنامه‌نویسی #الگوریتم دایکسترا #کتابخانه قالب استاندارد ++C #کتاب الگوریتم #الگوریتم‌های تقسیم و غلبه #مسابقه برنامه‌نویسی #برنامه‌نویسی #حل سوالات مسابقات برنامه‌نویسی #ترجمه‌ی فارسی سوالات ACM #نمونه سوال فارسی مسابقه‌ی ACM #Python #برنامه‌نویسی ++C #الگوریتم فلوید-وارشال #تکنیک‌های طراحی الگوریتم #نمونه سوال فارسی مسابقات ACM #محاسبات ریاضی #حل مسئله‌‌ی الگوریتمی #الگوریتم‌های حریصانه #وبلاگ #مسئله‌ی کوله‌پشتی #ویدئوی آموزشی #آموزش ساختمان داده‌ها #مسأله‌های برنامه‌نویسی #الگوریتم‌های عقبگرد #سوالات UVa Online Judge #کتاب مسابقات برنامه‌نویسی #درخت پوشا #نکات برنامه‌نویسی #تمرین المپیاد کامپیوتر #حل سوالات UVa Online Judge #مسابقات برنامه‌نویسی #ترجمه‌ی فارسی سوالات برنامه‌نویسی #آموزش برنامه‌نویسی ++C #ترجمه فارسی سوالات کتاب Programming Challenges #نمونه سوال فارسی مسابقات برنامه‌نویسی #سوالات چالشی برنامه‌نویسی #تمرین مسابقه برنامه‌نویسی #مسأله‌های الگوریتمی