صفحه 1:
«آرایهها و رشته ها»
صفحه 2:
6 تعريف آرايه
* يك آرايه. يك زنجيره از متغيرهايى است كه همه از يك نوع
هستند.
* به اين متغيرها «اعضاى آرايه» میگویند.
* هر عضو آرايه با يك شماره مشخص مىشود كه به اين شماره
«انديس» مى كويند
صفحه 3:
: تعریف آرایه (ادامه.)
* عناصر یک آرایه در خانههای پشت سر هم در حافظه ذخیره
میشوند. به این ترتیب آرایه را میتوان بخشی از حافظه تصور
کرد که این بخش خود به قسمتهای مساوی تقسیم شده و
هر قسمت به یک عنصر تعلق دارد.
صفحه 4:
* شكل مقابل آراية كه ينج عنصر دارد را نشان میدهد.
* عنصر [2101 حاوی مقدار ۱۷۰.۵ و عنصر [2]1 حاوی ۱۹.۰ و
عنصر [۵]4 حاوی مقدار ۱۸۰۰ است.
* انديس آرایه ها از صفر شروع میشود
texte
۱۷۵۰
۱۹-۰۰
۱۶۰۷۵
۱۵.۰۰
۱۸۳-۰۰
صفحه 5:
ball مقداردهی
* در )+ میتوانیم یک آرایه را با استفاده از فهرست مقداردهی,
اعلان و مقدار گذاری کنیم:
;float a[] = {22.2,44.4,66.6}
۳۲۳۲
rer] ١
۶۶۶
5
صفحه 6:
مقداردهی آرایهها
* به اين ترتيب مقادير داخل فهرست به همان ترتيبى که جيد
شدهاند درون عناصر آرایه قرار میگیرند. cite ره و
برابر با تعداد عناصر موجود در فهرست خواهد بود.
؟پس همین خط مختصر آرايهاى از نوع :11021 و با نام وبا
تعداد سه عنصر اعلان کرده و هر سه عنصر را با مقدارهای
درون فهرست. مقداردهی میکند.
2
rey
rer] 1
۶۶۶] ۲
صفحه 7:
مثال مقداردهی آرایه با استفاده از فهرست مقداردهی برنامةً
زیر آراية 3 را مقداردهی کرده و سپس مقدار هر عنصر را چاپ
میکند:
void main()
{
float a[] = { 22.2, 44.4, 66.6 };
int size = sizeof(a)/sizeof(float);
for (int i=0; i<size; i++)
cout << "\ta[" << i << "] =" << afi] <<
endl;
2 2 [2]0 }
4 - [2]1
al2] = 66.6
صفحه 8:
ارسال آرایه به تابع
صفحه 9:
ارسال آرایه به تابعی که مجموع عناصر آرایه را برمی گرداند
int sum(int[],int);
int main()
int af] = { 11, 33, 55, 77}; {
int size = sizeof(a)/sizeof(int);
cout << "sum(a,size) =
endl;}
int sum(int a[], int n)
<< sum(a,size) <<
{ int sum=0;
for (int i=0; i<n; i++)
sum += ali];
return sum;
صفحه 10:
“ارسال آرایه به تابع بصورت مرجع میباشد
*هر تغييرى كه درون تابع روى آركومان
ارايهاى ورودى ايجاد كردد. تغيير در مرجع
اولیه اعمال میگردد.
صفحه 11:
آرایه ها به عنوان عضو داده ای کلاس
* براى درك اين مفهوم از مثال پشته استفاده می کنیم
* يشته ليست آخرين ورودى-اولين خروجى ميباشد.
صفحه 12:
مه >
شنه
+ © © <
1 ۶ ۵ هاس
حذف و جايگذاري عناصر در یک پشته
صفحه 13:
class stack
1 ۳
private:
enum {maxitem=10};
int st[maxitem]; //s br. عناصر موجود در پشته را نگه
int top; لتنیس] خریرچنصر را ن گه میدارد//
public:
stack()
{top=-1;}
void push(int var)
{ st[++top]=var; }
int pop()
{ return st[top--];}
1
صفحه 14:
void main()
{
stack s1;
sl.push(11);
sl.push(22);
s1.push(33);
sl.push(44);
“<<sl.pop()<<endl;
“<<sl.pop()<<endl;
“<<s1.pop()<<endl;
“<<sl.pop()<<endl;
cout<<“1:
cout<<“2:
cout<<“3:
انام > > “4:
صفحه 15:
* خروجی حاصل از مثال قبل به صورت زیر خواهد بود:
سر ی نیا بح
N
N
همان طور که ملاحظه می کنید عضو ها بصورت عکس
.از پشته برداشته می شوند
صفحه 16:
نکته: می توان آرایه ای از اشیاء هم ایجاد کرد:
stack s[100];
صفحه 17:
صف
؟ صف یک لیستی از عناصر است
؟ویژگی صف این است که هر عنصر جدید به انتهای لیست
اضافه میشود و عملیات حذف از صف از ابتدای صف انجام
ميشود.
صفحه 18:
؟ ,۸.2 رابه ترتیب اضافه می کنیم در حالی که 4 اولين
عنصری است که حذف می شود
«| rear « rear
reare | C rear 0
+ ۲۵۵۲ | و 8 c c
A A A B B
ADDA ADDB ADD C DELETE ADDD
صفحه 19:
۷ تمرین ee
۱۰ ؟ یک صف برای نگهداری اعداد صحیح تعریف نمایید و
عدد را از کاربر گرفته و در صف قرار دهید سپس یکی یکی
عناصر را از صف خارج و در خروجی نمایش دهید.
»براى poly سازی از فرمها در ۷2 استفاده نمایید.
صفحه 20:
رشته ها در زبان aC
؟ دادههایی که در رایانهها پردازش میشوند هميشه عدد
نیستند. معمولا لازم است که اطلاعات کاراکتری مثل نام افراد
- نشانیها - متون - توضیحات - کلمات و ... نیز پردازش
گردند. جستجو شوند. مقایسه شوند. به یکدیگر الصاق شوند
يا از هم تفکیک گردند.
* در این مبحث بررسی میکنیم که چطور اطلاعات کاراکتری را
از ورودی دریافت کنیم و پا آنها را به شکل دلخواه به
خروجی بفرستیم. . در همین راستا توابعی معرفی میکنیم که
انجام اين کارها را آسان میکنند.
صفحه 21:
رشتههای کاراکتری در ن
* در زبان /)++ یک «رشتةّ کاراکتری» آرایهای از کاراکترهاست که
اين آرایه دارای ویژگی مهم زیر است:
© ۱-یک بخش اضافی در انتهای آرایه وجود دارد که مقدار آن. کاراکتر
,]1 یعنی ۰۱" است. پس تعداد کل کاراکترها در آرایه هميشه یکی
بیشتر از طول رشته است.
* ۲- رشتةٌ کاراکتری را میتوان با لیترال رشتهای به طور مستقیم
مقدار گذاری کرد مثل:
© char str[] = "string";
توجه کنید که این آرایه هفت عنصر دارد: *
و
صفحه 22:
83 رشتههای کاراکتری در (abst) C
*؟- کل یک رشتةً کاراکتری را میتوان مثل يك متغير معمولی
چاپ کرد. مثل:
cout << str; *
۴ در این صورت. همه کاراکترهای درون رشتة كاراكترى SEP
یکی یکی به خروجی میروند تا وقتی که به کاراکتر انتهایی
NULL برخورد شود.
صفحه 23:
رشتههای کاراکتری در (abst) C
© - يك رشتة كاراكترى را مىتوان مثل يك متغير معمولی از
ورودى دريافت كرد مثل:
51 << ررزه »
* در اين صورت,. همة كاراكترهاى وارد شده يكى يكى درون 51:1
جاى مى كيرند تا وقتى كه به يى فضاى خالى در كاراكترهاى
ويودى برخورد شود. برنامهنويس بايد مطمئن باشد كه آراية
57 برای دریافت همه کاراکترهای وارد شده جا دارد.
صفحه 24:
2 دیگر توابع رشتههای کاراکتری در SS
* ۵- توابع تعریف شده در سرفایل <57100.12> را
میتوانیم برای دستکاری رشتههای کاراکتری به کار بگیریم.
اين توابع عبارتند از:
© تابع طول رشته 0517161
* توابع کپی رشته 51700۷ و 005112027
* توابع الصاق رشتهها تاو و Qstrncat
؟ توابع مقايسةّ رشتهها 05701500 و تاک(
* توابع جستجوی زیر رشته در یک رشته تأ5و)
صفحه 25:
ورودی /خروجی رشتههای کاراکتری:
* در ن6++به چند روش میتوان رشتههای کاراکتری را دریافت
کرده یا نمایش داد.
* یک راه استفاده از عملگرهای کلاس 51711167 است که در
بخشهای بعدی به آن خواهیم پرداخت.
* روش دیگر. استفاده از توابع کمکی است که آن را در ادامه شرح
میدهیم.
صفحه 26:
مثال :«روش سادةٌ دریافت و نمایش رشتههای کاراکتری:
در برنامة زیر یک Gd, کاراکتری به طول ۷٩ کاراکتر اعلان شده و
کلماتی که از ورودی خوانده میشود در آن رشته قرار میگیرد:
(jist scr
‘char word[OO] }
۲ woout<< “Cater Gtricry
jo>>Lword
joout<<“O eatered.”<<word<<eerd
0 انار
t
صفحه 27:
*؟ در برنامه قبل و برای نمایش اطلاعات ذخیره شده یک مشکل
خواهیم داست:
؟اگر یک جمله با تعدادی کلمات نوشته شود در خروجی فقط
* كلمه اول جا ب مى شود.
* دليل اين مشكل اين است كه عملكر > > كاراكتر فضاى خالى را
به عنوان كاراكتر انتهاى رشته در نظر مى كيرد.
* براى رفع اين مشكل جه بايد كرد؟
۰
صفحه 28:
* براى خواندن یک رشته با فضای خالی از تابع 0110.06
ویا 011.06111116 استفاده می کنیم:
wu ا
whur word[OO] }
wot<< “Cater Stag ۲
(6©00,لمصي)اي. داور
الجج>كلسورر> > ”:لجسومج () تكك ليوز
00 مار
1
آركومان اول اين تابع آدرس آرايه است كه در آن رشته خوانده
de. قرار مى كيرد
صفحه 29:
® آر گومان دوم اين تابع حد اکثر طول آرایه را مشخص
* مى کند.این عمل با عث می شود به طور اتوما تیک از
سر ریزی بافر جلو گیری می کند.
: << با استفاده از اپرا تور
Enter a string: my name is
Spiderking
U entered: my
با استفاده از
Enter a string: my nam@fen-gset
Spiderking
U entered: my name is Spiderking
صفحه 30:
5 | با دو پارامتر 0011.0611106 تابع
این برنامه ورودی را خط به خط به خروجی میفرستد:
void main()
char line[80]; {
do
cin.getline(line,80); {
if (*line) cout << "\t[" << line << "]\n";
while (*line); }
1
صفحه 31:
:| باسه بارامتر 75.9 () تابع
:برنامه زير» متن ورودى را جند خط هم كه باشد مى خواند
void main()
{
char str[2000];
cout<<"enter string:\n";
cin.get(str,2000,'$');
cout<<str;
getch();
صفحه 32:
توایع کاراکتری ) استاندارد
* توابعى كه در سرفايل <cctype> b <ctype.h>
تعريف شده به شرح زير است:
eG eb
Oisalnum
Qisalpha
شرح
jint isalnum(int c)
اگر > کاراکتر الفبلییبا عددی باشد مقدار غیرصفر وگینه صفر را
برمی گرداند
jint isalpha(int c)
اكر ع كاراكتر الفبليى باشد مقدار غيرصفر و در غير آنن» صفر را
برم ی گرداند
صفحه 33:
نام تابع
QOiscntrl
Qisdigit
Qisgraph
QOislower
Qisprint
شرح
jint iscntrl(int c)
اگر 6 کاراکتر کنتیلی باشد مقدار غیرصفر و در غیر ن. صفر
را برمی گرداند
jint isdigit(int c)
اگر » کاراکتر عددی باشد. مقدار غیرصفر و در غیر لن.
صفر را برمی گرداند
101 isgraph(int c)
اگر © كاراكتر حليى و غير خللى باشد مقدار غیرصفر و گرنه
صفر را برمی گرداند
jint islower(int c)
اگر CC حرف کوچک باشد مقدار غیرصفر و در غیر آن. صفر
را برمی گرداند
jint isprint(int c)
اكر © كاراكتر قلبل چاپ باشد مقدار غیرصفر و در غیر col
صفر را برمی گرداند
صفحه 34:
نام تاب
Qispunct
Qisspace
Qisupper
QOisxdigit
Otolower
Qtoupper
jint ispunct(int c)
اكر © كاراكتر جابى به غير از حروف و اعداد و فضاى خالى باشد. مقدار غیرصفر
پر كردائف وكرقه مقدار ضفر را يزمى گردائد
jint isspace(int c)
اگر 6 كاراكتر فضاى سفيد شامل فضاى خللى ' ' عبور فرم ۴۱۳" و خط جدید
۳ و بازگشت نورد ۲۳۱۳ و پرش افقی 6۱۳" و پرش عمودی ۲۷۱۳ باشد.
مقدار غیرصفر را برمی گرداند وگرنه صفر را پرمی گرداند
jint isupper(int c)
اگر 6 حرف بزرگ باشد. مقدار غیرصفربرمیگرداند وگرنه صفر را برمى كردائد
jint isxdigit(int c)
2 اگر > یکی از ده کاراکتر عددی یا یکی از دوازده حرف عدد
۳ ee ee Eee
باشد.مقدارغبرصفر بمیگرداند وكرنه مقدار صفر را برمى كردائد ٩
zint tolower(int c)
اگر > حرف بزرگ باشد. کاراکتر کوچک معادل ن را برمیگرداند وگرنه خود 6 را
برمی گرداند
jint toupper(int c)
اگر 6 حرف کوچک باشد. کاراکتر بزرگ معادل dd را پرمیگرداند وگرشه خود 6 را
برمی گرداند
صفحه 35:
نوع 5131126 در ++ 0 استاندارد
ee
* در 7)++ استاندارد نوع دادهای خاصی به نام 571110 وجود دارد
که مشخصات این نوع در سرفایل <0.11 5117111 > تعریف شده
است. برای آشنایی با اين نوع جدید. از طريقة اعلان و مقداردهی
آن شروع میکنیم. اشیایی که از نوع )5177111 هستند به چند
طریق میتوانند اعلان و مقداردهی شوند:
O characters جمدكمص )5 // 50 ماصع
Il sO vooins UP characters :"وده (1) “GSkoked = 6و رد
siriagy 5O(OO, ™'); Il s9 poutine OO stars
sis 90 موی sO; I s® = و ره
صفحه 36:
دیگر توابع كلاس string
9 =+ $3
* دو رشته را به هم متصل می کند
;sl.swap(s2) *
© مقدار دو شیی را عوض می کند
;s4.concat(s1) ®
© 1 به لنتهای94 لضافه میشود
“spiderking ۶ + 91«
© نوشته ثابت را به انتهای 51 اضافه میکند.
صفحه 37:
*حتی می توان رشته ها را با هم مقایسه کرد:
if (sl==s2) ®
;while(s1<s3) ®
sif(s1>s2) ®
*اگر این كلاس مهم وجود نداشت می بایست برنامه ای به
صورت زیر نوشت تا بتوان دو رشته را مقایسه کرد که وقت
كير مى باشد و مقرون به صرفه نیست
صفحه 38:
oo چند تمرین و برنامه ساده با رشتهها
* برنامه :١ با استفاده از كلاس 5111110 برنامه ای بنویسید که
يك رشته رااز كاربر كرفته و آنرا نمايش دهد.
صفحه 39:
#include "conio.h"
include <string>
#include <iostream
sing namespac
int main(int argc, char* argv[])
{
string ms;
cout<<"Enter your name:";
cin>>ms;
cout<<"\nYou entered:"<<ms;
getch();
return 0;
صفحه 40:
چند تمرین و برنامه ساده با رشتهها
برنامه ۲: برنامه ای بنویسید که یک رشته را از کاربر گرفته و
طول آنرا به کاربر نمایش دهد. رشته ورودی با کلمه
7 مقایسه شده و درصورت مساوی بودن
پیام مناسب داده شود.
صفحه 41:
int main(int argc, char* argv[])
{
string ms;
cout<<"Enter your name:
cin>>ms;
cout<<"\nYou entered:"<<ms;
cout<<"\nLength:"<<ms.length();
if(ms.compare(" Programmer ")==0)
cout<<"\nYour name is Equal
to \"Programmer \"";
else
cout<<"\nYour name is not Equal
to \"Programmer \"";
getch();
return 0;
صفحه 42:
تمرین ۸
*؟ ۸-۱-برنامه ای بنویسید که نام دانشجوپان و شماره دانشجویی اعضا یک
کلاس حداکثر ۵۰ نفره را از کاربر گرفته و پس از مرتب سازى ليست
براساس نام دانشجو, اسامی را نمایش دهد.
* برنامه بايد بتواند اطلاعات را درون فایل ذخیره نماید و از فایل بازیابی کند.
* برای نوشتن برنامه یک کلاس دانشجو تعریف و آرایه ای بطول ۵۰ تعریف
نمایید. نام دانشجو از نوع 511110 باشد.
* برای مرتب سازی لیست از الگوریتم مر تبسازی حبابی استفاده کنید
برنامه را با استفاده از فرمها پیاده سازی نمایید بدین شکل که روی
فرم اصلى برنامه يك JIS ListBox میدهید و با زدن یک دکمه دیالوگ
جدید ظاهر میشود که نام یک دانشجوی جدید را میگیرد و در نهایت لیست
دانشجویان روی لیست فرم اصلی برنامه نمایش داده ميشود.
؟ در این مورد استفاده از فایل متنی ساده تر میباشد.
صفحه 43:
۸ ادامه تمرین se
؟ ۸-۲- برنامه ای بنویسید که یک کلمه را در فایل با کلمه
دیگری جایگزین نماید. ورودی برنامه: - اسم فایل - کلمه
مورد نظر- کلمه جایگزین میباشد.
* ۸-۳برنامه ای بنویسید که یک عدد صحیح از کاربر گرفته و
آنرا بخواند. مثلا با ورود ۱۳۴ خروجی صد و سی و چهار و یا
یکصد و سی و چهار را تولید نماید