programming_lecture_2
programming_lecture_2
Using C++
بخش دوم
جعفری: استاد
مقدمات C++
فهرست مطالب فصل اول
در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است.
چند مثال از اعالن متغیر ها :
✓ برای اعالن متغیر xاز نوع : int
int ;x
✓ برای اعالن متغیرهای pو qرا از نوع floatکه هر کدام چهار بایت از
حافظه را اشغال میکنند :
; float p , q
✓ برای اعالن متغیر nextاز نوع کرکتر که میتوان یکی از 256کرکتر را به
آن تخصیص داد و یك بایت را اشغال میکند.
; char next
تخصيص مقادير به متغيرها
در اسالید بعد مثال هایی از اعالن متغیر ذکر شده است.
مثال :
\n Newline
\t Tab \ میتوان برای ایجاد صدایa بعنوان مثال از کرکتر
\b Backspace . استفاده نمودbeep
char x = '\a ;
\a Beep sound
\” Double quote
\’ Single quote
\0 Null character
\? Question mark
\\ Back slash
رشتهها
به منصور دریافت مقادیر برای متغيرها در ضمن اجرای برنامه از فحه كليدم از cin
كه بدنبال آن عملار استخراج یعني >> قيد شد باشد ميتوان استفاد نمود.
: مثال
int x;
cout << "Enter a number:" ;
cin >> x;
عملگر انتساب
;x=a+b
; x=35
; x=y=z=26
جمع +
تفریق -
ضرب *
تقسیم /
باقیمانده %
این عملگرها دو تائی میباشند زیرا روی دو عملوند عمل مینمایند .از طرف
دیگر عملگرهای +و – رامیتوان بعنوان عملگرهای یکتائی نیز در نظر گرفت.
مثال : 1
در حالتی که هر دو عملوند عملگرهای – ، + ، * ، / ، %از نوع صحیح باشد نتیجه
عمل از نوع صحیح میباشد.
عبارت نتیجه
5+2 7
5*2 10
5–2 3
5%2 1
5/2 2
مثال : 2
در صورتیکه حداقل یکی از عملوندهای عملگرهای + ، – ، * ، /از نوع اعشاری باشد
نتیجه عمل از نوع اعشاری میباشد.
عبارت نتیجه
5. 0 +2 7. 0
5* 2. 0 10.0
5. 0 / 2 2.5
5. 0 -2 3. 0
5. 0 / 2. 0 2.5
عملگرهاي افزایش و كاهش
;--y
;y=y-1
; y- -
از عملگرهای ++و --میتوان بدو صورت پیشوندی و پسوندی استفاده نمود.
در دستورالعملهای پیچیده عملگر پیشوندی قبل از انتساب ارزیابی میشود و عملگر
پسوندی بعد از انتساب ارزیابی میشود.
مثال :
;int x=5
;y=++x * 2
پس از اجرای دستورالعملهای فوق :
y=12
;int x=5
;y=x++ * 2
پس از اجرای دستورالعملهای فوق :
y=10
عملگر sizeof
Sizeofازعملگرهای یکتائی می باشد و مشخص کننده تعداد بایت
هائی است که یك نوع داده اشغال میکند.
مثال :
;int x
; cout << sizeof x
مقدار 2نمایش داده میشود .
; )cout << sizeof(float
مقدار 4نمایش داده می شود.
عملگرهاي جایگزیني محاسباتي
ارزیابی مقدار یك عبارت ریاضی براساس جدول اولویت عملگرها انجام میگردد .در ذیل جدول اولویت
عملگرها براساس بترتیب از بیشترین اولویت به کمترین اولویت داده شده است.
7 *(6+2*2)/2
7*(6+4)/2
7* 10 /2
70 /2
35
: 2 مثال
: خروجی
1 9 2 7
توضیحات ()Comments
توضیحات در برنامه باعث خوانائی بیشتر و درك بهتر برنامه میشود .بنابراین
توصیه بر آن است که حتی االمکان در برنامهها از توضیحات استفاده نمائیم .در
،C++توضیحات بدو صورت انجام میگیرد که در اسالیدهای بعد به آن اشاره
شده است.
توضیحات ()Comments
الف :این نوع توضیح بوسیله //انجام میشود .که کامپیوتر هر چیدزی را
که بعد از //قرار داده شود تا انتهای آن خط اغماض مینماید.
مثال :
اکنون باتوجه به مرالب گفته شده قادر خواهیم بود که تعدادی برنامه سداده و کوچدك بده زبدان
C++بنویسیم .برای نوشتن برنامه بایستی دستورالعملها را در تابع ) ( mainقرار دهیم و بدرای
اینکار میتوان به یکی از دو طریقی که در اسالیدهای بعد آمده است ،عمل نمود.
روش اول :
#include <iostream>
int main( )
{
cout <<"C++ is an object oriented language \n" ;
return 0 ;
}
.برنامه زیر یك حرف انگلیسي كوچك را گرفته به حرف بزرگ تبدیل مينماید
#include <iostream>
#include <stdlib. h>
int main( )
{
char c1 , c2;
cout << "Enter a lowercase letter:"
cin >> c1;
c2 = toupper(c1);
cout << c2 << endl;
return 0; }
دو عدد از نوع اعشاري را گرفته مجموع و حاصلضرب آنها را محاسبه و نمایش ميدهد.
>#include <iostream
) (int main
{
float ; x,y,s,p
; cin >> x >> y
; s= x+y
;p=x*y
;cout << s <<endl << p
; return 0
}
البراتوار
== مساوي
=! مخالف
> بزرگتر
=> بزرگتر يا مساوي
< كوچكتر
=< كوچكتر يا مساوي
عملگر شرطي
این دو دستور العمل باعث میشوند که ماکزیمم مقادیر yو xدر bقرار بگیرد.
مثال : 2
; "x>=10 ? cout << "passed" : cout << "failed
if(x != y)
{
cout << x ;
++ x ;
}
else
{
cout << y ;
--y;
}
:2 مثال
.برنامه زیر یك عدد اعشاری را از ورودی گرفته جذر آنرا محاسبه مینماید
#include <iostream>
#include <math . h>
int main( )
{
float x,s;
cin >> x ;
if( x < 0 )
cout << " x is negative" << endl ;
else
{
s = sqrt(x) ;
cout << s << endl ;
}
return 0;
}
تركيب دستورات شرطي
NO YES
x > min?
Display “x is NO YES
outside the limits.”
x < max?
if (x > min)
{
if (x < max)
cout<<"x is within the limits"; Display “x is Display “x is
outside the limits.” within limits.”
else
cout<<"x is outside the limits";
}
else
cout<<"x is outside the limits";
:مثال
if (x < 0.25)
if (x < 0)
count1++;
sign = -1;
else if (x >= 0.25 && x < 0.5)
else if (x == 0)
count2++;
sign = 0;
else if (x >= 0.5 && x < 0.75)
else
count3++;
sign = 1;
else
count4++;
عملگر كاما
تعدادی عبارت را میتوان با کاما بهدم متصدل نمدود و
تشکیل یك عبارت پیچیدهتری را داد .این عبارتها بده
ترتیب از چپ به راست ارزیابی شده و مقددار عبدارت
معادل عبارت nمیباشد.
; int a=2 , b=4 , c=5عبارت زیر را در نظر بگیرید: اگر داشته باشیم
با استفاده از عملگرهای منرقی میتوان شرطهای ترکیبی در برنامه ایجاد نمود.
عملگرهای منرقی عبارتست از :
AND
OR
NOT
که در C++به ترتیب بصورت زیر نشان داده میشود.
&&
||
!
جدول درستي سه عملگر شرطي
a b a || b
true true True
true false True
false true True
false false False
a b a && b
true true True
true false False
false true False
false false False
a !a
true False
false True
چند مثال :
))if ((x= = 5) ||(y != 0
; cout << x << endl
اگر xبرابر با 5یا yمخالف صفر باشد مقدار xنمایش داده شود .
)if(x
;x=0
اگر مقدار xمخالف صفر باشد ،آنگاه xبرابر با صفر شود .
برنامه زیر طول سه پارهخط را از ورودي گرفته مشخص مينماید كه آیا تشكیل یك مثلث میدهد یا خیر؟
❑ قيمت مطلقه
❑ مثبتممنفي و فر
❑ ماكمیمم دو عدد
❑ مينيمم سه عدد
❑ جفت یا طاق بودن
❑ بخش پذیری بر 5
❑ بخش پذیری بر 5و 3
❑ حل معادله درجه 2
دستورالعمل For
از دستور العمل forبرای تکرار دستورالعملها استفاده میشود .شکل کلی دستور
forبصورت زیر میباشد:
(عبارت ; 3عبارت ; 2عبارت for )1
{
; دستورالعمل 1
; دستورالعمل 2
.
.
.
;دستورالعمل n
}
. را از ورودی گرفته فاکتوریل آنرا محاسبه ونمایش میدهدn برنامه زیر عدد صحیح و مثبت
#include <iostream>
int main( )
{
int n, i ;
long fact = 1 ;
cout << "Enter a positive integer number";
cin >> n;
for( i=1; i<=n; ++i)
fact *= i;
cout << fact << endl;
return 0 ;
}
برنامه زیر مجموع اعداد صحیح و متوالی بین 1تا nرا محاسبه نموده و نمایش میدهد.
#include ><iostream
int ) (main
{
; int n, i=1
; long s = 0
; cin >> n
)for(; i<=n; i++
;s += i
; cout << s
} ; return 0
. را نمایش میدهد9 تا0 برنامه زیر ارقام
#include <iostream>
int main( )
{
int j=0 ;
for( ; j <= 9 ; )
cout << j++ << endl;
return 0 ;
}
. ایجاد میشوند را نمایش میدهد3 ، 2 ، 1 برنامه زیر کلیه اعداد سه رقمی که با ارقام
#include <iostream>
int main( )
{
int i,j,k,n;
for(i=1; i<=3; ++i)
for(j=1; j<=3; ++j)
for(k=1; k<=3; ++k)
{
n=i*100 + j*10+k;
cout << n << ‘\n’ ;
}
return 0 ;
}
البراتوار
)شرط (while
}
; دستورالعمل 1
; دستورالعمل 2
.
.
; دستورالعمل n
}
تفاوت دستورهاي whileو for
int x=0
)while(x<5
;cout << x ++<< endl
با اجرای قرعه برنامه فوق مقادیر زیر نمایش داده میشود :
0
1
2
3
4
. قرار ميدهدavg مقدار از نوع اعشاري را گرفته اوسط آنها را محاسبه و در متغیرn برنامة فوق
#inclode <iostream>
int main( )
{
int count = 0 , n;
float x, sum = 0 , avg ;
cin >> n ; /* تعداد مقادیر ورودیn*/
while(count < n){
cin >> x ;
sum += x ;
++ count ; }
avg = sum / n ;
cout << avg << endl;
return 0 ; }
دستورالعمل do while
این دستور العمل نيم برای تكرار یك دستورالعمل سطاد
یا تركيبي استفاد ميشود .شكل كلي این دستورالعمل
بصورت زیر ميباشد.
do
}
; دستورالعمل 1
; دستورالعمل 2
.
.
; دستورالعمل n
;)شرط (} while
تفاوت دستورهاي do whileو while
#include <iostream>
int main( )
{
int count = 0;
do
cout << count ++<<endl ;
while(count <= 9);
return 0 ; }
را روی ده خط نمایش میدهد9 تا0 ارقام
دستورالعمل break
این دستورالعمل باعث توقف دستورالعملهای تکرار( )for , while ,do whileشده و
کنترل به خارج از این دستورالعملها منتقل مینماید.
: 1 مثال
#include <iostream>
int main( )
{
float x, s=0.0 ;
cin >> x ;
while(x <= 1000.0) {
if(x < 0.0){
cout << "Error-Negative Value" ;
break;
}
s += x ;
cin >> x ;}
cout << s << endl ;
return 0 ; }
:2 مثال
#include <iostream>
int main( )
{
int count = 0 ;
while( 1 )
{
count ++ ;
if(count > 10 )
break ;
}
cout << "counter : " << count << "\n";
return 0 ;
}
:3 مثال
#include <iostream>
void main( )
{
int count;
float x, sum = 0;
cin >> x ;
for(count = 1; x < 1000 . 0; ++ count )
{
cin >> x ;
if(x < 0.0) {
cout << "Error – Negative value " <<endl;
break ;
}
sum += x ; }
cout << sum << \n ; }
:4 مثال
#include <iostream>
int main( )
{
float x , sum = 0.0 ;
do
{
cin >> x ;
if(x < 0.0)
{
cout << "Error – Negative Value" << endl ;
break ;
}
sum += x ;
} while(x <= 1000.0);
cout << sum << endl ;
return 0 ; }
البراتوار
#include <iostream>
int main( )
{
float x, sum = 0.0 ;
Do
{
cin >> x ;
if(x < 0 . 0)
{
cout << "Error" << endl ;
continue ;
}
sum += x ;
} while(x <= 1000.0 );
cout << sum ;
return 0 ; }
:2 مثال
#include <iostream>
int main( )
{
int n , navg = 0 ;
float x, avg, sum = 0 ;
cin >> n ; / * عبارت از تعداد اعداد ورودیn * /
for(int count = 1 ; count <=n; ++ count )
{
cin >> x ;
if(x < 0 ) continue ;
sum += x ;
++ navg ;
}
avg = sum / navg;
cout << avg << endl ;
return 0 ;
}
دستورالعمل switch
همانرور که می دانید از دستورالعمل شرطی( )if elseمی توان بصورت تودرتو
استفاده نمود ولی از طرفی اگر عمق استفادة تو در تو از این دستورالعمل زیداد
گردد ،درك آنها مشکل میشود .برای حدل ایدن مشدکل ، C++دسدتورالعمل
switchکه عمالً یك دستورالعمل چند انتخابی میباشد را ارائه نموده است.
Switch شكل كلي دستور العمل
switch()عبارت
{
case valueone : statement;
break;
case valuetwo: statement;
break;
char ;x
;) (x = cin.get
; cout << x
. استفاده شده استswitch و دستورcin.get() در قطعه برنامه ذیل ازتابع
char x;
x = cin.get( );
switch(x) {
case r :
case R :
cout << RED << \n ;
break ;
case b :
case B :
cout << BLUE << endl ;
break ;
case y :
case Y :
cout << YELLOW << endl;
}
البراتوار
از این عملگر برای تبدیل موقت یك نوع dataبه نوع دیگر
استفاده میشود .این عملگر یك عملگر یکتائی میباشد.
مثال :1
; int x = 25
; float y
y = static_cast
; )< float >(x
; float x = 14.75
<< cout
static_cast < int
;>(x) << endl
; cout << x
i=0;
j=3;
++i+4/2+ -- j=1+4/2+-- j
=1+4/2+2=1+2+2=3+2=5
البراتوار
آرایه ها
آرایه یك بعدي
x
x
4 2 5 17 30
0 1 2 3 4
دریافت مقادیر عناصر آرایه :
;]int x[5
)for(int i=0; i<=4; ++i
; ] cin >> x[ i
x
12 5 7 0 0
0 1 2 3 4
بایستي توجه داشت كه آرایهها به صورت ضمني مقدار اولیه صفر نميگیرند .برنامه نویس باید به عضو اول آرایه،
مقدار اولیه صفر تخصیص دهد تا عضوهاي باقيمانده بطور اتوماتیك ،مقدار اولیه صفر بگیرند.
x
0 0 0 0 0
0 1 2 3 4
دستور زیر یك آرایه یك بعدي شش عنصري از نوع floatایجاد مينماید.
x
2.4 6.3 -17.1 14.2 5.9 16.5
0 1 2 3 4 5
عدد اعشاری و مثبت را گرفته تشکیل یك آرایه میدهد سپس مجموع عناصر آرایه را مشخص100 برنامه ذیل
.نموده نمایش میدهد
#include <iostream>
#include <iomanip.h>
int main( )
{
const int arrsize = 100 ;
float x[ arrsize], tot = 0.0 ;
for(int j=0; j<arrsize; j++)
cin >> x[ j ];
for(j=0; j<arrsize; j++)
cout << setiosflags(ios::fixed|ios :: showpoint ) << setw(12) <<
setprecision(2) << x[ j ] << endl;
for(j=0; j<arrsize; j++)
tot += x[ j ] ;
cout << tot ;
return 0 ;
}
عدد اعشاري را گرفته تشكیل یك آرایه داده سپس كوچكترین عنصر آرایه را20 برنامه ذیل
.مشخص و نمایش ميدهد
#include <iostream>
#include <conio.h>
int main( )
{
float x[20], s;
int j ;
clrscr( ) ;
for(j=0; j<20 ; ++j) cin >> x[ j ];
s = x[0 ] ;
for(j=1; j<20; ++j)
if(x[ j] <s) s = x[ j ];
cout << s << endl;
return 0;
}
.) بصورت صعودي مرتب مينمایدBubble sort( عدد اعشاري را گرفته بروش حبابي100 برنامه زیر
#include <iostream>
#include <conio.h>
int main ( )
{
float x[100] , temp;
int i,j ;
clrscr( );
for(i=0; i<100; ++i)
cin >> x[i ];
for(i=0; i<99; i++)
for(j=i+1 ; j<100; j++)
if(x[ j ] < x[i ]
{
temp = x[ j ] ;
x[ j ] = x[ i ];
x[ i ] = temp ;
}
for(i=0; i<=99; i++)
cout << x[ i ] << endl;
return 0 ;
}
البراتوار
توابع
تعریف توابع
لیست پارامتر ها جهت انتقال اطالعات از تابع احضار کننده به تابع فراخوانده شده
نام تابع
}
#include <iostream.h>
char low_to_up(char c1)
{ x
char c2;
c2=(c1 >= a && c1 <= z )?( A +c1 - a ) : c1; ‘d’
return c2;
}
int main( )
{
char x; c1
x=cin.get( );
cout << low_to_up(x) ; ‘d’
return 0;
}
c2
‘D’
آرگومان
تابع maximumدو مقدار صحیح را گرفته بزرگترین آنها را برمیگرداند.
#include <iostream>
int maximum(int x , int y)
{ a b
int z ; 10 15
z=(x > y)? x : y ;
return z;
}
int main( ) x y
{
int a, b ; 10 15
cin >> a >> b ;
cout << maximum(a,b);
return 0;
}
z
15
maximum آرگومانهای تابعa, b
اسامی پارامترها و آرگومانهای یك تابع
میتوانند همنام باشند.
.برنامه زیر یك مقدار مثبت را گرفته فاکتوریل آنرا محاسیه نموده نمایش میدهد
x!=1*2*3*4*…*(x-1)*x
#include <iostream>
main درn
long int factorial(int n)
{ 3
long int prod=1;
if(n>1)
for(int i=2; i<=n; ++i)
prod *=i;
return(prod); factorial درn
}
int main( ) 3
{
int n;
factorial درi
cin >> n ;
cout << factorial(n) ; 2,3,4
return 0 ;
}
factorial درprod
6
وقتی در تابعی ،تابع دیگر احضار میگردد
بایستی تعریف تابع احضار شونده قبل از
تعریف تابع احضار کننده در برنامه ظاهر گردد.
اگر بخواهیم در برنامهها ابتدا تابع mainظاهر
گردد بایستی prototypeتابع یعنی پیش
نمونة تابع که شامل نام تابع ،نوع مقدار
برگشتی تابع ،تعداد پارامترهائی را که تابع
انتظار دریافت آنرا دارد و انواع پارامترها و
ترتیب قرارگرفتن این پارامترها را به اطالع
کامپیلر برساند.