Sign in Join
Wiki copytemporary

Basic Pascal Tutorial/Chapter 1/Constants/bg: what changed

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

Title: Basic Pascal Tutorial/Chapter 1/Constants/bg

OldNewLine
1+## Константи
2+
3+*(author: Tao Yue, state: changed)*
4+
5+Константите се указват чрез идентификатори и получават стойност в началото на програмата. Стойността, съхранявана в константа, не може да бъде променена.
6+
7+Константите биват три вида: обикновени, записи и масиви. Обикновената константа е идентификатор, на който се присвоява единична стойност. Константата-запис е идентификатор, съдържащ една или повече отделни стойности в структурирана форма. Константата-масив съдържа множество стойности от един тип. Те ще бъдат обяснени подробно в отделни раздели по-долу.
8+
9+Константа, независимо дали скалар, поле за запис или индекс на масив, може да се използва вместо литерал от същия тип. Тя също така може да се използва навсякъде, където може да се използва и променлива, но с две изключения: не може да се използва отляво на оператор за присвояване и не може да се предава като VAR параметър при извикване на процедура, функция, метод или свойство (property).
10+
11+## Обикновени константи
12+
13+Обикновените константи се дефинират в секцията Const (constant) на програмата:
14+
15+``` pascal
16+const
17+ Identifier1 = value;
18+ Identifier2 = value;
19+ Identifier3 = value;
20+```
21+
22+Например, нека дефинираме някои константи от различни типове данни: низове, символи, цели числа, реални числа и булеви числа. Тези типове данни ще бъдат обяснени допълнително в следващия раздел.
23+
24+``` pascal
25+const
26+ Name = 'Tao Yue';
27+ FirstLetter = 'a';
28+ Year = 1997;
29+ pi = 3.1415926535897932;
30+ UsingNCSAMosaic = TRUE;
31+```
32+
33+Отбележете, че в Pascal единичните символи са затворени в единични кавички или апострофи (')! Това е различно от по-новите езици, които често използват или позволяват двойни кавички или Heredoc нотация. Стандартният Pascal не използва двойни кавички за указване на символи или низове.
34+
35+Константите служат за дефиниране на стойност, която се използва в цялата програма, но може да се промени в бъдеще. Вместо да променяте на всички места, в които сте използвали дадената стойност, можете да промените само дефиницията на константата.
36+
37+Типизираните константи налагат константата да бъде само от определен тип. Например,
38+
39+``` pascal
40+const
41+ a : real = 12;
42+```
43+
44+Ще дефинира константа с идентификатор a, която съдържа реална стойност 12.0 вместо целочислената стойност 12.
45+
46+## Константи-записи
47+
48+Константите-записи се дефинират чрез създаване на тип запис с едно или повече полета и след това създаване на константа, която се позовава на този тип запис и попълва полетата със стойности.
49+
50+Общият формат на константите-записи е:
51+
52+
53+const
54+
55+
56+`identifier`: `record_type` = ( `field_values` );
57+
58+`identifier` …
59+
60+където
61+
62+- `identifier` е името на константата;
63+- `record_type` е името на типа-запис, който се използва за да опише тази константа;
64+- `field_values` е списък съдържащ име на поле от `record_type`, две точки (:), стойността за това поле, разделен от следващите поле:стойност с точка и запетая (;).
65+
66+Нека опитаме прост пример, константа за комплексно число.
67+
68+``` pascal
69+type
70+ complex= record
71+ R,I: real;
72+ end;
73+const
74+ Pi = 3.14159267;
75+ C1: Complex = ( R:3; I: 1783.5 );
76+ C2: complex = ( r: 9.6; I:1.62);
77+ C3: COMPLEX = ( r:17; i:115);
78+ C4: complex = ( r:1.9e56; i:72.43);
79+ C5: Complex=( R: 22.1 ; I: Pi );
80+```
81+
82+Обърнете внимание, че полетата трябва да бъдат инициализирани в същия ред, в който са декларирани (или компилаторът ще сигнализира за грешка). Ако липсва стойност за поле, компилаторът ще предупреди за неинициализирана стойност.
83+
84+За това как да опишете постоянен масив от записи, вижте раздела по-долу.
85+
86+## Константи-масив
87+
88+Константите-масив работят почти по същия начин като обикновените константи, с изключение на това, че могат да бъдат посочени множество стойности. Всички стойности трябва да бъдат от един и същи тип, независимо дали е число (байт, дума, цяло число. Реално и т.н.) или символни (char, низ, ansistring и т.н.).
89+
90+### Едномерни масиви
91+
92+За едномерните константи общият формат е:
93+
94+
95+const
96+
97+
98+`identifier`: array\[`low_value` .. `high_value`\] of `type` = ( `values` );
99+
100+`identifier` …
101+
102+където
103+
104+- `identifier` е името на константата-масив;
105+- `low_value` е долната граница на масива;
106+- `high_value` е горната граница на масива;
107+- `type` е типът стойност, съхранявана в елементите на масива (char, integer, real, string, т.н.)
108+- `values` е списък със стойности, като всеки елемент в списъка е отделен от следващия със запетая.
109+
110+Ето един пример с буквите от азбуката:
111+
112+``` pascal
113+const
114+ Alphabet: array [1..26] of char =
115+ ('A','B','C','D','E','F','G','H','I',
116+ 'J','K','L','M','N','O','P','Q','R',
117+ 'S','T','U','V','W','X','Y','Z' ) ;
118+```
119+
120+Има две правила, които трябва да се запомнят. Както беше споменато по-рано, всички дадени стойности трябва да бъдат от един и същи тип и трябва да посочите толкова стойности, колкото елементи има в масива. Приведеният пример е добър, но ще има и други части на програмата, които препращат към този масив, като например `for` цикли. и т.н. Вместо да използваме числото 26 за размера на масива, нека вместо него използваме друга константа:
121+
122+``` pascal
123+Const
124+ LetterCount = 26;
125+ Alphabet: array [1..LetterCount] of char =
126+ ('A','B','C','D','E','F','G','H','I',
127+ 'J','K','L','M','N','O','P','Q','R',
128+ 'S','T','U','V','W','X','Y','Z' ) ;
129+```
130+
131+По този начин, ако се наложи на друго място да се използва размера на масива, просто може да се използва `LetterCount`.
132+
133+Ето по-интересен пример, в който се използват няколко типа данни. Този пример, който вероятно е от календарна програма, има всякакви типове: char, string и integer.
134+
135+``` pascal
136+Const
137+ MonthStart = 0 ; // could be 1 and
138+ MonthEnd = 11; // 12 if desired
139+ DayStart = 0 ; // same,could be 1 and
140+ DayEnd = 6; // 7
141+ DayNameCh: array [DayStart .. DayEnd] of char =(
142+ 'S','M','T','W','H','F','A');
143+ DayNameShort: array [DayStart .. DayEnd] of string=
144+ ( 'Sun','Mon','Tue','Wed','Thu',
145+ 'Fri','Sat' ) ;
146+ DayNameLong: array DayStart .. DayEnd] of
147+ string = ( 'Sunday', 'Monday','Tuesday','Wednesday',
148+ 'Thursday', 'Friday', 'Saturday' );
149+ MonthNameLong: array[MonthStart ..MonthEnd] of string = (
150+ 'January','February','March','April',
151+ 'May','June','July','August',
152+ 'September','October','November'.
153+ 'December'
154+ );
155+ MonthDays: ARRAY [ MonthStart .. MonthEnd ] of
156+ integer = ( 31, 28, 31, 30, 31, 30,
157+ 31, 31, 30. 31, 30, 31 );
158+```
159+
160+Забележете, че за елементите, посочени като тип `низ`, макар че всяка стойност трябва да бъде низ, не се изисква всички да са с еднаква дължина.
161+
162+#### Едномерен масив от записи
163+
164+Константата-масив може да се състои от записи. За да ги опишем, използваме скобите ( ) около всеки запис. Използвайки типа `complex`, дефиниран в раздела за константите-записи, можем да създадем постоянен масив от `complex` записи, както следва:
165+
166+``` pascal
167+type
168+ complex= record
169+ R,I: real;
170+ end;
171+const
172+ Pi = 3.14159267;
173+ C2: complex = ( r: 96; I:1.62);
174+ C_Low = 1;
175+ C_High = 5;
176+ C: array [ c_low .. c_high] of complex = (
177+ ( R:3; I:1783.5 ),
178+ ( r: 96; I:1.62),
179+ ( r:17; i:115),
180+ ( r:1.9e56; i:72.43),
181+ ( R: 102.1;I: Pi )
182+ );
183+
184+```
185+
186+Както и преди, стойностите не е нужно да бъдат литерали; те могат да бъдат други константи. Също така стойностите трябва да се дават в същия ред, както са дефинирани в записа.
187+
188+Сега за един по-сложен пример, в който използваме изброен тип и множество:
189+
190+``` pascal
191+
192+type
193+ MONTH = ( January, February, March,
194+ April, May, June,
195+ July, August, September,
196+ October, November, December);
197+ MonthSet = Set of Month;
198+ EachMonth=Record
199+ Name, Short: String;
200+ Count: Integer;
201+ end;
202+
203+Const
204+ Months: array [ January .. December ] of EachMonth = (
205+ (Name: 'January'; Short: 'Jan'; Count: 31 ),
206+ (Name: 'February'; Short: 'Feb'; Count: 28 ),
207+ (Name: 'March'; Short: 'Mar'; Count: 31 ),
208+ (Name: 'April'; Short: 'Apr'; Count: 30 ),
209+ (Name: 'May'; Short: 'May'; Count: 31 ),
210+ (Name: 'June'; Short: 'Jun'; Count: 30 ),
211+ (Name: 'July'; Short: 'Jul'; Count: 31 ),
212+ (Name: 'August'; Short: 'Aug'; Count: 31 ),
213+ (Name: 'September';Short: 'Sep'; Count: 30 ),
214+ (Name: 'October'; Short: 'Oct'; Count: 31 ),
215+ (Name: 'November'; Short: 'Nov'; Count: 30 ),
216+ (Name: 'December'; Short: 'Dec'; Count: 31 )
217+ );
218+```
219+
220+Обърнете внимание как са разделени елементите -тези в записа са разделени с точка и запетая, докато елементите на масива са разделени със запетайки.
221+
222+### Двумерни константи-масиви
223+
224+По подобие на примера за `масив от записи`, двумерните масиви се описват чрез ограждане на всяко от второто измерение в скоби. За да е по-разбираемо, числата в масива са идентифицирани по номер, напр. 13 е първият ред, трета колона, докато 21 е вторият ред, първата колона. Ето примера:
225+
226+``` pascal
227+const
228+ DemoArray: array [1..2,1..3] of integer =
229+ (
230+ (11,12,13),
231+ (21,22,23)
232+ );
233+```
234+
235+### Тримерни константи-масиви
236+
237+Тримерните константи-масиви се срещат рядко и може никога да не използвате такъв, но трябва да знаете как да конструирате тримерен константен масив ако се наложи. Отново всяко ниво на масива се огражда в скоби. Тук е показан тримерен константен масив и числата представляват позицията в масива:
238+
239+``` pascal
240+const
241+ Demo3: array [1..2, 1..3, 1..4] of integer=
242+ (
243+ (
244+ (111,112,113,114),
245+ (121,122,123,124),
246+ (131,132,133,134)
247+ ),
248+ (
249+ (211,212,213,214),
250+ (221,222,223,224),
251+ (231,232,233,234)
252+ )
253+ );
254+```
255+
256+---
257+*From the Free Pascal wiki, page "Basic Pascal Tutorial/Chapter 1/Constants/bg", as it stood on 2024-04-29 after a change by Kberov, 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](/wiki-contact).*

Back to history