آموزش C++ قسمت دهم

1395/1/12 --- 6562

عرض سلام خدمت دوستان گرامی دادخواه هستم با دهمین جلسه از آموزش سی ++

در جلسه پیش درباره ارایه های تک بعدی صحبت کردیم . برای این شروع این جلسه میخواهم درباره ی آرایه دوبعدی صحبت کنم .

ما ارایه دو بعدی چیه ؟

اگه از جلسه پیش یادتون باشه . من شکلی از آرایه تک بعدی ارائه داده بودم که به این صورت بود

ارایه تک بعدی

که تعداد خونه ها بستگی به مقدار حافظه ای بود که از قبل رزرو میکردیم .

اگه توجه کنید ما یک سطر داریم و چندین ستون . اما در ارایه دو بعدی ما چندین سطر داریم و چندین ستون . مثلا :

آرایه دو بعدی

این شکل میتواند یک شِمایی از یک آرایه دوبعدی باشه که 5 سطر و 4 ستون داره .

مثلا ماتریس ها را میتونیم ارایه دوبعدی در نطر بگیریم .

خب حالا که با ارایه دو بعدی آشنا شدیم . نحوه اعلانش رو هم میگیم .

;[ تعداد ستون ها] [ تعداد سطر ]اسم آرایه نوع داده 

int matrix [ 5 ] [ 4 ];
int arr [ 3 ] [3];

ارایه ای است با 3 سطر و سه ستون .

اما چطور به یک آرایه دو بعدی مقدار بدهیم ؟ 

خب دو راه وجود داره

اولین راه :

int  matrix[3][2] = { {1,2} , {34 , 128} , {-1 , 45} };

خب ما اینجا آرایه ای داریم که 3 سطر دارد و 2 ستون .

حالا میخوایم این 3 سطر و 2 ستون را دستی مقدار دهی کنیم . پس مثل آرایه ها اول {} را می گذاریم تا کامپایلر متوجه شود که میخواهد مقدار دهی صورت بگیرد .

 حالا میخوام برای شروع سطر اول را مقدار دهی کنم . پس دوباره {} میگذاریم .

حالا مقدار دهی سطر اول را در درون این اکولاد دوم انجام میدیم . مثلا میگریم 1 و2 . یعنی  خونه ی سطر 0 و ستون 0 برابر 1 است .  یا به نماد دیگر matrix  [0][0] =1 و خونه سطر 1 و ستون 1 برابر 2 است یعنی matrix [ 0 ] [ 1] = 2

خب تا اینجا سطر اول را مقدار دهی کردیم . حالا میروم به سراغ سطر بعدی که آن را مقدار دهی کنیم . برای اینکه به کامپایلر این قدرت تشخیص را بدهیم که سراغ بعدی داریم میرویم بعد از اکولاد بسته یک " , " میگذاریم . خب حالا هم مثل مرحله قبل دوباره یک {} میگذاریم و بعد مراحل قبل را دوباره تکرار می کنیم .

روش دوم :

با استفاده از حلقه for  :

در این روش ما با دو حلقه for داده هایمان را به صورت غیر مستقیم مقدار دهی میکنیم چرا دو تا for ؟ برای اینکه ما نیاز داریم که با یک for  سطر و با یک for ستون را پیمایش کنیم .

پس باید for  ی که می نویسیم یه این صورت باشد :

for ( int i =0 ; i < row_size ; i++ )
for ( int j ; j < col_size ; j++)
cin >> array [ i ] [ j ] ;

که در مثال بالا حلقه for ما به این صورت تبدیل میشود .

for ( int i =0 ; i < 3 ; i++ )
for ( int j ; j < 2 ; j++)
cin >> array [ i ] [ j ] ;

خب این قطعه کد را با هم trace  میکنیم ببینیم به چه صورت است :

خب در مرحله اول i =0  و j =0  خواهد بود . پس 

cin » matrix [0][0];

سپس یک واحد به j  افزوده میشود . پس 

cin » matrix [0][1];

خب حالا یک واحد به j افزوده میشود و j برابر با 2 خواهد شد . که این شرط ادامه حلقه for را باطل می کند پس کامپایلر به خط بالاتر رفته و i را برابر با 1 خوهد کرد . پس دوباره j برابر با 0 خواهد بود پس داریم 

cin » matrix [1][0];

و همین طور این قضیه ادامه پیدا میکند تا زمانی که i=3  و j = 2 شود . که برنامه از حلقه for خارج شود .

شما میتوانید به هر تعداد بعدی که برنامتون احتیاج داره آرایه n  بعدی تعریف کنید .

فقط کافیه یک [] به انتهای آرایه اضافه کنید و برای مقدار دهی کردن مثلا به روش for یک for دیگر به for هایتان اضافه کنید تا در آن بعد از آرایه پیمایش را انجام دهد .

دوستان عزیز بحث آرایه ها به پایان خودش رسید .

باز تاکید میکنم یادتون باشه که برای دسترسی به مقادیر آرایه ها باید از عدد 0 شروع کنیم . و تا  n-1  عملیات مقدار دهی رو ادامه دهیم .

اما برای موضوع آخر این جلسه میخوام در مورد خطاها با شما صحبت کنم .

ما در برنامه نویسی دو نوع خطا داربم .

1- خطای دستوری  Syntax Error ) :   (

این خطا ها زمانی رخ می دهند که شما قواعد دستوری اون زبان برنامه نویسی را رعایت نکنید .

مثلا اگر آخر جملاهاتون سمی کالن نگذارید یا اینکه به بزرگی و کوچکی متغیر ها و کلمات کلیدی اهمیت ندید اون موقع کامپایلر بهتون ارور سین تکس میده .

اما یک نوع خطای دیگری داریم که به راحتی قابل شناسایی نیست و خطراتی خیلی بدی رو ممکنه برای برنامتون ایجاد کنه که بهش خطاهای منطقی یا Logical Errors میگویند .

اما این خطا ها چه جوری به وجود میان ؟

این خطاها حاصل از طرز تفکر غلط برنامه نویس یا حواس پرتی اون ایجاد می شوند که معمولا هم به راحتی قابل تشخیص نیستند .

نتیجه خطاهای منطقی چیزی است که برنامه نویس ها از آن به عنوان باگ ( Bug )  یاد میکنند . یعنی شما برنامت یه جایی یا برای یک نوع داده ای ریپ میزنه .

الا من این همه تاکید میکنم که  برای مقدار دهی کردن آرایه ها خونه شان از 0 شروع می شود و به n-1  ختم میشود به خاطر این هست که برنامتون بعدا دچار خطای منطقی نشه و هنگ نکنه . چون اگه برنامه ای دچار خطای دستوری بشه . مفسر یا کامپایلر همون لحظه اخطار میده  و در بعضی مواقع راه حل درست برای رفع این مشکل را هم در اختیار برنامه نویس قرار میده . اما در خطای منطقی کامپایلر متوجه این اشتباه نخواهد شد . و برنامه را اجرا خواهد کرد . برای همین هست که در اکثر IDE  ها ابزاری به نام دیباگر

  ( debugger )  قرار میدهند که توسط اون برنامه نویس بتونه برنامه خودش را دیباگ کند و اشکال کار خود را متوجه بشود.

خب برای امشب فکر میکنم دیگه کافیه . امیدوارم براتون مفید واقع باشه . خدانگهدار

کلمات کلیدی