صفحه اصلی

صفحه شخصی مسعود اقدسی‌فام
الگوریتمستان - آموخته‌های من از دنیای برنامه‌نویسی و طراحی الگوریتم
تعداد امتیازهای ثبت شده:  513

میانگین امتیازهای ثبت شده:  4.29 از 5.00
عبارت مورد نظر:

     

الگوریتمستان آشنایی با حلقه‌های تکرار در زبان برنامه‌نویسی ++C و دستورات کنترلی مورد استفاده در آن

الگوریتمستان آموزش استفاده از آرایه پویای دو بعدی در زبان ++C

الگوریتمستان بررسی مفهوم و روش پیاده‌سازی لیست پیوندی و توابع مرتبط آن به زبان برنامه‌نویسی ++C

الگوریتمستان آشنایی با صف اولویتی (Priority Queue)، کاربردها و نحوه پیاده‌سازی آن

الگوریتمستان آشنایی با روش برنامه‌نویسی پویا (یا برنامه‌ریزی پویا - Dynamic Programming) به عنوان یکی از روش‌های پر کاربرد طراحی الگوریتم و یافتن راه حل بهینه مسائل، و روش محاسبه دنباله فیبوناچی

الگوریتمستان آشنایی با الگوریتم استراسن برای محاسبه حاصلضرب ماتریس‌ها

الگوریتمستان معرفی کتاب Art of Programming Contest برای علاقه‌مندان حل سوالات الگوریتمی و شرکت‌کنندگان مسابقات برنامه‌نویسی، با قابلیت دانلود

الگوریتمستان بررسی مساله برج هانوی و روش‌های حل بازگشتی و غیربازگشتی آن

الگوریتمستان بررسی مساله مربی ناامید، از سوالات مسابقات برنامه‌نویسی ACM

الگوریتمستان بررسی روش‌های بسط لاپلاس، گاوس و فرمول تحویل، برای محاسبه دترمینان ماتریس مربعی، و پیچیدگی زمانی آنها

الگوریتمستان آشنایی با روش مرتب‌سازی انتخابی،همراه با قطعه کد به زبان برنامه‌نویسی ++C

الگوریتمستان بررسی مساله Simple Addition، از سوالات آمادگی مسابقات برنامه‌نویسی

الگوریتمستان آشنایی با روش مرتب‌سازی درجی، همراه با قطعه کد به زبان برنامه‌نویسی ++C

الگوریتمستان آشنایی با روش مرتب‌سازی ادغامی با قطعه کدهایی به زبان برنامه‌نویسی ++C

الگوریتمستان بررسی سوال مسابقات برنامه‌نویسی Turn for MEGA، و راه حل آن


»   آرایه ایستا و پویا در ++C شنبه، 9 خرداد ماه 1388، ساعت 13:11

مطلبی که می‌خوانید، ویراست دوم مطلبی است که نسخه اولیه آن با عنوان " آرایه ایستا و پویا در ++C" از طریق وب‌سایت برنامه‌نویسی و طراحی الگوریتم منتشر شده بود.

زبان ++C همانند اکثر زبان‌های برنامه‌نویسی دیگر، ساختاری به نام آرایه دارد که امکان تعریف مجموعه‌ای از متغیرهای هم‌نوع (اصطلاحا مجموعه عناصر همگن) را فراهم می‌کند. چنین ساختاری به صورت زیر نعریف می‌شود:

 

type name[ number of elements ];

 

که در آن type یکی از انواع داده‌های استاندارد ++C، ساختمان و یا کلاس است. number of elements هم تعداد اعضا یا عناصر آرایه را مشخص می‌کند که باید عدد ثابتی باشد. مثلا عبارت زیر یک آرایه 10 عضوی از اعداد اعشاری به نام  arr نعریف می‌کند:

 

float arr[ 10 ];

 

توجه داشته باشید که شماره اندیس اعضای آرایه در ++C همیشه از صفر شروع می‌شود:

 

arr[ 0 ], arr[ 1 ], ..., arr[ 9 ]

 

این نوع تعریف، آرایه‌هایی را ایجاد می‌کند که به آرایه‌های ایستا معروف هستند. این اسم‌گذاری از آنجا ناشی می‌شود که طول چنین آرایه‌هایی در حین تعریف مشخص می‌شود، و مقدار ثابتی است. لازم به ذکر است که برای تعیین طول تابع (یا همان تعداد اعضای آن) حتما باید از یک عدد و یا داده ثابت (const) استفاده کنید. به عبارت دیگر، در این زبان نمی‌توان از یک متغیر برای تعیین طول آرایه استفاده کرد. پس عباراتی مانند دستورالعمل‌های زیر در زبان ++C کامپایل نشده و خطا تولید می‌کند:

 

int n;

cin >> n;

double arr[ n ];

 

چرا که n یک متغیر است و نمی‌تواند برای تعیین طول آرایه به کار رود.

حال ببینیم این ویژگی چه مشکلاتی را ممکن است به وجود بیاورد.

فرض کنید از ما خواسته شده است برنامه‌ای بنویسیم که تعدادی نمره (عدد اعشاری) دریافت کرده و با استفاده از هر روش دلخواهی آنها را مرتب کند. تعداد نمره‌ها از قبل مشخص نیست. اگر بخواهیم از یک آرایه ایستا استفاده کنیم، باید طول ثابتی را در نظر بگیریم. پس باید یک حداکثر برای تعداد نمره‌ها معلوم کنیم. مثلا فرض کنیم حداکثر می‌توان هزار نمره وارد کرد. پس تعریف می‌کنیم:

 

float marks[ 1000 ];

 

اما تعریف فوق دو ایراد دارد. اول این که اگر تعداد نمره‌ها بیشتر از هزار باشد، برنامه کار نمی‌کند؛ و دوم، اگر مثلا فقط سه نمره وارد شود، 997 عضو از عناصر آرایه بلااستفاده خواهند ماند، که حافظه اشغال کرده‌اند. رفع این دو ایراد راه ساده‌ای دارد: استفاده از آرایه پویا.

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

 

type *name;

name = new type[ number of elements ];

 

به عنوان نمونه، عبارت بالا را باید نوشت:

 

int n;

double *arr;

cin >> n;

arr = new double[ n ];

 

که باعث می‌شود یک آرایه پویا به نام arr و به طول n ایجاد شود.

آرایه‌های پویا پس از تعریف، هیچ تفاوتی با آرایه ایستای معمولی ندارند و دسترسی به عناصر آنها با اندیس صورت می‌گیرد. اما حتما باید به خاطر داشت باشید که حافظه استفاده شده برای آرایه پویا را بعد از استفاده، با دستور delete آزاد کنید:

 

delete[ ] name;

 

برای آرایه arr که در قبلا تعریف کرده‌ایم:

 

delete[ ] arr;

 

همانطور که مشاهده می‌کنید، آرایه‌های پویا ارتباط نزدبکی با اشاره‌گرها و بحث تخصیص حافظه دارند. با این وجود، ایراداتی دارند که گاهی برنامه‌نویس را مجبور می‌کند از ساختارهای دیگر - مانند لیست پیوندی - استفاده کند.

‌چاپ مطلب
نسخه قابل چاپ مشاهده نسخه قابل چاپ و ارسال به چاپگر
به اشتراک گذاری مطلب
FriendFeed       Twitter       Facebook       Cloob
آمار
تعداد امتیازهای ثبت شده:  8 ،  میانگین امتیازهای ثبت شده:  4.25 از 5.00
‌برچسب‌ها
برنامه‌نویسی ++C ، ساختمان داده‌ها
امتیاز مطلب
1 2 3 4 5
ارسال پیام
» حامد

جمعه، 20 فروردین ماه 1389، ساعت 14:10
با سلام
میخواستم همین روش را برای آرایه های دو بعدی توضیح دهید یعنی هر دو بعد متغیر باشند .
واینکه من میخواهم برنامه ای بنویسم ونتیجه محاسبات در یک آرایه ریخته شود.وتعداد محاسبات معلوم نیست یعنی طول  آرایه دائم تغییر میکند لطفآراهنمایی کنید  

» مسعود اقدسی‌فام

جمعه، 20 فروردین ماه 1389، ساعت 16:16
درباره آرایه پویای دو بعدی مطلب جداگانه ای نوشته شده حامد جان.
در صورتی که حد بالایی برای تعداد محاسبات وجود نداره، تنها راه حل ممکن استفاده از لیستهای پیوندی به جای آرایه هاست. نمی شه طول آرایه رو بعد از تعریف تغییر داد.
البته در این زبان شما می تونید به اندیسهای بالاتر از تعریف آرایه هم داده بنویسید (آرایه ها و اشاره گر به حافظه رابطه نزدیکی با هم دارن). اما با توجه به اینکه اون محل حافظه برای آرایه رزرو نشده، ممکنه برنامه دیگه ای روی همون محل داده وارد کنه، و در نتیجه اطلاعات شما مخدوش بشه.

» حامد

جمعه، 7 خرداد ماه 1389، ساعت 00:30
سلام . لطف می کنید مفهوم حافظه پوبا و ایستا رو در ساختمان داده ها بگید . و انواع ساختمان داده ها که با این روش ذخیره می شود

» narmin

چهارشنبه، 12 خرداد ماه 1389، ساعت 11:20
سلام میخواستم برنامه ی زمانبندی RR(round robin) را با صفها در C  یا    C++بنویسم اما نمی دونم چطور؟ با آرایه ها زمان ورود و اجرا وکوانتوم رو بگیرم یا یک ساختمان تعریف کنم؟و چطوری فرایندها رو اجرا کنم؟ لطفا بهم کمک کنید خیلی واجبه .

» مریم

جمعه، 30 اردیبهشت ماه 1390، ساعت 22:14
برنامه ای که یک مقداری رو بگیره و به 4 روش که در کتاب سیستم عامل اومده حافظه تخصیص بده به هر زبان دلخواه
خواهش می کنم کمک کنید
واسه یه بنده خدایی که خیلی به نمره ی این برنامه احتیاج داره.
مطمئنم دعاتون می کنه.
خدا خیرتون بده
منتظر جوابتون هستم



دوست عزیزم، لطفا قبل از ارسال پیام به موارد زیر توجه داشته باشید:

1- تا حد ممکن از حروف فارسی برای نگارش پیام خود استفاده کنید. امکان ارسال پیام لاتین و کدهای برنامه‌نویسی با چیدمان چپ به راست نیز وجود دارد.
2- به درخواست پروژه‌های آماده و موارد مشابه پاسخ داده نخواهد شد.
3- از قرار دادن هرگونه نشانی یا شماره تماس در متن پیام خودداری کنید.
4- از ارسال پیام‌های تبلیغاتی خودداری کنید.
5- از ارسال سوال و پیام غیرمرتبط با مطلب ارائه شده خودداری کنید.
6- لطفا نظر خود را در مورد مطلب ارائه شده، با ثبت امتیاز مشخص نمایید.

پیشاپیش از همکاری شما سپاسگذارم.


نام:  
پست الکترونیک
وب‌سایت:
متن پیام: