آرایهها و رشته ها
اسلاید 1: «آرايهها و رشته ها»
اسلاید 2: تعريف آرايهيک آرايه، يك زنجيره از متغيرهايي است كه همه از يك نوع هستند. به اين متغيرها «اعضاي آرايه» ميگويند. هر عضو آرايه با يک شماره مشخص ميشود که به اين شماره «انديس» ميگويند
اسلاید 3: تعريف آرايه (ادامه..)عناصر يک آرايه در خانههاي پشت سر هم در حافظه ذخيره ميشوند. به اين ترتيب آرايه را ميتوان بخشي از حافظه تصور کرد که اين بخش خود به قسمتهاي مساوي تقسيم شده و هر قسمت به يک عنصر تعلق دارد.
اسلاید 4: 017.50119.00216.75315.00418.00شکل مقابل آرايۀ a که پنج عنصر دارد را نشان ميدهد. عنصر a[0] حاوي مقدار 17.5 و عنصر a[1] حاوي 19.0 و عنصر a[4] حاوي مقدار 18.0 است.انديس آرايه ها از صفر شروع ميشود
اسلاید 5: مقداردهي آرايههادر C++ ميتوانيم يک آرايه را با استفاده از فهرست مقداردهي، اعلان و مقدارگذاري کنيم:float a[] = {22.2,44.4,66.6};a022.2144.4266.6
اسلاید 6: مقداردهي آرايههابه اين ترتيب مقادير داخل فهرست به همان ترتيبي که چيده شدهاند درون عناصر آرايه قرار ميگيرند. اندازه آرايه نيز برابر با تعداد عناصر موجود در فهرست خواهد بود.پس همين خط مختصر، آرايهاي از نوع float و با نام a و با تعداد سه عنصر اعلان کرده و هر سه عنصر را با مقدارهاي درون فهرست، مقداردهي ميکند. a022.2144.4266.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: پشتهCBA← top← top← topDCBACBA← top←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: 442: 333: 222: 11همان طور که ملاحظه می کنید عضو ها بصورت عکس از پشته برداشته می شوند.
اسلاید 16: نکته: می توان آرایه ای از اشیاء هم ایجاد کرد:stack s[100];
اسلاید 17: صفصف يك ليستي از عناصر استويژگي صف اين است كه هر عنصر جديد به انتهاي ليست اضافه ميشود و عمليات حذف از صف از ابتداي صف انجام ميشود.
اسلاید 18: صف A،B،C،D را به ترتيب اضافه مي کنيم در حالي که A اولين عنصري است که حذف مي شودA← rear← rear← rear← rear← rearBACBACBDCBADD AADD BADD CDELETEADD 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: ديگر توابع رشتههاي كاراكتري در C5- توابع تعريف شده در سرفايل <string.h> را ميتوانيم براي دستکاري رشتههاي کاراکتري به کار بگيريم. اين توابع عبارتند از: تابع طول رشته strlen() توابع کپي رشته strcpy() و strncpy()توابع الصاق رشتهها strcat() و strncat() توابع مقايسۀ رشتهها strcmp() و strncmp()توابع جستجوي زير رشته در يك رشته strstr()
اسلاید 25: ورودي/خروجي رشتههاي کاراکتري:در C++ به چند روش ميتوان رشتههاي کاراکتري را دريافت کرده يا نمايش داد. يک راه استفاده از عملگرهاي کلاس string است که در بخشهاي بعدي به آن خواهيم پرداخت. روش ديگر، استفاده از توابع کمکي است که آن را در ادامه شرح ميدهيم.
اسلاید 26: مثال :روش سادۀ دريافت و نمايش رشتههاي کاراکتري:در برنامۀ زير يک رشتۀ کاراکتري به طول 79 کاراکتر اعلان شده و کلماتي که از ورودي خوانده ميشود در آن رشته قرار ميگيرد:int main(){ char word[80]; cout<< “Enter String: ”; cin>>word; cout<<“U entered:”<<word<<endl; return 0;}
اسلاید 27: در برنامه قبل و برای نمایش اطلاعات ذخیره شده یک مشکل خواهیم داست:اگر یک جمله با تعدادی کلمات نوشته شود در خروجی فقط کلمه اول چا پ می شود.دلیل این مشکل این است که عملگر >> کاراکتر فضای خالی را به عنوان کاراکتر انتهای رشته در نظر می گیرد.برای رفع این مشکل چه باید کرد؟؟
اسلاید 28: برای خواندن یک رشته با فضای خالی از تابع 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 SpiderkingU entered: myبا استفاده از cin.get()Enter a string: my name is SpiderkingU 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: شرحنام تابعint isalnum(int c);اگر c کاراکتر الفبايي يا عددي باشد مقدار غيرصفر وگرنه صفر را برميگرداندisalnum()int isalpha(int c);اگر c کاراکتر الفبايي باشد مقدار غيرصفر و در غير آن، صفر را برميگرداندisalpha()توابع كاراكتري C استانداردتوابعي که در سرفايل <ctype.h> يا <cctype> تعريف شده به شرح زير است:
اسلاید 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: شرحنام تابع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 s1; // s1 contains 0 charactersstring s2 = “Shahed University; // s2 contains 17 charactersstring s3(60, *); // s3 contains 60 starsstring s4 = s3; // s4 contains 60 starsنوع string در ++C استاندارددر C++ استاندارد نوع دادهاي خاصي به نام string وجود دارد که مشخصات اين نوع در سرفايل <string.h> تعريف شده است. براي آشنايي با اين نوع جديد، از طريقۀ اعلان و مقداردهي آن شروع ميکنيم. اشيايي که از نوع string هستند به چند طريق ميتوانند اعلان و مقداردهي شوند:
اسلاید 36: s3 += s2;دو رشته را به هم متصل می کندs1.swap(s2);مقدار دو شیئ را عوض می کندs4.concat(s1);s1 به انتهای s4 اضافه می شودs1 + “spiderking” نوشته ثابت را به انتهای s1 اضافه میکند.ديگر توابع كلاس string
اسلاید 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 ;elsecout<<nYour name is not Equal to Programmer ;getch();return 0;}
اسلاید 42: تمرين 88-1- برنامه اي بنويسيد كه نام دانشجويان و شماره دانشجویی اعضا يك كلاس حداكثر 50 نفره را از كاربر گرفته و پس از مرتب سازي ليست براساس نام دانشجو، اسامي را نمايش دهد.برنامه باید بتواند اطلاعات را درون فایل ذخیره نماید و از فایل بازیابی کند.براي نوشتن برنامه يك کلاس دانشجو تعریف و آرايه ای بطول 50 تعريف نماييد. نام دانشجو از نوع string باشد. براي مرتب سازي ليست از الگوريتم مرتبسازي حبابي استفاده كنيدبرنامه را ميتوانيد با استفاده از فرمها پياده سازي نماييد بدين شكل كه روي فرم اصلي برنامه يك ListBox قرار ميدهيد و با زدن يك دكمه ديالوگ جديد ظاهر ميشود كه نام يك دانشجوي جديد را ميگيرد و در نهايت ليست دانشجويان روي ليست فرم اصلي برنامه نمايش داده ميشود.در این مورد استفاده از فایل متنی ساده تر میباشد.
اسلاید 43: ادامه تمرین 88-2- برنامه ای بنویسید که یک کلمه را در فایل با کلمه دیگری جایگزین نماید. ورودی برنامه: - اسم فایل – کلمه مورد نظر- کلمه جایگزین میباشد.8-3-برنامه ای بنویسید که یک عدد صحیح از کاربر گرفته و آنرا بخواند. مثلا با ورود 134 خروجی صد و سی و چهار و یا یکصد و سی و چهار را تولید نماید
نقد و بررسی ها
هیچ نظری برای این پاورپوینت نوشته نشده است.