Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 5/1-dimensional arrays/bg: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

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

OldNewLine
1+[[Basic Pascal Tutorial/Chapter 5/Subranges/bg|◄]] | [[Basic Pascal Tutorial/Contents/bg|▲]] | [[Basic Pascal Tutorial/Chapter 5/Multidimensional arrays/bg|►]]
2+---|---|---
3+
4+## 5C - Едноразмерни масиви
5+
6+_(author: Tao Yue, state: unchanged)_
7+
8+Да предположим, че искате да прочетете 5000 цели числа и да направите нещо с тях. Как бихте съхранявали числата?
9+
10+Може да използвате 5000 променливи, получавайки нещо като:
11+```
12+aa, ab, ac, ad, ... aaa, aab, ... aba, ...
13+```
14+
15+Но това би станало досадно (след като декларирате тези променливи, трябва да прочетете стойности във всяка от тези променливи).
16+
17+Един масив съдържа няколко места за съхранение, всички от един и същи тип. Вие се отнасяте към всяко отделно място за съхранение с името на масива и с допълнителен индекс. Дефиницията на типа е:
18+```
19+type
20+ typename = array [enumerated_type] of data_type;
21+```
22+
23+Типът данни _data_type_ може да е всякакъв, в това число и друг масив. За _enumerated_type_ се записва изброим тип, може директно да се зададе в квадратните скоби или да се изпише името на вече дефиниран тип. С други думи:
24+```
25+type
26+ enum_type = 1..50;
27+ arraytype = array [enum_type] of integer;
28+```
29+
30+е същото като:
31+```
32+type
33+ arraytype = array [1..50] of integer;
34+```
35+
36+Бележка: Ето как низовете всъщност се управляват вътрешно - като масиви. Преди съвременните компилатори на Pascal да добавят собствена поддръжка за низове, програмиста е трябвало сам да се справя с това, като декларира:
37+```
38+type
39+ String = packed array [0..255] of char;
40+```
41+
42+след което да използва някакъв вид символ, за да укаже края на низа. В повечето случаи това е т.н. символ _null_ (числото 0 или ord(0)). Служебната дума _packed_ означава, че масива трябва да се уплътни по такъв начин, че да заема най-малко място в паметта.
43+
44+Масивите от символи често се наричат _буфери_. Грешки в обработката на тези буфери в езиците C и C++ могат да доведат до препълването им. Препълване се получава, когато се опитаме да поставим символен низ с дължина 200 в буфер с дължина само от 150 символа. Ако в паметта след буфера е разположена част от кода на програмата, тогава нападателят току-що е успял да инжектира произволен код във вашата система. По този начин работи известния червей Slammer, който вилня в Интернет в продължение на няколко дни. Опитайте го в Pascal и вижте какво ще се случи.
45+
46+Масивите са полезни когато искате да съхранявате големи количества данни и да ги използвате по-късно в програмата. Те работят изключително удачно с цикли _for_ защото управляващата променлива на цикъла може да се използва и като индекс в масива. Ако предположим следните дефиниции:
47+```
48+type
49+ arraytype = array[1..50] of integer;
50+
51+ var
52+ myarray : arraytype;
53+```
54+
55+тогава за да прочетете 50 числа може да използвате следния _for_ цикъл:
56+```
57+for count := 1 to 50 do
58+ read (myarray[count]);
59+```
60+
61+Квадратните скоби `[ ]` ограждат индекса когато се обръщаме към определен елемент от масива.
62+```
63+myarray[5] := 6;
64+```
65+
66+[[Basic Pascal Tutorial/Chapter 5/Subranges/bg|◄]] | [[Basic Pascal Tutorial/Contents/bg|▲]] | [[Basic Pascal Tutorial/Chapter 5/Multidimensional arrays/bg|►]]
67+---|---|---
68+
69+---
70+*From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 5/1-dimensional arrays/bg", as the Internet Archive kept it on 2025-03-15. 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](/wiki-contact).*

Back to history