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

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

 
در صورت ناخوانا بودن نوشته‌ها، از مرورگر دیگری استفاده کنید.
نوشته‌ها با برچسب آموزش برنامه‌نویسی ++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 تعریف می‌کند:

ادامه ...

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

   

 

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