Копие на уикитоогледало

Това е огледало на уикито в pascal.chat. Редактирането, историята и входът са там.

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

English · Français · Български · 中文(中国) · 日本語

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

(author: Tao Yue, state: unchanged)

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

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

text
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.

Версия 4, последно променена от WikiArchive .