برنامهنویسی رایانه در فرهنگ واژه غیر متخصّصین ممکن است به تمام پروژه ساخت نرمافزار یا برنامهٔ رایانهای گفته شود. با این همه برنامهنویسی تنها بخشی از فرایند توسعهٔ نرمافزار یا برنامه رایانهای است. اهمیت، توجه و منابع اختصاص داده شده به برنامهنویسی، بسته به ویژگیهای مشخص شده محصول و خواست افراد درگیر در پروژه و کاربران و در نهایت شیوهٔ انتخاب شدهمهندسی نرمافزار متغیر است.
برنامهنویسی رایانه (که اغلب به طور کوتاه برنامهنویسی نامیده میشود) فرایند سوق دادن ساختار اصلی یک مسئله محاسباتی به برنامهای قابل اجرا است. این کار مستلزم فعالیتهایی همچون تحلیل و درک مسئله است و عموماً حل چنین مسایلی منجر میشود به ایجاد یک الگوریتم، بازبینی نیازمندیهای الگوریتم که شامل صحت و میزان منابع مصرفی است، پیادهسازی (که معمولاً به عنوان کدینگ از آن یاد میشود) این الگوریتم در یک زبان برنامهنویسی مقصد، تست کردن، اشکال زدایی، نگه داری کد منبع، پیادهسازی سیستم ساخت(build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامههای کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده میشود. کد منبع به یک یا چند زبان برنامهنویسی، مانند جاوااسکریپت، اسمالتاک، پایتون، جاوا، سی شارپ، سی پلاسپلاس و سی نوشته شده است.
زبانهای برنامهنویسیزبانهای متعدد برنامهنویسی وجود دارند که هر کدام از آنها سبکهای خاصی را پشتیبانی میکنند . انتخاب زبان برنامهنویسی مورد نظر بر اساس ملاحظات متعددی صورت میگیرد: مانند سیاست شرکت، مناسب بودن برای وظیفه در نظر گرفته شده، موجود بودن بستههای برنامه از پیش آماده شده یا نظرات شخصی. به شکل ایدهآل مناسبترین زبان برنامهنویسی برای کاربرد مورد نظر که در دسترس باشد ، انتخاب میشود. موضوعاتی که باعث میشوند از این وضعیت ایدهآل فاصله گرفته شوند شامل موضوعاتی مانند یافتن تعداد کافی برنامه نویسان ماهر که بتوانند تیم کاری تشکیل دهند، در دسترس بودن کامپایلرهای مناسب برای زبان مورد نظر، کارایی برنامههای نوشته شده با زبان مورد نظر، است.
زبانهای برنامهنویسی در طیفی بین زبانهای "سطح پائین " تا "زبانهای سطح بالاً قرار میگیرند. زبانهای سطح پائین معمولاً به زبان ماشین نزدیکتر هستند و سریعتر اجرا میشوند، در مقابل زبانهای سطح بالا خلاصه تر و برای کاربرد آسان تر هستند ولی با سرعت کمتری اجرا میشوند. کد نویسی با زبانهای سطح بالا معمولاً آسان تر از کد نویسی با زبانهای سطح پائین هستند.
آلن داونی در کتاب " چگونه به شکل یک استاد رایانه فکر کنیم " مینویسد:
جزئیات در زبانهای برنامهنویسی مختلف متفاوت به نظر میرسند ولی تعدادی از ساختارهای اساسی در همه زبانهای برنامهنویسی یکسان هستند:
ورودی: دادهها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم میکند.خروجی: اطلاعات را روی صفحه تصویر نشان میدهد، به یک فایل میفرستد یا به دستگاههای دیگری انتقال میدهد.محاسبات: اعمال محاسباتی اساسی مثل جمع و ضرب را انجام میدهد.حالتهای شرطی: شرطهای مشخصی را کنترل میکند و بر اساس آن رشته مناسبی از عبارات را اجرا میکند.حلقه: بعضی اعمال را به شکل تکراری انجام میدهد، معمولاً با استفاده از تعدادی از متغیرها این کار انجام میشود.بسیاری از زبانهای برنامهنویسی مکانیسمهایی را برای استفاده از کتابخانههای مشترک فراهم میکنند. توابعی در این کتابخانهها بر اساس الگوهای مناسب اجرایی ایجاد میشوند (مانند روشهای انتقال آرگومانها) و سپس میتوان از این توابع در زبانهای متعدد برنامهنویسی استفاده کرد.
فهرست مطالب:
فصل اول: مقدمات زبان ++C
تاریخچه مختصر
قانون نامگذاری شناسه ها
متغیر ها
اعلان متغیر
تخصیص مقادیر به متغیر
داده های از نوع کرکتر
کرکتر های مخصوص
رشته ها
نمایش مقادیر داده ها
دریافت مقادیر
عملگر انتساب
عملگر های محاسباتی
عملگرهای افزایش و کاهش
عملگر sizeof
عملگرهای جایگزینی محاسباتی
اولویت عملگرها
توضیحات
توابع کتابخانه
برنامه در ++C
فصل دوم: ساختارهای تصمیم گیری و تکرار
عملگر های رابطه ای عملگر شرطی دستورالعمل شرطی عملگر کاما عملگر های منطقی دستورالعمل For فصل سوم: سایر ساختارهای تکرار دستورالعمل while دستورالعمل do while دستورالعمل break دستورالعمل continue دستورالعمل switch تابع cin.get عملگر static_cast جدول اولویت عملگرها فصل چهارم: اعداد تصادفی تولید اعداد تصادفی تعریف نوع داده ( typedef ) داده های از نوع شمارشی فرمت های مختلفه مقادیر خروجی فصل پنجم: آرایه ها آرایه یک بعدی آرایه دو بعدی فصل ششم: توابع تعریف تابع تابع بازگشتی توابع درون خطی انتقال پارامترها از طریق ارجاع کلاس های حافظه ( storage classes ) سربارگذاری توابع فصل هفتم: ساختارها و اشاره گرها ساختارها Union ها اشاره گرها ( Pointer) تعریف آرایه آرایه های دو بعدی و اشاره گرها تخصیص حافظه بصورت پویا ( عملگر new ) رشته ها و توابع مربوطه فصل هشتم: برنامه نویسی شی گرا تعریف شی گرایی چند ریختی خاصیت ارث بری پشته ایجاد شی ارث بری سازنده ها و نابود کننده ها توابع دوست کلاس های دوست توابع سازنده پارامتر دار توابع سازنده یک پارامتری عضوهای static کلاسهای تو در تو کلاس های محلی استفاده از object ها بعنوان پارامترهای تابع برگشت اشیاء انتساب اشیاء آرایه اشیاء اشاره گر به اشیاء اشاره گر this توابع مجازی و پلی مرفیسم
برنامهنویسی رایانه در فرهنگ واژه غیر متخصّصین ممکن است به تمام پروژه ساخت نرمافزار یا برنامهٔ رایانهای گفته شود. با این همه برنامهنویسی تنها بخشی از فرایند توسعهٔ نرمافزار یا برنامه رایانهای است. اهمیت، توجه و منابع اختصاص داده شده به برنامهنویسی، بسته به ویژگیهای مشخص شده محصول و خواست افراد درگیر در پروژه و کاربران و در نهایت شیوهٔ انتخاب شدهمهندسی نرمافزار متغیر است.
برنامهنویسی رایانه (که اغلب به طور کوتاه برنامهنویسی نامیده میشود) فرایند سوق دادن ساختار اصلی یک مسئله محاسباتی به برنامهای قابل اجرا است. این کار مستلزم فعالیتهایی همچون تحلیل و درک مسئله است و عموماً حل چنین مسایلی منجر میشود به ایجاد یک الگوریتم، بازبینی نیازمندیهای الگوریتم که شامل صحت و میزان منابع مصرفی است، پیادهسازی (که معمولاً به عنوان کدینگ از آن یاد میشود) این الگوریتم در یک زبان برنامهنویسی مقصد، تست کردن، اشکال زدایی، نگه داری کد منبع، پیادهسازی سیستم ساخت(build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامههای کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده میشود. کد منبع به یک یا چند زبان برنامهنویسی، مانند جاوااسکریپت، اسمالتاک، پایتون، جاوا، سی شارپ، سی پلاسپلاس و سی نوشته شده است.
زبانهای برنامهنویسیزبانهای متعدد برنامهنویسی وجود دارند که هر کدام از آنها سبکهای خاصی را پشتیبانی میکنند . انتخاب زبان برنامهنویسی مورد نظر بر اساس ملاحظات متعددی صورت میگیرد: مانند سیاست شرکت، مناسب بودن برای وظیفه در نظر گرفته شده، موجود بودن بستههای برنامه از پیش آماده شده یا نظرات شخصی. به شکل ایدهآل مناسبترین زبان برنامهنویسی برای کاربرد مورد نظر که در دسترس باشد ، انتخاب میشود. موضوعاتی که باعث میشوند از این وضعیت ایدهآل فاصله گرفته شوند شامل موضوعاتی مانند یافتن تعداد کافی برنامه نویسان ماهر که بتوانند تیم کاری تشکیل دهند، در دسترس بودن کامپایلرهای مناسب برای زبان مورد نظر، کارایی برنامههای نوشته شده با زبان مورد نظر، است.
زبانهای برنامهنویسی در طیفی بین زبانهای "سطح پائین " تا "زبانهای سطح بالاً قرار میگیرند. زبانهای سطح پائین معمولاً به زبان ماشین نزدیکتر هستند و سریعتر اجرا میشوند، در مقابل زبانهای سطح بالا خلاصه تر و برای کاربرد آسان تر هستند ولی با سرعت کمتری اجرا میشوند. کد نویسی با زبانهای سطح بالا معمولاً آسان تر از کد نویسی با زبانهای سطح پائین هستند.
آلن داونی در کتاب " چگونه به شکل یک استاد رایانه فکر کنیم " مینویسد:
جزئیات در زبانهای برنامهنویسی مختلف متفاوت به نظر میرسند ولی تعدادی از ساختارهای اساسی در همه زبانهای برنامهنویسی یکسان هستند:
ورودی: دادهها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم میکند.خروجی: اطلاعات را روی صفحه تصویر نشان میدهد، به یک فایل میفرستد یا به دستگاههای دیگری انتقال میدهد.محاسبات: اعمال محاسباتی اساسی مثل جمع و ضرب را انجام میدهد.حالتهای شرطی: شرطهای مشخصی را کنترل میکند و بر اساس آن رشته مناسبی از عبارات را اجرا میکند.حلقه: بعضی اعمال را به شکل تکراری انجام میدهد، معمولاً با استفاده از تعدادی از متغیرها این کار انجام میشود.بسیاری از زبانهای برنامهنویسی مکانیسمهایی را برای استفاده از کتابخانههای مشترک فراهم میکنند. توابعی در این کتابخانهها بر اساس الگوهای مناسب اجرایی ایجاد میشوند (مانند روشهای انتقال آرگومانها) و سپس میتوان از این توابع در زبانهای متعدد برنامهنویسی استفاده کرد.
فهرست مطالب:
فصل اول: مقدمات زبان ++C
تاریخچه مختصر
قانون نامگذاری شناسه ها
متغیر ها
اعلان متغیر
تخصیص مقادیر به متغیر
داده های از نوع کرکتر
کرکتر های مخصوص
رشته ها
نمایش مقادیر داده ها
دریافت مقادیر
عملگر انتساب
عملگر های محاسباتی
عملگرهای افزایش و کاهش
عملگر sizeof
عملگرهای جایگزینی محاسباتی
اولویت عملگرها
توضیحات
توابع کتابخانه
برنامه در ++C
فصل دوم: ساختارهای تصمیم گیری و تکرار
عملگر های رابطه ای عملگر شرطی دستورالعمل شرطی عملگر کاما عملگر های منطقی دستورالعمل For فصل سوم: سایر ساختارهای تکرار دستورالعمل while دستورالعمل do while دستورالعمل break دستورالعمل continue دستورالعمل switch تابع cin.get عملگر static_cast جدول اولویت عملگرها فصل چهارم: اعداد تصادفی تولید اعداد تصادفی تعریف نوع داده ( typedef ) داده های از نوع شمارشی فرمت های مختلفه مقادیر خروجی فصل پنجم: آرایه ها آرایه یک بعدی آرایه دو بعدی فصل ششم: توابع تعریف تابع تابع بازگشتی توابع درون خطی انتقال پارامترها از طریق ارجاع کلاس های حافظه ( storage classes ) سربارگذاری توابع فصل هفتم: ساختارها و اشاره گرها ساختارها Union ها اشاره گرها ( Pointer) تعریف آرایه آرایه های دو بعدی و اشاره گرها تخصیص حافظه بصورت پویا ( عملگر new ) رشته ها و توابع مربوطه فصل هشتم: برنامه نویسی شی گرا تعریف شی گرایی چند ریختی خاصیت ارث بری پشته ایجاد شی ارث بری سازنده ها و نابود کننده ها توابع دوست کلاس های دوست توابع سازنده پارامتر دار توابع سازنده یک پارامتری عضوهای static کلاسهای تو در تو کلاس های محلی استفاده از object ها بعنوان پارامترهای تابع برگشت اشیاء انتساب اشیاء آرایه اشیاء اشاره گر به اشیاء اشاره گر this توابع مجازی و پلی مرفیسم
طراحی الگوریتم دانش ساخت الگوریتمها برای حل مسئلهاست. طراحی الگوریتم کاربردی را مهندسی الگوریتم مینامند. طراحی الگوریتم در بسیاری از راه حلهای تئوری تحقیق در عملیات، شناسایی و گنجانیده شدهاست، مانند برنامهنویسی پویا و تقسیم و غلبه. الگوهای طراحی الگوریتم تکنیکهای طراحی و اجرای طرحهای الگوریتم هستند، در این روزها از طراحی الگوریتم میتوان در فرایندهای بازیابی اینترنتی، مسیریابی استفاده نمود.
هم اکنون در ایران طراحی الگوریتمها به عنوان درسی در رشته مهندسی کامپیوتر (نرمافزار و سختافزار) و فناوری اطلاعات تدریس میشود. در طراحی الگوریتمها مباحثی همچون پیچیدگی زمانی،بازگشتی، روش تقسیم و غلبه، روش حریصانه، روش برنامه سازی پویا، تکنیک عقبگرد، نظریه P و NP تدریس میشود. زبانهای برنامهنویسی رایانههای بزرگ مانند زبان ALGOL (برای زبان الگوریتمی)، زبان FORTRAN، زبان COBOL، زبان PL/I، زبان SAIL و SNOBOL ابزار محاسبات برای به اجرا درآوردن یک طراحی الگوریتم است اما یک طراحی الگوریتم (a/d) یک زبان نیست، یک a/d میتواند یک روش دست نوشته باشد، به طور مثال مجموعهای از معادلات. یک سری از فرایندهای مکانیکی انجام شده توسط دست، قطعه آنالوگ از تجهیزات یا فرایند دیجیتال و پردازندهاست. یکی از مهمترین جنبههای طراحی الگوریتم، ایجاد یک الگوریتم است که دارای یک زمان اجرای کارآمد باشد، که به عنوان اوه بزرگ(big Oh)شناخته شدهاست.
روشهای طراحی الگوریتمکارایی، تحلیل و مرتبه الگوریتمها
نوشتن الگوریتم به زبان فارسی دو ایراد دارد:
نوشتن الگوریتمهای پیچیده به این شیوه دشوار است.مشخص نیست از توصیف فارسی الگوریتم چگونه میتوان یک برنامه کامپیوتری ایجاد کرد.تحلیل الگوریتمهاتعیین مقدار میزان کارایی یک الگوریتم در حل مسئله با تحلیل الگوریتم انجام میشود.
تحلیل پیچیدگی زمانیزمانی که یک الگوریتم انجام میشود با تعداد ورودیهای الگوریتم افزایش مییابد.
تحلیل پیچیدگی زمانی یک الگوریتم، تعیین تعداد دفعاتی است که عمل اصلی به ازای هر مقدار از ورودی انجام میشود.
T(n) را پیچیدگی زمانی الگوریتم در حالت معمول میگویند.
W(n) را تحلیل پیچیدگی زمانی در بدترین حالت مینامند.
A(n) را پیچیدگی زمانی در حالت میانگین میگویند.
عمل اصلی:زمان نوشتن الگوریتم اندازهٔ دادهها را معین سپس چند دستور را معلوم میکنیم که تعداد دفعاتی که این دستورات اجرا میشود کل کار الگوریتم را نشان میدهد.
تحلیل پیچیدگی زمانی برای حالت معمول برای الگوریتم (جمع کردن عناصرآرایه)
عمل اصلی: افزودن یک عنصر از آرایه به sum.
اندازه ورودی: n، تعداد عناصر آرایه.
عمل اصلی همیشه n بار انجام میشود یعنی برابر است با T(n) = n تحلیل پیچیدگی زمانی برای حالت معمول برای الگوریتم (مرتبسازی تعویضی)
عمل اصلی: مقایسه S [j] با S[i].
اندازه ورودی: تعداد عناصری که باید مرتب شوند.
بدترین حالت: T(n) = nتحلیل پیچیدگی زمانی دربدترین حالت برای الگوریتم (جستجوی ترتیبی)
عمل اصلی: مقایسه یک عنصر آرایه با x.
اندازه ورودی: , n تعداد عناصر موجود در آرایه.
بهترین حالت: T(n) = ۱تحلیل پیچیدگی زمانی در بهترین حالت برای الگوریتم (جستجوی ترتیبی)
عمل اصلی: مقایسه یک عنصر آرایه با x.
اندازه ورودی: , n تعداد عناصر آرایه. توضیح: در اولین بار عنصر مورد نظر پیدا شود.
B (n) = ۱مرتبه الگوریتمالگوریتمها یی با پیچیدگی زمانی ازقبیل n و100n را الگوریتمهای زمانی خطی میگویند.
مجموعه کامل توابع پیچیدگی را که با توابع درجه دوم محض قابل دستهبندی باشند، n²) (θ میگویند.
آشنایی بیشتر با مرتبه الگوریتمهابرای یک تابع پیچیدگی مفروض ƒ(n),O (ƒ (n) "O بزرگ» مجموعهای از توابع پیچیدگی g (n) است که برای آنها یک ثابت حقیقی مثبت c و یک عدد صحیح غیر منفی N وجود دارد به قسمی که به ازای همهٔ N =g (n)>= c × ƒ (n)
برای یک تابع پیچیدگی مفروض ƒ(n)، (Ω (ƒ(n)مجموعهای از توابع پیچیدگی g (n) است که برای آنها یک عدد ثابت حقیقی مثبت c و یک عدد صحیح غیر منفی N وجود دارد به قسمی که به ازای همهٔ N =g (n) =برای یک تابع پیچیدگی مفروض ƒ(n)، داریم: θ (ƒ(n)) = O (ƒ(n)) ∩ Ω (ƒ(n))
یعنی θ(ƒ(n)) مجموعهای از توابع پیچیدگی g (n) است که برای آنها ثابتهای حقیقی مثبت c وd و عدد صحیح غیر منفی N وجود دارد به قسمی که:
c × ƒ (n) <= d × ƒ(n)
برای یک تابع پیچیدگی ƒ(n) مفروض، (o(ƒ(n) ”o کوچک” عبارت ازمجموعه کلیه توابع پیچیدگیg (n) است که این شرط را برآورده میسازند: به ازای هرثابت حقیقی مثبت c، یک عدد صحیح غیر منفی N وجود دارد به قسمتی که به ازای همهٔ N =g (n) =روش تقسیم و حل
روش تقسیم و حل یک روش بالا به پایین است.
حل یک نمونه سطح بالای مسئله با رفتن به جزء و بدست آوردن حل نمونههای کوچکتر حاصل میشود.
هنگام پی ریزی یک الگوریتم بازگشتی، باید:
۱- راهی برای به دست آوردن حل یک نمونه از روی حل یک نمونه ازروی حل یک یا چند نمونه کوچکتر طراحی کنیم.
۲- شرط (شرایط) نهایی نزدیک شدن به نمونه (های) کوچکتر را تعیین کنیم.
۳- حل را در حالت شرط (شرایط) نهایی تعیین کنیم.
انواع روشهای مرتبسازی:
ادغام یک فرایند مرتبط با مرتبسازی است.
ادغام دوطرفه به معنای ترکیب دو آرایه مرتب شده در یک آرایهٔ مرتب است.
مرتبسازی ادغامی شامل مراحل زیر میشود:
۱- تقسیم آرایه به دو زیر آرایه، هر یک با n/2 عنصر.
۲- حل هر زیر آرایه با مرتبسازی آن.
۳- ترکیب حلهای زیر آرایهها از طریق ادغام آنها در یک آرایه مرتب.
راهبرد طراحی تقسیم و حل شامل مراحل زیر است:
۱- تقسیم نمونهای ازیک مسئله به یک یا چند نمونه کوچکتر.
۲- حل هر نمونه کوچکتر. اگر نمونههای کوچک تربه قدر کافی کوچک نبودند، برای این منظور از بازگشت استفاده کنید.
۳- در صورت نیاز، حل نمونههای کوچکتر را ترکیب کنید تا حل نمونه اولیه به دست آید.
در مرتبسازی سریع، ترتیب آنها از چگونگی افراز آرایهها ناشی میشود.
همه عناصر کوچکتر از عنصر محوری در طرف چپ آن وهمه عناصربزرگ تر، درطرف راست آن واقع هستند.
مرتبسازی سریع، به طور بازگشتی فراخوانی میشود تا هر یک از دوآرایه را مرتب کند، آنها نیز افراز میشوند واین روال ادامه مییابد تا به آرایهای با یک عنصر برسیم. چنین آرایهای ذاتاً مرتب است.
فهرست مطالب:
فصل اول: کارایی، تحلیل و مرتبه الگوریتم ها
ایرادات نوشتن الگوریتم به زبان فارسی
الگوریتم 1-1: جست و جوی ترتیبی
الگوریتم 2-1:محاسبه مجموع عناصر آرایه
الگوریتم 3-1:مرتب سازی تعویضی
الگوریتم 4-1:ضرب ماتریس ها
اهمیت ساخت الگوریتم های کارآمد
و...
فصل دوم: روش تقسیم و حل
الگوریتم1-2: جست و جوی دودویی
تحلیل پیچیدگی زمانی در بدترین حالت برای الگوریتم جست و جوی دودویی بازگشتی
مرتب سازی ادغامی
الگوریتم2-2: مرتب سازی ادغامی
الگوریتم3-2: ادغام
و...
فصل سوم: برنامه نویسی پویا
الگوریتم 3-1: ضریب دو جمله ای با استفاده از تقسیم و حل
الگوریتم 2-3: ضریب دو جمله ای با استفاده از برنامه نویسی پویا
الگوریتم 3-3: الگوریتم فلوید برای یافتن کوتاه ترین مسیر
الگوریتم 4-3:الگوریتم فلوید برای یافتن کوتاهترین مسیر 2
الگوریتم 5-3:چاپ کوتاهترین مسیر
3-3 برنامه نویسی پویا و مسائل بهینه سازی
و...
فصل چهارم: روش حریصانه در طراحی الگوریتم
اصول
مراحل
درخت های پوشای کمینه
الگوریتم پریم
الگوریتم 1-4: الگوریتم پریم
تحلیل پیچیدگی زمانی در حالت معمول برای الگوریتم 1-4 (الگوریتم پریم)
الگوریتم 4-2: الگوریتم کروسکال
الگوریتم دیکسترا برای کوتاهترین مسیر تک مبدا
و...
فصل پنجم: راهبرد عقبگرد
الگوریتم 1-5: الگوریتم عقبگرد برای مسئله n وزیر
استفاده از الگوریتم مونت کارلو برای برآورد کردن کارایی یک الگوریتم عقبگرد
الگوریتم2-5: برآورد مونت کارلو
الگوریتم 3-5: بر آورد مونت کارلو برای الگوریتم 1-5
الگوریتم 4-5: الگوریتم عقبگرد برای مسئله حاصل جمع زیرمجموعه ها
رنگ آمیزی گراف
الگوریتم5-5: الگوریتم عقبگرد برای مسئله رنگ آمیزی m
و...
فصل ششم: راهبرد شاخه و حد
مقدمه
الگوریتم 1-6: الگوریتم جست و جوی عرضی با هرس کردن شاخه و حد برای مسئله کوله پشتی صفر و یک
الگوریتم 2-6: بهترین جست و جو با هرس کردن شاخه و حد برای مسئله کوله پشتی صفر و یک
مسئله فروشنده دوره گرد
الگوریتم 3-6: الگوریتم بهترین جستجو با هرس کردن شاخه و حد برای مسئله فروشنده دوره گرد
استنباط فرضیه ای
الگوریتم 4-6 : الگوریتم بهترین جست و جو با هرس کردن شاخه و حد برای استنباط فرضیه ای
و...
فصل هفتم: مقدمه ای بر پیچیدگی محاسباتی: مسئله مرتب سازی
پیچیدگی محاسباتی
مرتب سازی درجی و مرتب سازی انتخابی
الگوریتم 1-7: مرتب سازی درجی
الگوریتم 2-7: مرتب سازی انتخابی
الگوریتم مرتب سازی تعویضی
نگاهی دوباره به مرتب سازی ادغامی
بهبود بخشیدن به مرتب سازی ادغامی
الگوریتم 3-7: مرتب سازی ادغامی 3
الگوریتم 4-7: مرتب سازی ادغامی 4
و...
برنامهنویسی رایانه در فرهنگ واژه غیر متخصّصین ممکن است به تمام پروژه ساخت نرمافزار یا برنامهٔ رایانهای گفته شود. با این همه برنامهنویسی تنها بخشی از فرایند توسعهٔ نرمافزار یا برنامه رایانهای است. اهمیت، توجه و منابع اختصاص داده شده به برنامهنویسی، بسته به ویژگیهای مشخص شده محصول و خواست افراد درگیر در پروژه و کاربران و در نهایت شیوهٔ انتخاب شدهمهندسی نرمافزار متغیر است.
برنامهنویسی رایانه (که اغلب به طور کوتاه برنامهنویسی نامیده میشود) فرایند سوق دادن ساختار اصلی یک مسئله محاسباتی به برنامهای قابل اجرا است. این کار مستلزم فعالیتهایی همچون تحلیل و درک مسئله است و عموماً حل چنین مسایلی منجر میشود به ایجاد یک الگوریتم، بازبینی نیازمندیهای الگوریتم که شامل صحت و میزان منابع مصرفی است، پیادهسازی (که معمولاً به عنوان کدینگ از آن یاد میشود) این الگوریتم در یک زبان برنامهنویسی مقصد، تست کردن، اشکال زدایی، نگه داری کد منبع، پیادهسازی سیستم ساخت(build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامههای کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده میشود. کد منبع به یک یا چند زبان برنامهنویسی، مانند جاوااسکریپت، اسمالتاک، پایتون، جاوا، سی شارپ، سی پلاسپلاس و سی نوشته شده است.
زبانهای برنامهنویسیزبانهای متعدد برنامهنویسی وجود دارند که هر کدام از آنها سبکهای خاصی را پشتیبانی میکنند . انتخاب زبان برنامهنویسی مورد نظر بر اساس ملاحظات متعددی صورت میگیرد: مانند سیاست شرکت، مناسب بودن برای وظیفه در نظر گرفته شده، موجود بودن بستههای برنامه از پیش آماده شده یا نظرات شخصی. به شکل ایدهآل مناسبترین زبان برنامهنویسی برای کاربرد مورد نظر که در دسترس باشد ، انتخاب میشود. موضوعاتی که باعث میشوند از این وضعیت ایدهآل فاصله گرفته شوند شامل موضوعاتی مانند یافتن تعداد کافی برنامه نویسان ماهر که بتوانند تیم کاری تشکیل دهند، در دسترس بودن کامپایلرهای مناسب برای زبان مورد نظر، کارایی برنامههای نوشته شده با زبان مورد نظر، است.
زبانهای برنامهنویسی در طیفی بین زبانهای "سطح پائین " تا "زبانهای سطح بالاً قرار میگیرند. زبانهای سطح پائین معمولاً به زبان ماشین نزدیکتر هستند و سریعتر اجرا میشوند، در مقابل زبانهای سطح بالا خلاصه تر و برای کاربرد آسان تر هستند ولی با سرعت کمتری اجرا میشوند. کد نویسی با زبانهای سطح بالا معمولاً آسان تر از کد نویسی با زبانهای سطح پائین هستند.
آلن داونی در کتاب " چگونه به شکل یک استاد رایانه فکر کنیم " مینویسد:
جزئیات در زبانهای برنامهنویسی مختلف متفاوت به نظر میرسند ولی تعدادی از ساختارهای اساسی در همه زبانهای برنامهنویسی یکسان هستند:
ورودی: دادهها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم میکند.خروجی: اطلاعات را روی صفحه تصویر نشان میدهد، به یک فایل میفرستد یا به دستگاههای دیگری انتقال میدهد.محاسبات: اعمال محاسباتی اساسی مثل جمع و ضرب را انجام میدهد.حالتهای شرطی: شرطهای مشخصی را کنترل میکند و بر اساس آن رشته مناسبی از عبارات را اجرا میکند.حلقه: بعضی اعمال را به شکل تکراری انجام میدهد، معمولاً با استفاده از تعدادی از متغیرها این کار انجام میشود.بسیاری از زبانهای برنامهنویسی مکانیسمهایی را برای استفاده از کتابخانههای مشترک فراهم میکنند. توابعی در این کتابخانهها بر اساس الگوهای مناسب اجرایی ایجاد میشوند (مانند روشهای انتقال آرگومانها) و سپس میتوان از این توابع در زبانهای متعدد برنامهنویسی استفاده کرد.
فهرست مطالب:
فصل اول: مقدمات زبان ++C
تاریخچه مختصر
قانون نامگذاری شناسه ها
متغیر ها
اعلان متغیر
تخصیص مقادیر به متغیر
داده های از نوع کرکتر
کرکتر های مخصوص
رشته ها
نمایش مقادیر داده ها
دریافت مقادیر
عملگر انتساب
عملگر های محاسباتی
عملگرهای افزایش و کاهش
عملگر sizeof
عملگرهای جایگزینی محاسباتی
اولویت عملگرها
توضیحات
توابع کتابخانه
برنامه در ++C
فصل دوم: ساختارهای تصمیم گیری و تکرار
عملگر های رابطه ای عملگر شرطی دستورالعمل شرطی عملگر کاما عملگر های منطقی دستورالعمل For فصل سوم: سایر ساختارهای تکرار دستورالعمل while دستورالعمل do while دستورالعمل break دستورالعمل continue دستورالعمل switch تابع cin.get عملگر static_cast جدول اولویت عملگرها فصل چهارم: اعداد تصادفی تولید اعداد تصادفی تعریف نوع داده ( typedef ) داده های از نوع شمارشی فرمت های مختلفه مقادیر خروجی فصل پنجم: آرایه ها آرایه یک بعدی آرایه دو بعدی فصل ششم: توابع تعریف تابع تابع بازگشتی توابع درون خطی انتقال پارامترها از طریق ارجاع کلاس های حافظه ( storage classes ) سربارگذاری توابع فصل هفتم: ساختارها و اشاره گرها ساختارها Union ها اشاره گرها ( Pointer) تعریف آرایه آرایه های دو بعدی و اشاره گرها تخصیص حافظه بصورت پویا ( عملگر new ) رشته ها و توابع مربوطه فصل هشتم: برنامه نویسی شی گرا تعریف شی گرایی چند ریختی خاصیت ارث بری پشته ایجاد شی ارث بری سازنده ها و نابود کننده ها توابع دوست کلاس های دوست توابع سازنده پارامتر دار توابع سازنده یک پارامتری عضوهای static کلاسهای تو در تو کلاس های محلی استفاده از object ها بعنوان پارامترهای تابع برگشت اشیاء انتساب اشیاء آرایه اشیاء اشاره گر به اشیاء اشاره گر this توابع مجازی و پلی مرفیسم
برنامهنویسی رایانه در فرهنگ واژه غیر متخصّصین ممکن است به تمام پروژه ساخت نرمافزار یا برنامهٔ رایانهای گفته شود. با این همه برنامهنویسی تنها بخشی از فرایند توسعهٔ نرمافزار یا برنامه رایانهای است. اهمیت، توجه و منابع اختصاص داده شده به برنامهنویسی، بسته به ویژگیهای مشخص شده محصول و خواست افراد درگیر در پروژه و کاربران و در نهایت شیوهٔ انتخاب شدهمهندسی نرمافزار متغیر است.
برنامهنویسی رایانه (که اغلب به طور کوتاه برنامهنویسی نامیده میشود) فرایند سوق دادن ساختار اصلی یک مسئله محاسباتی به برنامهای قابل اجرا است. این کار مستلزم فعالیتهایی همچون تحلیل و درک مسئله است و عموماً حل چنین مسایلی منجر میشود به ایجاد یک الگوریتم، بازبینی نیازمندیهای الگوریتم که شامل صحت و میزان منابع مصرفی است، پیادهسازی (که معمولاً به عنوان کدینگ از آن یاد میشود) این الگوریتم در یک زبان برنامهنویسی مقصد، تست کردن، اشکال زدایی، نگه داری کد منبع، پیادهسازی سیستم ساخت(build system) و مدیریت مصنوعات مشتق شده مانند کد ترجمه شده به زبان ماشین برنامههای کامپیوتری. الگوریتم اغلب تنها به شکل قابل تجزیه و تحلیل برای انسان و قابل استدلال با منطق نمایش داده میشود. کد منبع به یک یا چند زبان برنامهنویسی، مانند جاوااسکریپت، اسمالتاک، پایتون، جاوا، سی شارپ، سی پلاسپلاس و سی نوشته شده است.
زبانهای برنامهنویسیزبانهای متعدد برنامهنویسی وجود دارند که هر کدام از آنها سبکهای خاصی را پشتیبانی میکنند . انتخاب زبان برنامهنویسی مورد نظر بر اساس ملاحظات متعددی صورت میگیرد: مانند سیاست شرکت، مناسب بودن برای وظیفه در نظر گرفته شده، موجود بودن بستههای برنامه از پیش آماده شده یا نظرات شخصی. به شکل ایدهآل مناسبترین زبان برنامهنویسی برای کاربرد مورد نظر که در دسترس باشد ، انتخاب میشود. موضوعاتی که باعث میشوند از این وضعیت ایدهآل فاصله گرفته شوند شامل موضوعاتی مانند یافتن تعداد کافی برنامه نویسان ماهر که بتوانند تیم کاری تشکیل دهند، در دسترس بودن کامپایلرهای مناسب برای زبان مورد نظر، کارایی برنامههای نوشته شده با زبان مورد نظر، است.
زبانهای برنامهنویسی در طیفی بین زبانهای "سطح پائین " تا "زبانهای سطح بالاً قرار میگیرند. زبانهای سطح پائین معمولاً به زبان ماشین نزدیکتر هستند و سریعتر اجرا میشوند، در مقابل زبانهای سطح بالا خلاصه تر و برای کاربرد آسان تر هستند ولی با سرعت کمتری اجرا میشوند. کد نویسی با زبانهای سطح بالا معمولاً آسان تر از کد نویسی با زبانهای سطح پائین هستند.
آلن داونی در کتاب " چگونه به شکل یک استاد رایانه فکر کنیم " مینویسد:
جزئیات در زبانهای برنامهنویسی مختلف متفاوت به نظر میرسند ولی تعدادی از ساختارهای اساسی در همه زبانهای برنامهنویسی یکسان هستند:
ورودی: دادهها را از صفحه کلید، یک فایل یا وسایل دیگر فراهم میکند.خروجی: اطلاعات را روی صفحه تصویر نشان میدهد، به یک فایل میفرستد یا به دستگاههای دیگری انتقال میدهد.محاسبات: اعمال محاسباتی اساسی مثل جمع و ضرب را انجام میدهد.حالتهای شرطی: شرطهای مشخصی را کنترل میکند و بر اساس آن رشته مناسبی از عبارات را اجرا میکند.حلقه: بعضی اعمال را به شکل تکراری انجام میدهد، معمولاً با استفاده از تعدادی از متغیرها این کار انجام میشود.بسیاری از زبانهای برنامهنویسی مکانیسمهایی را برای استفاده از کتابخانههای مشترک فراهم میکنند. توابعی در این کتابخانهها بر اساس الگوهای مناسب اجرایی ایجاد میشوند (مانند روشهای انتقال آرگومانها) و سپس میتوان از این توابع در زبانهای متعدد برنامهنویسی استفاده کرد.
فهرست مطالب:
فصل اول: مقدمات زبان ++C
تاریخچه مختصر
قانون نامگذاری شناسه ها
متغیر ها
اعلان متغیر
تخصیص مقادیر به متغیر
داده های از نوع کرکتر
کرکتر های مخصوص
رشته ها
نمایش مقادیر داده ها
دریافت مقادیر
عملگر انتساب
عملگر های محاسباتی
عملگرهای افزایش و کاهش
عملگر sizeof
عملگرهای جایگزینی محاسباتی
اولویت عملگرها
توضیحات
توابع کتابخانه
برنامه در ++C
فصل دوم: ساختارهای تصمیم گیری و تکرار
عملگر های رابطه ای عملگر شرطی دستورالعمل شرطی عملگر کاما عملگر های منطقی دستورالعمل For فصل سوم: سایر ساختارهای تکرار دستورالعمل while دستورالعمل do while دستورالعمل break دستورالعمل continue دستورالعمل switch تابع cin.get عملگر static_cast جدول اولویت عملگرها فصل چهارم: اعداد تصادفی تولید اعداد تصادفی تعریف نوع داده ( typedef ) داده های از نوع شمارشی فرمت های مختلفه مقادیر خروجی فصل پنجم: آرایه ها آرایه یک بعدی آرایه دو بعدی فصل ششم: توابع تعریف تابع تابع بازگشتی توابع درون خطی انتقال پارامترها از طریق ارجاع کلاس های حافظه ( storage classes ) سربارگذاری توابع فصل هفتم: ساختارها و اشاره گرها ساختارها Union ها اشاره گرها ( Pointer) تعریف آرایه آرایه های دو بعدی و اشاره گرها تخصیص حافظه بصورت پویا ( عملگر new ) رشته ها و توابع مربوطه فصل هشتم: برنامه نویسی شی گرا تعریف شی گرایی چند ریختی خاصیت ارث بری پشته ایجاد شی ارث بری سازنده ها و نابود کننده ها توابع دوست کلاس های دوست توابع سازنده پارامتر دار توابع سازنده یک پارامتری عضوهای static کلاسهای تو در تو کلاس های محلی استفاده از object ها بعنوان پارامترهای تابع برگشت اشیاء انتساب اشیاء آرایه اشیاء اشاره گر به اشیاء اشاره گر this توابع مجازی و پلی مرفیسم