Sign in Join
Wiki copytemporary

Revision 2 of 4, by WikiArchive on 11-4-2026. The page as it is now.

Basic Pascal Tutorial/Chapter 5/1-dimensional arrays/bg

5C - Едноразмерни масиви

(author: Tao Yue, state: unchanged)

Да предположим, че искате да прочетете 5000 цели числа и да направите нещо с тях. Как бихте съхранявали числата?

Може да използвате 5000 променливи, получавайки нещо като:

aa, ab, ac, ad, ... aaa, aab, ... aba, ...

Но това би станало досадно (след като декларирате тези променливи, трябва да прочетете стойности във всяка от тези променливи).

Един масив съдържа няколко места за съхранение, всички от един и същи тип. Вие се отнасяте към всяко отделно място за съхранение с името на масива и с допълнителен индекс. Дефиницията на типа е:

pascal
type
  typename = array [enumerated_type] of data_type;

Типът данни data_type може да е всякакъв, в това число и друг масив. За enumerated_type се записва изброим тип, може директно да се зададе в квадратните скоби или да се изпише името на вече дефиниран тип. С други думи:

pascal
type
  enum_type = 1..50;
  arraytype = array [enum_type] of integer;

е същото като:

pascal
type
  arraytype = array [1..50] of integer;

Бележка: Ето как низовете всъщност се управляват вътрешно - като масиви. Преди съвременните компилатори на Pascal да добавят собствена поддръжка за низове, програмиста е трябвало сам да се справя с това, като декларира:

pascal
type
  String = packed array [0..255] of char;

след което да използва някакъв вид символ, за да укаже края на низа. В повечето случаи това е т.н. символ null (числото 0 или ord(0)). Служебната дума packed означава, че масива трябва да се уплътни по такъв начин, че да заема най-малко място в паметта.

Масивите от символи често се наричат буфери. Грешки в обработката на тези буфери в езиците C и C++ могат да доведат до препълването им. Препълване се получава, когато се опитаме да поставим символен низ с дължина 200 в буфер с дължина само от 150 символа. Ако в паметта след буфера е разположена част от кода на програмата, тогава нападателят току-що е успял да инжектира произволен код във вашата система. По този начин работи известния червей Slammer, който вилня в Интернет в продължение на няколко дни. Опитайте го в Pascal и вижте какво ще се случи.

Масивите са полезни когато искате да съхранявате големи количества данни и да ги използвате по-късно в програмата. Те работят изключително удачно с цикли for защото управляващата променлива на цикъла може да се използва и като индекс в масива. Ако предположим следните дефиниции:

pascal
type
  arraytype = array[1..50] of integer;
  
var
  myarray : arraytype;

тогава за да прочетете 50 числа може да използвате следния for цикъл:

pascal
for count := 1 to 50 do
  read (myarray[count]);

Квадратните скоби [ ] ограждат индекса когато се обръщаме към определен елемент от масива.

pascal
myarray[5] := 6;

From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 5/1-dimensional arrays/bg", as it stood on 2023-01-03 after a change by Alpinistbg, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.