Download presentation
Presentation is loading. Please wait.
1
«آرايهها و رشته ها»
2
تعريف آرايه يک آرايه، يك زنجيره از متغيرهايي است كه همه از يك نوع هستند. به اين متغيرها «اعضاي آرايه» ميگويند. هر عضو آرايه با يک شماره مشخص ميشود که به اين شماره «انديس» ميگويند
3
تعريف آرايه (ادامه..) عناصر يک آرايه در خانههاي پشت سر هم در حافظه ذخيره ميشوند. به اين ترتيب آرايه را ميتوان بخشي از حافظه تصور کرد که اين بخش خود به قسمتهاي مساوي تقسيم شده و هر قسمت به يک عنصر تعلق دارد.
4
شکل مقابل آرايۀ a که پنج عنصر دارد را نشان ميدهد.
عنصر a[0] حاوي مقدار 17.5 و عنصر a[1] حاوي 19.0 و عنصر a[4] حاوي مقدار 18.0 است. انديس آرايه ها از صفر شروع ميشود 17.50 1 19.00 2 16.75 3 15.00 4 18.00
5
مقداردهي آرايهها float a[] = {22.2,44.4,66.6};
در C++ ميتوانيم يک آرايه را با استفاده از فهرست مقداردهي، اعلان و مقدارگذاري کنيم: float a[] = {22.2,44.4,66.6}; a 22.2 1 44.4 2 66.6
6
مقداردهي آرايهها به اين ترتيب مقادير داخل فهرست به همان ترتيبي که چيده شدهاند درون عناصر آرايه قرار ميگيرند. اندازه آرايه نيز برابر با تعداد عناصر موجود در فهرست خواهد بود. پس همين خط مختصر، آرايهاي از نوع float و با نام a و با تعداد سه عنصر اعلان کرده و هر سه عنصر را با مقدارهاي درون فهرست، مقداردهي ميکند. a 22.2 1 44.4 2 66.6
7
مثال مقداردهي آرايه با استفاده از فهرست مقداردهي برنامۀ زير، آرايۀ a را مقداردهي کرده و سپس مقدار هر عنصر را چاپ ميكند: 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 << "] = " << a[i] << endl; } a[0] = 22.2 a[1] = 44.4 a[2] = 66.6
8
ارسال آرايه به تابع
9
ارسال آرايه به تابعي كه مجموع عناصر آرايه را برميگرداند
int sum(int[],int); int main() { int a[] = { 11, 33, 55, 77 }; int size = sizeof(a)/sizeof(int); cout << "sum(a,size) = " << sum(a,size) << endl;} int sum(int a[], int n) { int sum=0; for (int i=0; i<n; i++) sum += a[i]; return sum; }
10
ارسال آرايه به تابع بصورت مرجع ميباشد
هر تغييري كه درون تابع روي آرگومان آرايهاي ورودي ايجادگردد، تغيير در مرجع اوليه اعمال ميگردد.
11
آرایه ها به عنوان عضو داده ای کلاس
برای درک این مفهوم از مثال پشته استفاده می کنیم پشته ليست آخرين ورودي-اولين خروجي ميباشد.
12
پشته حذف و جايگذاري عناصر در يک پشته D C C C B B B B A A A A A ← top
13
class stack { private: enum {maxitem=10}; int st[maxitem]; //عناصر موجود در پشته را نگه ميدارد int top; //انديس آخرين عنصر را نگه ميدارد public: stack() {top=-1;} void push(int var) { st[++top]=var; } int pop() { return st[top--];} };
14
void main() { stack s1; s1.push(11); s1.push(22); s1.push(33); s1.push(44); cout<<“1: “<<s1.pop()<<endl; cout<<“2: “<<s1.pop()<<endl; cout<<“3: “<<s1.pop()<<endl; cout<<“4: “<<s1.pop()<<endl; }
15
همان طور که ملاحظه می کنید عضو ها بصورت عکس از پشته برداشته می شوند.
خروجی حاصل از مثال قبل به صورت زیر خواهد بود: 1: 44 2: 33 3: 22 2: 11 همان طور که ملاحظه می کنید عضو ها بصورت عکس از پشته برداشته می شوند.
16
نکته: می توان آرایه ای از اشیاء هم ایجاد کرد:
stack s[100];
17
صف صف يك ليستي از عناصر است
ويژگي صف اين است كه هر عنصر جديد به انتهاي ليست اضافه ميشود و عمليات حذف از صف از ابتداي صف انجام ميشود.
18
صف A،B،C،D را به ترتيب اضافه مي کنيم در حالي که A اولين عنصري است که حذف مي شود A B A C B A C B D C B ← rear ← rear ← rear ← rear ← rear ADD A ADD B ADD C DELETE ADD D
19
تمرين 7 يك صف براي نگهداري اعداد صحيح تعريف نماييد و 10 عدد را از كاربر گرفته و در صف قرار دهيد سپس يكي يكي عناصر را از صف خارج و در خروجي نمايش دهيد. براي پياده سازي از فرمها در VC استفاده نماييد.
20
رشته ها در زبان C++ دادههايي که در رايانهها پردازش ميشوند هميشه عدد نيستند. معمولا لازم است که اطلاعات کاراکتري مثل نام افراد – نشانيها – متون – توضيحات – کلمات و ... نيز پردازش گردند، جستجو شوند، مقايسه شوند، به يکديگر الصاق شوند يا از هم تفکيک گردند. در اين مبحث بررسي ميکنيم که چطور اطلاعات کاراکتري را از ورودي دريافت کنيم و يا آنها را به شکل دلخواه به خروجي بفرستيم. در همين راستا توابعي معرفي ميکنيم که انجام اين کارها را آسان ميکنند.
21
رشتههاي كاراكتري در C در زبان C++ يك «رشتۀ کاراکتري» آرايهاي از کاراکترهاست که اين آرايه داراي ويژگي مهم زير است: 1- يك بخش اضافي در انتهاي آرايه وجود دارد که مقدار آن، کاراکتر NULL يعني '\0‘ است. پس تعداد کل کاراکترها در آرايه هميشه يکي بيشتر از طول رشته است. 2- رشتۀ کاراکتري را ميتوان با ليترال رشتهاي به طور مستقيم مقدارگذاري کرد مثل: char str[] = "string"; توجه كنيد كه اين آرايه هفت عنصر دارد: 's' و 't' و 'r' و 'i' و 'n' و 'g' و '\0'
22
رشتههاي كاراكتري در C (ادامه..)
3- کل يک رشتۀ کاراکتري را ميتوان مثل يک متغير معمولي چاپ کرد. مثل: cout << str; در اين صورت، همۀ کاراکترهاي درون رشتۀ کاراکتري str يکي يکي به خروجي ميروند تا وقتي که به کاراکتر انتهايي NULL برخورد شود.
23
رشتههاي كاراكتري در C (ادامه..)
4- يک رشتۀ کاراکتري را ميتوان مثل يک متغير معمولي از ورودي دريافت کرد مثل: cin >> str; در اين صورت، همۀ کاراکترهاي وارد شده يکي يکي درون str جاي ميگيرند تا وقتي که به يک فضاي خالي در کاراکترهاي ورودي برخورد شود. برنامهنويس بايد مطمئن باشد که آرايۀ str براي دريافت همۀ کاراکترهاي وارد شده جا دارد.
24
ديگر توابع رشتههاي كاراكتري در C
5- توابع تعريف شده در سرفايل <string.h> را ميتوانيم براي دستکاري رشتههاي کاراکتري به کار بگيريم. اين توابع عبارتند از: تابع طول رشته strlen() توابع کپي رشته strcpy() و strncpy() توابع الصاق رشتهها strcat() و strncat() توابع مقايسۀ رشتهها strcmp() و strncmp() توابع جستجوي زير رشته در يك رشته strstr()
25
ورودي/خروجي رشتههاي کاراکتري:
در C++ به چند روش ميتوان رشتههاي کاراکتري را دريافت کرده يا نمايش داد. يک راه استفاده از عملگرهاي کلاس string است که در بخشهاي بعدي به آن خواهيم پرداخت. روش ديگر، استفاده از توابع کمکي است که آن را در ادامه شرح ميدهيم.
26
cout<< “Enter String: ”; cin>>word;
مثال :روش سادۀ دريافت و نمايش رشتههاي کاراکتري: در برنامۀ زير يک رشتۀ کاراکتري به طول 79 کاراکتر اعلان شده و کلماتي که از ورودي خوانده ميشود در آن رشته قرار ميگيرد: int main() { char word[80]; cout<< “Enter String: ”; cin>>word; cout<<“U entered:”<<word<<endl; return 0; }
27
؟ در برنامه قبل و برای نمایش اطلاعات ذخیره شده یک مشکل خواهیم داست:
اگر یک جمله با تعدادی کلمات نوشته شود در خروجی فقط کلمه اول چا پ می شود. دلیل این مشکل این است که عملگر >> کاراکتر فضای خالی را به عنوان کاراکتر انتهای رشته در نظر می گیرد. برای رفع این مشکل چه باید کرد؟ ؟
28
cout<< “Enter String: ”; cin.get(word,80);
برای خواندن یک رشته با فضای خالی از تابع cin.get ويا cin.getline استفاده می کنیم: int main() { char word[80]; cout<< “Enter String: ”; cin.get(word,80); cout<<“U entered:”<<word<<endl; return 0; } آرگومان اول این تابع آدرس آرایه است که در آن رشته خوانده شده قرار می گیرد.
29
با استفاده از اپرا تور >> :
آرگومان دوم این تابع حد اکثر طول آرایه را مشخص می کند.این عمل با عث می شود به طور اتوما تیک از سر ریزی بافر جلو گیری می کند. با استفاده از اپرا تور >> : Enter a string: my name is Spiderking U entered: my با استفاده از cin.get() Enter a string: my name is Spiderking U entered: my name is Spiderking
30
با دو پارامتر cin.getline() تابع
اين برنامه ورودي را خط به خط به خروجي ميفرستد: void main() { char line[80]; do { cin.getline(line,80); if (*line) cout << "\t[" << line << "]\n"; } while (*line); }
31
با سه پارامتر cin.get() تابع
برنامه زير، متن ورودي را چند خط هم که باشد می خواند: void main() { char str[2000]; cout<<"enter string:\n"; cin.get(str,2000,'$'); cout<<str; getch(); }
32
توابع كاراكتري C استاندارد
توابعي که در سرفايل <ctype.h> يا <cctype> تعريف شده به شرح زير است: شرح نام تابع int isalnum(int c); اگر c کاراکتر الفبايي يا عددي باشد مقدار غيرصفر وگرنه صفر را برميگرداند isalnum() int isalpha(int c); اگر c کاراکتر الفبايي باشد مقدار غيرصفر و در غير آن، صفر را برميگرداند isalpha()
33
شرح نام تابع int iscntrl(int c); اگر c کاراکتر کنترلي باشد مقدار غيرصفر و در غير آن، صفر را برميگرداند iscntrl() int isdigit(int c); اگر c کاراکتر عددي باشد، مقدار غيرصفر و در غير آن، صفر را برميگرداند isdigit() int isgraph(int c); اگر c کاراکتر چاپي و غيرخالي باشد مقدار غيرصفر وگرنه صفر را برميگرداند isgraph() int islower(int c); اگر c حرف کوچک باشد مقدار غيرصفر و در غير آن، صفر را برميگرداند islower() int isprint(int c); اگر c کاراکتر قابل چاپ باشد مقدار غيرصفر و در غير آن، صفر را برميگرداند isprint()
34
ispunct() isspace() isupper() isxdigit() tolower() toupper()
شرح نام تابع int ispunct(int c); اگر c کاراکتر چاپي به غير از حروف و اعداد و فضاي خالي باشد، مقدار غيرصفر برميگرداند وگرنه مقدار صفر را برميگرداند ispunct() int isspace(int c); اگر c کاراکتر فضاي سفيد شامل فضاي خالي ' ' و عبور فرم '\f' و خط جديد '\n' و بازگشت نورد '\r' و پرش افقي '\t' و پرش عمودي '\v' باشد، مقدار غيرصفر را برميگرداند وگرنه صفر را برميگرداند isspace() int isupper(int c); اگر c حرف بزرگ باشد، مقدار غيرصفر برميگرداند وگرنه صفر را برميگرداند isupper() int isxdigit(int c); اگر c يکي از ده کاراکتر عددي يا يکي از دوازده حرف عدد شانزدهدهي شامل 'a' و 'b' و 'c' و 'd' و 'e' و 'f' و 'A' و 'B' و 'C' و 'D' و 'E' و 'F' باشد، مقدار غيرصفر برميگرداند وگرنه مقدار صفر را برميگرداند isxdigit() int tolower(int c); اگر c حرف بزرگ باشد، کاراکتر کوچک معادل آن را برميگرداند وگرنه خود c را برميگرداند tolower() int toupper(int c); اگر c حرف کوچک باشد، کاراکتر بزرگ معادل آن را برميگرداند وگرنه خود c را برميگرداند toupper()
35
نوع string در ++C استاندارد
در C++ استاندارد نوع دادهاي خاصي به نام string وجود دارد که مشخصات اين نوع در سرفايل <string.h> تعريف شده است. براي آشنايي با اين نوع جديد، از طريقۀ اعلان و مقداردهي آن شروع ميکنيم. اشيايي که از نوع string هستند به چند طريق ميتوانند اعلان و مقداردهي شوند: string s1; // s1 contains 0 characters string s2 = “Shahed University"; // s2 contains 17 characters string s3(60, '*'); // s3 contains 60 stars string s4 = s3; // s4 contains 60 stars
36
ديگر توابع كلاس string s3 += s2; دو رشته را به هم متصل می کند
s1.swap(s2); مقدار دو شیئ را عوض می کند s4.concat(s1); s1 به انتهای s4 اضافه می شود s1 + “spiderking” نوشته ثابت را به انتهای s1 اضافه میکند.
37
حتی می توان رشته ها را با هم مقایسه کرد:
if (s1==s2); while(s1<s3); if(s1>s2); اگر این کلاس مهم وجود نداشت می بایست برنامه ای به صورت زیر نوشت تا بتوان دو رشته را مقایسه کرد که وقت گیر می باشد و مقرون به صرفه نیست
38
چند تمرين و برنامه ساده با رشتهها
برنامه 1: با استفاده از كلاس string برنامه اي بنويسيد كه يك رشته را از كاربر گرفته و آنرا نمايش دهد.
39
#include "conio.h" #include <string> #include <iostream> using namespace std; int main(int argc, char* argv[]) { string ms; cout<<"Enter your name:"; cin>>ms; cout<<"\nYou entered:"<<ms; getch(); return 0; }
40
چند تمرين و برنامه ساده با رشتهها
برنامه 2: برنامه اي بنويسيد كه يك رشته را از كاربر گرفته و طول آنرا به كاربر نمايش دهد. رشته ورودي با كلمه “Programmer” مقايسه شده و درصورت مساوي بودن پيام مناسب داده شود.
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
تمرين 8 8-1- برنامه اي بنويسيد كه نام دانشجويان و شماره دانشجویی اعضا يك كلاس حداكثر 50 نفره را از كاربر گرفته و پس از مرتب سازي ليست براساس نام دانشجو، اسامي را نمايش دهد. برنامه باید بتواند اطلاعات را درون فایل ذخیره نماید و از فایل بازیابی کند. براي نوشتن برنامه يك کلاس دانشجو تعریف و آرايه ای بطول 50 تعريف نماييد. نام دانشجو از نوع string باشد. براي مرتب سازي ليست از الگوريتم مرتبسازي حبابي استفاده كنيد برنامه را ميتوانيد با استفاده از فرمها پياده سازي نماييد بدين شكل كه روي فرم اصلي برنامه يك ListBox قرار ميدهيد و با زدن يك دكمه ديالوگ جديد ظاهر ميشود كه نام يك دانشجوي جديد را ميگيرد و در نهايت ليست دانشجويان روي ليست فرم اصلي برنامه نمايش داده ميشود. در این مورد استفاده از فایل متنی ساده تر میباشد.
43
ادامه تمرین 8 8-2- برنامه ای بنویسید که یک کلمه را در فایل با کلمه دیگری جایگزین نماید. ورودی برنامه: - اسم فایل – کلمه مورد نظر- کلمه جایگزین میباشد. 8-3-برنامه ای بنویسید که یک عدد صحیح از کاربر گرفته و آنرا بخواند. مثلا با ورود 134 خروجی صد و سی و چهار و یا یکصد و سی و چهار را تولید نماید
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.