close
دانلود فیلم
سی پلاس پلاس
دانلود فیلم های برنامه نویسی پیشرفته دانشگاه تهران - رامتین خسروی

در این درس فنونی مورد بررسی قرار می‌گیرند که در نوشتن برنامه‌های با کیفیت مؤثرند. محور اصلی این فنون برنامه‌نویسی شیءگرا خواهد بود که در قابلیت نگهداری برنامه‌ها و استفاده مجدد از اجزای آنها نقش کلیدی دارد. علاوه بر این، درستی کارکرد، سرعت اجرا و استفاده بهینه از حافظه عوامل کیفی دیگری هستند که مورد توجه این درس هستند. زبان برنامه‌نویسی مورد استفاده سی‌پلاس‌پلاس است اما سعی می‌شود تا حد امکان مفاهیم مطرح شده مستقل از زبان و در سطحی بالاتر مورد بحث قرار بگیرند. پیش‌نیاز این درس دانستن مبانی کامپیوتر و برنامه‌نویسی به زبان سی (شامل مفاهیم پایه، توابع، ساختارها و اشاره‌گرها) می‌باشد. برنامه‌های مطرح‌شده در کلاس از طریق سایت یادداشت‌های درس به نشانی ramtung.ir/apnotes/html قابل دسترسی هستند.


رامتین خسروی تحصیل خود را در مقاطع کارشناسی، کارشناسی ارشد و دکتری در رشته مهندسی نرم‌افزار در دانشگاه صنعتی شریف به انجام رساند و ضمن فعالیتی حدود ۱۵ ساله در صنعت نرم‌افزار به عنوان برنامه‌نویس، طراح و معمار نرم‌افزار، از سال ۱۳۸۶ به عضویت هیئت علمی دانشکده مهندسی برق و کامپیوتر در دانشکده فنی دانشگاه تهران درآمد. او از سال ۱۳۷۵ تدریس برنامه‌نویسی به زبان‌های پاسکال، سی، سی‌پلاس‌پلاس و جاوا را در دانشگاه‌های صنعتی شریف و تهران در سابقه خود دارد. رامتین علاوه بر برنامه‌نویسی به طراحی شیءگرا، معماری نرم‌افزار و متدلوژی‌های چابک توسعه نرم‌افزار بسیار علاقه‌مند است.

ادامه مطلب...
دانلود ۲ کتاب آموزشی هوش مصنوعی به همراه پروژه کشیش و آدمخوار

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

ادامه مطلب...

تابع مجازی

يک تابع مجازی (virtual function) به تابعی گفته می شود که در کلاس پايه اعلان شده است و مجددا توسط کلاس مشتق شده تعريف می شود. اگر کلاس پايه شامل تابع مجازی باشد کلاس مشتق شده می تواند اين تابع مجازی را با توجه به نيازهای خود مجدد تعريف می کند.

برای ايجاد يک تابع مجازی کلمه کليدی virtual در ابتدای اعلان تابع اضافه می شود.


مثال. تابع مجازی show در کلاس پايه دوباره در کلاس مشتق شده اعلان شده است.

#include <iostream.h>
class Base {
public:
  virtual void Show() {
    cout << "Base::Show" << endl;
  }
};

class Derived : public Base {
public:
  void Show() {
    cout << "Derived::Show" << endl;
  }
  void Value(int i) {
    cout << i << endl;
  }
};

int main() {
  Derived d;
  d.Show();
}


نکته. به کلاسی که دارای يک تابع مجازی باشد کلاس پلی مورفيک (polymorphic) می گويند.
نکته. وقتی يک تابع مجازی در کلاس مشتق شده دوباره تعريف می شود نوشتن عبارت virtual در کلاس مجازی الزامی نيست.
نکته. اگر کلاس مشتق شده تابع مجازی کلاس پايه را مجددا تعريف نکند نسخه پيش فرض کلاس پايه استفاده می شود.
نکته. نمی توانيد مقدار برگشتی يک تابع مجازی را در طی ابطال تغيير دهيد. اگر نوع برگشتی تابع override با تابع مجازی متفاوت باشد نوع پارامترها هم بايد تفاوت داشته باشند.

آموزش c++

 

در این مطلب  قراره در مورد یکی از زبان های اصلی برنامه نویسی صحبت کنیم. البته سعی میشه به زبان ساده تر گفته بشه که به راحتی قابل فهم باشه.همه ما میدونیم c++ زبان شی گرا یا به اصطلاح object-oriented هست.خب این یه فرق اساسی با زبان c بود ولی چرا نیاز بود که یک زبان برنامه نویسی شی گرا بشه ؟ یا شی گرایی چیه؟زبان c++ شی گراست یعنی در اون اگه میخوایم مثلاٌ درباره یه دستگیره در (!) کد بنویسیم، کاربر استفاده کننده از برنامه ما نباید از مکانیسم داخلی این دستگیره چیزی بفهمه ؛اینکه به طور مثال یه میله داخل یه حلقه باید بچرخه یا چیزای دیگه و طبیعتاٌ وقتی که اندازه این میله هم تغییر کنه و کوچیک و بزرگ شه هم کاربر از وجود اونمطلع نمیشه.

ادامه مطلب...

بررسی میزان محبوبیت زبانهای برنامه نویسی می تواند در انتخاب زبانی که روی آن سرمایه گذاری کنیم ، موثر باشد. سایتهای بسیاری هستند که با روشهای مختلفی (مانند بررسی میزان جستجوها، بررسی سوالات پرسیده شده در انجمنهای تخصصی، بررسی میزان جستجوی موقعیت های شغلی و غیره) زبان های برنامه نویسی مختلف دنیا ، میزان رشد یا کاهش محبوبیتشان را سالیانه و حتی ماهیانه اندازه می گیرند.

هر چند این سایتها بیشتر برای خارج از کشور می تواند ملاک باشد و میزان محبوبیت برآورد شده با واقعیات ایران متفاوت است اما باز هم بررسی آنها خارج از لطف نیست. به عنوان مثال اکثر این سایتها زبان جاوا را جزء محبوبترین زبانها شناخته اند اما در ایران این زبان کمتر در بازار مورد استفاده قرار گرفته است .

 



بهترین سایتی که برای این منظور یافته ام که اطلاعات به روز و نمودارهای مختلف مربوطه (مانند محبوبیت ماهیانه، سالیانه ، درازمدت ، گروه بندی زبانها و غیره) را دارد سایت تیوب است که لیست مقایسه زبانهای برنامه نویسی آنرا در این آدرس می توایند مشاهده کنید . ترتیب زبانهای برنامه نویسی این لیست از این قرار است :

1.جاوا
2.سی (C)
3.سی پلاس پلاس (++C)4.پیتون (Python)
5.پی اچ پی (PHP)
6.سی شارپ (C#)
7.ویژوال بیسیک
8.......

لیستی هم جدیداً در این آدرس مشاهده کردم که بر اساس میزان سوالات پرسیده شده در سایت معروف Stack Overflow زبانهای برنامه نویسی را مقایسه کرده است. در این مقایسه ، رتبه اول متعلق به سی شارپ، زبان دوم جاوا و زبان سوم پی اچ پی است.

 

آرایه

يک آرايه (array) مجموعه ای از محل های پشت سرهم حافظه است که همگی دارای يک نام می باشند . یک آرایه نوعی متغیر است که بجای ذخیره یک مقدار یکسری از مقادیر هم نوع را ذخیره می کند. هر محل ذخيره سازی در آرا‍يه را يک عنصر آرايه می نامند.

شکل کلی تعريف آرايه به صورت زير است:

DataType array_name[size];

Size تعداد عناصر آرایه است که در کروشه ذکر می شود. DataType نوع عناصر آرايه است که از هر نوع داده ای می تواند باشد.

اندازه آرايه بايد در زمان کامپايل مشخص باشد و در طول زمان اجرا ثابت است و تغيير نمی کند. وقتی آرايه ای اعلان می شود کامپايلر يک بلاک از حافظه که برای نگهداری کل آرايه کفايت می کند را کنار می گذارد. به اين ترتيب عناصر آرايه پشت سرهم ذخيره می شوند.

اسم آرايه اشاره گری به اولين عنصر آن است. به عناصر می توان به طور منفرد با اضافه کردن اندیس به اسم آرايه مراجعه کرد. انديس (index) باعث متمايز شدن عناصر آرايه از يکديگر می شود و تعيين می کند عنصر آرايه چندمين محل ذخيره سازی در آرايه است. در ++C انديس آرایه يک عدد صحيح است که از صفر شروع می شود.


مثال. آرايه A که به صورت زير تعريف شده است يک آرايه يک بعدی با 5 عنصر از نوع صحيح است. عناصر آن شامل A[3] , A[2] , A[1] , A[0] و A[4] است.

int A[5];


هنگام دسترسی به عناصر آرايه بعد از اسم آرايه بايد درون کروشه شماره انديس عنصر مورد نظر ذکر شود. عناصر آرايه را می توان توسط دستور انتساب مقداردهی کرد يا مقدار آن را از ورودی درياقت کرد.

A[0] = 10;

cout << "Enter a number:";
cin >> A[1];

با توجه به اينکه تعداد عناصر آرايه معين است برای کارکردن روی کليه عناصر آرايه حلقه های for روش مناسبی هستند.


مثال. در برنامه زير کليه عناصر يک آرايه از ورودی دريافت و سپس نمايش داده می شود.

#include
int main() {
   int A[10];
   for (int k = 0; k < 10; k++) {
      cout << "Enter an integer: ";
      cin >> A[k];
      }
   for (int k = 0; k < 10; k++)
      cout << A[k] << endl;
   return 0;
}


بخاطر داشته باشيد انديس عناصر آرايه با n عنصر از 0 تا n-1 است. اگر به عنصری خارج از اين محدوده دسترسی پیدا کنید کامپایلر خطائی نمی گيرد ولی این می تواند به مشکلات جدی منجر بشود چون ممکن است روی داده برنامه های دیگر درون حافظه تاثير بگذارد.

اگر اندیس آرایه اعشاری باشد کامپايلر آن را به يک عدد صحيح گرد می کند.


مثال. در برنامه زير سعی شده به عنصری خارج از اندازه آرايه دسترسی شود. دستور myarray[10] باعث می شود مقدار 99 در محلی ذخيره شود که 6 خانه بعد از آرایه myarray است این حافظه ممکن است شامل داده لازم برای برنامه دیگر باشد.

#include
int main() {
   int myarray[5];
   myarray[10] = 99;
   cout << myarray[10] << endl;
   return 0;
}


آرایه های یک بعدی

آرايه يک بعدی (1-dimensional array) برای نگهداری ليستی از مقادير استفاده می شود. هر عنصر آرايه يک بعدی از طريق يک انديس مشخص می شود.


مثال. آرايه زير 20 مکان پشت سرهم حافظه را برای مقادير ممیز شناور اختصاص می دهد. اولین مکان با tempreture[0] بعدی با tempreture[1] و.... . آخرین عنصر tempreture[19] است.

float tempreture[20];


آرایه های چند بعدی

می توان بعدهای بیشتری به آرایه داد. در يک آرايه چند بعدی (multidimensional) به بيش از يک عدد برای دسترسی به هر عنصر آرايه نياز است. يک آرايه دو بعدی به 2 انديس و يک آرايه سه بعدی به 3 انديس نياز دارد. محدوديتی برای تعداد ابعاد آرايه در ++C وجود ندارد اما بندرت آرایه بیشتر از دو يا سه بعد دیده شده است.


مثال. آرايه زير دارای دو بعد است که اندازه هر بعد آن 4 است. بنابراين آرايه 16=4×4 عدد صحيح را نگه می دارد. به هر عدد از طریق دو اندیس دسترسی می شود. مثلا عنصر اول myarray[0][0] است.

int myarray[4][4];

آرايه های دو بعدی دارای ساختار جدولی هستند و به صورت مجموعه ای از سطرها و ستون ها ديده می شوند. جدول زیر موقعیت عناصر مثال قبل که دارای 4 سطر و 4 ستون است را نشان می دهد.

0,00,10,20,3
1,01,11,21,3
2,02,12,22,3
3,03,13,23,3

عناصر آرايه صرفنظر از تعداد بعدهای آن سطر به سطر در خانه های پشت سرهم حافظه ذخيره می شوند. برای مطالعه بيشتر درباره روش سطری می توان‍يد به بخش نمايش آرايه در درس ساختمان داده مراجعه نماييد.


 

يک جمله (statement) يک خط منفرد از کد است که عملي را انجام مي دهد. در ++C معمولا هر جمله در يک خط نوشته می شود، البته بعضی از جملات به چند خط تقسیم می شوند.

جملات هميشه به يک سميکولن (;) ختم می شوند. (به استثنای راهنماهای کامپايلر مانند define# و include#).


مثال. چند جمله در C++.

int i_accnum;
i_accnum=55555;
i_accnum=i_accnum+5;


White space

خطوط خالی و فاصله ها در برنامه white space نام دارند. کامپايلرهای C++ نسبت به خطوط خالی حساس نيستند و وقتی کد برنامه را می خوانند در جستجوی کاراکترهای جمله و ختم شدن به سميکولن هستند و فاصله ها را نديده می گيرند (ثابت های رشته ای مستثنا هستند). White space امکان فرمت بندی کد برنامه با يک طرح استاندارد برای فاصله گذاری را می دهد که باعث می شود کد برنامه خواناتر شود بدون اينکه روی اجرای آن تاثير بگذارد. هر برنامه نويسی استيل خود را ممکن است داشته باشد مهم اين است که کد برنامه خوانا باشد.

White space ها در ثابت های رشته ای که بين علامت گيومه (") قرار می گيرند مجاز نيستند. اگر می خواهيد يک رشته را به دو خط بشکنيد بايد از کاراکتر () استفاده کنيد.


مثال. جملات زير با هم معادل هستند.

x=2+3;

x = 2 + 3;

x   =
2
+
3;

مثال. جمله زير زير درست است.

cout<<"Hello
world!";


جملات پوچ

يک سميکولن تنها در يک خط خالی يک جمله پوچ (null statement) را می سازد که عملی انجام نمی دهد. گاهی جملات پوچ می توانند مفيد باشند.

جملات ترکيبی

جمله ترکيبی (compound statement) که بلاک (block) هم ناميده می شود از يک يا چند جمله که بين آکولاد محصور شده اند تشيل شده است.

بلاک می تواند جايگزين هر جمله ای در برنامه بشود. برای شروع بهتر است آکولاد بلاک در خط جداگانه ای باشد تا تشخيص اينکه جا افتاده است آسان تر باشد.


مثال. يک بلاک از کد.

{
   cout<<"Hello, ";
   cout<<"world!";
}

ثابت ها

ثابت مشابه متغير محلی برای ذخيره داده ای است که توسط برنامه استفاده می شود. اما برخلاف متغير، مقدار ذخيره شده در يک ثابت در طی اجرای برنامه قابل تغيير نيست.

++C دو نوع ثابت واقعی و سمبليک دارد.

ثابت های واقعی

ثابت واقعی (literal constant) مقداری است که مستقيما در کد برنامه تايپ می شود.


مثال. مقادير 20 و 0.28 در عبارات زير ثابت های واقعی هستند که در متغيرهای count و tax_rate ذخيره می شوند.

int count = 20;
float tax_rate = 0.28;


مقادير ثابت برای نوع های پيش ساخته می تواند به صورت های دسيمال، اکتال، هگزادسيمال، مميزشناور يا کاراکتر باشند.

نقطه اعشار نشان دهنده ثابت مميزشناور است. ثابت های مميزشناور را می توان به صورت نماد علمی هم بيان کرد.


مثال. اعداد زير همگی ثابت های مميزشناورهستند.

123.456
0.019
100.
1.23E2 or 123
4.08e6 or 4080000
0.85e-4 or 0.000085


حروف f يا F برای ثابت های float و l يا L برای ثابت های long double را می توان به عنوان پسوند اضافه کرد در غير اينصورت با ثابت مميزشناور بعنوان يک عدد double برخورد می شود.

ثابتی که نقطه اعشار ندارد بعنوان ثابت صحيح تفسير می شود. ثابت های صحيح را به 3 صورت می توان نشان داد:

• ثابت دهدهی. اگر ثابت با هر عدد غير صفری شروع شود بعنوان يک عدد صحيح مبنای 10 تفسير می شود.. ثابت های دهدهی شامل ارقام 0 تا 9 و علامت + يا – می توانند باشند. اگر علامت نوشته نشود ثابت مثبت درنظر گرفته می شود.
• ثابت اکتال. اگر ثابت با رقم 0 شروع شود بعنوان يک عدد صحيح مبنای 8 تفسير می شود. ثابت های اکتال می توانند شامل ارقام 0 تا 9 و علامت + يا – باشند.
• ثابت هگزادسيمال. اگر ثابت با 0x يا 0X شروع شود بعنوان يک ثابت مبنای 16 با آن برخورد می شود. ثابت های هگزادسيمال می توانند شامل ارقام 0 تا 9 و حروف A تا F و علامت + يا – باشند.

ثابت های کاراکتری بين علامت کوتيشن (') قرارمی گيرند، مانند کاراکترهای 'A' و '0'. کاراکترهای خاص با علامت () نشان داده می شوند مانند 'n' (newline)،'t' (tab)،'' (backslash)،'r' (carriage return)،''' (single quote)،'"' (double quotes)، و غيره.

ثابت های سمبليک

ثابت سمبليک (symbolic constant) ثابتی است که توسط يک نام در برنامه مشخص می شود. مقدار حقيقی ثابت سمبليک تنها يکبار هنگام تعريف آن وارد می شود و اين مقدار مشابه ثابت های واقعی در طول اجرای برنامه قابل تغيير نيست. هر زمان که به مقدار ثابت در برنامه نياز باشد نام آن ذکر می شود.


مثال. برای محاسبه مساحت و محيط دايره در يک برنامه به جای نوشتن عدد 3.14 می توان ثابت PI را تعريف و استفاده کرد.

circumference = PI * (2 * radius);
area = PI * (radius)*(radius);

در اين حالت هم نوشتن برنامه راحت تر است و برنامه دارای خوانائی بيشتر است هم اگر نياز به تغيير ثابت پی به مقدار 3.14159 برای بالا بردن دقت محاسبات باشد اصلاح تنها در يک نقطه برنامه که ثابت تعريف شده است صورت می گيرد نه کل برنامه.


تعريف ثابت سمبليک

دوروش برای تعريف ثابت های سمبليک وجود دارد: راهنمای define# و کلمه کليدی const.

راهنمای define# در قسمت پيش پردازنده ها بيشتر توضيح داده خواهد شد. فرم کلی آن به صورت زير است:

#define CONSTNAME literal

CONSTNAME نام ثابت و literal مقدار واقعی آن است. راهنمای define# به کامپايلر دستور می دهد که درسرتاسر کد برنامه CONSTNAME را با literal جايگزين کند.

نام ثابت از همان قواعد نامگذاری متغيرها تبعيت می کند. مرسوم است که کليه حروف ثابت را بزرگ می نويسند که باعث تشخيص راحت تر آن از متغيرها که با حروف کوچک هستند می شود.


مثال. ثابت PI با مقدار 3.14159 تعريف شده است.

#define PI 3.14159


دقت کنيد که خط define# به سميکولن(;) ختم نمی شود. define# می تواند در هر کجای برنامه باشد ولی معمولا همگی در قسمتی از ابتدای کد برنامه و قبل از تابع main() هستند.

روش دوم تعريف يک ثابت سمبليک استفاده از کلمه کليدی const است. const را می توان به اول هر اعلان متغيری اضافه کرد. در اين صورت متغير در طول اجرای برنامه قابل تغيير نخواهد بود. اگر برنامه سعی به تغيير آن کند خطای کامپايلر صادر خواهد شد.


مثال.

const int count = 100;
const float pi = 3.14159;
const long debt = 12000000, float tax_rate = 0.21;


const روی کليه متغيرهای خط اعلان تاثير می گذارد.

تفاوت ثابت هائی که با #define و const تعريف می شوند در حوزه آنهاست. وقتی از #define استفاده می کنيد کنترل ثابت ها را از حوزه کامپايلر خارج می کنيد؛ type checking روی اسم آن انجام نمی گيرد و آدرس آنرا قابل بازيابی نيست و اشاره گريا ارجاعی به آن ممکن نيست و نمی تواند از نوع user-defined باشد. اما اگر ثابت توسط const تعريف شده باشد می تواند از هر نوع داده استاندارد يا user-defined باشد. آدرس آن هم قابل بازيابی است و مانند يک متغير دارای حوزه دسترسی است بنابراين ثابتی که درون يک تابع تعريف می شود در ساير نقاط برنامه شناخته شده نيست.

 

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

اعلام متغير به فرم کلی زير است:

typename varname;

typename نوع متغير را مشخص می کند که بايد يکی از نوع های داده ای زبان C باشد. varname نام متغير است که بايد از قواعد گفته شده تبعيت کند.

می توان در يک خط چند متغير را از يک نوع تعريف کرد.


مثال. متغيرهای count، number و start از نوع int و متغيرهای percent و total از نوع float اعلان شده اند.

int count, number, start;   /* three integer variables */
float percent, total;          /* two float variables */


در بخش توابع درقسمت حوزه متغيرها درباره محل اعلان متغير در برنامه توضيح داده شده است. فعلا کليه متغيرها را در آغاز تابع ()main اعلان کنيد.


کلمه کليدی typedef

کلمه کليدی typedef برای ايجاد نامی جديد به نوع داده موجود بکار می رود و در واقع يک مترادف برای آن نوع توليد می کند.


مثال. عبارت زير برای نوع داده ای int مترادف integer را ايجاد می کند. بنابراين در برنامه می توان از کلمه integer برای اعلان متغيرهای از نوع int استفاده کرد.

typedef int integer;
integer count;


توجه داشته باشيد که typedef نوع داده جديدی را توليد نمی کند بلکه تنها به شما اجازه نامگذاری نوع داده ای که قبلا تعريف شده را می دهد. کاربرد زياد آن در نوع های داده ای ترکيبی است که در بخش ساختمان مطالعه خواهيد کرد.

به کانال تلگرام سایت ما بپیوندید