Basic Pascal Tutorial/Chapter 5/1-dimensional arrays/bg
│
български (bg) │
English (en) │
français (fr) │
日本語 (ja) │
中文(中国大陆) (zh_CN) │
5C - Едноразмерни масиви
(author: Tao Yue, state: unchanged)
Да предположим, че искате да прочетете 5000 цели числа и да направите нещо с тях. Как бихте съхранявали числата?
Може да използвате 5000 променливи, получавайки нещо като:
aa, ab, ac, ad, ... aaa, aab, ... aba, ...
Но това би станало досадно (след като декларирате тези променливи, трябва да прочетете стойности във всяка от тези променливи).
Един масив съдържа няколко места за съхранение, всички от един и същи тип. Вие се отнасяте към всяко отделно място за съхранение с името на масива и с допълнителен индекс. Дефиницията на типа е:
type
typename = array [enumerated_type] of data_type;
Типът данни data_type може да е всякакъв, в това число и друг масив. За enumerated_type се записва изброим тип, може директно да се зададе в квадратните скоби или да се изпише името на вече дефиниран тип. С други думи:
type
enum_type = 1..50;
arraytype = array [enum_type] of integer;
е същото като:
type
arraytype = array [1..50] of integer;
Бележка: Ето как низовете всъщност се управляват вътрешно - като масиви. Преди съвременните компилатори на Pascal да добавят собствена поддръжка за низове, програмиста е трябвало сам да се справя с това, като декларира:
type
String = packed array [0..255] of char;
след което да използва някакъв вид символ, за да укаже края на низа. В повечето случаи това е т.н. символ null (числото 0 или ord(0)). Служебната дума packed означава, че масива трябва да се уплътни по такъв начин, че да заема най-малко място в паметта.
Масивите от символи често се наричат буфери. Грешки в обработката на тези буфери в езиците C и C++ могат да доведат до препълването им. Препълване се получава, когато се опитаме да поставим символен низ с дължина 200 в буфер с дължина само от 150 символа. Ако в паметта след буфера е разположена част от кода на програмата, тогава нападателят току-що е успял да инжектира произволен код във вашата система. По този начин работи известния червей Slammer, който вилня в Интернет в продължение на няколко дни. Опитайте го в Pascal и вижте какво ще се случи.
Масивите са полезни когато искате да съхранявате големи количества данни и да ги използвате по-късно в програмата. Те работят изключително удачно с цикли for защото управляващата променлива на цикъла може да се използва и като индекс в масива. Ако предположим следните дефиниции:
type
arraytype = array[1..50] of integer;
var
myarray : arraytype;
тогава за да прочетете 50 числа може да използвате следния for цикъл:
for count := 1 to 50 do
read (myarray[count]);
Квадратните скоби [ ] ограждат индекса когато се обръщаме към определен елемент от масива.
myarray[5] := 6;