فصل 4 : آرایه ، رشته ، وکتور و اشاره گر

آرایه : به خانه های پشت هم حافظه که توسط متغیر و اندیس آن قابل دستیابی است آرایه می گویند .

تعریف آرایه : ]ظرفیت آرایه[ نام آرایه  نوع آرایه       مثال :    ;int   arr[10]

در مثال بالا آرایه ای به نام arr با ظرفیت حداکثر ۱۰ عدد از نوع int ایجاد کردیم .

رشته : آرایه ای از کاراکتر ها را رشته می گویند .

مثال 1-4 : برنامه ای بنویسید برای دریافت مقدار یک آرایه ی صحیح و 10 تایی و نمایش محتویات آرایه به صورت معکوس .

خط 14 : آرایه را از نوع int تعریف می کنیم .

خط 15 و 16 : با استفاده از یک حلقه شروع به دریافت مقادیر آرایه می کنیم . دسترسی به محتویات هر خانه ی آرایه توسط اندیس آن خانه ممکن می باشد .

خط 17 و 18 : در این دو خط شروع به چاپ محتویات آرایه به صورت معکوس (یعنی از خانه ی آخر آرایه که 9 است تا 0 که خانه ی اول آرایه است) می کنیم .

 

 

 

 

مثال 2-4 : برنامه ای بنویسید که نام کاربر را دریافت می کند و در آغاز برنامه به او خوش آمد گویی می کند .

String : با استفاده از string می توانیم اعمال بیشتری بر روی رشته ها انجام دهیم . برای مثال عمل انتساب بر روی دو رشته و یا مقایسه ی رشته ها و حتی بدون مشخص کردن ظرفیت آن ها از رشته ها استفاده کنیم . الگوی string در string.h قرار دارد که پیش از تابع main باید به برنامه include شوند .

 

 

مثال 3-4 : برنامه ای بنویسید که با استفاده از string دو نام را وارد کرده و در صورت برابر بودن دو نام برابر بودن دو نام را به کاربر اعلام کند و در غیر این صورت نام دوم را برابر نام اول کرده و سپس نام دوم را چاپ نماید.

 

 

خط 14 : دو متغیر name و name2 را از نوع string تعریف کردیم . برای این تعریف نیاز به نوشتن خط 9 در C++ v.11 نیست . اما اگر کامپایلر به خط 14 error داد می بایست حتما آنرا include کنیم .

خط15: دو رشته را دریافت کردیم .

خط 16: می توانیم از عملگر منطقی == برای مقایسه ی دو رشته استفاده کنیم . درصورت برابری عبارت yes چاپ می شود و برنامه پایان می یابد و در غیر این صورت عبارات داخل else اجرا می شود یعنی رشته name2 مساوی رشته name می شود و name2 (که در واقع همان name است ) چاپ می شود و برنامه پایان می یابد .

 

 

اشاره گر : متغیری است که به آدرسی در حافظه اشاره می کند .

تعریف اشاره گر :    ;نام اشاره گر*  نوع اشاره گر

کاربرد : اشاره گر ها کاربردهای فراوانی دارند که به مرور یک به یک با آنها آشنا می شویم . یکی از کاربرد های آنها در توابعی است که می خواهند چندین مقدار خروجی داشته باشند .

مثال 4-4 : تابعی بنویسید برای محاسبه ی ضرب دو و توان دو و تقسیم به دو یک ورودی . از این تابع در برنامه ای استفاده کنید که ابتدا یک عدد دریافت کرده سپس هریک از موارد بالا را چاپ می کند .

خط ۱۳ : دو اشاره گر تعریف کردیم .

خط ۲۲ : در پارامتر تابع دو اشاره گر دریافت می شود که ما در خط ۱۳ آنها را تعریف کردیم . هنگام فراخوانی تابع اگر به جای نام اشاره گر نام را همراه عملگر * بیاوریم در این صورت مقدار درون اشاره گر به تابع فرستاده می شود که چون در پارامتر تابع آدرس را دریافت می کنیم نمی توانیم این کار را انجام دهیم .

خط ۱۷ : در این خط ما مقدار اشاره گر را چاپ می کنیم . پس حتما باید علامت * را بگذاریم .

در قسمت بعدی ما همین برنامه را به کمک یک عملگر دیگر (&) می نویسیم که برای آدرس متغیر های معمولی استفاده می شود .

 

مثال 5-4 : مثال بالا را می توان بهتر نوشت

 

نکته : هدف ما در این مثال این بود که متغیر zarb و توان را در درون تابع f() مقدار دهی بکنیم . همانطور که پیش تر گفته شد در درون یک تابع به متغیر های تابع دیگر دسترسی نداریم که با فرستادن آدرس یک متغیر به عنوان آرگومان تابع می توانیم به متغیر تابع دیگری در درون این تابع دسترسی داشته باشیم .

نکته : عملگر & آدرس یک متغیر را دریافت می کند . مثال 5-4 از دیدگاه برنامه نویسی بهتر است اما در مجموع هر دو برنامه یک عمل را انجام میدهند .

نکته : نام آرایه اشاره گری از آدرس خانه ی اول آرایه می باشد . مثال بعدی این نکته را روشن می کند .

خط ۲۲ : آرگومان دوم و سوم تابع در واقع آدرس یک متغیر معمولی از نوع int را دریافت می کند . و در هنگام فراخوانی تابع در خط ۱۶ فقط کافی است در آرگومان ها یک متغیر معمولی فرستاده شود که در حقیقت آدرس این متغیر ها به تابع فرستاده می شود .

مثال 6-4 : برنامه ای نکته ی بالا را نشان می دهد .

 

 

مثال ۷-۴ : تابعی بنویسید که آدرس یک متغیر را چاپ می کند به دو صورت این تابع را بنویسید . از این تابع در برنامه ای استفاده کنید که یک مقدار از کاربر دریافت می کند و آدرس حافظه ای که این مقدار در آن ذخیره شده را چاپ می کند .

خط ۲۰ : در این خط ما در اشاره گر xp (که در آن آدرس ذخیره می شود) آدرس متغیر x را قرار دادیم و در خط ۲۱ این آدرس را چاپ کردیم . اما پیش از آن دو تابع فراخوانی شده .

خط ۲۵ : این تابع یک آدرس از یک متغیر دریافت می کند .و در خط ۲۶ این آدرس را چاپ می کند .

خط ۲۷ : این تابع نیز یک آدرس از یک اشاره گر دریافت می کند . و در خط ۲۸ این آدرس را چاپ می کند .

 

مثال ۸-۴ : تابعی بنویسید که آدرس خانه ی اول یک آرایه و طول آنرا دریافت کرده و مقادیر آنرا چاپ کند . از این تابع در برنامه ای استفاده کنید که یک آرایه ۱۰ تایی را خودش تعریف کرده و چاپ می کند .

خط ۱۰ : prototype تابع را نوشتیم که دارای دو پارامتر یکی اشاره گر و دیگری عدد صحیح است . در واقع اولی آدرس خانه ی اول آرایه را دریافت کرده و دومی طول آرایه را می گیرد .

خط ۱۳ : در اینجا آرایه ای تعریف کردیم بنام Z و طول آنرا ۱۰ تایی انتخاب کردیم . سپس به هر خانه ی آن مقدار دادیم .

خط ۱۴ : مقدار خانه ی اول آرایه ی Z را ۲ قرار دادیم .

خط ۱۵ : در این خط تابع printArray را فراخوانی کردیم . به ازای اشاره گر z (همانطور که قبلا گفته شد نام آرایه اشاره گری است از خانه ی اول آرایه ) و طول ۱۰ .

خط ۲۰ : توسط یک حلقه مقدار آرایه را چاپ می کنیم .

 

مثال ۹-۴ : برنامه ای بنویسید که نام و نام خانوادگی کاربر را دریافت کرده جنسیت او را پرسیده و به او خوش آمد گویی کند .

 

 

 

مثال ۱۰-۴ : برنامه ای بنویسید که دو عدد از کاربر دریافت کند و ماکسیمم آن دو را چاپ نماید .

خط ۱۵ : این یک عبارت شرطی و دستورات خلاصه شده است . متغیر اگر x[0] بزرگتر از x[1] باشد max=x[0] در غیر این صورت max=x[1] می شود .

 

مثال ۱۱-۴ : برنامه ای که ۱۰ عدد از کاربر دریافت کرده و ماکسیموم اعداد را چاپ کند .

خط ۱۴و۱۵ : مقدار آرایه را دریافت می کند .

خط ۱۶: بطور فرضی متغیر max را مساوی مقدار x[0] می کنیم .

خط ۱۷ : با استفاده از یک حلقه بررسی می کنیم که آیا x[i] بزرگتر از max  است یا خیر که اگر بزرگتر بود max را مساوی آن می کنیم . و در پایان x را چاپ می کنیم .

 

مثال ۱۲-۴ : برنامه ای بنویسید تعداد n عدد از کاربر دریافت کند (n را نیز کاربر وارد می کند ) . سپس از بین آنها ماکسیموم را مشخص می کند .

نکته : ما آرایه ای باید تعریف کنیم به طول n در C++ این کار بدون استفاده از تخصیص حافظه ی پویا و اشاره گر در بعضی از کامپایلر ها ممکن نیست . این بدان جهت است که در هنگام ترجمه مقدار دقیق n مشخص نیست و کامپایلر ها به تعریف آرایه بدون مشخص کردن ظرفیت دقیق آنها ارور می دهد .

 

خط ۱۶ و ۱۷ : برای تعریف آرایه ای به طول n که n را کاربر وارد می کند از دستور new استفاده می کنیم .

 

 

آرایه دو بعدی یا ماتریس : می توانیم آرایه را در دو یا چند بعد تعریف کنیم . که معمولا کاربرد دو بعدی ها بیشتر از چند بعدی ها ست .

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

مثال ۱۳-۴ : برنامه ای بنویسید برای دریافت درایه های یک ماتریس ۳*۳  . سپس یک عدد از کاربر دریافت کند و مشخص کند عدد در ماتریس موجود است یا خیر . و اگر موجود است چند بار در ماتریس استفاده شده .

 

برنامه ی ما ابتدا در

خط ۱۶ با استفاده از یک حلقه ی تودرتو ماتریس یا آرایه ی دو بعدی سه در سه را دریافت می کند . سپس در

خط ۱۹ یک عدد از کاربر دریافت می کند . در

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

خط ۲۵ بررسی می کند که counter بزرگتر از ۰ است یا خیر که اگر بزرگتر از ۰ بود تعداد آنرا نیز چاپ می کند .

 

 

 

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

وکتور : وکتور نوع پیشرفته و توسعه یافته ای از آرایه می باشد . الگوی آن در vector.h قرار دارد . یکی از قابلیت های اصلی وکتور dynamic بودن آن است . یعنی طول آن بسته به استفاده از آن کم و زیاد می شود . یکی از قابلیت های دیگر آن انتساب دو وکتور با استفاده از نام آنهاست . که این کار در آرایه ها بی معنی بود چون نام آرایه اشاره گر بود .

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

نکته : با رفتن به فایل vector.h با توابع دیگر vector آشنا می شوید .

 

 

مثال ۱۴-۴ : برنامه ای که برخی از کارایی های وکتور را نشان میدهد .

 

خط ۹ : vector.h را اضافه کریم به برنامه .

خط ۱۵ : یک وکتور از نوع int تعریف می کنیم . با ظرفیت ۴ که همه ی اعضای آن به طور پیش فرض ۲ است .

خط ۱۶ : یک وکتور دیگر از نوع int بدون مشخص کردن ظرفیت تعریف می کنیم .

خط ۱۷ : خانه ی اول وکتور را مساوی ۱ قرار می دهیم .

خط ۱۸ : خانه ی آخر وکتور را مساوی -6 قرار می دهیم .

خط ۱۹ : وکتور دوم را مساوی وکتور اول می کنیم .

خط ۲۰ : تا پایان وکتور مقادیر درون وکتور را چاپ می کنیم .


مطالب مشابه :


آهنگی برای خوشامد گویی

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




تصاویر دردناکی از ازدواج داماد وفادار با عروس مرده

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




خدایا عاشقان را غم مده ، شکرانه اش با من

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




گرانترین حلقه های ستارگان هالیوود

گرانترین حلقه های با عرض خوش آمد گویی به شما حتما اگه وقت داريد بازي كنيد خوش




مک کویین(ماشینها)

نوع کالا: قاب خوش آمد گویی. قیمت: ۸۰۰۰- حلقه خوش آمدگویی




گزارش همایش ادبی شب منظومه ها

و در ادامه خانم مریم آریان، دبیر دبیرخانهء"حلقه اتفاق"ضمن خوش آمد گویی به حلقه اتفاق: ۱




همگام با درس4.هنر هفتم.برگ ها

همایونفر ٍ هنر برتراز گوهر امد ها یک حلقه بسازید و خوش آمد گویی فصل




فصل 4 : آرایه ، رشته ، وکتور و اشاره گر

نام و نام خانوادگی کاربر را دریافت کرده جنسیت او را پرسیده و به او خوش آمد گویی حلقه های




برچسب :