جزوه تایپ شده برنامه سازی پیشرفته ۲
کاردانی دانشگاه آزاد خلاصه کتاب برنامه سازی پیشرفته 2 علمی کاربردی پیام نور کارشناسی ارشد دکترا استخدامی صاحبی دکتر طرقی حقیقت
:
=; ; :
: (> ) << ” ” << << ;
(== ) << ” ” << << ;
<< ” ” << << ;
-:
()
{ -: ; ; -: ; ; -: ; ; -: ; ;
(…) : ;
}
)(
++ :
:
;}() }به جایstatement دستوری که بايد تکرار شود قرار میگيرد .
اگر مقدار شرط، صفر)يعنی نادرست( باشد ،statement ناديده گرفته میشود و برنامه به اولين دستور بعد از while پرش میکند. اگر مقدار شرط ناصفر)يعنی درست( باشد ،statement اجرا شده و دوباره مقدار شرط بررسی میشود. اين تکرار آن قدر ادامه میيابد تا اين که مقدار شرط صفر شود.
مثال: برنامه ای بنويسيد که حاصل جمع اعداد صحيح متوالی را با استفاده از حلقۀ while بنويسد. اين برنامه مقدار 1 + 2 + 3 + … + n را برای عدد ورودی n محاسبه میکند:
int n, i=1;
cout << “Enter a positive integer: “;
cin >> n;
int sum=0;
while (i <= n) {
sum += i;
i++;
}
cout << “The sum of ” << n << ” integers is ” << sum ; .نوشته می شود main نکته: کدهای مذکور داخل تابع
مثال: برنامۀ زير، همۀ اعداد فيبوناچی را تا يک محدودۀ مشخص که از ورودی دريافت میشود، محاسبه و چاپ میکند:
int bound,i=1;
cout << “Enter a positive integer: “; cin >> bound;
cout << “Fibonacci numbers < ” << bound <<“n 0,1” ; int f0=0, f1=1; while (i<=bound)
{
int f2 = f0 + f1; i++ ; cout << “,” <<f2; f0 = f1; f1 = f2;

برنامه سازی پیشرفته
}
نمونه خروجی برای محدوده مشخص bound=5 به صورت زير است:
دستورdo-while ساختار do..while روش ديگری برای ساختن حلقه است . نحو آن به صورت زير است:
do
{ statement
{ ;(while (conditionبه جای condition يک شرط قرار میگيرد و به جای statement دستور يا بلوکی قرار میگيرد که قرار است تکرار شود .
اين دستور ابتدا statement را اجرا میکند و سپس شرط condition را بررسی میکند. اگر شرط درست بود حلقه دوباره تکرار میشود وگرنه حلقه پايان میيابد.
نکته: دستور do..while مانند دستور while است. با اين فرق که شرط کنترل حلقه به جای اين که در ابتدای حلقه ارزيابی گردد، در انتهای حلقه ارزيابی میشود.
مثال: محاسبۀ حاصل جمع اعداد جزوه برنامه سازی پیشرفته ۲ متوالی با حلقۀ while – do
#include <iostream.h>
#include <conio.h>
int main()
{ int n, i=0; cout << “Enter a positive integer: “;
cin >> n; int sum=0; do sum += i++; while (i < n);
cout << “The sum of the first ” << n << ” integers is ” << sum; getch(); return 0;
}
مثال: برنامه ای بنويسيد که فاکتوريل هر عدد صحيحی که کاربر وارد می کند را محاسبه کند:
int main()
{
int bound;
cout << “Enter a positive integer: “; cin >> bound;
cout << “Factorial numbers < ” << bound << “:n”; int f=1, i=1; do
{ f *= i; i++;
}
while (i <= bound); cout << f;
{به عنوان مثال فرض کنيد می خواهيم فاکتوريل عدد 5 محاسبه شود. در اين صورت خروجی زير توليد می شود:
حلقه for
وقتی بخشی از کد به تعداد معينی تکرار شود حلقه for بکار برده می شود .
يک عدد صحيح به عنوان شمارنده حلقه برای شمارش تعداد دفعات اجرای حلقه استفاده می شود. در دستور بايد تعيين شود شمارنده از کجا شروع کند ،کی متوقف شود و چقدر افزيش يا کاهش پيدا کند .
در C++ فرم کلی حلقه for به صورت زير است:
دانلود جزوه برنامه سازی پیشرفته ۲ رایگان خلاصه کتاب pdf
قسمت های condition ،initialو update همگی توسط علامت سميکولن از هم جدا می شوند. Loop_body ) بدنه حلقه( دستورات داخل حلقه است که بايد تکرار شود. اگر بدنه حلقه فقط شامل يک دستور باشد نيازی به آکولاد نيست. اما اگر بيشتر از يکی باشد بايد درون آکولاد محصور شود تا به عنوان بلاکی از کد ديده شود .
مثال: با استفاده از حلقه for برنامه ای بنويسيد که اعداد جزوه برنامه سازی پیشرفته ۲چاپ کند:
#include <iostream.h>
#include <conio.h>
int main()
{ int count; for (count = 1; count <= 30; count++)
cout << count << endl;
getch();
return 0;
}
معمولا شمارنده حلقه به صورت صعودی افزايش پيدا می کند ولی می توان حلقه هائی داشت که متغيير شمارنده آن به صورت های ديگری تغيير می کند .
مثال: در حلقه زير شمارنده حلقه هر بار يک واحد کم می شود.
(–for (count = 100; count > 0; count مثال. در حلقه زير شمارنده حلقه هر بار 5 واحد زياد می شود.
for (count = 0; count < 1000; count += 5)
نکته. قسمت های condition ،initial و update هر کدام می توانند حذف شوند .
نکته. اگر قسمت شرط حذف شود هميشه درست فرض می شود .
حلقه for تو در تو
يک دستور for می تواند درون دستور ديگری قرار بگيرد. در اين حالت حلقه داخلی به تعداد تکرار شمارنده خود ضرب در شمارنده حلقه بيرونی تکرار می شود.
مثال:
for (int i = 1 ; i < 3 ; i++ )
{ for(int j= 1 ; j < 5 ; j++ )
{ cout << “This is inner loop ” << j ; cout << ” of outer loop ” << i << endl;
}
{دستور cout درون حلقه داخلی 6*2=8 بار تکرار می شود. مثال: برنامۀ زير يک جدول ضرب چاپ میکند:
#include <conio.h> #include <iostream.h> int main()
{
for (int x=1; x <= 10; x++)
{
for (int y=1; y <= 10; y++) cout << x*y << “t”;
cout << endl;
}
getch(); return 0;
}
خروجی کد مذکور به صورت زير است:
برای اين که برنامههای بزرگ قابل مديريت باشند، برنامهنويسان اين برنامهها را به زيربرنامههايی بخشبندی میکنند. اين زيربرنامهها «تابع» ناميده میشوند. توابع را میتوان به طور جداگانه کامپايل و آزمايش نمود و در برنامههای مختلف دوباره از آنها استفاده کرد.تابع اساس برنامه جزوه برنامه سازی پیشرفته ۲ ساختيافته است که باعث بالارفتن کارائی برنامه ها و آسانتر شدن برنامه نويسی می شود .
در واقع تابع) function( بلاکی ازکد است که کار خاصی را انجام می دهند و تحت يک نام گروه بندی می شود .
بدين ترتيب بلاک کد می تواند به هنگام نياز با استفاده از نامش اجرا شود. اين عمل فراخوانی تابع) function call( ناميده می شود. وقتی تابعی فراخوانی می شود دستورات درون تابع اجرا می شود. در انتهای تابع اجرا به همان محلی که تابع فراخوانی شده بود برمی گردد. ممکن است پارامترهايی به تابع ارسال شود. معمولا تابع مقداری را به برنامه فراخوان برمی گرداند .
تعريف تابع شامل دو قسمت است: اعلان و بدنه.
اولين خط تعريف تابع اعلان يا هدر است که اسم تابع، نوع مقدار برگشتی و آرگومان های تابع را مشخص می کند .
بعد از هدر بدنه تابع قرار می گيرد. بدنه تابع بلاکی از دستورات است که درون يک جفت آکولاد محصور می شود و هر زمان که تابع فراخوانی می شود اجرا می شود.
فرم کلی تعريف تابع به صورت زير است:
31
return_type function_name ( arg-type name-1,…,arg-type name-n)
{
/* statements; */
{مثال: تابع زير مربع يک عدد را محاسبه می کند.
double square (double n)
{ return n * n;
{تابع مذکور دارای يک آرگومان است.
نکته: در انتهای اعلان تابع علامت سميکولن وجود ندارد واگر گذاشته شود کامپايلر پيغام خطا صادر می شود.
نوع برگشتی تابع نوع مقداری است که توسط تابع محاسبه و به برنامه فراخوان برگردانده می شود. نوع برگشنی می تواند از هر نوع استانداردی باشد. اگر تابع مقداری را بر نمی گرداند نوع برگشتی آن void بايد تعريف می شود.
نام تابع از قوانين نامگذاری متغيرها تبعيت می کند. بهتر است نام تابع بيان کننده کاری که تابع انجام می دهد باشد. مثلا اگر تابع برای محاسبه مربع يک عدد است نام هايی مثل number_square مناسب است.
تابع می تواند هيچ، يک يا چند پارامتر داشته باشد. اگر تابعی پارامتر بگيرد به اين معنی است که به مقاديری نياز دارد تا روی آنها کار کند. در مثال تابع مربع، عددی که می خواهيد مربع کنيد بايد به تابع داده شود. اين عدد پارامتر تابع است. پارامترها از هر نوع داده ای می تواند باشد.. اگر تابع بيش از يک پارامتر بگيرد پارامترها توسط کاما جدا می شوند و نوع و نام هر پارامتر بايد جداگانه مشخص شود. برای اعلان تابعی بدون پارامتر پرانتز بايد خالی بماند.
تفاوت آرگومان و پارامتر
گاهی بين پارامتر و آرگومان اشتباه پيش می آيد. يک پارامتر) parameter( يک محلی در هدر تابع است که برای ذخيره مقدار آرگومان عمل می کند. پارامترهای تابع ثابت هستند و در طی اجرای برنامه تغيير نمی کنند .يک آرگومان مقدار وقعی ارسال شده به تابع توسط دستور فراخوانی است. هر زمان که تابعی فراخوانی می شود آرگومان های مختلف می تواند به آن ارسال شود. درون تابع به آرگومان ها توسط نام پارامترهای متناظر دسترسی می شوند.
مثال. در برنامه زير تابع square برای محاسبه مربع عدد جزوه برنامه سازی پیشرفته ۲ توسط تابع اصلی فراخوانی می شود.
1. #include <iostream.h>
2. #include <conio.h>
3. double square(double n) {
4. return n * n;
5. }
6. int main()
7. {
8. double num;
9. cout << “What do you want to know the square “;
10. cin >> num;
11. cout << “The square of ” << num << ” is ” << square(num) << “.n”;
12. getch();
13. }
توضيح: در خط 1و2 و 5 تعريف تابع صورت گرفته است. در خط 00 تابع فراخوانی شده است: square(num) مثال: برنامه ای بنويسيد که دو عدد را از ورودی گرفته عدد بزرگتر را نمايش دهد.
1. #include <iostream.h>
2. #include <conio.h>
3. int larger_of( int , int );
4. int larger_of( int a, int b) {
5. if (a > b) return a;
6. else return b;
7. }
8. int main() {
9. int x, y, z;
10. cout <<“Enter two different integer values: “; 11. cin >> x >> y;
12. z = larger_of(x,y);
13. cout << “n The larger value is ” << z;
14. getch();
15. return 0;
16. }
توضيح: خطوط 1 تا 7 به تعريف و بدنه اصلی تابع اشاره دارد. جزوه برنامه سازی پیشرفته ۲ تابع در خط 06 فراخوانی می
شود و مقدار بازگشتی آن )مقدار حاصل از اجرای تابع ايجاد شده( در متغير z نگهداری می شود.
مثال: برنامه ای بنويسيد که عددی را از ورودی خوانده و به تابعی تحويل می دهد. تابع تشخيص می دهد که عدد مورد نظر اول است يا خير .
1. #include <iostream.h>
2. #include <conio.h>
3. bool prime(int num){
4. bool temp=1;
5. for (int i=2; (i<=num/2) && temp; i++)
6. if (num % 2 ==0)
7. temp=false;
8. return temp;
9. }

خلاصه کتاب برنامه سازی پیشرفته
10. int main() {
11. int num;
12. cout<< “enter a number:”;
13. cin>>num;
14. if (prime (num))
15. cout<<num <<“is prime”;
16. else
17. cout<<num <<“is not prime”;
18. getch();
19. return 0;
20. }
توضيح: خطوط 1 تا 9 تابع prime را ايجاد می کند تا به بررسی اول بودن يا نبودن عدد بپردازد .
بدين ترتيب که عدد مورد نظر را بر اعداد” 6 تا نصف عدد مورد نظر” تقسيم کرده و باقی مانده تقسيم) num % 2(را در شرط if بررسی کرده تا اگر باقی مانده صفر شد )نشانه اول نبودن( مقدار temp را false قرار می دهد. در نهايت مقدار temp برگشت داده می شود.
در خط 02که تابع prime فراخوانی می شود خروجی تابع بررسی می شود تا اگر مقدار آن) temp( يک بود در خروجی بنويسد: عدد مورد نظر اول است در غير اين صورت اول نيست.
توابع ریاضی کتابخانه ای
کتابخانۀ C++ استاندارد مجموعهای است که شامل توابع از پيش تعريف شده و ساير عناصر برنامه است. اين توابع و عناصر از طريق «هدر» قابل دستيابیاند. گروهی از اين توابع پيش ساخته شامل توابعی هستند که در انجام عمليات رياضی به کار می روند. اين توابع در فايل math.h قرار دارند .
برای استفاده از يک تابع کتابخانه ای ابتدا تابع و شرح جزوه برنامه سازی پیشرفته ۲ را از مراجع برنامه نويسی پيدا کنيد. هر تابع کتابخانه ای دارای يک هدر فايل است که و توسط دستور include# بايد به برنامه ضميمه شود .تابع را طبق گرامر آن فراخوانی کنيد. اگر در فراخوانی تابع اشتباهی وجود داشته باشد کامپايلر پيغام خطا می دهد. برخی از توابع رياضی و ساختار آنها در جدول زير مشهود است:
مثال: با استفاده از توابع رياضی برنامه ای بنويسيد که يک عدد و يک توان از ورودی گرفته، عدد را به آن توان رسانده و در خروجی چاپ کند.
#include <iostream.h>
#include <math.h> #include <conio.h> int main()
{
double x,y;
cout<<“Enter the number:n”; cin>>x;
cout<<“Enter the power:n”; cin>>y;
cout<<“Result: “<<pow(x,y); getch(); return 0; }
نمونه خروجی:
مثال: برنامه ای بنويسيد که با استفاده از توابع رياضی جذر عدد را محاسبه کند.
#include <iostream.h>
#include <math.h>
#include <conio.h>
int main()
{ double x,y; cout<<“Enter the number:n”;
cin>>x; y=sqrt(x); cout<<“Result: “<<y;
getch(); return 0;
}
توابع بازگشتی
اين امکان وجود دارد که يک تابع خودش را صدا بزند. در اين حالت تابع را بازگشتی) recursive( می نامند. يک تابع بازگشتی بايد دارای شرطی باشد که به ازای آن خود را فراخوانی نمی کند. روش بازگشتی برای مسائلی استفاده می شود که مسئله اصلی می تواند به نسخه های کوچک تری از نسخه اصلی شکسته شود .
مثال معروف بازگشتی تابع فاکتوريل است. تابع جزوه برنامه سازی پیشرفته ۲ در رياضی به صورت حاصل ضرب اعداد صحيح غير منفی به صورت زير تعريف می شود:
1 = 0! به ازاn! = n * (n-1) * (n-2) * … * 2 * 1 : n > 0 اين تعريف براحتی به تابع زير منتهی می شود:
long factorial (int n) {
int k; long result = 1; for (k = 2; k <= n; k++) result = result * k; return result;
{اما تابع فاکتوريل را به صورت زير نيز می تواند تعريف کرد: 1 = 0!
به ازا n! = n * (n-1)! : n > 0 که با توجه ضابطه فوق تابع بازگشتی آن به صورت زير نوشته می شود:
long factorial (int n) { if ((n == 0) || (n == 1)) return 1; else // recursive case return n * factorial(n – 1); } :اجرای برنامه
#include <iostream.h>
#include <conio.h>
int factorial (int n) { if ((n == 0) || (n == 1)) return 1; else // recursive case return n * factorial(n – )1;
}
int main()
{ int n;
cout<<“Enter the number:n”; cin>>n; cout<<factorial(n); getch();
return 0;
}
مثال: تابع بازگشتی معروف ديگر فيبوناچی است که ضابطه آن صورت زير است:
fib(0) = 1 fib(1) = 1
fib(n) = fib(n-1) + fib(n-2) for n > 1 :تابع بازگشتی فيبوناچی به صورت زير است
long fib(int n) {
if ((n == 0) || (n == 1)) // stopping cases return 1; else // recursive case return fib(n – 1) + fib(n – )2;
{آرایه
يک آرايه، يک زنجيره از متغيرهايی است که همه از يک نوع هستند. به اين متغيرها «اعضای آرايه» میگويند. هر عضو آرايه با يک شماره مشخص میشود که به اين شماره «ايندکس» میگويند.
عناصر يک آرايه در خانههای پشت سر هم در جزوه برنامه سازی پیشرفته ۲ ذخيره میشوند. به اين ترتيب آرايه را میتوان بخشی از حافظه تصور کرد که اين بخش خود به قسمتهای مساوی تقسيم شده و هر قسمت به يک عنصر تعلق دارد.
شکل کلی تعريف آرايه به صورت زير است:
DataType array_name [size];
Size تعداد عناصر آرايه است که در کروشه ذکر می شود .DataType نوع عناصر آرايه است که از هر نوع داده ای می تواند باشد.
نکته: اندازه آرايه بايد در زمان کامپايل مشخص باشد و در طول زمان اجرا ثابت است و تغيير نمی کند
مثال. آرايه A که به صورت زير تعريف شده است يک آرايه يک بعدی با 5 عنصر از نوع صحيح است. عناصر آن
.است A[4] و A[3] , A[2] , A[1] , A[0] شامل
int A[5];مثال: شکل مقابل آرايۀ a که پنج عنصر دارد را نشان میدهد.
0 17.50
1 19.00
2 16.75
3 15.00
4 18.00
مثلا عنصر a[0] حاوی مقدار 17.5 و عنصر a[1] حاوی 19.0 است.
مثال: برنامۀ سادۀ زير يک آرايۀ سه عنصری را تعريف میکند و سپس مقاديری را در آن قرار داده و سرانجام اين مقادير را چاپ میکند:
int main() { int a[3];
a[2] = 55; a[0] = 11; a[1] = 33; cout << “a[0] = ” << a[0] << endl; cout << “a[1] = ” << a[1] << andl; cout << “a[2] = ” << a[2] << endl;
}
هنگام دسترسی به عناصر آرايه بعد از اسم آرايه بايد درون کروشه شماره انديس عنصر مورد نظر ذکر شود. در مثال بالا عناصر آرايه توسط دستور انتساب مقداردهی شد. می توان مقدار عناصر آرايه را از ورودی نيز دريافت
کرد:
آرایه یک بعدی
در آرايه های يک بعدی که لیست نيز ناميده ميشوند، با يک انديس ميتوان به عناصر آرايه دست يافت. آرايه های يک بعدی در ++C بصورت زير تعريف ميشوند:
[طول آرایه [ نام آرایه نوع آرایه
نوع آرایه يکی از انواع قابل استفاده در++ C است .نام آرایه برای دسترسی به عناصر آرايه مورد استفاده قرار ميگيرد و طول آرایه با يک عددصحيح مثبت مشخص ميشود.
انديس آرايه ها در++ C از صفر شروع ميشود. ميزان جزوه برنامه سازی پیشرفته ۲ ای که به آرايه اختصاص داده ميشود، به روش زير محاسبه ميشود:
طول آرايه * )طول نوع آرايه( = ميزان حافظه آرايه
:
فهرست مطالب