ذخیره‌سازی داده

فرض کنید شما یک بازی کامپیوتری به نام "User Hostile" ساخته اید که در آن بازیکنان با یک رابط کامپیوتری پیچیده و غیر دوستانه رقابت می کنند. اکنون باید برنامه ای بنویسید که فروش ماهانه این بازی را در یک دوره پنج ساله ردیابی کند. یا فرض کنید باید کارت های تجاری هکر قهرمان را موجودی کنید.
خیلی زود به این نتیجه خواهید رسید که برای ذخیره و پردازش اطلاعات به چیزی بیش از انواع داده های اولیه ساده نیاز دارید.
 

آرایه ها (لیست ها). مقدمه

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

هنگام کار با آرایه ها، باید چگونه حل سه کار را بیاموزید:
ایکس تخصیص حافظه با اندازه مورد نیاز برای یک آرایه
ایکس داده ها را در سلول مورد نظر بنویسید
ایکس خواندن داده ها از سلول


آرایه ها در پاسکال


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

استفاده می کند <پیش> var a: آرایه [1..10] عدد صحیح؛

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

استفاده کنید <پیش> var LettersCount: آرایه ['a'..'z'] از عدد صحیح;

و تا حد دلخواه با آن کار کنید:

<پیش> تعداد حروف['z'] := 1; تعداد حروف['d'] := تعداد حروف['d'] + 1;

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

ایجاد آرایه

هنگام ایجاد یک آرایه، فضا به حافظه اختصاص داده می شود (تعداد مشخصی سلول) <پیش> آرایه‌ها می‌توانند ایجاد شده با فهرست کردن عناصر: <پیش> var a: آرایه عدد صحیح؛ SetLength(a, 3); a[0] := 1; a[1] := 2; a[2] := 3;
2) آرایه ها می توانند از هر نوع داده ای تشکیل شوند - اعداد صحیح یا واقعی، رشته های کاراکتر  <پیش> var a: آرایه char; SetLength(a, 3); a[0] := 'a'; a[1] := 'b'; a[2] := 'c'; 3) یک آرایه همیشه "می داند" اندازه شما تابع  length برای تعیین اندازه یک آرایه استفاده می شود. اغلب اندازه آرایه در یک متغیر جداگانه ذخیره می شود تا برنامه به راحتی قابل تغییر باشد تا با اندازه آرایه متفاوت کار کند. مثال: <پیش> N := 10; // در متغیر N اندازه آرایه را ذخیره می کنیم SetLength(a, N); // آرایه و اندازه N را تنظیم کنید writeln(طول(a)); // اندازه آرایه را نمایش می دهد اندازه یک آرایه را می توان از صفحه کلید تنظیم کرد.

ارجاع به عنصر آرایه

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

به یاد داشته باشید!
شماره گذاری آرایه ها در پاسکال از صفر شروع می شود!

(این امر اجباری است &mdash؛ باید از ابتدا شروع کنید. یادآوری این نکته به ویژه مهم است)

نمونه هایی از دسترسی به آرایه A: <پیش> x := (A[3] + 5) * A[1] // خواندن مقادیر A[3] و A[1] A[0] := x + 6 // مقدار جدید را به A[0] بنویسید بیایید برنامه کار با عناصر آرایه را تجزیه و تحلیل کنیم. <پیش> var i: عدد صحیح; الف: آرایه ای از اعداد صحیح؛ شروع     من := 1;     استقرار (a, 5); //ایجاد یک آرایه از 5 عنصر      a[0] := 23; // به هر یک از 5 عنصر آرایه (شاخص های 0 تا 4)     a[1] := 12; // یک مقدار خاص بنویسید     a[2] := 7;     a[3] := 43;     a[4] := 51;     a[2] := a[i] + 2 * a[i - 1] + a[2 * i]; // مقدار عنصر را با شاخص 2 به نتیجه عبارت تغییر دهید     // زیرا i=1، سپس مقدار متغیر i را با عبارتی که بدست می آوریم جایگزین می کنیم     // عبارت بعدی  a[2] := a[1] + 2*a[0] + a[2];     writeln(a[2] + a[4]); پایان.
در نتیجه اجرا این برنامه مقدار مجموع عناصر آرایه با شاخص 2 و با اندیس 4 برابر با 116 روی صفحه ظاهر می شود. همانطور که از مثال می بینید، ما می توانیم به هر عنصر آرایه دسترسی داشته باشیم . و همچنین تعداد مورد نیاز عنصر را با استفاده از فرمول های مختلف محاسبه کنید (مثلاً مانند برنامه A[i-1] یا A[2*i]، در این موارد، شاخص های عناصر محاسبه می شود و بستگی به مقدار i.)

بیایید به یک برنامه نمونه نگاه کنیم <پیش> var a: آرایه عدد صحیح؛ شروع     استقرار (a, 5);     a[5] := 5; a[-1] := 0; پایان.

چون آرایه با 5 عنصر اعلام شده است، بنابراین عناصر از 0 تا 4 شماره گذاری می شوند. می بینیم که برنامه در خط 6 به عنصری اشاره دارد که وجود ندارد а [5] و در خط هفتم به خط نیز وجود ندارد a[-1].

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

 
 

هنگام کار با آرایه ها، معمولاً باید با تمام عناصر آرایه به طور همزمان کار کنید.
تکرار از طریق عناصر: تمام عناصر آرایه را بررسی می کنیم و در صورت لزوم، عملیاتی را روی هر یک از آنها انجام می دهیم.
برای این، اغلب از یک حلقه با یک متغیر استفاده می شود که از 0 به N-1 تغییر می کند، جایی که N تعداد عناصر آرایه است.
در زیر N اندازه فعلی آرایه را در نظر می گیریم، یعنی
N := طول (A) <پیش> ... برای i := 0 تا n - 1 شروع می شود // در اینجا ما با a[i] کار می کنیم پایان؛ ... در حلقه مشخص شده، متغیر i مقادیر 0، 1، 2، ...، N-1 را می گیرد.  بنابراین، در هر مرحله از حلقه، به عنصر خاصی از آرایه با عدد i دسترسی داریم.
بنابراین، کافی است آنچه را که باید با یک عنصر از آرایه a[i] انجام داد و این اعمال را در چنین چرخه ای قرار داد، توصیف کنیم.

بیایید برنامه ای بنویسیم که آرایه را با اولین N & nbsp؛ اعداد طبیعی پر کند، یعنی در پایان برنامه، عناصر آرایه باید برابر شوند. <پیش> a[0] = 1 a[1] = 2 a[2] = 3 ... a[N - 1] = N دیدن الگو آسان است: مقدار یک عنصر آرایه باید 1 بیشتر از شاخص عنصر باشد.
حلقه به این شکل خواهد بود <پیش> برای i := 1 تا n - 1 do a[i] := i + 1; کار را کامل کنید.