الگوریتمستان

برنامه‌نویسی، طراحی الگوریتم و حل مسئله‌های الگوریتمی

 
در صورت ناخوانا بودن نوشته‌ها، از مرورگر دیگری استفاده کنید.
آرایه پویای دو بعدی در ++C - الگوریتمستان
الگوریتمستان
  »  

آرایه پویای دو بعدی در ++C

        آموزش استفاده از آرایه‌ی پویای دو بعدی در زبان ++C
آنچه می‌خوانید ویراست جدید نوشته‌ای است که اولین بار با عنوان «آرایه پویای دو بعدی در ++C» مرداد ماه ۱۳۸۵ از طریق وبگاه برنامه‌نویسی و طراحی الگوریتم (عنوان و طرح پیشین وبگاه الگوریتمستان) منتشر شده بود.

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

به قطعه کد زیر توجه کنید:

  

int **table;
cin >> n;
table = new int*[n];
int i, j;
for (i = 1 ; i <= n ; i++){
  table[i - 1] = new int[i];
  for (j = 1 ; j <= i ; j++)
    table[i - 1][j - 1] = i * j;
}
10 .
11 .
12 .
13 for (i = 0 ; i < n ; i ++)
14   delete[] table[i];
15 delete[] table;
16   

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

متغیر table که به صورت table** تعریف شده است، یک اشاره‌گر به اشاره‌گر است. کامپایلر وقتی با دستور

  

table = new int*[n];

  

مواجه می‌شود، یک آرایه‌ی پویای یک بعدی به طول n از اشاره‌گرهای صحیح ایجاد می‌کند. پس عناصر

  

table[0], table[1], ..., table[n - 1]

  

هر کدام یک اشاره‌گر از نوع صحیح هستند. حال با دستور

  

table[i - 1] = new int[i]

  

برای هر اشاره‌گر یک آرایه‌ی پویای یک بعدی منسوب می‌کنیم.

مثلا به ازای n = 3 عناصر table به صورت زیر هستند:

  

table[0][0]
table[1][0], table[1][1]
table[2][0], table[2][1], table[2][2]

  

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

به اشتراک‌گذاری نوشته
اشتراک‌گذاری در LinkedIn     Cloob     اشتراک‌گذاری در Twitter     اشتراک‌گذاری در Facebook     ارسال با Telegram     Google Plus
امتیاز نوشته
  • 1
  • 2
  • 3
  • 4
  • 5

نام: *  

پست الکترونیک:

وبگاه:

متن پیام: *

01 02 03 04 05 06 07 08 09 10 11 12 13 14

 


• نیما
چهارشنبه، ۱۱ فروردین ماه ۱۳۸۹، ساعت ۱۴:۲۷

نحوه مقایسه(جستجو) عناصر در ارایه های دوبعدی چطوریه؟

پنجشنبه، ۱۲ فروردین ماه ۱۳۸۹، ساعت ۱۷:۳۱
مسعود اقدسی‌فام

چینش عناصر آرایه شرط خاصی داره؟


• علی
چهارشنبه، ۱۲ آبان ماه ۱۳۸۹، ساعت ۱۶:۴۴

الگوریتمی بنویسید که ماتریسی باmسطر وm ستونرا خوانده و مشخص کند که ایا متقارن است یا خیراگر متقارن است عناصر قطر اصلی وزیر قطر اصلی را چاپ کند


• حبيب
چهارشنبه، ۱۱ اسفند ماه ۱۳۸۹، ساعت ۱۹:۰۲

كدام مورد ، با توجه به ساختمان داده آرايه به طول n ، صحيح است ؟

1) جمع دو ماتريس از مرتبه n3 است.

2) يافتن عنصر ماكزيمم از مرتبه n2 است.

3) مرتب نمودن آرايه از مرتبه n2 است.

4) پيوند (چسباندن) دو آرايه از مرتبه n2 است.

چهارشنبه، ۱۱ اسفند ماه ۱۳۸۹، ساعت ۲۰:۰۷
مسعود اقدسی‌فام

1) جمع دو ماتریس از مرتبه n² است.

2) یافتن عنصر ماکزیمم از مرتبه n است.

3) مرتب نمودن آرایه بستگی به نوع مرتب‌سازی می‌تواند از مرتبه n² باشد.

4) پیوند دو آرایه اگر شرط مرتب‌سازی نداشته باشد از مرتبه n است.


• حامد
چهارشنبه، ۲۴ فروردین ماه ۱۳۹۰، ساعت ۱۶:۵۱

الگوریتمی بنویسید که ترکیب kعنصر را در n خانه محاسبه وچاپ نماید


• سروه
جمعه، ۲۷ آبان ماه ۱۳۹۰، ساعت ۲۳:۲۲

سلام .وقت بخیر یک سوال داشتم ممنون میشم کمکم کنید

آیا آرایه ساختمان داده است یا ساختار داداه؟


• مهسا
جمعه، ۱۹ مهر ماه ۱۳۹۲، ساعت ۲۱:۴۳

سلام ممنونم از سایت خوبتون!

سوالم اینه آیا تو زبان سی++ این امکان وجود داره که k عنصر آخر یک آرایه ی n عنصری رو حذف کرد؟

اگه جواب مثبت هست میتونم خواهش کنم سینتکسش رو بنویسید؟


چهارشنبه، ۲۰ فروردین ماه ۱۳۹۳، ساعت ۱۹:۵۹

برای من در خط

  table[ i - 1 ] = new int[ i ];

این ارور رو میده:

Error 2 error C2108: subscript is not of integral type g:\02. fayyazi marzieh\testttt\testttt\tesssst.cpp 12

به خدا دیوانه شدم.

پنجشنبه، ۲۱ فروردین ماه ۱۳۹۳، ساعت ۰۰:۳۵
مسعود اقدسی‌فام

متغیر i از چه نوعی تعریف شده؟ باید عدد صحیح (int) باشه.


• فاطمه
چهارشنبه، ۳۱ شهریور ماه ۱۳۹۵، ساعت ۲۲:۴۲

تعدادی اعداد توی یک ماتریس دو در دو دارم، میخوام اعداد ستون دوم رو یکی یکی بذارم توی یک معادله. چیکار کنم؟ممنون میشم از راهنماییتون

چهارشنبه، ۳۱ شهریور ماه ۱۳۹۵، ساعت ۲۲:۵۳
مسعود اقدسی‌فام

منظورتون رو از تعدادی اعداد در ماتریس دو در دو متوجه نشدم. چندین ماتریس دو در دو دارید؟ ستون دوم یه ماتریس دو در دو فقط دو عدد داره و نمی‌تونه تعداد اعداد متفاوت باشه.


• فاطمه
پنجشنبه، ۱ مهر ماه ۱۳۹۵، ساعت ۰۸:۲۳

من معذرت میخام اشتباه گفتم. یک ماتریس دارم ک 1200سطر و دوتا ستون داره.میخام اعداد ستون دوم رو یکی یکی بخونه و بذاره توی یک معادله.

جمعه، ۲ مهر ماه ۱۳۹۵، ساعت ۱۹:۳۲
مسعود اقدسی‌فام

اگه فرض کنیم اسم ماتریستون matrix باشه، یه حلقه‌ی تکرار for تعریف کنید که i از صفر تا 1199 حرکت کنه و هر بار matrix[i][1] در معادله قرار بگیره.


• محمد
جمعه، ۲۸ آبان ماه ۱۳۹۵، ساعت ۲۱:۴۵

برنامه ای که 20عددازورودی بگيرد بیشترین و کمترین عدد در هر ستون رانمايش دهد در زبان ++c?


• s
پنجشنبه، ۱۱ آذر ماه ۱۳۹۵، ساعت ۱۳:۳۲

برنامهای بنویسید که در یک آرایه ی دوبعدی مستطیلی m* n  پیدا کند که جمع اعدادش ماکسیمم شود


یکشنبه، ۲۸ آبان ماه ۱۳۹۶، ساعت ۲۰:۳۶

ممنون مثل همیشه عالی


الگوریتمستان در تلگرام

   

   

پیوند کوتاه: عمر نوشته:  ۳۳۶۱ روز
تعداد بازدید:  ۴۶۲۵۹ بازدید
تعداد امتیاز:  ۴۶ امتیاز
میانگین امتیاز:  ۳.۴۶  از  ۵.۰۰
»  ظرف‌ها در ++C
        معرفی انواع ظرف‌ها (نگهدارنده‌ها - containers) در زبان برنامه‌نویسی ++C
»  فایل سرآیند algorithm
        معرفی فایل سرآیند algorithm از کتابخانه قالب استاندارد زبان برنامه‌نویسی ++C به همراه نمونه کد
»  کلاس‌های حافظه در ++C
        آشنایی با کلاس‌های حافظه و کاربرد آنها در زبان ++C
»  حلقه‌های تکرار در ++C
        آشنایی با حلقه‌های تکرار در زبان برنامه‌نویسی ++C و دستورات کنترلی مورد استفاده در آن
»  نکات مهم در برنامه‌نویسی به زبان ++C
        پنج نکته‌ی آموزنده در مورد برنامه‌نویسی به زبان برنامه‌نویسی ++C
»  درخت جستجوی دودویی
        آشنایی با درخت جستجوی دودویی (Binary Search Tree) و عملیات جستجو و درج و حذف گره
»  صف اولویت‌دار
        آشنایی با صف اولویتی (Priority Queue)، کاربردها و نحوه‌ی پیاده‌سازی آن
»  درخت Heap
        آشنایی با درخت Heap (هیپ، هرم یا کپه) به عنوان یکی از ساختمان های داده پرکاربرد و بررسی روش ساخت، درج گره و حذف گره و ارائه‌ی کد نمونه به زبان برنامه‌نویسی ++C
»  لیست پیوندی
        بررسی مفهوم و روش پیاده‌سازی لیست پیوندی و توابع مرتبط آن به زبان برنامه‌نویسی ++C
»  توابع دوست کلاس در ++C
        آشنایی با توابع دوست کلاس در زبان برنامه‌نویسی ++C و کاربرد آنها در سربارگذاری عملگرها
»  سربارگذاری عملگرها در ++C
        آشنایی با مفهوم سربارگذاری عملگرها در زبان ++C
»  متغیرهای مرجع در ++C
        معرفی متغیرهای مرجع در زبان برنامه‌نویسی ++C و آشنایی با مهمترین کاربردهای آنها
»  اشاره‌گرها در زبان ++C
        آشنایی با مفهوم و عملکرد اشاره‌گرها در زبان برنامه‌نویسی ++C و ارائه مثالهایی از کاربرد آن
»  قالب‌ها در ++C
        آشنایی با قالب‌ها به عنوان یکی از امکانات متمایز ++C از C