آرایه چیست؟ عملیات آرایه

آرایه یک نوع داده پیچیده (کامپوزیت، ساختاریافته) است که با موارد زیر مشخص می شود:

· عناصر آرایه بر خلاف ساختارها نوع یکسانی دارند، بنابراین هر عنصر آرایه همان مقدار حافظه را اشغال می کند.

· آرایه در RAM قرار دارد، و نه در دستگاه خارجی، مانند فایل ها (ترم دوم).

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

عناصر آرایه در C++ به دو صورت قابل دسترسی هستند.

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

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

آرایه ها می توانند یک یا چند بعد داشته باشند. این بخش یک آرایه یک بعدی را مورد بحث قرار می دهد که گاهی اوقات نامیده می شود بردار , دلالت بر بردار در n-فضای بعدی کار با آرایه های دو بعدی ( ماتریس ها) مورد بحث در فصل 5. از سه بعد یا بیشتر به ندرت در عمل استفاده می شود، زیرا چنین آرایه هایی مقدار زیادی از RAM را اشغال می کنند.

در همه جای مطالب زیر، منظور ما از کلمه "آرایه" یک آرایه یک بعدی است.

از نظر زمان (مرحله) زمانی که حافظه برای آرایه تخصیص داده می شود، دو نوع وجود دارد. حافظه برای پویا آرایه در حین اجرای برنامه تخصیص داده می شود و در صورت عدم نیاز به آرایه می توان حافظه آن را آزاد کرد. چنین آرایه هایی در ترم دوم در نظر گرفته می شوند.

یک آرایه تک بعدی با ابعاد ثابت (بیایید آن را بنامیم ایستا ) به طور کلی به شرح زیر اعلام می شود:

نام [N] را تایپ کنید.

اینجا نوع- نوع عناصر آرایه بیایید ابتدا انواع ساده را بررسی کنیم (int، float، char) اما برای مثال می توانید از ساختارهای پیچیده نیز استفاده کنید. نامبر اساس قوانین شناسه ها نوشته شده است. هر عنصر آرایه نام یکسانی دارد، فقط شاخص یا شماره عنصر تغییر می کند. ن- بعد (یا اندازه) آرایه به شکل یک عبارت ثابت یا ثابت عدد صحیح. این مقدار تعداد سلول های RAM رزرو شده برای آرایه را تعیین می کند. مثلا:

شناور A;یا const n=10; شناور A[n];

مزیت روش دوم با اعلام اولیه بعد به عنوان ثابت به شرح زیر است. اگر نیاز به تغییر ابعاد آرایه دارید، کافی است این کار را در یک مکان در برنامه هنگام تعریف یک ثابت انجام دهید.

بر خلاف یک آرایه پویا، برای یک آرایه استاتیک، حافظه در مرحله کامپایل برای قرار دادن ذخیره می شود. ناعداد از نوع مشخص شده (10 عدد واقعی). آرایه به حافظه نیاز دارد k*Nبایت (4*10 )، جایی که ک- تعداد بایت های لازم برای قرار دادن یک عنصر از نوع مشخص شده (یک عدد از نوع شناور). این حافظه برای کل اجرای برنامه، یا به طور دقیق تر، عملکرد یا بلوکی که در آن آرایه توضیح داده شده است، حفظ می شود. مقدار حافظه مورد نیاز به صورت برنامه نویسی با استفاده از عملیات تعیین می شود اندازهبه روش زیر:

M=اندازه (نوع)*N; یا M = اندازه (نام); یا M = اندازه نام;

جایی که م- یک متغیر از نوع عدد صحیح که اندازه آرایه را بر حسب بایت تعیین می کند. نوع باید داخل پرانتز نوشته شود، اما نام را می توان بدون پرانتز نوشت. برنامه زیر عدد 40 را دوبار چاپ می کند.

شناور A; int M1, M2;

M1=sizeof(float)*10; //ولی M1=اندازه شناور *10;-خطا!

M2=اندازه(A); //یا M2=اندازه A;

کوت<

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

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

const nmax=100; شناور X;

int n; کوت<<”Input the size of array ”; cin>>n;

/* دما نیز با آن کار می کنیم n(نه با nmax) عناصر آرایه، برای مثال، آنها را وارد کنید.* /

برای (int i=0; i

{ // این خط را می توان همراه با بریس های فرفری حذف کرد.

کوت<<”X[“<

cin>>X[i];

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

آرایه- مجموعه ای از عناصر (مؤلفه ها) است که دارای یکسان هستند. علاوه بر این، این نوع داده ها می توانند ساده یا پیچیده باشند.

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

هر آرایه ای یک اندازه ثابت دارد. بدین ترتیب، بعد آرایهتعداد شاخص های مورد نیاز برای دسترسی منحصر به فرد به یک عنصر آرایه است.

یک آرایه می تواند یک بعدی یا چند بعدی باشد. به عنوان مثال، یک جدول یک آرایه دو بعدی است (ردیف های جدول یک بعد آرایه هستند، ستون های جدول بعد دوم هستند). البته جدول را می توان به صورت دو آرایه تک بعدی نشان داد. اما کار با یک آرایه راحت تر از دو آرایه است.

بیشترین استفاده از آرایه های یک بعدی و دو بعدی است. کمتر - سه بعدی. من استفاده از آرایه هایی با ابعاد بزرگتر را توصیه نمی کنم (مخصوصاً برای مبتدیان)، زیرا این مملو از تعداد زیادی خطای دشوار است.

یک متغیر می تواند به عنوان شاخص آرایه استفاده شود. این متغیر باید داشته باشد.

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

چرا آرایه ها مورد نیاز است؟ پاسخ ساده است - برای راحتی (همانطور که در واقع همه زبان ها می سازند). در بسیاری از موارد، کار با آرایه ای از داده ها راحت تر از کار با متغیرهای فردی است.

نحو آرایه در پاسکال:

var ArrayName: آرایه DataType;

اینجا آرایه نامنام متغیر مرتبط با این آرایه است. نوع دادهنوع داده عناصر آرایه است. مثال:

var M1: آرایه بایت.

در اینجا یک آرایه با نام اعلام کرده ایم M1، که شامل 16 عنصر از نوع است بایتبا اندیس هایی از 0 تا 15. عنصر اول آرایه دارای اندیس 0، عنصر دوم دارای اندیس 1 و غیره است.

شما می توانید با یک عنصر آرایه مانند زیر کار کنید:

var m: بایت;
M1 := 100;
m:= M1;

در اینجا ابتدا مقدار 100 را برای اولین عنصر آرایه و سپس به متغیر می نویسیم مترمقدار اولین عنصر آرایه را بنویسید. حدس بزنید چه مقدار در متغیر خواهد بود متربعد از آن))).

اما فقط زمانی می توانید زیبایی استفاده از آرایه ها را درک کنید که سعی کنید تمام عناصر آرایه را در . به عنوان مثال، مانند این:

برای i:= 0 تا 15 M1[i] := i;
برای i:= 0 تا 15 do Write(M1[i], " ");

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

یک آرایه دو بعدی به صورت زیر اعلام می شود:

M2: آرایه از بایت.

این یک ماتریس (یا جدول) 4x2 خواهد بود. یعنی چنین آرایه ای دارای تعداد مشخصی ردیف (در مثال ما 4) و تعداد مشخصی ستون (در مثال ما 2) است. همین نتیجه را می توان با اعلام آرایه ای از آرایه ها به دست آورد:

M2e: آرایه آرایه بایت.

در اینجا، معمولاً برای مبتدیان دشوار است که بفهمند با این همه "چند بعدی" چه کنند. اشکالی نداره عادت کن اولین آرایه ردیف های جدول است. مورد دوم ستون است. یعنی هر عنصر آرایه اول حاوی یک آرایه است. جدول (ماتریس) نشان داده شده توسط مثال ما به صورت زیر است:


بدین ترتیب،

M2 سلول 1.1 است (ردیف اول، ستون اول)
M2 سلول 1.2 است (ردیف اول، ستون دوم)
M2 سلول 2.1 است (ردیف دوم، ستون اول)

اگر سعی کنید برای مثال استفاده کنید M2، سپس کامپایلر یک هشدار صادر می کند، زیرا ستون 3 در آرایه ما وجود ندارد. با این حال، مراقب باشید! در برخی از ابزارهای توسعه، برنامه (بسته به تنظیمات محیط) ایجاد خواهد شد! و ممکن است با خطایی روبرو شوید که بعداً تشخیص آن دشوار خواهد بود.

و حالا نمونه ای از استفاده از آرایه دو بعدی ما:

//پر کردن آرایه برای i:= 1 تا 4 do for j:= 1 تا 2 do M2 := i * 10 + j; //نمایش آرایه روی صفحه برای i:= 1 تا 4 do for j:= 1 تا 2 do Write(M2, " ");

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

امیدوارم این کد را متوجه شده باشید. یا حداقل آن را اجرا کنید و ببینید چه کار می کند. و یک آرایه دو بعدی را روی صفحه نمایش می دهد. اما خروجی در یک خط انجام می شود. و این برای یک آرایه دو بعدی خیلی راحت نیست. از این گذشته ، چنین آرایه هایی معمولاً حاوی ماتریس (جدول) هستند. یعنی اگر اطلاعات به صورت جدول نمایش داده شود راحت تر است. در مورد ما، ما می خواهیم 4 سطر و 2 ستون داشته باشیم.

سعی کنید خودتان این مشکل را حل کنید. و اگر موفق نشدید، در اینجا یک راه حل وجود دارد:

برای i:= 1 تا 4 برای j:= 1 تا 2 مورد j از 1 را انجام دهید: Write(M2, " "); 2: WriteLn(M2، "")؛ پایان؛

این راه حل جهانی نیست، زیرا اعمال آن برای آرایه هایی با ابعاد متفاوت (با تعداد ستون های متفاوت) دشوار است. اما ساده است. و در بسیاری از موارد می توان از آن استفاده کرد.

Const k = 8; //تعداد ستون var i, j: byte; M2f: آرایه آرایه بایت. //پر کردن آرایه برای i:= 1 تا 4 do for j:= 1 تا k انجام M2f := i * 10 + j; //خروجی جدول برای i:= 1 تا 4 do برای j:= 1 تا k مورد j از k: WriteLn(M2f, " "); else Write(M2f، ""); پایان؛

این مثال را با دقت مطالعه کنید و تمام قسمت های کد را که از ثابت استفاده شده است بیابید ک. در مرحله بعد، امیدوارم بتوانید این کد را خودتان کشف کنید.

و در نهایت، اضافه می کنم که برای تعیین شاخص های آرایه می توانید از توابع استاندارد که قبلاً برای ما شناخته شده است استفاده کنید کمو بالا. به عنوان مثال، مانند این:

WriteLn("شاخص اولین عنصر M1: ", Low(M1));
WriteLn("شاخص آخرین عنصر M1: ", High(M1));

مقاله بیشتر از چیزی بود که انتظار داشتم. اما امیدوارم حوصله داشته باشید و تا آخر بخوانید...

هنگام حل مسائل با حجم زیادی از داده های یکسان، استفاده از متغیرهایی با نام های مختلف که بر اساس آدرس های حافظه مرتب نشده اند، برنامه نویسی را دشوار می کند. در چنین مواردی زبان C از اشیایی به نام آرایه استفاده می کند.

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

آرایه با مفاهیم اساسی زیر مشخص می شود:

عنصر آرایه (مقدار عنصر آرایه)- یک مقدار ذخیره شده در یک سلول حافظه خاص که در داخل آرایه قرار دارد و همچنین آدرس این سلول حافظه.
هر عنصر آرایه با سه مقدار مشخص می شود:

  • آدرس عنصر - آدرس سلول حافظه شروع که این عنصر در آن قرار دارد.
  • شاخص عنصر (شماره ترتیبی عنصر در آرایه)؛
  • مقدار عنصر

آدرس آرایه - آدرس عنصر شروع آرایه.

نام آرایه یک شناسه است که برای اشاره به عناصر آرایه استفاده می شود.

اندازه آرایه - تعداد عناصر آرایه

اندازه عنصر تعداد بایت های اشغال شده توسط یک عنصر آرایه است.

از نظر گرافیکی، مکان آرایه در حافظه کامپیوتر را می توان به صورت یک نوار پیوسته از آدرس ها نشان داد.

آرایه نشان داده شده در شکل حاوی عناصر q با شاخص های 0 تا q-1 است. هر عنصر k بایت در حافظه کامپیوتر اشغال می کند و ترتیب عناصر در حافظه به صورت ترتیبی است.

آدرس های عنصر i آرایه هستند

آدرس آرایه آدرس عنصر شروع (صفر) آرایه است. برای دسترسی به عناصر آرایه از شماره سریال (شاخص) عنصر استفاده می شود که مقدار اولیه آن 0 است. بنابراین، اگر یک آرایه حاوی عناصر q باشد، شاخص های عناصر آرایه از 0 تا q-1 متفاوت است.

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

طول آرایه = اندازه عنصر * تعداد عناصر

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

int sizeof(type);

مثلا،

sizeof(char) = 1;
sizeof(int) = 4;
sizeof(float) = 4;
اندازه (دو برابر) = 8;

اعلان و مقداردهی اولیه آرایه ها

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

تایپ کنید name[dimension]=(init);

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

int a = (0، 1، 2، 3، 4، 5، 6، 7، 8، 9)؛ // آرایه a از 10 عدد صحیح

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

int b = (0); // آرایه b از 10 عنصر به 0 مقدار دهی اولیه شده است


اگر آرایه هنگام اعلام مقداردهی اولیه شود، مقادیر اولیه ثابت عناصر آن با کاما در پرانتزهای فرفری از هم جدا شده اند. در این مورد، تعداد عناصر موجود در براکت ها را می توان حذف کرد.

int a = (1، 2، 3، 4، 5، 6، 7، 8، 9)؛

هنگام دسترسی به عناصر آرایه، شاخص عنصر مورد نیاز در کروشه نشان داده می شود.

مثال در C

1
2
3
4
5
6
7
8

#عبارتند از
int main()
{
int a = ( 5، 4، 3، 2، 1); // آرایه a شامل 5 عنصر است
printf("%d %d %d %d %d\n" , a, a, a, a, a);
getchar();
بازگشت 0;
}

نتیجه اجرای برنامه:

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

int a;

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18


#عبارتند از
int main()
{
int a;
int i;
// وارد کردن عناصر آرایه
برای (i = 0; i<5; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]);
}
// خروجی عناصر آرایه
برای (i = 0; i<5; i++)
printf("%d " , a[i]); // فضا در قالب چاپ مورد نیاز است
getchar(); getchar();
بازگشت 0;
}

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

آرایه های چند بعدی

آرایه های چند بعدی را می توان در C نیز اعلام کرد. تفاوت بین یک آرایه چند بعدی و یک بعدی در این است که در یک آرایه یک بعدی موقعیت یک عنصر با یک شاخص تعیین می شود و در یک آرایه چند بعدی - با چندین. نمونه ای از آرایه های چند بعدی یک ماتریس است.

شکل کلی اعلان یک آرایه چند بعدی

تایپ نام[dimension1][dimension2]...[dimensionm];

عناصر یک آرایه چند بعدی در سلول های RAM متوالی به ترتیب صعودی آدرس ها قرار دارند. در حافظه کامپیوتر، عناصر یک آرایه چند بعدی در یک ردیف مرتب شده اند، به عنوان مثال یک آرایه با 2 سطر و 3 ستون،

int a;


به صورت زیر در حافظه قرار می گیرد

تعداد کل عناصر در آرایه دو بعدی داده شده به صورت تعیین می شود

تعداد سطر * تعداد ستون = 2 * 3 = 6.

تعداد بایت‌های حافظه مورد نیاز برای قرار دادن آرایه به وسیله داده می‌شود

تعداد آیتم ها * اندازه آیتم = 6 * 4 = 24 بایت.

راه اندازی آرایه های چند بعدی

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

مثال در C

1
2
3
4
5
6
7
8
9

#عبارتند از
int main()
{
int a = (1، 2، 3، 4، 5، 6);
printf("%d %d %d\n" , a, a, a);
getchar();
بازگشت 0;
}



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

مثال در C

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

#define _CRT_SECURE_NO_WARNINGS
#عبارتند از
int main()
{
int a; // آرایه 2 سطر و 3 ستون
int i, j;
// وارد کردن عناصر آرایه
برای (i = 0; i<2; i++) // از طریق خطوط حلقه بزنید
{
برای (j = 0؛ j<3; j++) // از میان ستون ها حلقه بزنید
{
printf("a[%d][%d] = " , i, j);
scanf("%d" , &a[i][j]);
}
}
// خروجی عناصر آرایه
برای (i = 0; i<2; i++) // از طریق خطوط حلقه بزنید
{
برای (j = 0؛ j<3; j++) // از میان ستون ها حلقه بزنید
{
printf("%d " , a[i][j]);
}
printf("\n"); // خط جدید
}
getchar(); getchar();
بازگشت 0;
}



ارسال یک آرایه به یک تابع

پردازش آرایه را می توان با استفاده از توابع ویژه به راحتی سازماندهی کرد. برای پردازش یک آرایه، باید به عنوان آرگومان به تابع ارسال کنید

  • آدرس آرایه،
  • اندازه آرایه

استثنا توابع پردازش رشته هستند، جایی که کافی است فقط آدرس را منتقل کنید.

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

اگر یک آدرس متغیر (یا آدرس آرایه) به یک تابع ارسال شود، تمام عملیات انجام شده در تابع روی داده در محدوده آدرس مشخص شده روی داده اصلی انجام می شود، بنابراین آرایه اصلی (یا مقدار متغیر) را می توان تغییر داد. توسط تابع فراخوانی شده

مثال در آرایه 10 عنصری C Dan. بزرگترین و ابتدایی ترین عناصر آرایه را جابه جا کنید. برای حداکثر عملیات جستجو و تبادل عنصر، از تابع استفاده کنید.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42

#define _CRT_SECURE_NO_WARNINGS
#عبارتند از
// تابع تبادل
تغییر خالی (int *x، int n)
{
// x - اشاره گر به آرایه (آدرس آرایه)
// n - اندازه آرایه
int i;
int max, index;
حداکثر = x;
شاخص = 0;
// یافتن حداکثر عنصر
برای (i = 1; i {
اگر (x[i]> حداکثر)
{
حداکثر = x[i];
index = i;
}
}
// تبادل
x = x;
x = حداکثر;
}
// تابع اصلی
int main()
{
int a;
int i;
برای (i = 0; i<10; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]);
}
تغییر (a, 10); // تابع تبادل را فراخوانی کنید
// خروجی عناصر آرایه
برای (i = 0; i<10; i++)
printf("%d " , a[i]);
getchar();
getchar();
برگشت
p = p * x[i];
}
بازگشت p;
}
// تابع اصلی
int main()
{
int a; // آرایه a از 5 عنصر را اعلام کرد
int i;
int pr;
// وارد کردن عناصر آرایه
برای (i = 0; i<5; i++)
{
printf("a[%d] = " , i);
scanf("%d" , &a[i]); // &a[i] - آدرس عنصر i آرایه
}
pr = func(a, 5); // محصول را محاسبه کنید
printf("\n pr = %d" , pr); // خروجی حاصل ضرب عناصر زوج
getchar(); getchar();
بازگشت 0;
}



توضیحات آرایه به شما امکان می دهد از هر یک از عناصر آن در برنامه استفاده کنید. از متغیرهای نمایه شده برای نشان دادن عناصر آرایه در C استفاده می شود.

متغیر نمایه شده (عبارت شاخص)- تعیین سلول برای ذخیره یک عنصر آرایه. به عنوان مشخص کننده آرایه و شاخص(های) عنصر اشاره می شود.

ü توجه! یکی از ویژگی‌های تعیین عناصر آرایه در C شماره‌گذاری شاخص‌هایی است که از 0 شروع می‌شوند و نه از 1. بنابراین، شاخص‌های موجود در C یک کمتر از شاخص‌هایی هستند که از نظر ریاضی مشخص شده‌اند. این شرایط باید در برنامه در نظر گرفته شود، به ویژه هنگام تشکیل شرط تکرار (خروج) از چرخه.

طرح تخصیص حافظه برای ذخیره سازی یک آرایه تک بعدی به شرح زیر است:

طول سلول برای ذخیره هر عنصر بر اساس نوع آرایه تعیین می شود:

· کاراکتر - 1 بایت.

· عدد صحیح - 2 بایت.

· واقعی - 4 بایت.

· دقت دو برابر - 8 بایت.

ساختار نمادگذاری برای یک متغیر نمایه شده از یک آرایه یک بعدی:

نام[شاخص]

جایی که نام، شناسه آرایه است.

index - یک عملوند از نوع عدد صحیح که تعداد یک عنصر را در میان عناصر دیگر تشکیل دهنده آرایه تعیین می کند.

- محدود کننده های شاخص

به عنوان مثال، در آرایه D(16) که قبلاً توضیح داده شد، عنصر اول با عبارت شاخص d، عنصر دوم با d، جریان با d[i]، عنصر ماقبل آخر با d و آخرین عنصر با d مشخص می شود.

در صورت لزوم، شاخص را می توان با یک عبارت حسابی مشخص کرد. مثلاً d یا d. در هر صورت، در زمان استفاده از متغیر، شاخص باید تعریف (محاسبه) شود و مقدار حاصل باید در محدوده مشخص شده توسط توصیفگر قرار گیرد.

مثال در نظر گرفته شده شناسایی عناصر آرایه D برای هر یک از آرایه های یک بعدی توصیف شده قابل استفاده است.

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

آدرس هر متغیری با عملیات & تعیین می شود. بنابراین، آدرس عنصر d &d است، آدرس d[i] &d[i] است، یعنی. همه عناصر آرایه به صورت خطی در RAM قرار دارند و از آدرس &d شروع می شوند.



در زبان C، شناسه یک آرایه یک بعدی به طور منحصربه‌فرد آدرس اولین عنصر آن را تعیین می‌کند. برای مثال، c º &c، d º &d.

آدرس هر عنصر از یک آرایه یک بعدی با وابستگی نام + شاخص بیان می شود (ایندکس تغییر عنصر را نسبت به اولی با تعداد عناصر مشخص شده توسط آن تعیین می کند). به عنوان مثال، &c[i] (آدرس i-امین عنصر آرایه C) به صورت c+i محاسبه می شود.

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

آرایه

بعد، ابعاد، اندازهآرایه - تعداد شاخص های مورد نیاز برای دسترسی بدون ابهام به یک عنصر آرایه.

فرمیا ساختار آرایه- تعداد ابعاد و اندازه (وسعت) آرایه برای هر بعد را می توان با یک آرایه یک بعدی نشان داد.

تعدادی از زبان های برنامه نویسی، به عنوان مثال، Lisp، جاوا اسکریپت، پی اچ پی، روبی نیز از آرایه های انجمنی (یا آرایه های هش) استفاده می کنند، که در آنها عناصر لزوما از یک نوع نیستند و لزوماً توسط شاخص قابل دسترسی نیستند.

توضیحات کلی

آرایه - مجموعه‌ای مرتب از داده‌ها برای ذخیره‌سازی داده‌هایی از یک نوع، که توسط یک یا چند شناسایی می‌شود شاخص ها. در ساده ترین حالت، یک آرایه طول ثابتی دارد و واحدهای داده از همان نوع را ذخیره می کند.

تعداد شاخص های آرایه مورد استفاده ممکن است متفاوت باشد. آرایه های دارای یک شاخص نامیده می شوند یک بعدی، با دو - دو بعدیو غیره. یک آرایه یک بعدی به طور ضعیف با یک بردار در ریاضیات مطابقت دارد، یک آرایه دو بعدی دقیقاً با یک ماتریس مطابقت ندارد. اغلب، آرایه هایی با یک یا دو شاخص استفاده می شود، کمتر - با سه، و حتی بیشتر از شاخص ها بسیار نادر هستند.

نمونه ای از آرایه استاتیک در پاسکال

(آرایه یک بعدی از اعداد صحیح. شماره گذاری عناصر از 1 تا 15) a: آرایه [ 1 .. 15 ] از عدد صحیح ; (آرایه دو بعدی از کاراکترها. شماره گذاری شده توسط ستون ها بر اساس نوع بایت (از 0 تا 255) توسط ردیف های 1 تا 5) multiArray: آرایه [Byte, 1 .. 5] of Char; (آرایه یک بعدی رشته ها. شماره گذاری بر اساس نوع کلمه (از 0 تا 65536)) rangeArray : آرایه [ Word ] String ;

مثالی از آرایه استاتیک در C/C++

Int Array[ 10] ; // آرایه یک بعدی از اعداد صحیح به اندازه 10 // شماره گذاری عناصر از 0 تا 9دو آرایه[ 12 ] [ 15 ] ; // آرایه دو بعدی از اعداد واقعی با دقت دوگانه// سایز 12 در 15. // شماره گذاری در ستون ها از 0 تا 11، در ردیف ها از 0 تا 14

پشتیبانی از آرایه های شاخص (سینتکس اعلان خود، توابع برای کار با عناصر و غیره) در اکثر زبان های برنامه نویسی سطح بالا موجود است. حداکثر اندازه مجاز آرایه، انواع و محدوده مقادیر شاخص، محدودیت در انواع عناصر توسط زبان برنامه نویسی و/یا یک مترجم خاص تعیین می شود.

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

اعلان نوع "آرایه" در پاسکال

نوع tarrayType = آرایه [ 0 .. 9 ] از عدد صحیح ; (* اعلامیه های نوع "آرایه" *) var arr1, arr2, arr3: TArayType; (* اعلام سه متغیر آرایه از یک نوع *)

انواع آرایه های خاص

آرایه های پویا

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

نمونه ای از آرایه پویا در دلفی

ByteArray: آرایه بایت. // آرایه تک بعدی multiArray : آرایه آرایه رشته ; // آرایه چند بعدی

مثالی از یک آرایه پویا در C

Float * array1; // آرایه تک بعدی int**array2; // آرایه دو بعدی array1 = (float * ) malloc (10 * sizeof (float ) ); // هر کدام 10 بلوک بایت sizeof(float) اختصاص دهید array2 = (int ** ) malloc (16 * sizeof (int * ) ); // تخصیص 16 بلوک از بایت های اندازه (int*) هر کدام. اشاره گر به آرایه های رشته ای یک بعدی در اینجا نوشته می شودبرای (i = 0 ؛ i< 16 ; i++ ) array2[ i] = (int * ) malloc (8 * sizeof (int ) ) ; // تخصیص 8 بلوک بایت sizeof(int) هر کدام. اینها آرایه های یک بعدی هستند - ردیف های ماتریسی. // دسترسی به آرایهآرایه1[i] = 5.0 ; * (array1+ i) = 5.0 ; آرایه2[i][j] = 6; // ورودی ها معادل هستند. اولین مورد استفاده از یک شاخص است،* (* (آرایه2+ i) + j) = 6 ; // ثانیه با عملیات عدم ارجاع.

مثال آرایه پویا در C++

Float * array1; // آرایه تک بعدی int**array2; // آرایه چند بعدیآرایه 1 = شناور جدید [ 10 ] ; // تخصیص 10 بلوک به اندازه شناور array2 = new int * [ 16 ] ; // تخصیص 16 بلوک به اندازه یک اشاره گر به intبرای (int i = 0 ; i< 16 ; i++ ) { array2[ i] = new int [ 8 ] ; }

آرایه های ناهمگن

ناهمگونآرایه ای است که در آن عناصر مختلف را می توان مستقیماً روی مقادیر متعلق به انواع داده های مختلف نوشت. آرایه ای که نشانگرهای مقادیر انواع مختلف را ذخیره می کند، ناهمگن نیست، زیرا خود داده های ذخیره شده در آرایه متعلق به یک نوع واحد است - نوع "اشاره گر". آرایه های ناهمگن به عنوان یک ساختار جهانی برای ذخیره مجموعه داده های انواع دلخواه مناسب هستند. عدم پشتیبانی آنها در زبان برنامه نویسی منجر به نیاز به اجرای طرح های ذخیره سازی داده های پیچیده تر می شود. از سوی دیگر، اجرای ناهمگونی نیازمند مکانیزم پشتیبانی آرایه پیچیده تری در مترجم زبان است. یک آرایه ناهمگن به عنوان یک نوع داده داخلی در زبان های PHP و 1C وجود دارد.

پیاده سازی

یکی از راه‌های پیاده‌سازی آرایه‌های ایستا با یک نوع عنصر به صورت زیر است (در فرترن، ترتیب شاخص برخلاف C است):

  1. یک بلوک پیوسته از حافظه با حجم S*m 1 *m 2 *m 3 …m n برای آرایه اختصاص داده شده است که در آن S اندازه یک عنصر است و m 1 …m n اندازه محدوده های شاخص است (یعنی ، تعداد مقادیری که شاخص مربوطه می تواند بگیرد).
  2. هنگام دسترسی به عنصر آرایه A، آدرس عنصر مربوطه به صورت B+S*((…(i 1p *m 1 +i 2p)*m 2 +…+i (n-1)p)*m محاسبه می شود. n-1 +i np)، که در آن B پایه است (آدرس ابتدای بلوک حافظه آرایه)، i kp مقدار k امین شاخص است که به یک عدد صحیح با افست اولیه صفر کاهش می یابد.

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

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

انواع پیچیده‌تر آرایه‌ها - پویا و ناهمگن - برای پیاده‌سازی دشوارتر هستند.

مزایای

  • سهولت محاسبه آدرس یک عنصر با شاخص آن (زیرا عناصر آرایه یکی پس از دیگری قرار دارند)
  • زمان دسترسی برابر به همه عناصر
  • اندازه کوچک عناصر: آنها فقط از یک فیلد اطلاعاتی تشکیل شده اند

ایرادات

  • برای یک آرایه استاتیک - عدم پویایی، عدم امکان حذف یا اضافه کردن یک عنصر بدون جابجایی سایرین
  • برای یک آرایه پویا و/یا ناهمگن - عملکرد کمتر (در مقایسه با یک استاتیک معمولی) و سربار اضافی برای پشتیبانی از خواص پویا و/یا ناهمگنی.
  • هنگام کار با یک آرایه به سبک C (با اشاره گر) و در صورت عدم وجود کنترل های اضافی - تهدید فراتر رفتن از مرزهای آرایه و آسیب رساندن به داده ها

همچنین ببینید

ادبیات

  • ویرث ن.الگوریتم ها و ساختار داده ها - م.: میر، 1368. - 360 ص. - شابک 5-03-001045-9
  • Hyvönen E., Seppänen J.دنیای لیسپ. مقدمه ای بر LISP و برنامه نویسی تابعی. در 2 جلد = Lisp-maailma: Johdatus kieleen ja ohjelmointiin / Trans. از فنلاندی - م.: میر، 1990. - ISBN 5-03-001935-9
  • ماگاریو N. A.زبان برنامه نویسی APL - م.: رادیو و ارتباطات، 1983. - 96 ص.
  • بارتنیف O. V.فرترن مدرن - ویرایش سوم، اضافه کنید. و پردازش شد.. - M.: DIALOG-MEPhI, 2000. - 449 p.

یادداشت