<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title><![CDATA[Форум программистов и сисадминов Киберфорум - Блоги - Ales'hon'ne]]></title>
		<link>https://www.cyberforum.ru/blogs/191506/</link>
		<description>КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию и наукам, решение проблем с компьютером, операционными системам</description>
		<language>ru</language>
		<lastBuildDate>Sat, 22 Aug 2026 06:40:57 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title><![CDATA[Форум программистов и сисадминов Киберфорум - Блоги - Ales'hon'ne]]></title>
			<link>https://www.cyberforum.ru/blogs/191506/</link>
		</image>
		<item>
			<title>Python и Парето-оптимальность, или как найти эффективные оценки непонятным образом</title>
			<link>https://www.cyberforum.ru/blogs/191506/3018.html</link>
			<pubDate>Thu, 04 Dec 2014 13:55:28 GMT</pubDate>
			<description>Внимание, не используйте приведённый здесь код в практических целях! Оно написано для приведения в...</description>
			<content:encoded><![CDATA[<div>Внимание, не используйте приведённый здесь код в практических целях! Оно написано для приведения в ужас преподавателя.<br />
<b>Цель</b>: выделить из множества оценок эффективные.<br />
<b>Вид оценки</b>: {<i>x<sub>i</sub></i>}, <i>i</i>&#8712;{1..<i>n</i>}.<br />
<b>Критерий эффективности</b>: оценка эффективна, если хотя бы один из её компонентов меньше, чем у любой другой оценки. Если есть несколько таких оценок, выбирается с минимальными остальными компонентами, см. <a rel="nofollow noopener noreferrer" href="https://ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BF%D0%BE_%D0%9F%D0%B0%D1%80%D0%B5%D1%82%D0%BE" target="_blank" title="https://ru.wikipedia.org/wiki/%D0%AD%D1%84%D1%84%D0%B5%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C_%D0%BF%D0%BE_%D0%9F%D0%B0%D1%80%D0%B5%D1%82%D0%BE">Парето-оптимальность</a>.<br />
<b>Дополнительное условие</b>: человек, пытающийся разобраться в программе, должен страдать. <br />
<b>Решение</b>:<div class="codeblock"><table class="python"><thead><tr><td colspan="2" id="713367020"  class="head">Python</td></tr></thead><tbody><tr class="li1"><td><div id="713367020" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">eff <span class="sy0">=</span> <span class="kw1">lambda</span> v: <span class="kw2">reduce</span><span class="br0">&#40;</span><span class="kw1">lambda</span> r<span class="sy0">,</span> x: <span class="kw2">tuple</span><span class="br0">&#40;</span><span class="kw2">set</span><span class="br0">&#40;</span>r<span class="br0">&#41;</span> &amp; <span class="kw2">set</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="br0">&#91;</span>x <span class="kw1">for</span> x <span class="kw1">in</span> v <span class="kw1">if</span> <span class="br0">&#40;</span>x <span class="kw1">in</span> <span class="br0">&#40;</span><span class="kw1">lambda</span> a<span class="sy0">,</span> b:
&nbsp; &nbsp; &nbsp; <span class="br0">&#91;</span>x <span class="kw1">for</span> x <span class="kw1">in</span> <span class="br0">&#91;</span>a<span class="sy0">,</span> b<span class="br0">&#93;</span> <span class="kw1">if</span> <span class="kw2">reduce</span><span class="br0">&#40;</span><span class="kw1">lambda</span> r<span class="sy0">,</span> x: <span class="br0">&#40;</span>r<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="kw1">or</span> x<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span> r<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="kw1">or</span> x<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#91;</span><span class="br0">&#40;</span>a<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">&lt;</span> b<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">,</span> a<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">&gt;</span> b<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#91;</span><span class="br0">&#91;</span>a<span class="sy0">,</span> b<span class="br0">&#93;</span>.<span class="me1">index</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span>x <span class="sy0">==</span> y<span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="kw1">for</span> y <span class="kw1">in</span> v<span class="br0">&#93;</span><span class="br0">&#41;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Функция получает список или кортеж оценок, представленных кортежем сравниваемых элементов (int, float...) и возвращает кортеж эффективных оценок. Все оценки должны иметь равное число компонент.<br />
<b>Пример использования</b>:<div class="codeblock"><table class="python"><thead><tr><td colspan="2" id="256910833"  class="head">Python</td></tr></thead><tbody><tr class="li1"><td><div id="256910833" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1"><span class="sy0">&gt;&gt;&gt;</span><span class="kw1">print</span> eff<span class="br0">&#40;</span><span class="br0">&#91;</span><span class="br0">&#40;</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">6</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">3</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">5</span><span class="sy0">,</span><span class="nu0">4</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="nu0">6</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">4</span><span class="sy0">,</span><span class="nu0">4</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">2</span><span class="sy0">,</span><span class="nu0">3</span><span class="sy0">,</span><span class="nu0">4</span><span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
<span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy0">,</span> <span class="nu0">4</span><span class="sy0">,</span> <span class="nu0">4</span><span class="sy0">,</span> <span class="nu0">3</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="nu0">4</span><span class="sy0">,</span> <span class="nu0">6</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">2</span><span class="sy0">,</span> <span class="nu0">3</span><span class="sy0">,</span> <span class="nu0">4</span><span class="br0">&#41;</span><span class="br0">&#41;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Разбор</b>:<div class="codeblock"><table class="python"><thead><tr><td colspan="2" id="872271659"  class="head">Python</td></tr></thead><tbody><tr class="li1"><td><div id="872271659" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="de1"><pre class="de1">l1: <span class="br0">&#91;</span><span class="br0">&#40;</span>a<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">&lt;</span> b<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy0">,</span> a<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="sy0">&gt;</span> b<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw1">for</span> i <span class="kw1">in</span> <span class="kw2">range</span><span class="br0">&#40;</span><span class="kw2">len</span><span class="br0">&#40;</span>a<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#93;</span>
<span class="co1">#для неких оценок a и b строится список вида [(b_11, b_12), (b_21, b_22),..., (b_n1, b_n2)]</span>
<span class="co1">#где b_j1 = true, если j-й компонент оценки у a меньше, чем у b,</span>
<span class="co1">#b_j2 = true, если j-й компонент оценки у b меньше, чем у a</span>
<span class="co1">#равносильно: l1 = []; for i in xrange(len(a)): l1.append((a[i] &lt; b[i], a[i] &gt; b[i]))</span>
l2: <span class="kw2">reduce</span><span class="br0">&#40;</span><span class="kw1">lambda</span> r<span class="sy0">,</span> x: <span class="br0">&#40;</span>r<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> <span class="kw1">or</span> x<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">,</span> r<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="kw1">or</span> x<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span> l1<span class="br0">&#93;</span><span class="sy0">,</span> <span class="br0">&#40;</span><span class="nu0">0</span><span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="co1">#для списка l1 строится кортеж (b_1, b_2),</span>
<span class="co1">#b_i = true, если хотя бы один из b_ji = true</span>
<span class="co1">#равносильно: (b_1, b_2) = (0, 0); </span>
<span class="co1"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for i in xrange(len(a)): (b_1, b_2) = (b_1 or l1[i][0], b_2 or l1[i][1])</span>
l3: <span class="br0">&#91;</span>x <span class="kw1">for</span> x <span class="kw1">in</span> <span class="br0">&#91;</span>a<span class="sy0">,</span> b<span class="br0">&#93;</span> <span class="kw1">if</span> l2<span class="br0">&#91;</span><span class="br0">&#91;</span>a<span class="sy0">,</span> b<span class="br0">&#93;</span>.<span class="me1">index</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="br0">&#93;</span><span class="br0">&#93;</span>
<span class="co1">#возвращает список, в который включена оценка a, если b_1 = true,</span>
<span class="co1">#и оценка b, если b_2 = true</span>
<span class="co1">#равносильно: l3 = []; if b_1: l3.append(a); if b_2: l3.append(b)</span>
l4: <span class="kw1">lambda</span> a<span class="sy0">,</span> b: l3
<span class="co1">#функция, определяющая a и b в l1—l3</span>
<span class="co1">#равносильно: def l4(a, b): /l1/; /l2/; /l3/; return l3</span>
l5: <span class="br0">&#91;</span><span class="br0">&#91;</span>x <span class="kw1">for</span> x <span class="kw1">in</span> v <span class="kw1">if</span> <span class="br0">&#40;</span>x <span class="kw1">in</span> l4<span class="br0">&#40;</span>x<span class="sy0">,</span> y<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span>x <span class="sy0">==</span> y<span class="br0">&#41;</span><span class="br0">&#93;</span> <span class="kw1">for</span> y <span class="kw1">in</span> v<span class="br0">&#93;</span>
<span class="co1">#возвращает список списков, содержащих оценки, из каждого из которых исключены оценки</span>
<span class="co1">#менее эффективные, чем оценка с номером текущего подсписка</span>
<span class="co1">#равносильно: l5 = []; for x in v: l5i = []; for y in v: if y in l4(x, y) or x == y: l5i.append(y)</span>
l6: <span class="kw1">lambda</span> v: <span class="kw2">reduce</span><span class="br0">&#40;</span><span class="kw1">lambda</span> r<span class="sy0">,</span> x: <span class="kw2">tuple</span><span class="br0">&#40;</span><span class="kw2">set</span><span class="br0">&#40;</span>r<span class="br0">&#41;</span> &amp; <span class="kw2">set</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">,</span> l4<span class="br0">&#41;</span>
<span class="co1">#находит пересечение всех подсписков из l5</span>
<span class="co1">#равносильно: r = set(l5[0]); for x in l5[1:]: r = r &amp; set(x);</span>
<span class="co1"># &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; l6 = tuple(r)</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/3018.html</guid>
		</item>
		<item>
			<title><![CDATA[Метод прогонки — на языке Ада ]:->]]></title>
			<link>https://www.cyberforum.ru/blogs/191506/1641.html</link>
			<pubDate>Mon, 07 Oct 2013 15:15:21 GMT</pubDate>
			<description>*UPD:* Прошу простить за внешний вид кода, синтаксис Ады весьма специфичен. 
Первый опыт написания...</description>
			<content:encoded><![CDATA[<div><font color="DimGray"><b>UPD:</b> Прошу простить за внешний вид кода, синтаксис Ады весьма специфичен.</font><br />
Первый опыт написания чего-либо на этом <s>ужасном</s> замечательном языке. Больше всего меня удивляет то, что <i>оно</i> заработало.<br />

			   <div class="spoiler-wrap">
				   <div class="spoiler-head folded clickable">Если захотелось себе, а про Аду ничего не знаете</div>
				   <div class="spoiler-body">
					   <br />
<b>Важно</b>: файл с исходным кодом должен называться main.adb. Если назовёте по-другому, то могут быть проблемы.<ol style="list-style-type: decimal"><li>У вас linux<blockquote>Первые две процедуры (System_Command и Set_Console_Encoding) нужно удалить. А также строки 264 и 328. После этого, пользуясь компилятором gnat (есть в GCC) породите программу. У меня линукса нет, но скорее всего команды будет те же, что и в винде.</blockquote></li>
<li>У вас windows и есть mingw (или аналоги)<blockquote>Исходник не трогайте. В консоли наберите:<div class="codeblock"><table class="bash"><thead><tr><td colspan="2" id="327726165"  class="head">Bash</td></tr></thead><tbody><tr class="li1"><td><div id="327726165" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">gnat <span class="kw2">make</span> <span class="re5">-gnat2012</span> <span class="sy0">&lt;</span>файл с исходным кодом<span class="sy0">&gt;</span></pre></td></tr></table></div></td></tr></tbody></table></div></blockquote></li>
<li>У вас windows и нет mingw (или аналогов)<blockquote>Среда разработки есть на сайте <a rel="nofollow noopener noreferrer" href="http://libre.adacore.com" target="_blank" title="http://libre.adacore.com">libre.adacore.com</a>. Если она не заработает (такое бывает), то установите себе mingw и смотрите пункт 2.</blockquote></li>
</ol>
				   </div>
			   </div><br />
А теперь — код:<div class="codeblock"><table class="unknown"><thead><tr><td colspan="2" id="637186340"  class="head">Code</td></tr></thead><tbody><tr class="li1"><td><div id="637186340" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
</pre></td><td class="de1"><pre class="de1">-- WARNING: Run only on MS Windows <span class="br0">&#40;</span>version <span class="nu0">5.0</span> or older<span class="br0">&#41;</span>!
-- &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Запускать только под MS Windows <span class="br0">&#40;</span>версии <span class="nu0">5.0</span> или старше<span class="br0">&#41;</span>!
&nbsp;
with Ada.Text_IO; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; use Ada.Text_IO;
with Ada.Numerics.Float_Random;
with Ada.Integer_Text_IO;
with Ada.Float_Text_IO;
with Interfaces.C;
with Ada.Numerics.Elementary_Functions;
&nbsp;
--Программа находит решение x системы уранений Ax=f, где
--A - трёхдиагональная матрица, а f - вектор-столбец.
--Общий вид расширенной матрицы системы:
--c1 b1 <span class="nu0">0</span> &nbsp;... <span class="nu0">0</span> |f1
--a2 c2 b2 ... <span class="nu0">0</span> |f2
--<span class="nu0">0</span> &nbsp;a3 c3 ... <span class="nu0">0</span> |f3
--. &nbsp;. &nbsp;. &nbsp;... . |.
--. &nbsp;. &nbsp;. &nbsp;... . |.
--<span class="nu0">0</span> &nbsp;<span class="nu0">0</span> &nbsp;... an cn|fn
--Поиск решения осуществляется методом прогонки.
&nbsp;
procedure Main is
&nbsp; &nbsp;type Vector is array <span class="br0">&#40;</span>Integer range &lt;&gt;<span class="br0">&#41;</span> of Float;
&nbsp; &nbsp;Size &nbsp; &nbsp; &nbsp; : Integer;
&nbsp; &nbsp;Min_Random : Float := -<span class="nu0">2.0</span>;
&nbsp; &nbsp;Max_Random : Float := <span class="nu0">2.0</span>;
&nbsp;
&nbsp; &nbsp;procedure System_Command <span class="br0">&#40;</span>s : in String<span class="br0">&#41;</span> is
&nbsp; &nbsp; &nbsp; -- выолнение командной строки
&nbsp; &nbsp; &nbsp; use Interfaces.C;
&nbsp; &nbsp; &nbsp; function Sys <span class="br0">&#40;</span>Arg : char_array<span class="br0">&#41;</span> return Integer;
&nbsp; &nbsp; &nbsp; pragma Import <span class="br0">&#40;</span>C, Sys, &quot;system&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Ret_Val : Integer;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; Ret_Val := Sys <span class="br0">&#40;</span>To_C <span class="br0">&#40;</span>s<span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp;end System_Command;
&nbsp;
&nbsp; &nbsp;procedure Set_Console_Encoding <span class="br0">&#40;</span>v : in Interfaces.C.unsigned<span class="br0">&#41;</span> is
&nbsp; &nbsp; &nbsp; -- изменение кодировки консоли
&nbsp; &nbsp; &nbsp; use Interfaces.C;
&nbsp; &nbsp; &nbsp; function SetCons
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>Arg &nbsp;: Interfaces.C.unsigned<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Interfaces.C.unsigned_short;
&nbsp; &nbsp; &nbsp; pragma Import <span class="br0">&#40;</span>Stdcall, SetCons, &quot;SetConsoleCP&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; function SetConsOut
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>Arg &nbsp;: Interfaces.C.unsigned<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Interfaces.C.unsigned_short;
&nbsp; &nbsp; &nbsp; pragma Import <span class="br0">&#40;</span>Stdcall, SetConsOut, &quot;SetConsoleOutputCP&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Ret_Val : unsigned_short;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; Ret_Val := SetCons <span class="br0">&#40;</span>v<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Ret_Val := SetConsOut <span class="br0">&#40;</span>v<span class="br0">&#41;</span>;
&nbsp; &nbsp;end Set_Console_Encoding;
&nbsp;
&nbsp; &nbsp;function First_Digit <span class="br0">&#40;</span>v : Float<span class="br0">&#41;</span> return Integer is
&nbsp; &nbsp; &nbsp; -- поиск первой значащей цифры
&nbsp; &nbsp; &nbsp; use Ada.Numerics.Elementary_Functions;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; if v = <span class="nu0">0.0</span> then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Integer'First;
&nbsp; &nbsp; &nbsp; end if;
&nbsp; &nbsp; &nbsp; return Integer <span class="br0">&#40;</span>Float'Truncation <span class="br0">&#40;</span>Log <span class="br0">&#40;</span>X =&gt; v, Base =&gt; <span class="nu0">10.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp;end First_Digit;
&nbsp;
&nbsp; &nbsp;procedure Print_Vector
&nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>v &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: in Vector;
&nbsp; &nbsp; &nbsp; Print_New_Line : in Boolean := False<span class="br0">&#41;</span>
&nbsp; &nbsp;is
&nbsp; &nbsp; &nbsp; -- вывод вектора на экран
&nbsp; &nbsp; &nbsp; fzs &nbsp;: Integer :=
&nbsp; &nbsp; &nbsp; &nbsp; First_Digit <span class="br0">&#40;</span>Float'Max <span class="br0">&#40;</span>abs Max_Random * <span class="nu0">4.0</span>, abs Min_Random * <span class="nu0">4.0</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; fore : Integer := <span class="br0">&#40;</span>if Fzs&gt;<span class="nu0">0</span> then Fzs+<span class="nu0">2</span> else <span class="nu0">2</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; aft &nbsp;: Integer := <span class="br0">&#40;</span>if Fzs&lt;<span class="nu0">0</span> then <span class="nu0">3</span>-Fzs else <span class="nu0">3</span><span class="br0">&#41;</span>;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; Put <span class="br0">&#40;</span>&quot;<span class="br0">&#40;</span>&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; for I in v'First .. v'Last - <span class="nu0">1</span> loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ada.Float_Text_IO.Put <span class="br0">&#40;</span>v <span class="br0">&#40;</span>I<span class="br0">&#41;</span>, fore, aft, <span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot;,&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; Ada.Float_Text_IO.Put <span class="br0">&#40;</span>v <span class="br0">&#40;</span>v'Last<span class="br0">&#41;</span>, fore, aft, <span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; if Print_New_Line then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put_Line <span class="br0">&#40;</span>&quot;<span class="br0">&#41;</span>&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; else
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot;<span class="br0">&#41;</span>&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end if;
&nbsp; &nbsp;end Print_Vector;
&nbsp;
&nbsp; &nbsp;procedure Print_Vector
&nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>v &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: in Vector;
&nbsp; &nbsp; &nbsp; Fzs &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;: in Integer;
&nbsp; &nbsp; &nbsp; Print_New_Line : in Boolean := False;
&nbsp; &nbsp; &nbsp; Inc_Aft &nbsp; &nbsp; &nbsp; &nbsp;: in Boolean := False<span class="br0">&#41;</span>
&nbsp; &nbsp;is
&nbsp; &nbsp; &nbsp; -- вывод вектора на экран необычным образом
&nbsp; &nbsp; &nbsp; fore : Integer := <span class="br0">&#40;</span>if Fzs&gt;<span class="nu0">0</span> then Fzs+<span class="nu0">2</span> else <span class="nu0">2</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; aft &nbsp;: Integer := <span class="br0">&#40;</span>if Fzs&lt;<span class="nu0">0</span> then <span class="nu0">1</span>-Fzs else <span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; if Inc_Aft then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;aft := aft + <span class="nu0">3</span> - <span class="br0">&#40;</span>if Fzs&lt;<span class="nu0">0</span> then <span class="nu0">1</span> else <span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end if;
&nbsp; &nbsp; &nbsp; Put <span class="br0">&#40;</span>&quot;<span class="br0">&#40;</span>&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; for I in v'First .. v'Last - <span class="nu0">1</span> loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ada.Float_Text_IO.Put
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>v <span class="br0">&#40;</span>I<span class="br0">&#41;</span>,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; fore + <span class="br0">&#40;</span>if v<span class="br0">&#40;</span>I<span class="br0">&#41;</span>&lt;<span class="nu0">0.0</span> then <span class="nu0">1</span> else <span class="nu0">0</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; aft,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot;,&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; Ada.Float_Text_IO.Put
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>v <span class="br0">&#40;</span>v'Last<span class="br0">&#41;</span>,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;fore + <span class="br0">&#40;</span>if v<span class="br0">&#40;</span>v'Last<span class="br0">&#41;</span>&lt;<span class="nu0">0.0</span> then <span class="nu0">1</span> else <span class="nu0">0</span><span class="br0">&#41;</span>,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;aft,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; if Print_New_Line then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put_Line <span class="br0">&#40;</span>&quot;<span class="br0">&#41;</span>&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; else
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot;<span class="br0">&#41;</span>&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end if;
&nbsp; &nbsp;end Print_Vector;
&nbsp;
&nbsp; &nbsp;procedure Random_Vector
&nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>v &nbsp; : in out Vector;
&nbsp; &nbsp; &nbsp; min : Float := -<span class="nu0">2.0</span>;
&nbsp; &nbsp; &nbsp; max : Float := <span class="nu0">2.0</span><span class="br0">&#41;</span>
&nbsp; &nbsp;is
&nbsp; &nbsp; &nbsp; -- создание случайного вектора
&nbsp; &nbsp; &nbsp; use Ada.Numerics.Float_Random;
&nbsp; &nbsp; &nbsp; seed : Generator;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; Reset <span class="br0">&#40;</span>seed<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; delay <span class="nu0">0.1</span>;
&nbsp; &nbsp; &nbsp; for I in v'Range loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v <span class="br0">&#40;</span>I<span class="br0">&#41;</span> := Random <span class="br0">&#40;</span>seed<span class="br0">&#41;</span> * <span class="br0">&#40;</span>max - min<span class="br0">&#41;</span> + min;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp;end Random_Vector;
&nbsp;
&nbsp; &nbsp;function Read_Vector
&nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>help &nbsp;: in String;
&nbsp; &nbsp; &nbsp; n &nbsp; &nbsp; : in Integer;
&nbsp; &nbsp; &nbsp; first : in Integer := <span class="nu0">1</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; return &nbsp;Vector
&nbsp; &nbsp;is
&nbsp; &nbsp; &nbsp; -- чтение вектора из ввода пользователя
&nbsp; &nbsp; &nbsp; v : Vector <span class="br0">&#40;</span>first .. n + first - <span class="nu0">1</span><span class="br0">&#41;</span>;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; Put_Line <span class="br0">&#40;</span>&quot;Введите вектор &quot; &amp; help &amp; &quot;:&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; for i in v'Range loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot; &nbsp;&quot; &amp; help &amp; &quot;<span class="br0">&#91;</span>&quot; &amp; i'Img &amp; &quot;<span class="br0">&#93;</span>=&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ada.Float_Text_IO.Get <span class="br0">&#40;</span>v <span class="br0">&#40;</span>i<span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if v<span class="br0">&#40;</span>i<span class="br0">&#41;</span>/<span class="nu0">4.0</span>&gt;Max_Random then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Max_Random:=v<span class="br0">&#40;</span>i<span class="br0">&#41;</span>/<span class="nu0">4.0</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end if;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if v<span class="br0">&#40;</span>i<span class="br0">&#41;</span>/<span class="nu0">4.0</span>&lt;Min_Random then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Min_Random:=v<span class="br0">&#40;</span>i<span class="br0">&#41;</span>/<span class="nu0">4.0</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end if;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; return v;
&nbsp; &nbsp;end Read_Vector;
&nbsp;
&nbsp; &nbsp;procedure Print_3diagonal <span class="br0">&#40;</span>a, b, c, f : in Vector<span class="br0">&#41;</span> is
&nbsp; &nbsp; &nbsp; -- вывод расширенной матрицы системы в консоль
&nbsp; &nbsp; &nbsp; tmp, nula : Vector <span class="br0">&#40;</span>c'Range<span class="br0">&#41;</span> := <span class="br0">&#40;</span>others =&gt; <span class="nu0">0.0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; asd &nbsp; &nbsp; &nbsp; : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= a'First - c'First;
&nbsp; &nbsp; &nbsp; bsd &nbsp; &nbsp; &nbsp; : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= b'First - c'First;
&nbsp; &nbsp; &nbsp; fsd &nbsp; &nbsp; &nbsp; : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= f'First - c'First;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; tmp <span class="br0">&#40;</span>c'First .. c'First + <span class="nu0">1</span><span class="br0">&#41;</span> := Vector'<span class="br0">&#40;</span>c <span class="br0">&#40;</span>c'First<span class="br0">&#41;</span>, b <span class="br0">&#40;</span>b'First<span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Print_Vector <span class="br0">&#40;</span>tmp<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Put <span class="br0">&#40;</span>&quot;|&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Ada.Float_Text_IO.Put <span class="br0">&#40;</span>f <span class="br0">&#40;</span>f'First<span class="br0">&#41;</span>, <span class="nu0">2</span>, <span class="nu0">3</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; New_Line;
&nbsp; &nbsp; &nbsp; for i in c'First + <span class="nu0">1</span> .. c'Last - <span class="nu0">1</span> loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= nula;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp <span class="br0">&#40;</span>i - <span class="nu0">1</span> .. i + <span class="nu0">1</span><span class="br0">&#41;</span> := Vector'<span class="br0">&#40;</span>a <span class="br0">&#40;</span>i + asd<span class="br0">&#41;</span>, c <span class="br0">&#40;</span>i<span class="br0">&#41;</span>, b <span class="br0">&#40;</span>i + bsd<span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Print_Vector <span class="br0">&#40;</span>tmp<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot;|&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ada.Float_Text_IO.Put <span class="br0">&#40;</span>f <span class="br0">&#40;</span>i + fsd<span class="br0">&#41;</span>, <span class="nu0">2</span>, <span class="nu0">3</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;New_Line;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; tmp &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= nula;
&nbsp; &nbsp; &nbsp; tmp <span class="br0">&#40;</span>c'Last - <span class="nu0">1</span> .. c'Last<span class="br0">&#41;</span> := <span class="br0">&#40;</span>a <span class="br0">&#40;</span>a'Last<span class="br0">&#41;</span>, c <span class="br0">&#40;</span>c'Last<span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Print_Vector <span class="br0">&#40;</span>tmp<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Put <span class="br0">&#40;</span>&quot;|&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Ada.Float_Text_IO.Put <span class="br0">&#40;</span>f <span class="br0">&#40;</span>f'Last<span class="br0">&#41;</span>, <span class="nu0">2</span>, <span class="nu0">3</span>, <span class="nu0">0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; New_Line;
&nbsp; &nbsp;end Print_3diagonal;
&nbsp;
&nbsp; &nbsp;function Diagonal_Dominant <span class="br0">&#40;</span>a, b, c : in Vector<span class="br0">&#41;</span> return Boolean is
&nbsp; &nbsp; &nbsp; -- проверка на диагональное преобладание
&nbsp; &nbsp; &nbsp; asd : Integer := a'First - c'First;
&nbsp; &nbsp; &nbsp; bsd : Integer := b'First - c'First;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; if <span class="br0">&#40;</span>abs c <span class="br0">&#40;</span>c'First<span class="br0">&#41;</span> &lt; abs b <span class="br0">&#40;</span>b'First<span class="br0">&#41;</span><span class="br0">&#41;</span> or
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span>abs c <span class="br0">&#40;</span>c'Last<span class="br0">&#41;</span> &lt; abs a <span class="br0">&#40;</span>a'Last<span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return False;
&nbsp; &nbsp; &nbsp; end if;
&nbsp; &nbsp; &nbsp; for i in c'First + <span class="nu0">1</span> .. c'Last - <span class="nu0">1</span> loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if abs c <span class="br0">&#40;</span>i<span class="br0">&#41;</span> &lt; <span class="br0">&#40;</span>abs b <span class="br0">&#40;</span>i + bsd<span class="br0">&#41;</span> + abs a <span class="br0">&#40;</span>i + asd<span class="br0">&#41;</span><span class="br0">&#41;</span> then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return False;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end if;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; return True;
&nbsp; &nbsp;end Diagonal_Dominant;
&nbsp;
&nbsp; &nbsp;function Solve_3diagonal <span class="br0">&#40;</span>a, b, c, f : in Vector<span class="br0">&#41;</span> return Vector is
&nbsp; &nbsp; &nbsp; -- собственно решение
&nbsp; &nbsp; &nbsp; m &nbsp; : Float;
&nbsp; &nbsp; &nbsp; x &nbsp; : Vector <span class="br0">&#40;</span>f'Range<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; tc &nbsp;: Vector <span class="br0">&#40;</span>c'Range<span class="br0">&#41;</span> := c;
&nbsp; &nbsp; &nbsp; tf &nbsp;: Vector <span class="br0">&#40;</span>f'Range<span class="br0">&#41;</span> := f;
&nbsp; &nbsp; &nbsp; asd : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= a'First - x'First - <span class="nu0">1</span>;
&nbsp; &nbsp; &nbsp; bsd : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= b'First - x'First;
&nbsp; &nbsp; &nbsp; csd : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= c'First - x'First;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; for i in x'First + <span class="nu0">1</span> .. x'Last loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;m &nbsp; &nbsp; &nbsp;:= a <span class="br0">&#40;</span>i + asd<span class="br0">&#41;</span> / tc <span class="br0">&#40;</span>i - <span class="nu0">1</span> + csd<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tc <span class="br0">&#40;</span>i<span class="br0">&#41;</span> := tc <span class="br0">&#40;</span>i + csd<span class="br0">&#41;</span> - m * b <span class="br0">&#40;</span>i - <span class="nu0">1</span> + bsd<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tf <span class="br0">&#40;</span>i<span class="br0">&#41;</span> := tf <span class="br0">&#40;</span>i<span class="br0">&#41;</span> - m * tf <span class="br0">&#40;</span>i - <span class="nu0">1</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; x <span class="br0">&#40;</span>x'Last<span class="br0">&#41;</span> := tf <span class="br0">&#40;</span>tf'Last<span class="br0">&#41;</span> / tc <span class="br0">&#40;</span>tc'Last<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; for i in reverse x'First .. x'Last - <span class="nu0">1</span> loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x <span class="br0">&#40;</span>i<span class="br0">&#41;</span> := <span class="br0">&#40;</span>tf <span class="br0">&#40;</span>i<span class="br0">&#41;</span> - b <span class="br0">&#40;</span>i + bsd<span class="br0">&#41;</span> * x <span class="br0">&#40;</span>i + <span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span> / tc <span class="br0">&#40;</span>i + csd<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; return x;
&nbsp; &nbsp;end Solve_3diagonal;
&nbsp;
&nbsp; &nbsp;function Residual <span class="br0">&#40;</span>a, b, c, f, x : in Vector<span class="br0">&#41;</span> return Vector is
&nbsp; &nbsp; &nbsp; -- вычисление невязки
&nbsp; &nbsp; &nbsp; v &nbsp; : Vector <span class="br0">&#40;</span>f'Range<span class="br0">&#41;</span> := <span class="br0">&#40;</span>others =&gt; <span class="nu0">0.0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; asd : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= a'First - f'First - <span class="nu0">1</span>;
&nbsp; &nbsp; &nbsp; bsd : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= b'First - f'First;
&nbsp; &nbsp; &nbsp; csd : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= c'First - f'First;
&nbsp; &nbsp; &nbsp; xsd : Integer &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;:= x'First - f'First;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; v <span class="br0">&#40;</span>v'First<span class="br0">&#41;</span> := c <span class="br0">&#40;</span>c'First<span class="br0">&#41;</span> * x <span class="br0">&#40;</span>x'First<span class="br0">&#41;</span> +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;b <span class="br0">&#40;</span>b'First<span class="br0">&#41;</span> * x <span class="br0">&#40;</span>x'First + <span class="nu0">1</span><span class="br0">&#41;</span> -
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;f <span class="br0">&#40;</span>f'First<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; for i in f'First + <span class="nu0">1</span> .. f'Last - <span class="nu0">1</span> loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;v <span class="br0">&#40;</span>i<span class="br0">&#41;</span> := a <span class="br0">&#40;</span>i + asd<span class="br0">&#41;</span> * x <span class="br0">&#40;</span>i + xsd - <span class="nu0">1</span><span class="br0">&#41;</span> +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c <span class="br0">&#40;</span>i + csd<span class="br0">&#41;</span> * x <span class="br0">&#40;</span>i + xsd<span class="br0">&#41;</span> +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b <span class="br0">&#40;</span>i + bsd<span class="br0">&#41;</span> * x <span class="br0">&#40;</span>i + xsd + <span class="nu0">1</span><span class="br0">&#41;</span> -
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f <span class="br0">&#40;</span>i<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; v <span class="br0">&#40;</span>v'Last<span class="br0">&#41;</span> := c <span class="br0">&#40;</span>c'Last<span class="br0">&#41;</span> * x <span class="br0">&#40;</span>x'Last<span class="br0">&#41;</span> +
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a <span class="br0">&#40;</span>a'Last<span class="br0">&#41;</span> * x <span class="br0">&#40;</span>x'Last - <span class="nu0">1</span><span class="br0">&#41;</span> -
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; f <span class="br0">&#40;</span>f'Last<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; return v;
&nbsp; &nbsp;end Residual;
&nbsp;
&nbsp; &nbsp;function Max_Value_Sim <span class="br0">&#40;</span>v : in Vector<span class="br0">&#41;</span> return Integer is
&nbsp; &nbsp; &nbsp; -- поиск первой значащей цифры максимального элемента вектора
&nbsp; &nbsp; &nbsp; tmp : Float;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; tmp := abs <span class="br0">&#40;</span>v <span class="br0">&#40;</span>v'First<span class="br0">&#41;</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; for I in v'First + <span class="nu0">1</span> .. v'Last loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tmp := Float'Max <span class="br0">&#40;</span>abs <span class="br0">&#40;</span>v <span class="br0">&#40;</span>I<span class="br0">&#41;</span><span class="br0">&#41;</span>, tmp<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end loop;
&nbsp; &nbsp; &nbsp; return First_Digit <span class="br0">&#40;</span>tmp<span class="br0">&#41;</span>;
&nbsp; &nbsp;end Max_Value_Sim;
&nbsp;
begin
&nbsp; &nbsp;Set_Console_Encoding <span class="br0">&#40;</span><span class="nu0">1251</span><span class="br0">&#41;</span>;-- укажите здесь кодировку файла'
&nbsp; &nbsp;Put_Line <span class="br0">&#40;</span>&quot; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Метод прогонки на языке Ада&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot;Введите число уравнений: &quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp;Ada.Integer_Text_IO.Get <span class="br0">&#40;</span>Size<span class="br0">&#41;</span>;
&nbsp; &nbsp;if Size &lt;= <span class="nu0">1</span> then -- система из одного уравнения - это уж слишком
&nbsp; &nbsp; &nbsp; Size := <span class="nu0">2</span>;
&nbsp; &nbsp;end if;
&nbsp; &nbsp;declare
&nbsp; &nbsp; &nbsp; a : Vector <span class="br0">&#40;</span><span class="nu0">2</span> .. Size<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; -- вектор, описывающий диагональ, лежащую под главной
&nbsp; &nbsp; &nbsp; b : Vector <span class="br0">&#40;</span><span class="nu0">1</span> .. Size - <span class="nu0">1</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; -- вектор, описывающий диагональ, лежащую над главной
&nbsp; &nbsp; &nbsp; c, f, x : Vector <span class="br0">&#40;</span><span class="nu0">1</span> .. Size<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; -- главная диагональ, правые части и решение
&nbsp; &nbsp; &nbsp; tmp &nbsp; &nbsp; : Character;
&nbsp; &nbsp; &nbsp; Rnd_Nmb : Boolean;
&nbsp; &nbsp;begin
&nbsp; &nbsp; &nbsp; Put <span class="br0">&#40;</span>&quot;Задать значения вручную <span class="br0">&#40;</span>д/н<span class="br0">&#41;</span>? &quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Get_Immediate <span class="br0">&#40;</span>tmp<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Rnd_Nmb :=
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>case tmp is
&nbsp; &nbsp; &nbsp; &nbsp; when 'y'|'Y'|'д'|'Д'=&gt;false,
&nbsp; &nbsp; &nbsp; &nbsp; when others =&gt; true<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; if Rnd_Nmb then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put_Line <span class="br0">&#40;</span>&quot;Нет&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot;min/<span class="nu0">4</span>=&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ada.Float_Text_IO.Get <span class="br0">&#40;</span>Min_Random<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put <span class="br0">&#40;</span>&quot;max/<span class="nu0">4</span>=&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ada.Float_Text_IO.Get <span class="br0">&#40;</span>Max_Random<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--В главной диагонали и правой части значения из R<span class="br0">&#40;</span>min,max<span class="br0">&#41;</span>,
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--остальные числа из R<span class="br0">&#40;</span>min/<span class="nu0">4</span>,max/<span class="nu0">4</span><span class="br0">&#41;</span>. Это сделано для увеличения
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;--вероятности наличия строгого диагонального преобладания
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Random_Vector <span class="br0">&#40;</span>a, Min_Random, Max_Random<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Random_Vector <span class="br0">&#40;</span>b, Min_Random, Max_Random<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Random_Vector <span class="br0">&#40;</span>c, Min_Random * <span class="nu0">4.0</span>, Max_Random * <span class="nu0">4.0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit when Diagonal_Dominant <span class="br0">&#40;</span>a, b, c<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end loop;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Random_Vector <span class="br0">&#40;</span>f, Min_Random * <span class="nu0">4.0</span>, Max_Random * <span class="nu0">4.0</span><span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; else
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Put_Line <span class="br0">&#40;</span>&quot;Да&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;loop
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a := Read_Vector <span class="br0">&#40;</span>&quot;a&quot;, a'Length, a'First<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b := Read_Vector <span class="br0">&#40;</span>&quot;b&quot;, b'Length<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; c := Read_Vector <span class="br0">&#40;</span>&quot;c&quot;, c'Length<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exit when Diagonal_Dominant <span class="br0">&#40;</span>a, b, c<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Put_Line <span class="br0">&#40;</span>&quot;Требуется строгое диагональное преобладание!&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Put_Line <span class="br0">&#40;</span>&quot;Попробуйте ещё раз&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;end loop;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;f := Read_Vector <span class="br0">&#40;</span>&quot;f&quot;, f'Length<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; end if;
&nbsp; &nbsp; &nbsp; Print_3diagonal <span class="br0">&#40;</span>a, b, c, f<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; New_Line;
&nbsp; &nbsp; &nbsp; x := Solve_3diagonal <span class="br0">&#40;</span>a, b, c, f<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Put <span class="br0">&#40;</span>&quot;Решение = &quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Print_Vector <span class="br0">&#40;</span>x, Max_Value_Sim <span class="br0">&#40;</span>x<span class="br0">&#41;</span>, True, True<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; x := Residual <span class="br0">&#40;</span>a, b, c, f, x<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Put <span class="br0">&#40;</span>&quot;Невязка = &quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; Print_Vector <span class="br0">&#40;</span>x, Max_Value_Sim <span class="br0">&#40;</span>x<span class="br0">&#41;</span>, True<span class="br0">&#41;</span>;
&nbsp; &nbsp; &nbsp; --если здесь сильно не нули, то либо система неустойчива, либо нет
&nbsp; &nbsp; &nbsp; --диагонального преобладания, либо числа совсем уж плохие
&nbsp; &nbsp;end;
&nbsp; &nbsp;New_Line;
&nbsp; &nbsp;Put_Line <span class="br0">&#40;</span>&quot;Выполнение программы завершено&quot;<span class="br0">&#41;</span>;
&nbsp; &nbsp;System_Command <span class="br0">&#40;</span>&quot;pause&quot;<span class="br0">&#41;</span>;
end Main;</pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/1641.html</guid>
		</item>
		<item>
			<title>Как прочитать множество из строки</title>
			<link>https://www.cyberforum.ru/blogs/191506/1386.html</link>
			<pubDate>Sat, 25 May 2013 07:20:09 GMT</pubDate>
			<description>Собственно, вопрос: есть строка, определяющая множество чисел как в паскале...</description>
			<content:encoded><![CDATA[<div>Собственно, вопрос: есть строка, определяющая множество чисел <a rel="nofollow noopener noreferrer" href="http://ru.wikipedia.org/wiki/Множество_(тип_данных)" target="_blank" title="http://ru.wikipedia.org/wiki/Множество_(тип_данных)">как в паскале</a>. Нужно эту строку разобрать. Готовых решений не нашёл (может, плохо искал), и пришлось писать велосипед.<div class="codeblock"><table class="pascal"><thead><tr><td colspan="2" id="314672643"  class="head">Pascal</td></tr></thead><tbody><tr class="li1"><td><div id="314672643" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
</pre></td><td class="de1"><pre class="de1"><span class="kw1">type</span>
&nbsp; ByteSet<span class="sy3">=</span><span class="kw4">set</span> <span class="kw1">of</span> <span class="kw4">Byte</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> StringToSet<span class="br0">&#40;</span>v<span class="sy1">:</span> <span class="kw4">AnsiString</span><span class="br0">&#41;</span><span class="sy1">:</span> ByteSet<span class="sy1">;</span>
<span class="kw1">type</span>
&nbsp; TToken<span class="sy3">=</span><span class="br0">&#40;</span>ttNomber<span class="sy1">,</span> ttPause<span class="sy1">,</span> ttDiapasone<span class="sy1">,</span> ttEnd<span class="sy1">,</span> ttOther<span class="sy1">,</span> ttError<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; i<span class="sy1">:</span> <span class="kw4">Integer</span><span class="sy1">;</span>
&nbsp; lastNomber<span class="sy1">:</span> <span class="kw4">byte</span><span class="sy1">;</span>
&nbsp;
&nbsp; <span class="kw1">procedure</span> SpaceDil<span class="sy1">;</span>
&nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>v<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="kw1">in</span> <span class="br0">&#91;</span><span class="st0">','</span><span class="sy1">,</span> <span class="st0">' '</span><span class="sy1">,</span> <span class="st0">'.'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw1">do</span>
&nbsp; &nbsp; &nbsp; inc<span class="br0">&#40;</span>i<span class="br0">&#41;</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
&nbsp; <span class="kw1">function</span> NextToken<span class="sy1">:</span> TToken<span class="sy1">;</span>
&nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>ttOther<span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">if</span> i&gt;Length<span class="br0">&#40;</span>v<span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; exit<span class="br0">&#40;</span>ttEnd<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">try</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">case</span> v<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="kw1">of</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'0'</span><span class="sy1">..</span><span class="st0">'9'</span><span class="sy1">:</span> Result<span class="sy1">:</span><span class="sy3">=</span>ttNomber<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">','</span><span class="sy1">,</span> <span class="st0">' '</span><span class="sy1">:</span> Result<span class="sy1">:</span><span class="sy3">=</span>ttPause<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'.'</span><span class="sy1">:</span> <span class="kw1">if</span> v<span class="br0">&#91;</span>i<span class="sy3">+</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy3">=</span><span class="st0">'.'</span> <span class="kw1">then</span> Result<span class="sy1">:</span><span class="sy3">=</span>ttDiapasone
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; SpaceDil
&nbsp; &nbsp; <span class="kw1">except</span>
&nbsp; &nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>ttError
&nbsp; &nbsp; <span class="kw1">end</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
&nbsp; <span class="kw1">function</span> ReadNomber<span class="sy1">:</span> <span class="kw4">Byte</span><span class="sy1">;</span>
&nbsp; <span class="kw1">const</span>
&nbsp; &nbsp; Null<span class="sy3">=</span><span class="kw3">ord</span><span class="br0">&#40;</span><span class="st0">'0'</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span>i&lt;<span class="sy3">=</span>Length<span class="br0">&#40;</span>v<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">and</span> <span class="br0">&#40;</span>v<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="kw1">in</span> <span class="br0">&#91;</span><span class="st0">'0'</span><span class="sy1">..</span><span class="st0">'9'</span><span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw1">do</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>Result<span class="sy3">*</span><span class="nu0">10</span><span class="sy3">+</span><span class="br0">&#40;</span><span class="kw3">ord</span><span class="br0">&#40;</span>v<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy3">-</span>Null<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; inc<span class="br0">&#40;</span>i<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#91;</span><span class="br0">&#93;</span><span class="sy1">;</span>
&nbsp; i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span><span class="sy1">;</span>
&nbsp; <span class="kw1">while</span> <span class="kw2">true</span> <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">case</span> NextToken <span class="kw1">of</span>
&nbsp; &nbsp; &nbsp; ttNomber<span class="sy1">:</span> <span class="kw1">begin</span> lastNomber<span class="sy1">:</span><span class="sy3">=</span>ReadNomber<span class="sy1">;</span> include<span class="br0">&#40;</span>Result<span class="sy1">,</span> lastNomber<span class="br0">&#41;</span> <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; ttDiapasone<span class="sy1">:</span> Result<span class="sy1">:</span><span class="sy3">=</span>Result<span class="sy3">+</span><span class="br0">&#91;</span>lastNomber<span class="sy3">+</span><span class="nu0">1</span><span class="sy1">..</span><span class="me1">ReadNomber</span><span class="br0">&#93;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; ttEnd<span class="sy1">:</span> exit<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; ttOther<span class="sy1">,</span>ttError<span class="sy1">:</span> <span class="kw1">raise</span> Exception<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span><span class="st0">'Not valid input set: '</span><span class="sy3">+</span>v<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; ttPause<span class="sy1">:</span>
&nbsp; &nbsp; <span class="kw1">end</span>
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/1386.html</guid>
		</item>
		<item>
			<title>Преобразование RGB-HSL</title>
			<link>https://www.cyberforum.ru/blogs/191506/1179.html</link>
			<pubDate>Sun, 17 Feb 2013 11:32:29 GMT</pubDate>
			<description>Функции для преобразования цветов из человекоудобной системы HSL в компьютероудобную RGB и обратно....</description>
			<content:encoded><![CDATA[<div>Функции для преобразования цветов из человекоудобной системы HSL в компьютероудобную RGB и обратно.<br />

			   <div class="spoiler-wrap">
				   <div class="spoiler-head folded clickable">Суть системы HSL (для тех, кто не знает)</div>
				   <div class="spoiler-body">
					   <div style="float:right;margin-left:7px"><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=1736&amp;d=1361098636" rel="Lightbox" id="attachment1736" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=1736&amp;thumb=1&amp;d=1361098636" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: color-wheel.jpg
Просмотров: 2935
Размер:	144.0 Кб
ID:	1736" style="margin: 5px" /></a></div>Итоговый цвет в HSL получается путём выбора основного тона (H, hue) и его насыщенности (S, saturation) и светлоты (L, lightness). В качестве иллюстрации можно представить лампочку, которую нужно покрасить. Вы можете выбрать краску на цветовом круге. Если перейти в полярную систему, то координатами выбранной краски будут угол поворота - тон, и радиус - густота нанесения краски, то есть насыщенность. Светлотой же будет сила тока, поданная на покрашенную лампочку. Как видно, эта система гораздо удобнее для человека, нежели RGB. Основной же её недостаток - сложность обратного преобразования. Впрочем, недостатком можно считать и использование действительных чисел для хранения значений.
				   </div>
			   </div><br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="448082253"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="448082253" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
</pre></td><td class="de1"><pre class="de1"><span class="kw1">uses</span>
&nbsp; Math<span class="sy1">;</span>
&nbsp;
<span class="kw1">type</span>
&nbsp; TRGBColor<span class="sy3">=</span><span class="kw1">record</span>
&nbsp; &nbsp; r<span class="sy1">,</span>g<span class="sy1">,</span>b<span class="sy1">:</span><span class="kw4">byte</span><span class="sy1">;</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; THSLColor<span class="sy3">=</span><span class="kw1">record</span>
&nbsp; &nbsp; h<span class="sy1">,</span>s<span class="sy1">,</span>l<span class="sy1">:</span><span class="kw4">double</span><span class="sy1">;</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> RGB2HSL<span class="br0">&#40;</span>v<span class="sy1">:</span> TRGBColor<span class="br0">&#41;</span><span class="sy1">:</span> THSLColor<span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; mx<span class="sy1">,</span>mn<span class="sy1">:</span> <span class="kw4">double</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; mx<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">max</span><span class="br0">&#40;</span><span class="kw3">max</span><span class="br0">&#40;</span>v<span class="sy1">.</span><span class="me1">r</span><span class="sy1">,</span>v<span class="sy1">.</span><span class="me1">g</span><span class="br0">&#41;</span><span class="sy1">,</span>v<span class="sy1">.</span><span class="me1">b</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; mn<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">min</span><span class="br0">&#40;</span><span class="kw3">min</span><span class="br0">&#40;</span>v<span class="sy1">.</span><span class="me1">r</span><span class="sy1">,</span>v<span class="sy1">.</span><span class="me1">g</span><span class="br0">&#41;</span><span class="sy1">,</span>v<span class="sy1">.</span><span class="me1">b</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">.</span><span class="me1">l</span><span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>mx<span class="sy3">+</span>mn<span class="br0">&#41;</span><span class="sy3">/</span><span class="nu0">510</span><span class="sy1">;</span> <span class="co1">//510=2*255</span>
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>Result<span class="sy1">.</span><span class="me1">l</span><span class="sy3">=</span><span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span>mx<span class="sy3">=</span>mn<span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; Result<span class="sy1">.</span><span class="me1">s</span><span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span>
&nbsp; <span class="kw1">else</span> <span class="kw1">if</span> Result<span class="sy1">.</span><span class="me1">l</span>&lt;<span class="sy3">=</span><span class="nu0">0.5</span> <span class="kw1">then</span>
&nbsp; &nbsp; Result<span class="sy1">.</span><span class="me1">s</span><span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>mx<span class="sy3">-</span>mn<span class="br0">&#41;</span><span class="sy3">/</span><span class="br0">&#40;</span>mx<span class="sy3">+</span>mn<span class="br0">&#41;</span>
&nbsp; <span class="kw1">else</span> <span class="kw1">if</span> Result<span class="sy1">.</span><span class="me1">l</span>&lt;&gt;<span class="nu0">1</span> <span class="kw1">then</span>
&nbsp; &nbsp; Result<span class="sy1">.</span><span class="me1">s</span><span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>mx<span class="sy3">-</span>mn<span class="br0">&#41;</span><span class="sy3">/</span><span class="br0">&#40;</span><span class="nu0">510</span><span class="sy3">-</span>mx<span class="sy3">-</span>mn<span class="br0">&#41;</span>
&nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; Result<span class="sy1">.</span><span class="me1">s</span><span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> mx<span class="sy3">=</span>mn <span class="kw1">then</span>
&nbsp; &nbsp; Result<span class="sy1">.</span><span class="me1">h</span><span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span>
&nbsp; <span class="kw1">else</span> <span class="kw1">if</span> mx<span class="sy3">=</span>v<span class="sy1">.</span><span class="me1">r</span> <span class="kw1">then</span>
&nbsp; &nbsp; Result<span class="sy1">.</span><span class="me1">h</span><span class="sy1">:</span><span class="sy3">=</span><span class="nu0">60</span><span class="sy3">*</span><span class="br0">&#40;</span>v<span class="sy1">.</span><span class="me1">g</span><span class="sy3">-</span>v<span class="sy1">.</span><span class="me1">b</span><span class="br0">&#41;</span><span class="sy3">/</span><span class="br0">&#40;</span>mx<span class="sy3">-</span>mn<span class="br0">&#41;</span><span class="sy3">+</span>IfThen<span class="br0">&#40;</span>v<span class="sy1">.</span><span class="me1">g</span>&lt;v<span class="sy1">.</span><span class="me1">b</span><span class="sy1">,</span><span class="nu0">360</span><span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span>
&nbsp; <span class="kw1">else</span> <span class="kw1">if</span> mx<span class="sy3">=</span>v<span class="sy1">.</span><span class="me1">g</span> <span class="kw1">then</span>
&nbsp; &nbsp; Result<span class="sy1">.</span><span class="me1">h</span><span class="sy1">:</span><span class="sy3">=</span><span class="nu0">60</span><span class="sy3">*</span><span class="br0">&#40;</span>v<span class="sy1">.</span><span class="me1">b</span><span class="sy3">-</span>v<span class="sy1">.</span><span class="me1">r</span><span class="br0">&#41;</span><span class="sy3">/</span><span class="br0">&#40;</span>mx<span class="sy3">-</span>mn<span class="br0">&#41;</span><span class="sy3">+</span><span class="nu0">120</span>
&nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; Result<span class="sy1">.</span><span class="me1">h</span><span class="sy1">:</span><span class="sy3">=</span><span class="nu0">60</span><span class="sy3">*</span><span class="br0">&#40;</span>v<span class="sy1">.</span><span class="me1">r</span><span class="sy3">-</span>v<span class="sy1">.</span><span class="me1">g</span><span class="br0">&#41;</span><span class="sy3">/</span><span class="br0">&#40;</span>mx<span class="sy3">-</span>mn<span class="br0">&#41;</span><span class="sy3">+</span><span class="nu0">240</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> HSL2RGB<span class="br0">&#40;</span>v<span class="sy1">:</span> THSLColor<span class="br0">&#41;</span><span class="sy1">:</span> TRGBColor<span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; q<span class="sy1">,</span>p<span class="sy1">,</span>h<span class="sy1">:</span> <span class="kw4">double</span><span class="sy1">;</span>
&nbsp; t<span class="sy1">,</span>c<span class="sy1">:</span> <span class="kw1">array</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="sy1">..</span><span class="nu0">3</span><span class="br0">&#93;</span> <span class="kw1">of</span> <span class="kw4">double</span><span class="sy1">;</span>
&nbsp; i<span class="sy1">:</span> <span class="kw4">integer</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; <span class="kw1">if</span> v<span class="sy1">.</span><span class="me1">l</span>&lt;<span class="nu0">0.5</span> <span class="kw1">then</span>
&nbsp; &nbsp; q<span class="sy1">:</span><span class="sy3">=</span>v<span class="sy1">.</span><span class="me1">l</span><span class="sy3">*</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy3">+</span>v<span class="sy1">.</span><span class="me1">s</span><span class="br0">&#41;</span>
&nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; q<span class="sy1">:</span><span class="sy3">=</span>v<span class="sy1">.</span><span class="me1">l</span><span class="sy3">+</span>v<span class="sy1">.</span><span class="me1">s</span><span class="sy3">-</span><span class="br0">&#40;</span>v<span class="sy1">.</span><span class="me1">l</span><span class="sy3">*</span>v<span class="sy1">.</span><span class="me1">s</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; p<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">2</span><span class="sy3">*</span>v<span class="sy1">.</span><span class="me1">l</span><span class="sy3">-</span>q<span class="sy1">;</span>
&nbsp; h<span class="sy1">:</span><span class="sy3">=</span>v<span class="sy1">.</span><span class="me1">h</span><span class="sy3">/</span><span class="nu0">360</span><span class="sy1">;</span>
&nbsp; t<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>h<span class="sy3">+</span><span class="nu0">1</span><span class="sy3">/</span><span class="nu0">3</span><span class="sy1">;</span>
&nbsp; t<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>h<span class="sy1">;</span>
&nbsp; t<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>h<span class="sy3">-</span><span class="nu0">1</span><span class="sy3">/</span><span class="nu0">3</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span> <span class="kw1">to</span> <span class="nu0">3</span> <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">if</span> t<span class="br0">&#91;</span>i<span class="br0">&#93;</span>&lt;<span class="nu0">0</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; t<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>t<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy3">+</span><span class="nu0">1</span>
&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> t<span class="br0">&#91;</span>i<span class="br0">&#93;</span>&gt;<span class="nu0">1</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; t<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>t<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy3">-</span><span class="nu0">1</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span> <span class="kw1">to</span> <span class="nu0">3</span> <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">if</span> t<span class="br0">&#91;</span>i<span class="br0">&#93;</span>&lt;<span class="nu0">1</span><span class="sy3">/</span><span class="nu0">6</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; c<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>q<span class="sy3">-</span>p<span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">6</span><span class="sy3">*</span>t<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy3">+</span>p
&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="kw3">InRange</span><span class="br0">&#40;</span>t<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">,</span><span class="nu0">1</span><span class="sy3">/</span><span class="nu0">6</span><span class="sy1">,</span><span class="nu0">0.5</span><span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; c<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>q
&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="kw3">InRange</span><span class="br0">&#40;</span>t<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">,</span><span class="nu0">0.5</span><span class="sy1">,</span><span class="nu0">2</span><span class="sy3">/</span><span class="nu0">3</span><span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; c<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>q<span class="sy3">-</span>p<span class="br0">&#41;</span><span class="sy3">*</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="sy3">/</span><span class="nu0">3</span><span class="sy3">-</span>t<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">6</span><span class="sy3">+</span>p
&nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; c<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>p<span class="sy1">;</span>
&nbsp; Result<span class="sy1">.</span><span class="me1">r</span><span class="sy1">:</span><span class="sy3">=</span><span class="kw3">round</span><span class="br0">&#40;</span>c<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy3">*</span><span class="nu0">255</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">.</span><span class="me1">g</span><span class="sy1">:</span><span class="sy3">=</span><span class="kw3">round</span><span class="br0">&#40;</span>c<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy3">*</span><span class="nu0">255</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">.</span><span class="me1">b</span><span class="sy1">:</span><span class="sy3">=</span><span class="kw3">round</span><span class="br0">&#40;</span>c<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy3">*</span><span class="nu0">255</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/1179.html</guid>
		</item>
		<item>
			<title>Класс-кэш</title>
			<link>https://www.cyberforum.ru/blogs/191506/668.html</link>
			<pubDate>Tue, 21 Aug 2012 17:30:25 GMT</pubDate>
			<description>Назначение класса - временное хранение некоторого набора именованных значений, причём значение, к...</description>
			<content:encoded><![CDATA[<div>Назначение класса - временное хранение некоторого набора именованных значений, причём значение, к которому обращались недавно, будет возвращено быстрее, чем значение, к которому обращались давно.<br />
<font color="DimGray"><blockquote>После долгих и упорных издевательств над дельфями выяснилось, что <a rel="nofollow noopener noreferrer" href="http://docwiki.embarcadero.com/Libraries/en/System.Dispose" target="_blank" title="http://docwiki.embarcadero.com/Libraries/en/System.Dispose">Dispose</a> память, выделенную процедурой <a rel="nofollow noopener noreferrer" href="http://docwiki.embarcadero.com/Libraries/en/System.New" target="_blank" title="http://docwiki.embarcadero.com/Libraries/en/System.New">New</a>, не освобождает, хотя вроде должен. Зато <a rel="nofollow noopener noreferrer" href="http://docwiki.embarcadero.com/Libraries/en/System.FreeMem" target="_blank" title="http://docwiki.embarcadero.com/Libraries/en/System.FreeMem">FreeMem</a> - освобождает, хотя для этого и не предназначен. Возможно, что это только у меня на компе такие странности происходят, так что если что - удалите <font face="Courier New">{$DEFINE UseFreeMem}</font>. Дельфийский менеджер памяти показывает отсутствие проблем. Больше глюков вроде нет.</blockquote></font><br />
Демонстрация работы (анимированная!):<br />
<div style="float:left; margin-right:7px"><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=1238&amp;d=1345549205" border="0" alt="Название: TCache.gif
Просмотров: 1322

Размер: 39.8 Кб" style="margin: 5px" /></div>Описание:<br />
Кэш был создан следующим образом:<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="499855144"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="499855144" style="height: 110px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
</pre></td><td class="de1"><pre class="de1">Cache<span class="sy1">:</span><span class="sy3">=</span>TCache&lt;<span class="kw4">byte</span><span class="sy1">,</span>UInt64&gt;<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span><span class="nu0">6</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//создание (6 элементов) </span>
<span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">6</span> <span class="kw1">downto</span> <span class="nu0">1</span> <span class="kw1">do</span> <span class="co1">//заполнение</span>
&nbsp; Cache<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>i<span class="sy1">;</span>
<span class="kw1">if</span> Cache<span class="sy1">.</span><span class="me1">HasItem</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> <span class="kw1">then</span> <span class="co1">//если есть элемент с ключом «2», то вывести его</span>
&nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>Cache<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Обращение к элементу</b><br />
Сначала происходит обращение к элементу №3, при этом третий элемент оказывается на первом месте, а первый и второй смещаются на одну позицию вниз.<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="479953248"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="479953248" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">Res3<span class="sy1">:</span><span class="sy3">=</span>Cache<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy1">;</span><span class="co1">//получить значение элемента с ключом «3»</span></pre></td></tr></table></div></td></tr></tbody></table></div><b>Добавление элемента</b><br />
Потом происходит добавление элемента №7 в начало, при этом элемент №6 удаляется (правда тут небольшая неточность анимации, удаление происходит после добавления нового элемента).<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="374607198"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="374607198" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">Cache<span class="br0">&#91;</span><span class="nu0">7</span><span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span><span class="nu0">7</span><span class="sy1">;</span><span class="co1">//добавить элемент с ключом «7»</span></pre></td></tr></table></div></td></tr></tbody></table></div><font size="4"><b>Подробная документация:</b></font><br />
<b>Создание:</b><blockquote>Время выполнения: O(1) (в точности оценок я не уверен).<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="69140057"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="69140057" style="height: 94px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
</pre></td><td class="de1"><pre class="de1">x<span class="sy1">:</span><span class="sy3">=</span>TCache&lt;TKey<span class="sy1">,</span>TValue&gt;<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>n<span class="br0">&#41;</span><span class="sy1">;</span>
x<span class="sy1">:</span><span class="sy3">=</span>TCache&lt;TKey<span class="sy1">,</span>TValue&gt;<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>eqComparer<span class="sy1">,</span>n<span class="br0">&#41;</span><span class="sy1">;</span>
x<span class="sy1">:</span><span class="sy3">=</span>TObjectCache&lt;TKey<span class="sy1">,</span>TObjValue&gt;<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>n<span class="br0">&#41;</span><span class="sy1">;</span>
x<span class="sy1">:</span><span class="sy3">=</span>TObjectCache&lt;TKey<span class="sy1">,</span>TObjValue&gt;<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>eqComparer<span class="sy1">,</span>n<span class="br0">&#41;</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><font face="Courier New">TKey</font> - тип ключа, не класс;<br />
<font face="Courier New">TValue</font> - тип значения, не класс;<br />
<font face="Courier New">TObjValue</font> - тип значения, класс;<br />
<font face="Courier New">n</font> - <font face="Courier New"><i>TCacheLimit</i></font>, максимальное количество элементов<br />
<font face="Courier New">eqComparer</font> - <font face="Courier New"><i>IEqualityComparer&lt;TKey&gt;</i></font>, нужен если ваши ключи сравниваются совсем уж странным образом;</blockquote><b>Добавление элемента:</b><blockquote>Время выполнения: O(N).<br />
Элемент добавляется сверху. Если число элементов после добавления нового больше чем максимальное, то нижний элемент будет удалён.<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="378137236"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="378137236" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">x<span class="br0">&#91;</span>key<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>value<span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><font face="Courier New">key</font> - <font face="Courier New"><i>TKey</i></font>, ключ добавляемого элемента;<br />
<font face="Courier New">value</font> - <font face="Courier New"><i>T(Obj)Value</i></font>, значение добавляемого элемента;<br />
<i><font color="DimGray"><blockquote>Примечание: если элемент с ключом <font face="Courier New">key</font> существует, то он будет поднят наверх, а его значение изменено на <font face="Courier New">value</font>.</blockquote></font></i></blockquote><b>Получение элемента:</b><blockquote>Время выполнения: O(N).<br />
При получении элемент будет поднят наверх.<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="335508587"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="335508587" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">x<span class="br0">&#91;</span>key<span class="br0">&#93;</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><font face="Courier New">key</font> - <font face="Courier New"><i>TKey</i></font>, ключ получаемого элемента;<br />
<font face="Courier New">возвращаемое значение</font> - <font face="Courier New"><i>T(Obj)Value</i></font>, значение получаемого элемента;</blockquote><b>Получение верхнего элемента:</b><blockquote>Время выполнения: O(1).<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="330338398"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="330338398" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">x<span class="sy1">.</span><span class="me1">First</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><font face="Courier New">возвращаемое значение</font> - <font face="Courier New"><i>T(Obj)Value</i></font>, значение верхнего элемента;</blockquote><b>Проверка наличия элемента:</b><blockquote>Время выполнения: O(N).<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="863200899"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="863200899" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">x<span class="sy1">.</span><span class="me1">HasItem</span><span class="br0">&#40;</span>key<span class="br0">&#41;</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><font face="Courier New">key</font> - <font face="Courier New"><i>TKey</i></font>, ключ проверяемого элемента;<br />
<font face="Courier New">возвращаемое значение</font> - <font face="Courier New"><i>Boolean</i></font>, истина если элемент существует;<blockquote><font color="DimGray"><i>Примечание: если элемент был найден, то его получение сразу после вызова <font face="Courier New">HasItem</font> происходит за O(1).</i></font></blockquote></blockquote><b>Получение массива элементов:</b><blockquote>Время выполнения: O(N).<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="36002891"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="36002891" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">x<span class="sy1">.</span><span class="me1">ToArray</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><font face="Courier New">возвращаемое значение</font> - <font face="Courier New"><i>TArray&lt;T(Object)Cahce&lt;TKey,T(Obj)Value&gt;. TCacheElement&gt;</i></font>, массив элементов;</blockquote><b>Получение количества элементов:</b><blockquote>Время выполнения: O(1).<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="926059834"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="926059834" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">x<span class="sy1">.</span><span class="me1">Count</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><font face="Courier New">возвращаемое значение</font> - <font face="Courier New"><i>Integer</i></font>, количество элементов;</blockquote><b>Освобождение:</b><blockquote>Время выполнения: O(N).<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="360605092"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="360605092" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">x<span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div></blockquote></div>


<!-- attachments -->
	<div style="margin-top:10px">

		
		
		
		
			<fieldset class="fieldset">
				<legend>Вложения</legend>
				<table cellpadding="0" cellspacing="3" border="0">
				<tr>
	<td><img loading="lazy" decoding="async" class="inlineimg" src="http://www.cyberforum.ru//cyberstatic.net/images/attach/zip.gif" alt="Тип файла: zip" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
	<td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=1253&amp;d=1345645545">CacheUnit.zip</a> (1.4 Кб, 330 просмотров)</td>
</tr>
				</table>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/668.html</guid>
		</item>
		<item>
			<title>Реализация метода Рунге-Кутты</title>
			<link>https://www.cyberforum.ru/blogs/191506/660.html</link>
			<pubDate>Mon, 20 Aug 2012 15:13:20 GMT</pubDate>
			<description>Пример использования:program CallExponent; 
{программа вычисляет значение константы e путём 
...</description>
			<content:encoded><![CDATA[<div>Пример использования:<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="508602929"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="508602929" style="height: 286px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="de1"><pre class="de1"><span class="kw1">program</span> CallExponent<span class="sy1">;</span>
<span class="coMULTI">{программа вычисляет значение константы e путём</span>
<span class="coMULTI">&nbsp;решения дифференциального уравнения y'=y, y(0)=1}</span>
<span class="kw1">uses</span>
&nbsp; RungeKutta<span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> Equation<span class="br0">&#40;</span>x<span class="sy1">,</span>y<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>y
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">begin</span>
&nbsp; <span class="kw3">WriteLn</span><span class="br0">&#40;</span>GetSolutionAtPoint<span class="br0">&#40;</span><span class="nu0">1</span><span class="sy1">,</span><span class="nu0">0.001</span><span class="sy1">,</span><span class="nu0">0</span><span class="sy1">,</span><span class="nu0">1</span><span class="sy1">,</span>Equation<span class="br0">&#41;</span><span class="br0">&#41;</span> 
&nbsp; <span class="co1">// 2.71828182845902</span>
&nbsp; <span class="co1">// погрешность в 14-ом знаке после запятой</span>
<span class="kw1">end</span><span class="sy1">.</span></pre></td></tr></table></div></td></tr></tbody></table></div>Собственно модуль (для кэширования нужен <a href="https://www.cyberforum.ru/blogs/191506/blog668.html">CacheUnit</a>):<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="165159149"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="165159149" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
</pre></td><td class="de1"><pre class="de1"><span class="kw1">unit</span> RungeKutta<span class="sy1">;</span>
&nbsp;
<span class="kw1">interface</span>
&nbsp;
<span class="coMULTI">{.$DEFINE Cache}</span>
&nbsp;
<span class="kw1">uses</span>
&nbsp; System<span class="sy1">.</span><span class="me1">SysUtils</span><span class="sy1">,</span> System<span class="sy1">.</span><span class="me1">Math</span><span class="co2">{$IFDEF Cache}, CacheUnit{$ENDIF}</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">type</span>
&nbsp; TRKEquation<span class="sy3">=</span>reference <span class="kw1">to</span> <span class="kw1">function</span><span class="br0">&#40;</span>x<span class="sy1">,</span>y<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp;
&nbsp; <span class="co1">/// &lt;summary&gt;</span>
&nbsp; <span class="co1">/// Решение ОДУ методом Рунге-Кутты</span>
&nbsp; <span class="co1">/// &lt;/summary&gt;</span>
&nbsp; IRungeKutta<span class="sy3">=</span><span class="kw1">interface</span>
&nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span>
&nbsp; &nbsp; <span class="co1">/// Собственно решение</span>
&nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span>
&nbsp; &nbsp; <span class="kw1">function</span> y<span class="br0">&#40;</span>x<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">/// &lt;summary&gt;</span>
<span class="co1">/// Создание интерфейса &lt;see cref=&quot;ACod.Math.RungeKutta.IRungeKutta&quot;/&gt;</span>
<span class="co1">/// &lt;/summary&gt;</span>
<span class="kw1">function</span> InitialRK<span class="br0">&#40;</span>h<span class="sy1">,</span>x0<span class="sy1">,</span>y0<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span> RKEquation<span class="sy1">:</span>TRKEquation
&nbsp; <span class="co2">{$IFDEF Cache}; Cache:TCacheLimit=0{$ENDIF}</span><span class="br0">&#41;</span><span class="sy1">:</span>IRungeKutta<span class="sy1">;</span>
<span class="co1">/// &lt;summary&gt;</span>
<span class="co1">/// Получение решения уравнения в точке X с шагом H</span>
<span class="co1">/// &lt;/summary&gt;</span>
<span class="kw1">function</span> GetSolutionAtPoint<span class="br0">&#40;</span>x<span class="sy1">,</span>h<span class="sy1">,</span>x0<span class="sy1">,</span>y0<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span> RKEquation<span class="sy1">:</span>TRKEquation<span class="br0">&#41;</span>
&nbsp; <span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">implementation</span>
&nbsp;
<span class="kw1">type</span>
&nbsp; TRungeKutta<span class="sy3">=</span><span class="kw1">class</span><span class="br0">&#40;</span>TInterfacedObject<span class="sy1">,</span>IRungeKutta<span class="br0">&#41;</span>
&nbsp; <span class="kw1">private</span>
&nbsp; &nbsp; FH<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; &nbsp; FX0<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; &nbsp; FY0<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; &nbsp; FRKEquation<span class="sy1">:</span>TRKEquation<span class="sy1">;</span>
&nbsp; &nbsp; FYN<span class="sy1">,</span>FXN<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; &nbsp; FStepCount<span class="sy1">:</span>UInt64<span class="sy1">;</span>
&nbsp; &nbsp; <span class="co2">{$IFDEF Cache}</span>
&nbsp; &nbsp; FCache<span class="sy1">:</span><span class="kw4">boolean</span><span class="sy1">;</span>
&nbsp; &nbsp; FCacheMass<span class="sy1">:</span>TCache&lt;<span class="kw4">extended</span><span class="sy1">,</span>extended&gt;<span class="sy1">;</span>
&nbsp; &nbsp; <span class="co2">{$ENDIF}</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> SetH<span class="br0">&#40;</span><span class="kw1">const</span> Value<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> SetRKEquation<span class="br0">&#40;</span><span class="kw1">const</span> Value<span class="sy1">:</span>TRKEquation<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> SetX0<span class="br0">&#40;</span><span class="kw1">const</span> Value<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> SetY0<span class="br0">&#40;</span><span class="kw1">const</span> Value<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">procedure</span> Step<span class="br0">&#40;</span>dx<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">public</span>
&nbsp; &nbsp; <span class="kw1">constructor</span> Create<span class="co2">{$IFDEF Cache}(Cache:TCacheLimit){$ENDIF}</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">destructor</span> Free<span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">property</span> RKEquation<span class="sy1">:</span>TRKEquation <span class="kw1">read</span> FRKEquation <span class="kw1">write</span> SetRKEquation<span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">property</span> x0<span class="sy1">:</span><span class="kw4">extended</span> <span class="kw1">read</span> FX0 <span class="kw1">write</span> SetX0<span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">property</span> y0<span class="sy1">:</span><span class="kw4">extended</span> <span class="kw1">read</span> FY0 <span class="kw1">write</span> SetY0<span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">property</span> h<span class="sy1">:</span><span class="kw4">extended</span> <span class="kw1">read</span> FH <span class="kw1">write</span> SetH<span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">function</span> y<span class="br0">&#40;</span>x<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="coMULTI">{ TRungeKutta }</span>
&nbsp;
<span class="kw1">constructor</span> TRungeKutta<span class="sy1">.</span><span class="me1">Create</span><span class="co2">{$IFDEF Cache}(Cache:TCacheLimit){$ENDIF}</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; <span class="co2">{$IFDEF Cache}</span>
&nbsp; FCache<span class="sy1">:</span><span class="sy3">=</span>Cache&gt;<span class="nu0">0</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> FCache <span class="kw1">then</span>
&nbsp; &nbsp; FCacheMass<span class="sy1">:</span><span class="sy3">=</span>TCache&lt;<span class="kw4">extended</span><span class="sy1">,</span>extended&gt;<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>Cache<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="co2">{$ENDIF}</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">destructor</span> TRungeKutta<span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; <span class="co2">{$IFDEF Cache}</span>
&nbsp; <span class="kw1">if</span> FCache <span class="kw1">then</span>
&nbsp; &nbsp; FCacheMass<span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span>
&nbsp; <span class="co2">{$ENDIF}</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> TRungeKutta<span class="sy1">.</span><span class="me1">SetH</span><span class="br0">&#40;</span><span class="kw1">const</span> Value<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; FH<span class="sy1">:</span><span class="sy3">=</span>Value<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> TRungeKutta<span class="sy1">.</span><span class="me1">SetRKEquation</span><span class="br0">&#40;</span><span class="kw1">const</span> Value<span class="sy1">:</span>TRKEquation<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; FRKEquation<span class="sy1">:</span><span class="sy3">=</span>Value<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> TRungeKutta<span class="sy1">.</span><span class="me1">SetX0</span><span class="br0">&#40;</span><span class="kw1">const</span> Value<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; FX0<span class="sy1">:</span><span class="sy3">=</span>Value<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> TRungeKutta<span class="sy1">.</span><span class="me1">SetY0</span><span class="br0">&#40;</span><span class="kw1">const</span> Value<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; FY0<span class="sy1">:</span><span class="sy3">=</span>Value<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> TRungeKutta<span class="sy1">.</span><span class="me1">Step</span><span class="br0">&#40;</span>dx<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; k1<span class="sy1">,</span>k2<span class="sy1">,</span>k3<span class="sy1">,</span>k4<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; k1<span class="sy1">:</span><span class="sy3">=</span>dx<span class="sy3">*</span>RKEquation<span class="br0">&#40;</span>FXN<span class="sy1">,</span>FYN<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; k2<span class="sy1">:</span><span class="sy3">=</span>dx<span class="sy3">*</span>RKEquation<span class="br0">&#40;</span>FXN<span class="sy3">+</span>dx<span class="sy3">/</span><span class="nu0">2</span><span class="sy1">,</span>FYN<span class="sy3">+</span>k1<span class="sy3">/</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; k3<span class="sy1">:</span><span class="sy3">=</span>dx<span class="sy3">*</span>RKEquation<span class="br0">&#40;</span>FXN<span class="sy3">+</span>dx<span class="sy3">/</span><span class="nu0">2</span><span class="sy1">,</span>FYN<span class="sy3">+</span>k2<span class="sy3">/</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; k4<span class="sy1">:</span><span class="sy3">=</span>dx<span class="sy3">*</span>RKEquation<span class="br0">&#40;</span>FXN<span class="sy3">+</span>dx<span class="sy1">,</span>FYN<span class="sy3">+</span>k3<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; FYN<span class="sy1">:</span><span class="sy3">=</span>FYN<span class="sy3">+</span><span class="br0">&#40;</span>k1<span class="sy3">+</span><span class="nu0">2</span><span class="sy3">*</span>k2<span class="sy3">+</span><span class="nu0">2</span><span class="sy3">*</span>k3<span class="sy3">+</span>k4<span class="br0">&#41;</span><span class="sy3">/</span><span class="nu0">6</span><span class="sy1">;</span>
&nbsp; FXN<span class="sy1">:</span><span class="sy3">=</span>FXN<span class="sy3">+</span>dx<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> TRungeKutta<span class="sy1">.</span><span class="me1">y</span><span class="br0">&#40;</span>x<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; tmp<span class="sy1">:</span>UInt64<span class="sy1">;</span>
&nbsp; pls<span class="sy1">:</span><span class="kw4">boolean</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>NaN<span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> <span class="kw3">IsNaN</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="kw1">or</span> <span class="kw3">IsInfinite</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw1">raise</span> Exception<span class="sy1">.</span><span class="me1">CreateFmt</span><span class="br0">&#40;</span><span class="st0">'Неподходящее для вычислений значение x=%f'</span><span class="sy1">,</span><span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="co2">{$IFDEF Cache}</span>
&nbsp; <span class="kw1">if</span> FCache <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw1">if</span> FCacheMass<span class="sy1">.</span><span class="me1">HasItem</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span>FCacheMass<span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="co2">{$ENDIF}</span>
&nbsp; FXN<span class="sy1">:</span><span class="sy3">=</span>FX0<span class="sy1">;</span>
&nbsp; FYN<span class="sy1">:</span><span class="sy3">=</span>FY0<span class="sy1">;</span>
&nbsp; FStepCount<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">round</span><span class="br0">&#40;</span><span class="kw3">abs</span><span class="br0">&#40;</span>x<span class="sy3">-</span>FX0<span class="br0">&#41;</span><span class="sy3">/</span>FH<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; pls<span class="sy1">:</span><span class="sy3">=</span>x&lt;FX0<span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> pls <span class="kw1">then</span>
&nbsp; &nbsp; FH<span class="sy1">:</span><span class="sy3">=-</span>FH<span class="sy1">;</span>
&nbsp; tmp<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
&nbsp; <span class="kw1">while</span> tmp&lt;<span class="br0">&#40;</span>FStepCount<span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; Step<span class="br0">&#40;</span>FH<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw3">inc</span><span class="br0">&#40;</span>tmp<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; <span class="coMULTI">{new:23.08.2012 10:37}</span>
&nbsp; Step<span class="br0">&#40;</span>x<span class="sy3">-</span><span class="br0">&#40;</span>FH<span class="sy3">*</span><span class="br0">&#40;</span>FStepCount<span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy3">+</span>FX0<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="coMULTI">{/new}</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>FYN<span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> pls <span class="kw1">then</span>
&nbsp; &nbsp; FH<span class="sy1">:</span><span class="sy3">=-</span>FH<span class="sy1">;</span>
&nbsp; <span class="co2">{$IFDEF Cache}</span>
&nbsp; <span class="kw1">if</span> FCache <span class="kw1">then</span>
&nbsp; &nbsp; FCacheMass<span class="br0">&#91;</span>x<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>FYN<span class="sy1">;</span>
&nbsp; <span class="co2">{$ENDIF}</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="coMULTI">{ Funtions }</span>
&nbsp;
<span class="kw1">function</span> InitialRK<span class="br0">&#40;</span>h<span class="sy1">,</span>x0<span class="sy1">,</span>y0<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span> RKEquation<span class="sy1">:</span>TRKEquation<span class="co2">{$IFDEF Cache}; Cache:TCacheLimit{$ENDIF}</span><span class="br0">&#41;</span>
&nbsp; <span class="sy1">:</span>IRungeKutta<span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; tmp<span class="sy1">:</span>TRungeKutta<span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; <span class="kw1">if</span> <span class="kw3">CompareValue</span><span class="br0">&#40;</span>h<span class="sy1">,</span><span class="nu0">0</span><span class="br0">&#41;</span>&lt;<span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw1">raise</span> Exception<span class="sy1">.</span><span class="me1">CreateFmt</span><span class="br0">&#40;</span><span class="st0">'Величина шага (%f) должна быть больше 0!'</span><span class="sy1">,</span><span class="br0">&#91;</span>h<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; tmp<span class="sy1">:</span><span class="sy3">=</span>TRungeKutta<span class="sy1">.</span><span class="me1">Create</span><span class="co2">{$IFDEF Cache}(Cache){$ENDIF}</span><span class="sy1">;</span>
&nbsp; tmp<span class="sy1">.</span><span class="me1">h</span><span class="sy1">:</span><span class="sy3">=</span>h<span class="sy1">;</span>
&nbsp; tmp<span class="sy1">.</span><span class="me1">x0</span><span class="sy1">:</span><span class="sy3">=</span>x0<span class="sy1">;</span>
&nbsp; tmp<span class="sy1">.</span><span class="me1">y0</span><span class="sy1">:</span><span class="sy3">=</span>y0<span class="sy1">;</span>
&nbsp; tmp<span class="sy1">.</span><span class="me1">RKEquation</span><span class="sy1">:</span><span class="sy3">=</span>RKEquation<span class="sy1">;</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>tmp<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> GetSolutionAtPoint<span class="br0">&#40;</span>x<span class="sy1">,</span>h<span class="sy1">,</span>x0<span class="sy1">,</span>y0<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span> RKEquation<span class="sy1">:</span>TRKEquation<span class="br0">&#41;</span>
&nbsp; <span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>InitialRK<span class="br0">&#40;</span>h<span class="sy1">,</span>x0<span class="sy1">,</span>y0<span class="sy1">,</span>RKEquation<span class="co2">{$IFDEF Cache},0{$ENDIF}</span><span class="br0">&#41;</span><span class="sy1">.</span><span class="me1">y</span><span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/660.html</guid>
		</item>
		<item>
			<title>Обёртка к классу TXmlDocument</title>
			<link>https://www.cyberforum.ru/blogs/191506/600.html</link>
			<pubDate>Tue, 07 Aug 2012 15:41:19 GMT</pubDate>
			<description>Немного напоминает XPath, но всё же не оно. 
Достоиства: 
 
* лаконичный код; 
* с первого взгляда...</description>
			<content:encoded><![CDATA[<div><div class="smallfont offtopic" onmouseover="this.style.color='#000000';" onmouseout="this.style.color='#888888';">
				<p><b>Не по теме:</b></p>
				<p>Немного напоминает XPath, но всё же не оно.</p>
				</div><br />
<font size="5"><div align="center">Достоиства:</div></font><ul><li>лаконичный код;</li>
<li>с первого взгляда понятно, к какому элементу происходит обращение;</li>
<li>удобный доступ по атрибутам;</li>
</ul><font size="5"><div align="center">Недостатки:</div></font><ul><li>медленная работа;</li>
<li>неоптимальный код;</li>
<li>может работать не так, как ожидалось;</li>
<li>для совершения некоторых действий нужно пошаманить;</li>
</ul>Кроме того, модуль наследует все достоинства и недостатки TXmlDocument.<br />
<font size="4"><div align="center">Демонстрация работы модуля (скомпилированная программа: <a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=1090&amp;d=1344351608" >Project1.zip</a>):</div></font><br />
Что было (спёрто с <a rel="nofollow noopener noreferrer" href="http://ru.wikipedia.org/wiki/XML#.D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_XML" target="_blank" title="http://ru.wikipedia.org/wiki/XML#.D0.A1.D0.B8.D0.BD.D1.82.D0.B0.D0.BA.D1.81.D0.B8.D1.81_XML">Википедии</a>):<div class="codeblock"><table class="xml"><thead><tr><td colspan="2" id="316515586"  class="head">XML</td></tr></thead><tbody><tr class="li1"><td><div id="316515586" style="height: 270px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="de1"><pre class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;recipe</span> <span class="re0">name</span>=<span class="st0">&quot;хлеб&quot;</span> <span class="re0">preptime</span>=<span class="st0">&quot;5&quot;</span> <span class="re0">cooktime</span>=<span class="st0">&quot;180&quot;</span><span class="re2">&gt;</span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Простой хлеб<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;composition<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;3&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;стакан&quot;</span><span class="re2">&gt;</span></span>Мука<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;0.25&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;грамм&quot;</span><span class="re2">&gt;</span></span>Дрожжи<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;1.5&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;стакан&quot;</span><span class="re2">&gt;</span></span>Тёплая вода<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;1&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;чайная ложка&quot;</span><span class="re2">&gt;</span></span>Соль<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;/composition<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;instructions<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;step<span class="re2">&gt;</span></span></span>Смешать все ингредиенты и тщательно замесить.<span class="sc3"><span class="re1">&lt;/step<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;step<span class="re2">&gt;</span></span></span>Закрыть тканью и оставить на один час в тёплом помещении.<span class="sc3"><span class="re1">&lt;/step<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;step<span class="re2">&gt;</span></span></span>Замесить ещё раз, положить на противень и поставить в духовку.<span class="sc3"><span class="re1">&lt;/step<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;/instructions<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/recipe<span class="re2">&gt;</span></span></span></pre></td></tr></table></div></td></tr></tbody></table></div>Что делалось:<div class="codeblock"><table class="unknown"><thead><tr><td colspan="2" id="667454500"  class="head">Code</td></tr></thead><tbody><tr class="li1"><td><div id="667454500" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
</pre></td><td class="de1"><pre class="de1">Введите имя файла:
&gt; z:\tmp\<span class="nu0">1</span>.xml
Файл найден!
Файл открыт!
&gt; recipe\title:=&quot;Магический хлеб&quot;
@null
&gt; recipe\composition\ingredient|count
<span class="nu0">4</span>
&gt; recipe\composition\ingredient<span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span>:=&quot;Эликсир маны&quot;
@null
&gt; recipe\composition\ingredient<span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span>.amount:=&quot;<span class="nu0">0.25</span>&quot;
@null
&gt; recipe\composition\ingredient<span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span>.unit:=&quot;колба&quot;
@null
&gt; recipe\warning:=&quot;Применять с осторожностью! Возможны сверхъестественные последствия.&quot;
@null
&gt; @save
Сохранено!
&gt; recipe\composition\ingredient<span class="br0">&#91;</span>amount=&quot;<span class="nu0">0.25</span>&quot;<span class="br0">&#93;</span>|count
<span class="nu0">2</span>
&gt; recipe\composition\ingredient<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>
Мука
&gt; recipe\composition\ingredient<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.unit
стакан
&gt; recipe\instructions\step|count
<span class="nu0">3</span>
&gt; recipe\instructions\step<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>
Смешать все ингредиенты и тщательно замесить.
&gt; recipe\instructions\step<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.comment|exists
False
&gt; recipe\instructions\step<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>
Закрыть тканью и оставить на один час в тёплом помещении.
&gt; recipe\instructions\step<span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>
Замесить ещё раз, положить на противень и поставить в духовку.
&gt; recipe\instructions\step<span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span>|exists
False
&gt; @exit</pre></td></tr></table></div></td></tr></tbody></table></div>Что получилось:<div class="codeblock"><table class="xml"><thead><tr><td colspan="2" id="596723660"  class="head">XML</td></tr></thead><tbody><tr class="li1"><td><div id="596723660" style="height: 302px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
</pre></td><td class="de1"><pre class="de1"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;UTF-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;recipe</span> <span class="re0">name</span>=<span class="st0">&quot;хлеб&quot;</span> <span class="re0">preptime</span>=<span class="st0">&quot;5&quot;</span> <span class="re0">cooktime</span>=<span class="st0">&quot;180&quot;</span><span class="re2">&gt;</span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;title<span class="re2">&gt;</span></span></span>Магический хлеб<span class="sc3"><span class="re1">&lt;/title<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;composition<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;3&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;стакан&quot;</span><span class="re2">&gt;</span></span>Мука<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;0.25&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;грамм&quot;</span><span class="re2">&gt;</span></span>Дрожжи<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;1.5&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;стакан&quot;</span><span class="re2">&gt;</span></span>Тёплая вода<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;1&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;чайная ложка&quot;</span><span class="re2">&gt;</span></span>Соль<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;ingredient</span> <span class="re0">amount</span>=<span class="st0">&quot;0.25&quot;</span> <span class="re0">unit</span>=<span class="st0">&quot;колба&quot;</span><span class="re2">&gt;</span></span>Эликсир маны<span class="sc3"><span class="re1">&lt;/ingredient<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;/composition<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;instructions<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;step<span class="re2">&gt;</span></span></span>Смешать все ингредиенты и тщательно замесить.<span class="sc3"><span class="re1">&lt;/step<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;step<span class="re2">&gt;</span></span></span>Закрыть тканью и оставить на один час в тёплом помещении.<span class="sc3"><span class="re1">&lt;/step<span class="re2">&gt;</span></span></span>
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;step<span class="re2">&gt;</span></span></span>Замесить ещё раз, положить на противень и поставить в духовку.<span class="sc3"><span class="re1">&lt;/step<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;/instructions<span class="re2">&gt;</span></span></span>
&nbsp; <span class="sc3"><span class="re1">&lt;warning<span class="re2">&gt;</span></span></span>Применять с осторожностью! Возможны сверхъестественные последствия.<span class="sc3"><span class="re1">&lt;/warning<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/recipe<span class="re2">&gt;</span></span></span></pre></td></tr></table></div></td></tr></tbody></table></div><div align="center"><font size="5">Краткая документация</font></div>Создание:<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="97515355"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="97515355" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">xml<span class="sy1">:</span><span class="sy3">=</span>TXmlPathDoc<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span><span class="st0">'c:\file.xml'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//из файла</span>
xml<span class="sy1">:</span><span class="sy3">=</span>TXmlPathDoc<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>stream<span class="sy1">,</span><span class="kw2">false</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//из потока, если true, то конструктор освободит поток</span>
xml<span class="sy1">:</span><span class="sy3">=</span>TXmlPathDoc<span class="sy1">.</span><span class="me1">CreateXml</span><span class="br0">&#40;</span><span class="st0">'&lt;root&gt;&lt;element v=&quot;1&quot;/&gt;&lt;/root&gt;'</span><span class="br0">&#41;</span><span class="co1">//из строки</span></pre></td></tr></table></div></td></tr></tbody></table></div>Чтение данных:<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="770389603"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="770389603" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1">v<span class="sy1">:</span><span class="sy3">=</span>xml<span class="sy1">.</span><span class="me1">GetData</span><span class="br0">&#40;</span><span class="st0">'root\element.v'</span><span class="br0">&#41;</span><span class="sy1">;</span>
v<span class="sy1">:</span><span class="sy3">=</span>xml<span class="sy1">.</span><span class="me1">ExecQuery</span><span class="br0">&#40;</span><span class="st0">'root\element.v'</span><span class="br0">&#41;</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Запись данных:<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="833731547"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="833731547" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1">xml<span class="sy1">.</span><span class="me1">SetData</span><span class="br0">&#40;</span><span class="st0">'root\element.v'</span><span class="sy1">,</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy1">;</span>
xml<span class="sy1">.</span><span class="me1">ExecQuery</span><span class="br0">&#40;</span><span class="st0">'root\element.v:=&quot;1&quot;'</span><span class="br0">&#41;</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Сохранение:<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="172197082"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="172197082" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1">xml<span class="sy1">.</span><span class="me1">SaveToFile</span><span class="br0">&#40;</span><span class="st0">'c:\file.xml'</span><span class="br0">&#41;</span><span class="sy1">;</span>
xml<span class="sy1">.</span><span class="me1">SaveToStream</span><span class="br0">&#40;</span>stream<span class="br0">&#41;</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Удаление:<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="99590319"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="99590319" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">xml<span class="sy1">.</span><span class="me1">DeleteElement</span><span class="br0">&#40;</span><span class="st0">'root\element'</span><span class="br0">&#41;</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Работа стандартными средствами:<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="228991035"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="228991035" style="height: 78px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
</pre></td><td class="de1"><pre class="de1">xml<span class="sy1">.</span><span class="me1">Document</span><span class="sy1">;</span><span class="co1">//IXmlDocument</span>
xml<span class="sy1">.</span><span class="me1">Root</span><span class="sy1">;</span><span class="co1">//IXmlNode,=xml.Document.DocumentElement;</span>
xml<span class="sy1">.</span><span class="me1">GetNode</span><span class="br0">&#40;</span><span class="st0">'root\element'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//IXmlNode</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>


<!-- attachments -->
	<div style="margin-top:10px">

		
		
		
		
			<fieldset class="fieldset">
				<legend>Вложения</legend>
				<table cellpadding="0" cellspacing="3" border="0">
				<tr>
	<td><img loading="lazy" decoding="async" class="inlineimg" src="http://www.cyberforum.ru//cyberstatic.net/images/attach/zip.gif" alt="Тип файла: zip" width="16" height="16" border="0" style="vertical-align:baseline" /></td>
	<td><a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=1092&amp;d=1344352280">XmlPath.zip</a> (4.8 Кб, 251 просмотров)</td>
</tr>
				</table>
			</fieldset>
		

	</div>
<!-- / attachments -->
]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/600.html</guid>
		</item>
		<item>
			<title>Формула оценки сложности пароля</title>
			<link>https://www.cyberforum.ru/blogs/191506/569.html</link>
			<pubDate>Wed, 25 Jul 2012 16:13:06 GMT</pubDate>
			<description>Не очень сложная, но, при этом, вроде как что-то оценивает:...</description>
			<content:encoded><![CDATA[<div>Не очень сложная, но, при этом, вроде как что-то оценивает:<br />
<img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?%28N%2B%5Csqrt%7B0.5N_s%2BN_r%7D-%5Csqrt%7BN_c%7D%29%5Clog_N%7BN_u%7D" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?(N+\sqrt{0.5N_s+N_r}-\sqrt{N_c})\log_N{N_u}" /><br />
N - число символов в пароле<br />
N<sub>u</sub> - число уникальных символов (с учётом регистра)<br />
N<sub>s</sub> - число специальных символов (!,&quot;,*,?,},…)<br />
N<sub>r</sub> - число букв, регистр которых отличается от предыдущей (регистр цифр и спецсимволов — нейтральный (не верхний и не нижний))<br />
N<sub>c</sub> - число идущих подряд символов одного типа (буквы, цифры, спецсимволы)<br />
log<sub>N</sub>N<sub>u</sub>&#8804;1 - коэффициент повторений, равен единице, если все символы уникальны <br />
<table cellspacing="1" cellpadding="5" class="stg_table tborder sortable" id="sorttable5327"><thead class="thead"><tr><th>Пароль</th><th>Сложность</th></tr></thead><tbody><tr class="alt2"><td>12345</td><td>2.76</td></tr><tr class="alt1"><td>password</td><td>4.84</td></tr><tr class="alt2"><td>P@sSw0rd</td><td>9.14</td></tr><tr class="alt1"><td>P@sSw0rd!</td><td>10.41</td></tr></tbody></table>Пример реализации:<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="353788782"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="353788782" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
</pre></td><td class="de1"><pre class="de1"><span class="kw1">uses</span>
&nbsp; System<span class="sy1">.</span><span class="me1">Math</span><span class="sy1">,</span> Generics<span class="sy1">.</span><span class="me1">Collections</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> PassQuantity<span class="br0">&#40;</span>s<span class="sy1">:</span><span class="kw4">string</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Real</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; i<span class="sy1">,</span>len<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp; rep<span class="sy1">:</span>TDictionary&lt;<span class="kw4">char</span><span class="sy1">,</span>integer&gt;<span class="sy1">;</span>
&nbsp; difRegCount<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp; simbCount<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp; copySb<span class="sy1">:</span><span class="kw4">Integer</span><span class="sy1">;</span>
&nbsp; Info<span class="sy1">:</span>TList&lt;string&gt;<span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; len<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">length</span><span class="br0">&#40;</span>s<span class="br0">&#41;</span><span class="sy1">;</span> 
&nbsp; <span class="kw1">if</span> len&lt;<span class="sy3">=</span><span class="nu0">1</span> <span class="kw1">then</span><span class="co1">//дабы избежать проблем с логарифмами</span>
&nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Rep<span class="sy1">:</span><span class="sy3">=</span>TDictionary&lt;<span class="kw4">char</span><span class="sy1">,</span> integer&gt;<span class="sy1">.</span><span class="me1">Create</span><span class="sy1">;</span>
&nbsp; info<span class="sy1">:</span><span class="sy3">=</span>TList&lt;string&gt;<span class="sy1">.</span><span class="me1">Create</span><span class="sy1">;</span>
&nbsp; simbCount<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span> <span class="kw1">to</span> len <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">case</span> s<span class="br0">&#91;</span>i<span class="br0">&#93;</span> <span class="kw1">of</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'A'</span><span class="sy1">..</span><span class="st0">'Z'</span><span class="sy1">,</span><span class="st0">'А'</span><span class="sy1">..</span><span class="st0">'Я'</span><span class="sy1">,</span><span class="st0">'Ё'</span><span class="sy1">:</span>info<span class="sy1">.</span><span class="me1">Add</span><span class="br0">&#40;</span><span class="st0">'lu'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//letter,upCase</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'a'</span><span class="sy1">..</span><span class="st0">'z'</span><span class="sy1">,</span><span class="st0">'а'</span><span class="sy1">..</span><span class="st0">'я'</span><span class="sy1">,</span><span class="st0">'ё'</span><span class="sy1">:</span>info<span class="sy1">.</span><span class="me1">Add</span><span class="br0">&#40;</span><span class="st0">'ll'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//letter,lowCase</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="st0">'0'</span><span class="sy1">..</span><span class="st0">'9'</span><span class="sy1">:</span>info<span class="sy1">.</span><span class="me1">Add</span><span class="br0">&#40;</span><span class="st0">'dn'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//digit,nonCase</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; &nbsp; info<span class="sy1">.</span><span class="me1">Add</span><span class="br0">&#40;</span><span class="st0">'sn'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//simbol,nonCase</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">inc</span><span class="br0">&#40;</span>simbCount<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span> Rep<span class="sy1">.</span><span class="me1">ContainsKey</span><span class="br0">&#40;</span>s<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; &nbsp; Rep<span class="sy1">.</span><span class="me1">Add</span><span class="br0">&#40;</span>s<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">,</span> <span class="nu0">1</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; &nbsp; Rep<span class="br0">&#91;</span>s<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>Rep<span class="br0">&#91;</span>s<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#93;</span><span class="sy3">+</span><span class="nu0">1</span><span class="sy1">;</span><span class="co1">//rep[n]=число повторений символа n</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; copySb<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
&nbsp; difRegCount<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span> <span class="kw1">to</span> info<span class="sy1">.</span><span class="me1">Count</span><span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> info<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span>&lt;&gt;info<span class="br0">&#91;</span>i<span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">inc</span><span class="br0">&#40;</span>difRegCount<span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//различный регистр</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> info<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy3">=</span>info<span class="br0">&#91;</span>i<span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">inc</span><span class="br0">&#40;</span>copySb<span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//различный тип</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; info<span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">logN</span><span class="br0">&#40;</span>len<span class="sy1">,</span> rep<span class="sy1">.</span><span class="me1">Count</span><span class="br0">&#41;</span><span class="sy3">*</span><span class="br0">&#40;</span>len<span class="sy3">+</span><span class="kw3">sqrt</span><span class="br0">&#40;</span><span class="nu0">0.5</span><span class="sy3">*</span>simbCount<span class="sy3">+</span>difRegCount<span class="br0">&#41;</span><span class="sy3">-</span><span class="kw3">sqrt</span><span class="br0">&#40;</span>copySb<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Rep<span class="sy1">.</span><span class="me1">Free</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/569.html</guid>
		</item>
		<item>
			<title>Функции с заданными пределами</title>
			<link>https://www.cyberforum.ru/blogs/191506/519.html</link>
			<pubDate>Fri, 06 Jul 2012 10:41:28 GMT</pubDate>
			<description>Зачем нужны такие функции и нужны ли вообще, я сказать не могу. Мне лично они понадобились для...</description>
			<content:encoded><![CDATA[<div>Зачем нужны такие функции и нужны ли вообще, я сказать не могу. Мне лично они понадобились для расчёта значения скидки в курсовой работе, то есть ровно один раз.<ul><li>На основе арктангенса:<ul><li>Формула:<br />
<img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?f_1%28x%29%3D%5Cfrac%7Bc-a%7D%7B%5Cpi%2F2%7D%5Ccdot%5Carctan%7B%5Cleft%28%5Cfrac%20%7B%5Cpi%20%7Cb%7Cx%7D%7B2%7Cc-a%7C%7D%5Cright%29%7D%2Ba" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?f_1(x)=\frac{c-a}{\pi/2}\cdot\arctan{\left(\frac {\pi |b|x}{2|c-a|}\right)}+a" /></li>
<li>График:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=918&amp;d=1341560093" rel="Lightbox" id="attachment918" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=918&amp;thumb=1&amp;d=1346315743" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: график1.png
Просмотров: 1887
Размер:	49.2 Кб
ID:	918" style="margin: 5px" /></a><br />
Синия линия — функция, чёрная — касательная в нуле, лиловая — верхняя асимптота, голубая — нижняя асимптота, зелёная — значение в нуле.<br />
Параметры функции: <img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?a%3D1" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?a=1" />, <img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?b%3D0.45" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?b=0.45" />, <img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?c%3D1.5" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?c=1.5" /></li>
<li>Пределы:<br />
<img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?%5Clim_%7Bx%5Crightarrow%200%7D%20f_1%28x%29%3Da%2C%5C%3B%5Clim_%7Bx%5Crightarrow%20%2B%5Cinfty%7D%20f_1%28x%29%3Dc%2C%5C%3B%5Clim_%7Bx%5Crightarrow%20-%5Cinfty%7D%20f_1%28x%29%3D2a-c" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?\lim_{x\rightarrow 0} f_1(x)=a,\;\lim_{x\rightarrow +\infty} f_1(x)=c,\;\lim_{x\rightarrow -\infty} f_1(x)=2a-c" /></li>
<li>Другие свойства:<br />
<img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?%5Cleft%7C%7Bf_1%7D%27%280%29%5Cright%7C%3D%7Cb%7C" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?\left|{f_1}'(0)\right|=|b|" /><br />
Функция монотонна</li>
<li>Реализация:<br />
<div class="codeblock"><table class="pascal"><thead><tr><td colspan="2" id="976599942"  class="head">Pascal</td></tr></thead><tbody><tr class="li1"><td><div id="976599942" style="height: 94px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
</pre></td><td class="de1"><pre class="de1"><span class="kw1">function</span> f1<span class="br0">&#40;</span>x<span class="sy1">,</span>a<span class="sy1">,</span>b<span class="sy1">,</span>c<span class="sy1">:</span><span class="kw4">real</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">real</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; f1<span class="sy1">:</span><span class="sy3">=</span>a<span class="sy3">+</span><span class="nu0">2</span><span class="sy3">*</span><span class="br0">&#40;</span>c<span class="sy3">-</span>a<span class="br0">&#41;</span><span class="sy3">/</span>pi<span class="sy3">*</span><span class="kw3">arctan</span><span class="br0">&#40;</span><span class="kw3">abs</span><span class="br0">&#40;</span>b<span class="br0">&#41;</span><span class="sy3">*</span>pi<span class="sy3">*</span>x<span class="sy3">/</span><span class="nu0">2</span><span class="sy3">/</span><span class="kw3">abs</span><span class="br0">&#40;</span>c<span class="sy3">-</span>a<span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><div class="codeblock"><table class="c"><thead><tr><td colspan="2" id="203959982"  class="head">C</td></tr></thead><tbody><tr class="li1"><td><div id="203959982" style="height: 126px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;math.h&gt;</span>
&nbsp;
<span class="kw4">float</span> f1<span class="br0">&#40;</span><span class="kw4">float</span> x<span class="sy0">,</span> <span class="kw4">float</span> a<span class="sy0">,</span> <span class="kw4">float</span> b<span class="sy0">,</span> <span class="kw4">float</span> c<span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> a<span class="sy0">+</span><span class="br0">&#40;</span>c<span class="sy0">-</span>a<span class="br0">&#41;</span><span class="sy0">/</span><span class="nu16">1.5707963267948</span><span class="sy0">*</span><span class="kw3">atan</span><span class="br0">&#40;</span><span class="nu16">1.5707963267948</span><span class="sy0">*</span><span class="kw3">fabs</span><span class="br0">&#40;</span>b<span class="br0">&#41;</span><span class="sy0">*</span>x<span class="sy0">/</span><span class="kw3">fabs</span><span class="br0">&#40;</span>c<span class="sy0">-</span>a<span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></li>
</ul></li>
<li>На основе экспоненты:<ul><li>Формула:<br />
<img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?f_2%28x%29%3D%28a-c%29%5Cmathrm%7Be%7D%5E%7B%5Cfrac%7B-%7Cbx%7C%7D%7B%7Ca-c%7C%7D%7D%2Bc" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?f_2(x)=(a-c)\mathrm{e}^{\frac{-|bx|}{|a-c|}}+c" /></li>
<li>График:<br />
<a href="https://www.cyberforum.ru/blog_attachment.php?attachmentid=919&amp;d=1341569278" rel="Lightbox" id="attachment919" ><img src="https://www.cyberforum.ru/blog_attachment.php?attachmentid=919&amp;thumb=1&amp;d=1346315743" class="thumbnail" border="0" alt="Нажмите на изображение для увеличения
Название: график2.png
Просмотров: 1633
Размер:	54.4 Кб
ID:	919" style="margin: 5px" /></a><br />
Синия линия — функция, чёрная — касательная в ±нуле, лиловая — асимптота, зелёная — значение в нуле.<br />
Параметры функции: <img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?a%3D0.5" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?a=0.5" />, <img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?b%3D0.75" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?b=0.75" />, <img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?c%3D1.5" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?c=1.5" /></li>
<li>Пределы:<br />
<img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?%5Clim_%7Bx%5Crightarrow%200%7D%20f_2%28x%29%3Da%2C%5C%3B%5Clim_%7Bx%5Crightarrow%20%5Cinfty%7D%20f_2%28x%29%3Dc" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?\lim_{x\rightarrow 0} f_2(x)=a,\;\lim_{x\rightarrow \infty} f_2(x)=c" /></li>
<li>Другие свойства:<br />
<img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?%5Cleft%7C%7Bf_2%7D%27%28%5Cpm%200%29%5Cright%7C%3D%7Cb%7C%2C%5C%3A%5Cnot%5Cexists%20%7Bf_2%7D%27%280%29" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?\left|{f_2}'(\pm 0)\right|=|b|,\:\not\exists {f_2}'(0)" /><br />
Функция симметрична относительно оси абсцисс и имеет единственный экстремум в точке <img src="https://www.cyberforum.ru/cgi-bin/latex.cgi?x%3D0" border="0" alt="https://www.cyberforum.ru/cgi-bin/latex.cgi?x=0" /></li>
<li>Реализация:<br />
<div class="codeblock"><table class="pascal"><thead><tr><td colspan="2" id="880733796"  class="head">Pascal</td></tr></thead><tbody><tr class="li1"><td><div id="880733796" style="height: 94px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
</pre></td><td class="de1"><pre class="de1"><span class="kw1">function</span> f2<span class="br0">&#40;</span>x<span class="sy1">,</span>a<span class="sy1">,</span>b<span class="sy1">,</span>c<span class="sy1">:</span><span class="kw4">real</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">real</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; f2<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>a<span class="sy3">-</span>c<span class="br0">&#41;</span><span class="sy3">*</span><span class="kw3">exp</span><span class="br0">&#40;</span><span class="sy3">-</span><span class="kw3">abs</span><span class="br0">&#40;</span>b<span class="sy3">*</span>x<span class="sy3">/</span><span class="br0">&#40;</span>a<span class="sy3">-</span>c<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy3">+</span>c
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><div class="codeblock"><table class="c"><thead><tr><td colspan="2" id="938740971"  class="head">C</td></tr></thead><tbody><tr class="li1"><td><div id="938740971" style="height: 126px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
</pre></td><td class="de1"><pre class="de1"><span class="co2">#include &lt;math.h&gt;</span>
&nbsp;
<span class="kw4">float</span> f2<span class="br0">&#40;</span><span class="kw4">float</span> x<span class="sy0">,</span> <span class="kw4">float</span> a<span class="sy0">,</span> <span class="kw4">float</span> b<span class="sy0">,</span> <span class="kw4">float</span> c<span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>a<span class="sy0">-</span>c<span class="br0">&#41;</span><span class="sy0">*</span><span class="kw3">exp</span><span class="br0">&#40;</span><span class="sy0">-</span><span class="kw3">fabs</span><span class="br0">&#40;</span>b<span class="sy0">*</span>x<span class="sy0">/</span><span class="br0">&#40;</span>a<span class="sy0">-</span>c<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">+</span>c
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></li>
</ul></li>
</ul></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/519.html</guid>
		</item>
		<item>
			<title>Функции вычисления кратных приставок</title>
			<link>https://www.cyberforum.ru/blogs/191506/506.html</link>
			<pubDate>Fri, 22 Jun 2012 17:44:07 GMT</pubDate>
			<description><![CDATA[Пример использованияGetScPref(0.00017,0,'Ф');//=170 мкФ 
GetScPref(1e20,0,'Дж');//=100 ЭДж...]]></description>
			<content:encoded><![CDATA[<div>Пример использования<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="617768871"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="617768871" style="height: 142px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
</pre></td><td class="de1"><pre class="de1">GetScPref<span class="br0">&#40;</span><span class="nu0">0.00017</span><span class="sy1">,</span><span class="nu0">0</span><span class="sy1">,</span><span class="st0">'Ф'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//=170 мкФ</span>
GetScPref<span class="br0">&#40;</span>1e20<span class="sy1">,</span><span class="nu0">0</span><span class="sy1">,</span><span class="st0">'Дж'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//=100 ЭДж</span>
GetScPref<span class="br0">&#40;</span><span class="nu0">0.19856</span><span class="sy1">,</span><span class="nu0">2</span><span class="sy1">,</span><span class="st0">'г'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//=198,56 мг</span>
GetScPref<span class="br0">&#40;</span><span class="nu0">0.19856</span><span class="sy1">,</span><span class="nu0">1</span><span class="sy1">,</span><span class="st0">'г'</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//=198,6 мг</span>
<span class="coMULTI">{-----------------}</span>
GetCompPref<span class="br0">&#40;</span><span class="nu0">100000000</span><span class="sy1">,</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//=95,37 МиБ</span>
GetCompPref<span class="br0">&#40;</span><span class="nu0">1000</span><span class="sy1">,</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy1">;</span><span class="co1">//=0,98 КиБ</span></pre></td></tr></table></div></td></tr></tbody></table></div>Собственно функции<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="64636415"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="64636415" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="de1"><pre class="de1"><span class="kw1">uses</span>
&nbsp; Math<span class="sy1">,</span> SysUtils<span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> GetScPref<span class="br0">&#40;</span>v<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>n<span class="sy1">:</span><span class="kw4">byte</span><span class="sy1">;</span>meas<span class="sy1">:</span><span class="kw4">string</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">string</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; t<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
<span class="kw1">const</span>
&nbsp; pref<span class="sy1">:</span><span class="kw1">array</span><span class="br0">&#91;</span><span class="sy3">-</span><span class="nu0">8</span><span class="sy1">..</span><span class="nu0">8</span><span class="br0">&#93;</span> <span class="kw1">of</span> <span class="kw4">string</span><span class="sy3">=</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#40;</span><span class="st0">'и'</span><span class="sy1">,</span><span class="st0">'з'</span><span class="sy1">,</span><span class="st0">'а'</span><span class="sy1">,</span><span class="st0">'ф'</span><span class="sy1">,</span><span class="st0">'п'</span><span class="sy1">,</span><span class="st0">'н'</span><span class="sy1">,</span><span class="st0">'мк'</span><span class="sy1">,</span><span class="st0">'м'</span><span class="sy1">,</span><span class="st0">''</span><span class="sy1">,</span><span class="st0">'к'</span><span class="sy1">,</span><span class="st0">'М'</span><span class="sy1">,</span><span class="st0">'Г'</span><span class="sy1">,</span><span class="st0">'Т'</span><span class="sy1">,</span><span class="st0">'П'</span><span class="sy1">,</span><span class="st0">'Э'</span><span class="sy1">,</span><span class="st0">'З'</span><span class="sy1">,</span><span class="st0">'И'</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; t<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">EnsureRange</span><span class="br0">&#40;</span><span class="kw3">trunc</span><span class="br0">&#40;</span><span class="kw3">logN</span><span class="br0">&#40;</span><span class="nu0">990</span><span class="sy1">,</span><span class="kw3">abs</span><span class="br0">&#40;</span>v<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy3">+</span><span class="br0">&#40;</span><span class="kw3">sign</span><span class="br0">&#40;</span><span class="kw3">ln</span><span class="br0">&#40;</span><span class="kw3">abs</span><span class="br0">&#40;</span>v<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#41;</span> <span class="kw1">div</span> <span class="nu0">2</span><span class="sy1">,</span><span class="sy3">-</span><span class="nu0">8</span><span class="sy1">,</span><span class="nu0">8</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">FloatToStr</span><span class="br0">&#40;</span><span class="kw3">RoundTo</span><span class="br0">&#40;</span>v<span class="sy3">*</span><span class="kw3">power</span><span class="br0">&#40;</span><span class="nu0">10</span><span class="sy1">,</span><span class="sy3">-</span><span class="kw3">min</span><span class="br0">&#40;</span><span class="kw3">max</span><span class="br0">&#40;</span>t<span class="sy3">*</span><span class="nu0">3</span><span class="sy1">,</span><span class="sy3">-</span><span class="nu0">24</span><span class="br0">&#41;</span><span class="sy1">,</span><span class="nu0">24</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">,</span><span class="sy3">-</span>n<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy3">+</span><span class="st0">' '</span><span class="sy3">+</span>pref<span class="br0">&#91;</span>t<span class="br0">&#93;</span><span class="sy3">+</span>meas<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> GetCompPref<span class="br0">&#40;</span>v<span class="sy1">:</span><span class="kw4">int64</span><span class="sy1">;</span>n<span class="sy1">:</span><span class="kw4">byte</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">string</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; t<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
<span class="kw1">const</span>
&nbsp; pref<span class="sy1">:</span><span class="kw1">array</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="sy1">..</span><span class="nu0">8</span><span class="br0">&#93;</span> <span class="kw1">of</span> <span class="kw4">string</span><span class="sy3">=</span><span class="br0">&#40;</span><span class="st0">''</span><span class="sy1">,</span><span class="st0">'Ки'</span><span class="sy1">,</span><span class="st0">'Ми'</span><span class="sy1">,</span><span class="st0">'Ги'</span><span class="sy1">,</span><span class="st0">'Ти'</span><span class="sy1">,</span><span class="st0">'Пи'</span><span class="sy1">,</span><span class="st0">'Эи'</span><span class="sy1">,</span><span class="st0">'Зи'</span><span class="sy1">,</span><span class="st0">'Йи'</span><span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; t<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">EnsureRange</span><span class="br0">&#40;</span><span class="kw3">trunc</span><span class="br0">&#40;</span><span class="kw3">logN</span><span class="br0">&#40;</span><span class="nu0">990</span><span class="sy1">,</span><span class="kw3">abs</span><span class="br0">&#40;</span>v<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">,</span><span class="nu0">0</span><span class="sy1">,</span><span class="nu0">8</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">FloatToStr</span><span class="br0">&#40;</span><span class="kw3">RoundTo</span><span class="br0">&#40;</span>v<span class="sy3">*</span><span class="kw3">power</span><span class="br0">&#40;</span><span class="nu0">2</span><span class="sy1">,</span><span class="sy3">-</span><span class="kw3">min</span><span class="br0">&#40;</span>t<span class="sy3">*</span><span class="nu0">10</span><span class="sy1">,</span><span class="nu0">80</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">,</span><span class="sy3">-</span>n<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy3">+</span><span class="st0">' '</span><span class="sy3">+</span>pref<span class="br0">&#91;</span>t<span class="br0">&#93;</span><span class="sy3">+</span><span class="st0">'Б'</span><span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/506.html</guid>
		</item>
		<item>
			<title>Бинарный поиск по монотонной функции или массиву</title>
			<link>https://www.cyberforum.ru/blogs/191506/501.html</link>
			<pubDate>Thu, 21 Jun 2012 15:12:51 GMT</pubDate>
			<description>Все сравнения осуществляются с точностью epsilon, если eps=0, то имеется реальный шанс искать...</description>
			<content:encoded><![CDATA[<div>Все сравнения осуществляются с точностью eps<font color="Silver">ilon</font>, если eps=0, то имеется реальный шанс <font color="silver"><s>искать значение вечно</s></font> добиться переполнения стека.<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="593874888"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="593874888" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
</pre></td><td class="de1"><pre class="de1"><span class="kw1">unit</span> BynaryFind<span class="sy1">;</span>
&nbsp;
<span class="coMULTI">{Будьте внимательны при использовании границ поиска по умолчанию, поскольку</span>
<span class="coMULTI">использованы максимальное и минимальное возможные значения переменной типа</span>
<span class="coMULTI">Extended, и если для некоторых х выполняется: f(x)&gt;x, то программа может</span>
<span class="coMULTI">вылететь с печальной ошибкой &quot;Floating point overflow&quot;.</span>
<span class="coMULTI">Так же стоит учесть, что проверки на монотонность функция не производит.}</span>
&nbsp;
<span class="kw1">interface</span>
&nbsp;
<span class="kw1">uses</span>
&nbsp; Math<span class="sy1">;</span>
&nbsp;
<span class="kw1">type</span>
&nbsp; <span class="co1">/// &nbsp; &lt;summary&gt;</span>
&nbsp; <span class="co1">/// &nbsp; &nbsp; Монотонная функция</span>
&nbsp; <span class="co1">/// &nbsp; &lt;/summary&gt;</span>
&nbsp; TMonoFunc<span class="sy3">=</span><span class="kw1">function</span><span class="br0">&#40;</span>x<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp;
&nbsp; <span class="co1">/// &nbsp; &lt;summary&gt;</span>
&nbsp; <span class="co1">/// &nbsp; &nbsp; Результат поиска</span>
&nbsp; <span class="co1">/// &nbsp; &lt;/summary&gt;</span>
&nbsp; TResult<span class="sy3">=</span><span class="kw1">record</span>
&nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span>
&nbsp; &nbsp; <span class="co1">/// &nbsp; Значение аргумента</span>
&nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span>
&nbsp; &nbsp; argument<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span>
&nbsp; &nbsp; <span class="co1">/// &nbsp; Точность поиска</span>
&nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span>
&nbsp; &nbsp; epsilon<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="co1">/// &lt;summary&gt;</span>
&nbsp; &nbsp; <span class="co1">/// &nbsp; Найден ли аргумет (если &lt;c&gt;false&lt;/c&gt;, то возвращается ближайшее значение из</span>
&nbsp; &nbsp; <span class="co1">/// &nbsp; интервала поиска)</span>
&nbsp; &nbsp; <span class="co1">/// &lt;/summary&gt;</span>
&nbsp; &nbsp; isFinded<span class="sy1">:</span><span class="kw4">boolean</span><span class="sy1">;</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="co1">/// &lt;summary&gt;</span>
<span class="co1">/// &nbsp; Функция бинарного поиска аргумента по известному значению. Работает</span>
<span class="co1">/// &nbsp; только для монотонных и непрерывных на [a,b] функций.</span>
<span class="co1">/// &lt;/summary&gt;</span>
<span class="kw1">function</span> FindArgument<span class="br0">&#40;</span>func<span class="sy1">:</span>TMonoFunc<span class="sy1">;</span> y<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span> a<span class="sy1">:</span><span class="kw4">extended</span><span class="sy3">=-</span>MaxExtended<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; b<span class="sy1">:</span><span class="kw4">extended</span><span class="sy3">=</span>MaxExtended<span class="sy1">;</span> eps<span class="sy1">:</span><span class="kw4">extended</span><span class="sy3">=</span>1e<span class="sy3">-</span>18<span class="br0">&#41;</span><span class="sy1">:</span>TResult<span class="sy1">;</span>
&nbsp;
<span class="co1">/// &lt;summary&gt;</span>
<span class="co1">/// &nbsp; Функция бинарного поиска индекса элемента в массиве. Работает только</span>
<span class="co1">/// &nbsp; в отсортированных массивов.</span>
<span class="co1">/// &lt;/summary&gt;</span>
<span class="kw1">function</span> FindIndex<span class="br0">&#40;</span>arr<span class="sy1">:</span>TArray&lt;extended&gt;<span class="sy1">;</span> v<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">implementation</span>
&nbsp;
<span class="kw1">var</span>
&nbsp; tmp<span class="sy1">,</span>staticA<span class="sy1">,</span>staticB<span class="sy1">,</span>tY<span class="sy1">,</span>tA<span class="sy1">,</span>tB<span class="sy1">,</span>tEps<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; tFunc<span class="sy1">:</span>TMonoFunc<span class="sy1">;</span>
&nbsp; tflg<span class="sy1">:</span><span class="kw4">boolean</span><span class="sy1">;</span>
&nbsp; compareMod<span class="sy1">:</span><span class="kw4">ShortInt</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> FindArgumentRec<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; tmp<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>tA<span class="sy3">+</span>tB<span class="br0">&#41;</span><span class="sy3">/</span><span class="nu0">2</span><span class="sy1">;</span> <span class="co1">//середина отрезка</span>
&nbsp; <span class="kw1">if</span> <span class="kw3">IsZero</span><span class="br0">&#40;</span>tFunc<span class="br0">&#40;</span>ta<span class="br0">&#41;</span><span class="sy3">-</span>tFunc<span class="br0">&#40;</span>tb<span class="br0">&#41;</span><span class="sy1">,</span>teps<span class="br0">&#41;</span> <span class="kw1">then</span> <span class="co1">//если длина отрезка меньше эпсилон</span>
&nbsp; &nbsp; <span class="kw1">begin</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//то возвращаем середину хитрым путем</span>
&nbsp; &nbsp; &nbsp; tflg<span class="sy1">:</span><span class="sy3">=</span>tmp&gt;<span class="br0">&#40;</span><span class="br0">&#40;</span>staticA<span class="sy3">+</span>staticB<span class="br0">&#41;</span><span class="sy3">/</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> tflg <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span><span class="sy3">-</span>staticA<span class="sy3">+</span>tmp<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span><span class="sy3">-</span>staticB<span class="sy3">+</span>tmp<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; <span class="co1">//проверяем середину отрезка на соответствие</span>
&nbsp; <span class="co1">//домножение на compareMod позволяет работать с функцией как с возрастающей</span>
&nbsp; <span class="kw1">case</span> compareMod<span class="sy3">*</span><span class="kw3">CompareValue</span><span class="br0">&#40;</span>tfunc<span class="br0">&#40;</span>tmp<span class="br0">&#41;</span><span class="sy1">,</span>ty<span class="sy1">,</span>teps<span class="br0">&#41;</span> <span class="kw1">of</span>
&nbsp; &nbsp; <span class="nu0">0</span><span class="sy1">:</span>Result<span class="sy1">:</span><span class="sy3">=</span>tmp<span class="sy1">;</span><span class="co1">//если f(tmp)=y, то его и возвращаем</span>
&nbsp; &nbsp; <span class="sy3">-</span><span class="nu0">1</span><span class="sy1">:</span> <span class="co1">//если f(tmp)&lt;y, ищем правее</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; tA<span class="sy1">:</span><span class="sy3">=</span>tmp<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>FindArgumentRec
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">1</span><span class="sy1">:</span> <span class="co1">//если f(tmp)&gt;y, ищем левее</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; tB<span class="sy1">:</span><span class="sy3">=</span>tmp<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>FindArgumentRec
&nbsp; &nbsp; <span class="kw1">end</span>
&nbsp; <span class="kw1">end</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> FindArgument<span class="br0">&#40;</span>func<span class="sy1">:</span>TMonoFunc<span class="sy1">;</span> y<span class="sy1">,</span>a<span class="sy1">,</span>b<span class="sy1">,</span>eps<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span>TResult<span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; staticA<span class="sy1">:</span><span class="sy3">=</span>a<span class="sy1">;</span> &nbsp;<span class="co1">//запись исходных границ поиска</span>
&nbsp; staticB<span class="sy1">:</span><span class="sy3">=</span>b<span class="sy1">;</span>
&nbsp; tFunc<span class="sy1">:</span><span class="sy3">=</span>func<span class="sy1">;</span> <span class="co1">//и прочих нужных вещей в глобальные</span>
&nbsp; tA<span class="sy1">:</span><span class="sy3">=</span>a<span class="sy1">;</span> &nbsp; &nbsp; &nbsp; <span class="co1">//переменные, дабы не засорять стек</span>
&nbsp; tB<span class="sy1">:</span><span class="sy3">=</span>b<span class="sy1">;</span>
&nbsp; tY<span class="sy1">:</span><span class="sy3">=</span>y<span class="sy1">;</span>
&nbsp; tEps<span class="sy1">:</span><span class="sy3">=</span>eps<span class="sy1">;</span>
&nbsp; Result<span class="sy1">.</span><span class="me1">epsilon</span><span class="sy1">:</span><span class="sy3">=</span>eps<span class="sy1">;</span>
&nbsp; <span class="co1">//определение вида функции: возрастает(1) она или убывает(-1)</span>
&nbsp; <span class="co1">//если compareMod=0, то функция либо постоянна, либо не монотонна</span>
&nbsp; compareMod<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">CompareValue</span><span class="br0">&#40;</span>func<span class="br0">&#40;</span>b<span class="br0">&#41;</span><span class="sy1">,</span>func<span class="br0">&#40;</span>a<span class="br0">&#41;</span><span class="sy1">,</span>eps<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> compareMod<span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw1">with</span> Result <span class="kw1">do</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; &nbsp; argument<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>b<span class="sy3">+</span>a<span class="br0">&#41;</span><span class="sy3">/</span><span class="nu0">2</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; isFinded<span class="sy1">:</span><span class="sy3">=</span>func<span class="br0">&#40;</span>argument<span class="br0">&#41;</span><span class="sy3">=</span>y<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; Exit<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; <span class="kw1">with</span> Result <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; argument<span class="sy1">:</span><span class="sy3">=</span>FindArgumentRec<span class="sy1">;</span><span class="co1">//собственно поиск</span>
&nbsp; &nbsp; &nbsp; <span class="co1">//проверка, найдено ли значение, и нахождение ближайшей границы области</span>
&nbsp; &nbsp; &nbsp; isFinded<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="sy3">-</span>argument&gt;a<span class="br0">&#41;</span> <span class="kw1">and</span> tflg<span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="sy3">-</span>argument&lt;b<span class="br0">&#41;</span> <span class="kw1">and</span> <span class="kw1">not</span> tflg<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span> isFinded <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> tflg <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; argument<span class="sy1">:</span><span class="sy3">=</span>argument<span class="sy3">+</span>a
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; argument<span class="sy1">:</span><span class="sy3">=</span>argument<span class="sy3">+</span>b
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">end</span>
&nbsp; &nbsp; <span class="kw1">end</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">var</span>
&nbsp; tarr<span class="sy1">:</span>TArray&lt;extended&gt;<span class="sy1">;</span>
&nbsp; tv<span class="sy1">:</span><span class="kw4">extended</span><span class="sy1">;</span>
&nbsp; a<span class="sy1">,</span>b<span class="sy1">,</span>t<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> FindIndexRec<span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; t<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span>a<span class="sy3">+</span>b<span class="br0">&#41;</span> <span class="kw1">div</span> <span class="nu0">2</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>a<span class="sy3">=</span>b<span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span><span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">case</span> compareMod<span class="sy3">*</span><span class="kw3">CompareValue</span><span class="br0">&#40;</span>tarr<span class="br0">&#91;</span>t<span class="br0">&#93;</span><span class="sy1">,</span>tv<span class="br0">&#41;</span> <span class="kw1">of</span>
&nbsp; &nbsp; <span class="nu0">0</span><span class="sy1">:</span>Result<span class="sy1">:</span><span class="sy3">=</span>t<span class="sy1">;</span>
&nbsp; &nbsp; <span class="sy3">-</span><span class="nu0">1</span><span class="sy1">:</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; a<span class="sy1">:</span><span class="sy3">=</span>t<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>FindIndexRec
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">1</span><span class="sy1">:</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; b<span class="sy1">:</span><span class="sy3">=</span>t<span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>FindIndexRec
&nbsp; &nbsp; <span class="kw1">end</span>
&nbsp; <span class="kw1">end</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> FindIndex<span class="br0">&#40;</span>arr<span class="sy1">:</span>TArray&lt;extended&gt;<span class="sy1">;</span> v<span class="sy1">:</span><span class="kw4">extended</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">integer</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; tv<span class="sy1">:</span><span class="sy3">=</span>v<span class="sy1">;</span>
&nbsp; a<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span><span class="sy1">;</span>
&nbsp; b<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">length</span><span class="br0">&#40;</span>arr<span class="br0">&#41;</span><span class="sy3">-</span><span class="nu0">1</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> b&lt;<span class="nu0">0</span> <span class="kw1">then</span><span class="co1">//в пустом массиве искомого элемента точно нет</span>
&nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span><span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; tarr<span class="sy1">:</span><span class="sy3">=</span>arr<span class="sy1">;</span>
&nbsp; compareMod<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">CompareValue</span><span class="br0">&#40;</span>arr<span class="br0">&#91;</span>b<span class="br0">&#93;</span><span class="sy1">,</span>arr<span class="br0">&#91;</span>a<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> compareMod<span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">then</span><span class="co1">//если массив постоянен</span>
&nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span>IfThen<span class="br0">&#40;</span>arr<span class="br0">&#91;</span>a<span class="br0">&#93;</span><span class="sy3">=</span>v<span class="sy1">,</span>a<span class="sy1">,</span><span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>FindIndexRec<span class="sy1">;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">end</span><span class="sy1">.</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/501.html</guid>
		</item>
		<item>
			<title>Полусдвиговый шифр</title>
			<link>https://www.cyberforum.ru/blogs/191506/164.html</link>
			<pubDate>Sun, 25 Mar 2012 08:47:05 GMT</pubDate>
			<description>Теория 
Сама идея шифра довольно проста: 
1. Преобразовать текст в набор двузначных кодов символов...</description>
			<content:encoded><![CDATA[<div><font size="4">Теория</font><br />
Сама идея шифра довольно проста:<ol style="list-style-type: decimal"><li>Преобразовать текст в набор двузначных кодов символов в соответствии с таблицей;</li>
<li>Первую цифру полученной последовательности перенести в конец;</li>
<li>Восстановить из двузначных кодов текст в соответствии с таблицей.</li>
</ol><div class="smallfont offtopic" onmouseover="this.style.color='#000000';" onmouseout="this.style.color='#888888';">
				<p><b>Не по теме:</b></p>
				<p>Кстати, в википедии я ничего похожего не нашёл. Неужели я - разработчик шифра?!</p>
				</div><br />
<font size="4">Пример</font><br />
Используем следующую таблицу:<table cellspacing="1" cellpadding="5" class="stg_table tborder"><tbody><tr class="alt2"><td>00</td><td>а</td><td>10</td><td>ж</td><td>20</td><td>н</td><td>30</td><td>у</td><td>40</td><td>щ</td><td>50</td><td>я</td></tr><tr class="alt1"><td>01</td><td>б</td><td>11</td><td>з</td><td>21</td><td>о</td><td>31</td><td>ф</td><td>41</td><td>'</td><td>51</td><td>_</td></tr><tr class="alt2"><td>02</td><td>в</td><td>12</td><td>и</td><td>22</td><td>п</td><td>32</td><td>х</td><td>42</td><td>ы</td><td>52</td><td>.</td></tr><tr class="alt1"><td>03</td><td>г</td><td>13</td><td>к</td><td>23</td><td>р</td><td>33</td><td>ч</td><td>43</td><td>ь</td><td>53</td><td>,</td></tr><tr class="alt2"><td>04</td><td>д</td><td>14</td><td>л</td><td>24</td><td>с</td><td>34</td><td>ц</td><td>44</td><td>э</td><td>54</td><td>?</td></tr><tr class="alt1"><td>05</td><td>е</td><td>15</td><td>м</td><td>25</td><td>т</td><td>35</td><td>ш</td><td>45</td><td>ю</td><td>55</td><td>-</td></tr></tbody></table>Исходный текст:<div class="codeblock"><table class="unknown"><thead><tr><td colspan="2" id="63508199"  class="head">Code</td></tr></thead><tbody><tr class="li1"><td><div id="63508199" style="height: 46px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
</pre></td><td class="de1"><pre class="de1">да_будет_свет</pre></td></tr></table></div></td></tr></tbody></table></div>Преобразование: <div class="codeblock"><table class="unknown"><thead><tr><td colspan="2" id="687431244"  class="head">Code</td></tr></thead><tbody><tr class="li1"><td><div id="687431244" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1">04-00-<span class="nu0">51</span>-01-<span class="nu0">30</span>-04-05-<span class="nu0">25</span>-<span class="nu0">51</span>-<span class="nu0">24</span>-02-05-<span class="nu0">25</span>
<span class="nu0">40</span>-05-<span class="nu0">10</span>-<span class="nu0">13</span>-00-<span class="nu0">40</span>-<span class="nu0">52</span>-<span class="nu0">55</span>-<span class="nu0">12</span>-<span class="nu0">40</span>-<span class="nu0">20</span>-<span class="nu0">52</span>-<span class="nu0">50</span></pre></td></tr></table></div></td></tr></tbody></table></div>Результат: <div class="codeblock"><table class="unknown"><thead><tr><td colspan="2" id="442399194"  class="head">Code</td></tr></thead><tbody><tr class="li1"><td><div id="442399194" style="height: 62px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
</pre></td><td class="de1"><pre class="de1">да_будет_свет
щежкащ.-ищн.я</pre></td></tr></table></div></td></tr></tbody></table></div>Очевидно, что таблицы для первого и второго преобразований могут различаться, причём, если я не ошибаюсь, не существует такой пары таблиц, которые для любого текста давали бы в результате не зашифрованный исходный текст, однако существуют пары таблиц, обеспечивающих такой результат для некоторых конкретных случаев (в частности, зашифровав с использованием вышеприведённой таблицы букву &quot;<b>а</b>&quot; мы получим... букву &quot;<b>а</b>&quot;).<br />
<font size="4">Применение</font><br />
Сам по себе этот шифр не отличается криптостойкостью, однако обладает весьма занятным свойством - его невозможно взломать путём простого частотного анализа. Это видно из примера выше: буква &quot;<b>щ</b>&quot; в зашифрованном тексте встречается три раза, причём если в первых двух случаях её можно сопоставить с буквой &quot;<b>д</b>&quot;, то в третьем случае ею зашифрована буква &quot;<b>с</b>&quot;. Следовательно, если обработанный подобным образом текст зашифровать в дальнейшем хотя бы XOR'ом, его взлом будет значительно затруднён.<br />
<font size="4">Реализация</font><br />
Используется стандартная таблица символов: номер=uInt16(символ)<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="108577356"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="108577356" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="de1"><pre class="de1"><span class="kw1">function</span> Mut<span class="br0">&#40;</span>c1<span class="sy1">,</span>c2<span class="sy1">:</span><span class="kw4">Char</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Char</span><span class="sy1">;</span><span class="kw1">inline</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">chr</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw4">Word</span><span class="br0">&#40;</span>c1<span class="br0">&#41;</span> <span class="kw1">shl</span> <span class="br0">&#40;</span><span class="kw3">SizeOf</span><span class="br0">&#40;</span><span class="kw4">Char</span><span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">4</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span><span class="kw4">Word</span><span class="br0">&#40;</span>c2<span class="br0">&#41;</span> <span class="kw1">shr</span> <span class="br0">&#40;</span><span class="kw3">SizeOf</span><span class="br0">&#40;</span><span class="kw4">Char</span><span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">4</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; <span class="coMULTI">{если</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp;c1=$1234</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp;c2=$abcd</span>
<span class="coMULTI">&nbsp; &nbsp;то</span>
<span class="coMULTI">&nbsp; &nbsp; &nbsp;Result=$34ab}</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> EnCrypt<span class="br0">&#40;</span>text<span class="sy1">:</span><span class="kw4">string</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">string</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; i<span class="sy1">:</span><span class="kw4">Integer</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="st0">''</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">2</span> <span class="kw1">to</span> <span class="kw3">length</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span> <span class="kw1">do</span>
&nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>Result<span class="sy3">+</span>Mut<span class="br0">&#40;</span>text<span class="br0">&#91;</span>i<span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy1">,</span>text<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>Result<span class="sy3">+</span>Mut<span class="br0">&#40;</span>text<span class="br0">&#91;</span><span class="kw3">length</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy1">,</span>text<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> DeCrypt<span class="br0">&#40;</span>text<span class="sy1">:</span><span class="kw4">string</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">string</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; i<span class="sy1">:</span><span class="kw4">Integer</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="st0">''</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">2</span> <span class="kw1">to</span> <span class="kw3">length</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span> <span class="kw1">do</span>
&nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>Result<span class="sy3">+</span>Mut<span class="br0">&#40;</span>text<span class="br0">&#91;</span>i<span class="sy3">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy1">,</span>text<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>Mut<span class="br0">&#40;</span>text<span class="br0">&#91;</span><span class="kw3">length</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy1">,</span>text<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy3">+</span>Result
<span class="kw1">end</span><span class="sy1">;</span></pre></td></tr></table></div></td></tr></tbody></table></div><div class="codeblock"><table class="cpp"><thead><tr><td colspan="2" id="543476260"  class="head">C++</td></tr></thead><tbody><tr class="li1"><td><div id="543476260" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="de1"><pre class="de1"><span class="co1">//c++ я знаю не очень, прошу понимающих проверить</span>
<span class="kw4">char</span> Mut<span class="br0">&#40;</span><span class="kw4">char</span> c1, <span class="kw4">char</span> c2<span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span>c1<span class="sy1">&gt;&gt;</span><span class="nu0">4</span><span class="br0">&#41;</span><span class="sy3">|</span><span class="br0">&#40;</span>c2<span class="sy1">&lt;&lt;</span><span class="nu0">4</span><span class="br0">&#41;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">char</span><span class="sy2">*</span> enCrypt<span class="br0">&#40;</span><span class="kw4">char</span><span class="sy2">*</span> text<span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; <span class="kw4">char</span><span class="sy2">*</span> tmp<span class="sy1">=</span><span class="kw3">new</span> <span class="kw4">char</span><span class="br0">&#91;</span><span class="kw3">strlen</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i<span class="sy1">=</span><span class="nu0">1</span><span class="sy4">;</span>text<span class="br0">&#91;</span>i<span class="sy2">+</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span>i<span class="sy2">++</span><span class="br0">&#41;</span>
&nbsp; &nbsp; tmp<span class="br0">&#91;</span>i<span class="sy2">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy1">=</span>Mut<span class="br0">&#40;</span>text<span class="br0">&#91;</span>i<span class="sy2">-</span><span class="nu0">1</span><span class="br0">&#93;</span>, text<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; tmp<span class="br0">&#91;</span><span class="kw3">strlen</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy2">-</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy1">=</span>Mut<span class="br0">&#40;</span>text<span class="br0">&#91;</span><span class="kw3">strlen</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy2">-</span><span class="nu0">1</span><span class="br0">&#93;</span>,text<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> tmp<span class="sy4">;</span>
<span class="br0">&#125;</span>
&nbsp;
<span class="kw4">char</span><span class="sy2">*</span> deCrypt<span class="br0">&#40;</span><span class="kw4">char</span><span class="sy2">*</span> text<span class="br0">&#41;</span>
<span class="br0">&#123;</span>
&nbsp; <span class="kw4">char</span><span class="sy2">*</span> tmp<span class="sy1">=</span><span class="kw3">new</span> <span class="kw4">char</span><span class="br0">&#91;</span><span class="kw3">strlen</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="br0">&#93;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">for</span><span class="br0">&#40;</span><span class="kw4">int</span> i<span class="sy1">=</span><span class="nu0">1</span><span class="sy4">;</span>text<span class="br0">&#91;</span>i<span class="sy2">+</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy4">;</span>i<span class="sy2">++</span><span class="br0">&#41;</span>
&nbsp; &nbsp; tmp<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">=</span>Mut<span class="br0">&#40;</span>text<span class="br0">&#91;</span>i<span class="sy2">-</span><span class="nu0">1</span><span class="br0">&#93;</span>, text<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; tmp<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy1">=</span>Mut<span class="br0">&#40;</span>text<span class="br0">&#91;</span><span class="kw3">strlen</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span><span class="sy2">-</span><span class="nu0">1</span><span class="br0">&#93;</span>,text<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy4">;</span>
&nbsp; <span class="kw1">return</span> tmp<span class="sy4">;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/164.html</guid>
		</item>
		<item>
			<title>Модуль для хранения пароля</title>
			<link>https://www.cyberforum.ru/blogs/191506/36.html</link>
			<pubDate>Sun, 12 Feb 2012 16:52:26 GMT</pubDate>
			<description>Хранение пароля в виде самописного восьмибитного хэша (так что криптостойкость не особо велика),...</description>
			<content:encoded><![CDATA[<div>Хранение пароля в виде самописного восьмибитного хэша (так что криптостойкость не особо велика), реализованы функции записи в файл, сравнения и изменения с запросом старого пароля.<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="906041560"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="906041560" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
</pre></td><td class="de1"><pre class="de1"><span class="kw1">unit</span> SubRosa<span class="sy1">;</span>
&nbsp;
<span class="coMULTI">{</span>
<span class="coMULTI">+----------------------+</span>
<span class="coMULTI">|Примеры использования:|</span>
<span class="coMULTI">+----------------------+------------------------+</span>
<span class="coMULTI">|... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span>
<span class="coMULTI">| &nbsp;Write('Введите старый пароль: '); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span>
<span class="coMULTI">| &nbsp;ReadLn(pass); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span>
<span class="coMULTI">| &nbsp;Write('Введите новый пароль: '); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span>
<span class="coMULTI">| &nbsp;ReadLn(newpass); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span>
<span class="coMULTI">| &nbsp;if bTesseraMuto('pass.bin',pass,newpass) then|</span>
<span class="coMULTI">| &nbsp; &nbsp;WriteLn('Пароль успешно изменён!'); &nbsp; &nbsp; &nbsp; &nbsp;|</span>
<span class="coMULTI">|... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span>
<span class="coMULTI">+------------------------------------------+----+</span>
<span class="coMULTI">|... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span>
<span class="coMULTI">| &nbsp;Write('Введите пароль: '); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span>
<span class="coMULTI">| &nbsp;ReadLn(pass); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span>
<span class="coMULTI">| &nbsp;if bTesseraComparo('pass.bin',pass) then|</span>
<span class="coMULTI">| &nbsp; &nbsp;begin &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span>
<span class="coMULTI">| &nbsp; &nbsp; &nbsp;WriteLn('Пароль принят!'); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|</span>
<span class="coMULTI">|... &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |</span>
<span class="coMULTI">+------------------------------------------+</span>
<span class="coMULTI">}</span>
&nbsp;
<span class="kw1">interface</span>
&nbsp;
<span class="kw1">type</span>
&nbsp; dtString<span class="sy3">=</span><span class="kw4">WideString</span><span class="sy1">;</span>
&nbsp; dtChar<span class="sy3">=</span><span class="kw4">WideChar</span><span class="sy1">;</span>
&nbsp;
<span class="co1">/// &nbsp; &nbsp; &lt;summary&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Процедура записи сигнатуры ключа в файл</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/summary&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;param name=&quot;sThesaurum&quot;&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Имя файла хранилища</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/param&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;param name=&quot;sTessera&quot;&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; &nbsp;Ключ</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/param&gt;</span>
<span class="kw1">procedure</span> vTesseraHabio<span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> sTessera<span class="sy1">:</span>dtString<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;summary&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Функция сравнения сигнатуры ключа с сигнатурой из*хранилища</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/summary&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;param name=&quot;sThesaurum&quot;&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Имя файла хранилища</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/param&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;param name=&quot;sTessera&quot;&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Ключ</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/param&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;returns&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Возвращает истину, если сигнатуры совпадают</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/returns&gt;</span>
<span class="kw1">function</span> bTesseraComparo<span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> sTessera<span class="sy1">:</span>dtString<span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Boolean</span><span class="sy1">;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;summary&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Функция перезаписи сигнатуры хранилища</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/summary&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;param name=&quot;sThesaurum&quot;&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Имя файла хранилища</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/param&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;param name=&quot;sPriscusTessera&quot;&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Старый ключ</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/param&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;param name=&quot;sNovusTessera&quot;&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Новый ключ</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/param&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;returns&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Возвращает истину, если сигнатура была перезаписана</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/returns&gt;</span>
<span class="kw1">function</span> bTesseraMuto<span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> sPriscusTessera<span class="sy1">,</span> sNovusTessera<span class="sy1">:</span>dtString<span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Boolean</span><span class="sy1">;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;summary&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Функция вычисления сигнатуры строки</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/summary&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;param name=&quot;sVersus&quot;&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; Строка для вычисления сигнатуры</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/param&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &lt;returns&gt;</span>
<span class="co1">/// &nbsp; &nbsp; &nbsp; $65daec1d8e6f466 - сигнатура пустой строки</span>
<span class="co1">/// &nbsp; &nbsp; &lt;/returns&gt;</span>
<span class="kw1">function</span> lliVerificatus<span class="br0">&#40;</span>sVersus<span class="sy1">:</span>dtString<span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">implementation</span>
&nbsp;
<span class="kw1">uses</span>
&nbsp; SysUtils<span class="sy1">,</span>
&nbsp; Classes<span class="sy1">;</span>
&nbsp;
<span class="kw1">const</span>
&nbsp; lliUnificatus<span class="sy1">:</span><span class="kw4">Int64</span><span class="sy3">=</span><span class="re0">$65daec1d8e6f466</span><span class="sy1">;</span> &nbsp;<span class="co1">//если честно, выбрано случайно</span>
&nbsp; lliUMultiplicator<span class="sy1">:</span><span class="kw4">Int64</span><span class="sy3">=</span>lliUnificatus <span class="kw1">div</span> <span class="re0">$f8</span><span class="sy1">;</span>
&nbsp; lliUAdditor<span class="sy1">:</span><span class="kw4">Int64</span><span class="sy3">=</span>lliUnificatus <span class="kw1">div</span> <span class="re0">$1e3</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">var</span>
&nbsp; lliMultiplicator<span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span>
&nbsp; lliAdditor<span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">type</span>
&nbsp; Mass8<span class="sy3">=</span><span class="kw1">array</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="sy1">..</span><span class="nu0">8</span><span class="br0">&#93;</span> <span class="kw1">of</span> <span class="kw4">Byte</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">procedure</span> vTesseraHabio<span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> sTessera<span class="sy1">:</span>dtString<span class="br0">&#41;</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; oPlica<span class="sy1">:</span>TFileStream<span class="sy1">;</span>
&nbsp; lliSignificatio<span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span>
&nbsp; m8AliusSignificatio<span class="sy1">:</span>Mass8 absolute lliSignificatio<span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; <span class="kw1">if</span> <span class="kw1">not</span> <span class="kw3">DirectoryExists</span><span class="br0">&#40;</span><span class="kw3">ExtractFilePath</span><span class="br0">&#40;</span>sThesaurum<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw3">ForceDirectories</span><span class="br0">&#40;</span><span class="kw3">ExtractFilePath</span><span class="br0">&#40;</span>sThesaurum<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">try</span>
&nbsp; &nbsp; oPlica<span class="sy1">:</span><span class="sy3">=</span>TFileStream<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> fmCreate<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; lliSignificatio<span class="sy1">:</span><span class="sy3">=</span>lliVerificatus<span class="br0">&#40;</span>sTessera<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; oPlica<span class="sy1">.</span><span class="kw1">Write</span><span class="br0">&#40;</span>m8AliusSignificatio<span class="sy1">,</span> <span class="nu0">8</span><span class="br0">&#41;</span>
&nbsp; <span class="kw1">finally</span>
&nbsp; &nbsp; <span class="kw1">if</span> oPlica&lt;&gt;<span class="kw1">nil</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; oPlica<span class="sy1">.</span><span class="me1">Free</span>
&nbsp; <span class="kw1">end</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> bTesseraComparo<span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> sTessera<span class="sy1">:</span>dtString<span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Boolean</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; oPlica<span class="sy1">:</span>TFileStream<span class="sy1">;</span>
&nbsp; lliSignificatio<span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span>
&nbsp; m8AliusSignificatio<span class="sy1">:</span>Mass8 absolute lliSignificatio<span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw2">false</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> <span class="kw1">not</span> <span class="kw3">FileExists</span><span class="br0">&#40;</span>sThesaurum<span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; Exit<span class="sy1">;</span>
&nbsp; <span class="kw1">try</span>
&nbsp; &nbsp; oPlica<span class="sy1">:</span><span class="sy3">=</span>TFileStream<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> fmOpenRead<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; oPlica<span class="sy1">.</span><span class="kw1">Read</span><span class="br0">&#40;</span>m8AliusSignificatio<span class="sy1">,</span> <span class="nu0">8</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>lliSignificatio<span class="sy3">=</span>lliVerificatus<span class="br0">&#40;</span>sTessera<span class="br0">&#41;</span>
&nbsp; <span class="kw1">finally</span>
&nbsp; &nbsp; <span class="kw1">if</span> oPlica&lt;&gt;<span class="kw1">nil</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; oPlica<span class="sy1">.</span><span class="me1">Free</span>
&nbsp; <span class="kw1">end</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> bTesseraMuto<span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> sPriscusTessera<span class="sy1">,</span> sNovusTessera<span class="sy1">:</span>dtString<span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Boolean</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; oPlica<span class="sy1">:</span>TFileStream<span class="sy1">;</span>
&nbsp; lliSignificatio<span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span>
&nbsp; m8AliusSignificatio<span class="sy1">:</span>Mass8 absolute lliSignificatio<span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; <span class="kw1">if</span> <span class="kw1">not</span> <span class="kw3">FileExists</span><span class="br0">&#40;</span>sThesaurum<span class="br0">&#41;</span> <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>sPriscusTessera<span class="sy3">=</span><span class="st0">''</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> Result <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; &nbsp; vTesseraHabio<span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> sNovusTessera<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; Exit
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> sPriscusTessera<span class="sy3">=</span>sNovusTessera <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span>bTesseraComparo<span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> sPriscusTessera<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">try</span>
&nbsp; &nbsp; oPlica<span class="sy1">:</span><span class="sy3">=</span>TFileStream<span class="sy1">.</span><span class="me1">Create</span><span class="br0">&#40;</span>sThesaurum<span class="sy1">,</span> fmOpenReadWrite<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; oPlica<span class="sy1">.</span><span class="kw1">Read</span><span class="br0">&#40;</span>m8AliusSignificatio<span class="sy1">,</span><span class="nu0">8</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>lliSignificatio<span class="sy3">=</span>lliVerificatus<span class="br0">&#40;</span>sPriscusTessera<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="kw1">if</span> Result <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; &nbsp; oPlica<span class="sy1">.</span><span class="kw3">Seek</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="sy1">,</span>soBeginning<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; oPlica<span class="sy1">.</span><span class="kw1">Write</span><span class="br0">&#40;</span>Mass8<span class="br0">&#40;</span>lliVerificatus<span class="br0">&#40;</span>sNovusTessera<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">,</span> <span class="nu0">8</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">end</span>
&nbsp; <span class="kw1">finally</span>
&nbsp; &nbsp; <span class="kw1">if</span> oPlica&lt;&gt;<span class="kw1">nil</span> <span class="kw1">then</span>
&nbsp; &nbsp; &nbsp; oPlica<span class="sy1">.</span><span class="me1">Free</span>
&nbsp; <span class="kw1">end</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> lliAccidentalis<span class="br0">&#40;</span>cSignum<span class="sy1">:</span>dtChar<span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span><span class="kw1">inline</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">Ord</span><span class="br0">&#40;</span>cSignum<span class="br0">&#41;</span><span class="sy3">*</span>lliMultiplicator<span class="sy3">+</span>lliAdditor
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> lliPermutatio<span class="br0">&#40;</span>lliPrimus<span class="sy1">,</span> lliSecundus<span class="sy1">:</span><span class="kw4">Int64</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span><span class="kw1">inline</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="br0">&#40;</span><span class="br0">&#40;</span>lliPrimus <span class="kw1">shl</span> <span class="nu0">16</span><span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span>lliSecundus <span class="kw1">shr</span> <span class="nu0">48</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">xor</span>
&nbsp; <span class="br0">&#40;</span><span class="br0">&#40;</span>lliPrimus <span class="kw1">shr</span> <span class="nu0">48</span><span class="br0">&#41;</span> <span class="kw1">or</span> <span class="br0">&#40;</span>lliSecundus <span class="kw1">shl</span> <span class="nu0">16</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">function</span> lliVerificatus<span class="br0">&#40;</span>sVersus<span class="sy1">:</span>dtString<span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">Int64</span><span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; iOrigo<span class="sy1">,</span> iIndex<span class="sy1">:</span><span class="kw4">Integer</span><span class="sy1">;</span>
<span class="kw1">begin</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>lliUnificatus<span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> sVersus<span class="sy3">=</span><span class="st0">''</span> <span class="kw1">then</span>
&nbsp; &nbsp; Exit<span class="sy1">;</span>
&nbsp; iOrigo<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">Length</span><span class="br0">&#40;</span>sVersus<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; lliAdditor<span class="sy1">:</span><span class="sy3">=</span>lliAccidentalis<span class="br0">&#40;</span><span class="kw3">chr</span><span class="br0">&#40;</span>iOrigo<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy3">+</span><span class="nu0">1</span><span class="sy1">;</span>
&nbsp; lliMultiplicator<span class="sy1">:</span><span class="sy3">=</span>lliAccidentalis<span class="br0">&#40;</span><span class="kw3">chr</span><span class="br0">&#40;</span>iOrigo<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy3">-</span><span class="nu0">1</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> lliMultiplicator<span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">then</span>
&nbsp; &nbsp; lliMultiplicator<span class="sy1">:</span><span class="sy3">=</span>lliUMultiplicator<span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> iIndex<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span> <span class="kw1">to</span> iOrigo <span class="kw1">do</span>
&nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span>lliPermutatio<span class="br0">&#40;</span>Result<span class="sy3">+</span>iIndex<span class="sy1">,</span> lliAccidentalis<span class="br0">&#40;</span>sVersus<span class="br0">&#91;</span>iIndex<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; lliMultiplicator<span class="sy1">:</span><span class="sy3">=</span>lliUMultiplicator<span class="sy1">;</span>
&nbsp; lliAdditor<span class="sy1">:</span><span class="sy3">=</span>lliUAdditor
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">initialization</span>
&nbsp; lliMultiplicator<span class="sy1">:</span><span class="sy3">=</span>lliUMultiplicator<span class="sy1">;</span>
&nbsp; lliAdditor<span class="sy1">:</span><span class="sy3">=</span>lliUAdditor
<span class="kw1">end</span><span class="sy1">.</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/36.html</guid>
		</item>
		<item>
			<title>Модуль рисования почтового индекса на канве</title>
			<link>https://www.cyberforum.ru/blogs/191506/35.html</link>
			<pubDate>Sun, 12 Feb 2012 16:38:40 GMT</pubDate>
			<description>Возможно, кому-нибудь пригодится. Правда, чтобы добиться совпадения рисунка с пунктиром на конверте...</description>
			<content:encoded><![CDATA[<div>Возможно, кому-нибудь пригодится. Правда, чтобы добиться совпадения рисунка с пунктиром на конверте придётся попотеть с коэффициентами.<br />
<div class="codeblock"><table class="delphi"><thead><tr><td colspan="2" id="576132652"  class="head">Delphi</td></tr></thead><tbody><tr class="li1"><td><div id="576132652" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
</pre></td><td class="de1"><pre class="de1"><span class="kw1">unit</span> ZipCode<span class="sy1">;</span>
&nbsp;
<span class="kw1">interface</span>
&nbsp;
<span class="kw1">uses</span>
&nbsp; Math<span class="sy1">,</span> Graphics<span class="sy1">;</span>
&nbsp;
<span class="co1">/// &lt;summary&gt;</span>
<span class="co1">/// &nbsp; Вывод на канву почтового индекса</span>
<span class="co1">/// &lt;/summary&gt;</span>
<span class="co1">/// &lt;param name=&quot;Canvas:TCanvas&quot;&gt;</span>
<span class="co1">/// &nbsp; Указатель на экземпляр класса TCanvas, на котором будет производится</span>
<span class="co1">/// &nbsp; вывод кода</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;param name=&quot;x:Integer&quot;&gt;</span>
<span class="co1">/// &nbsp; Абсцисса левого верхнего угла кода</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;param name=&quot;y:Integer&quot;&gt;</span>
<span class="co1">/// &nbsp; Ордината левого верхнего угла кода</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;param name=&quot;ZipCode:Integer&quot;&gt;</span>
<span class="co1">/// &nbsp; Собственно код</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;param name=&quot;WidthSimbol:Integer&quot;&gt;</span>
<span class="co1">/// &nbsp; Ширина каждого символа</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;param name=&quot;SimbolCount:Integer&quot;&gt;</span>
<span class="co1">/// &nbsp; Количество символов (0 - автоматически)</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;param name=&quot;SpaceWidth:Extended&quot;&gt;</span>
<span class="co1">/// &nbsp; Отношение ширины пробела между символами к ширине символа</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;param name=&quot;SimbolHeight:Extended&quot;&gt;</span>
<span class="co1">/// &nbsp; Отношение высоты символа к ширине символа</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;param name=&quot;LineWidth:Integer&quot;&gt;</span>
<span class="co1">/// &nbsp; Толщина линий символов</span>
<span class="co1">/// &lt;/param&gt;</span>
<span class="co1">/// &lt;returns&gt;</span>
<span class="co1">/// &nbsp; Возвращает истину, если вывод был произведён без ошибок</span>
<span class="co1">/// &lt;/returns&gt;</span>
<span class="kw1">function</span> GraphZipCode<span class="br0">&#40;</span>Canvas<span class="sy1">:</span>TCanvas<span class="sy1">;</span>x<span class="sy1">,</span>y<span class="sy1">,</span>ZipCode<span class="sy1">,</span>WidthSimbol<span class="sy1">:</span><span class="kw4">Integer</span><span class="sy1">;</span>SimbolCount<span class="sy1">:</span><span class="kw4">Integer</span><span class="sy3">=</span><span class="nu0">8</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;SpaceWidth<span class="sy1">:</span><span class="kw4">Extended</span><span class="sy3">=</span><span class="nu0">0.33</span><span class="sy1">;</span>SimbolHeight<span class="sy1">:</span><span class="kw4">Extended</span><span class="sy3">=</span><span class="nu0">2</span><span class="sy1">;</span>LineWidth<span class="sy1">:</span><span class="kw4">Integer</span><span class="sy3">=</span><span class="nu0">3</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">boolean</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">implementation</span>
&nbsp;
<span class="kw1">function</span> GraphZipCode<span class="sy1">;</span>
<span class="kw1">var</span>
&nbsp; tx<span class="sy1">,</span>ty<span class="sy1">,</span>dx<span class="sy1">,</span>dy<span class="sy1">,</span>dxw<span class="sy1">,</span>i<span class="sy1">,</span>tnb<span class="sy1">,</span>lenc<span class="sy1">:</span><span class="kw4">Integer</span><span class="sy1">;</span>
&nbsp; tmp<span class="sy1">:</span><span class="kw1">array</span> <span class="kw1">of</span> <span class="kw4">integer</span><span class="sy1">;</span>
&nbsp;
&nbsp; <span class="kw1">function</span> OneZip<span class="br0">&#40;</span>n<span class="sy1">:</span><span class="kw4">Integer</span><span class="br0">&#41;</span><span class="sy1">:</span><span class="kw4">boolean</span><span class="sy1">;</span><span class="co1">//рисование цифры</span>
&nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; <span class="kw1">case</span> n <span class="kw1">of</span>
&nbsp; &nbsp; <span class="nu0">0</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">1</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">2</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; lineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">3</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">4</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">5</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">6</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">7</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">8</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; <span class="nu0">9</span><span class="sy1">:</span><span class="kw1">with</span> Canvas <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; MoveTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy3">+</span>dx<span class="sy1">,</span>ty<span class="sy3">+</span><span class="br0">&#40;</span>dy <span class="kw1">div</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; LineTo<span class="br0">&#40;</span>tx<span class="sy1">,</span>ty<span class="sy3">+</span>dy<span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span>
&nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span><span class="kw2">false</span><span class="br0">&#41;</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; &nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw2">true</span>
&nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">begin</span>
<span class="kw1">try</span>
&nbsp; tx<span class="sy1">:</span><span class="sy3">=</span>x<span class="sy1">;</span>
&nbsp; ty<span class="sy1">:</span><span class="sy3">=</span>y<span class="sy1">;</span> &nbsp;<span class="co1">//точка начала рисования</span>
&nbsp; dx<span class="sy1">:</span><span class="sy3">=</span>WidthSimbol<span class="sy1">;</span> &nbsp;<span class="co1">//ширина символа</span>
&nbsp; dy<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">round</span><span class="br0">&#40;</span>WidthSimbol<span class="sy3">*</span>SimbolHeight<span class="br0">&#41;</span><span class="sy1">;</span> &nbsp;<span class="co1">//высота символа</span>
&nbsp; dxw<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">round</span><span class="br0">&#40;</span>dx<span class="sy3">*</span><span class="br0">&#40;</span><span class="nu0">1</span><span class="sy3">+</span>SpaceWidth<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy1">;</span> &nbsp;<span class="co1">//ширина символа с пробелом после него</span>
&nbsp; <span class="kw1">if</span> ZipCode&lt;&gt;<span class="nu0">0</span> <span class="kw1">then</span>
&nbsp; &nbsp; lenc<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">trunc</span><span class="br0">&#40;</span><span class="kw3">Log10</span><span class="br0">&#40;</span><span class="kw3">Abs</span><span class="br0">&#40;</span>ZipCode<span class="br0">&#41;</span><span class="sy3">*</span><span class="nu0">10</span><span class="br0">&#41;</span><span class="br0">&#41;</span> &nbsp;<span class="co1">//число цифр в коде</span>
&nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; lenc<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">1</span><span class="sy1">;</span>
&nbsp; <span class="kw1">if</span> SimbolCount<span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">then</span>
&nbsp; &nbsp; SimbolCount<span class="sy1">:</span><span class="sy3">=</span>lenc<span class="sy1">;</span> &nbsp;<span class="co1">//число цифр, которые будут выведены</span>
&nbsp; <span class="kw1">if</span> lenc&gt;SimbolCount <span class="kw1">then</span>
&nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span><span class="kw2">false</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; Canvas<span class="sy1">.</span><span class="me1">Pen</span><span class="sy1">.</span><span class="me1">Width</span><span class="sy1">:</span><span class="sy3">=</span>LineWidth<span class="sy1">;</span> &nbsp;<span class="co1">//ширина пера</span>
&nbsp; <span class="kw3">SetLength</span><span class="br0">&#40;</span>tmp<span class="sy1">,</span>SimbolCount<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; tnb<span class="sy1">:</span><span class="sy3">=</span><span class="kw3">abs</span><span class="br0">&#40;</span>ZipCode<span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span>SimbolCount<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">downto</span> <span class="nu0">0</span> <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span> &nbsp;<span class="co1">//заполнение массива цифрами кода</span>
&nbsp; &nbsp; &nbsp; tmp<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="sy1">:</span><span class="sy3">=</span>tnb <span class="kw1">mod</span> <span class="nu0">10</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; tnb<span class="sy1">:</span><span class="sy3">=</span>tnb <span class="kw1">div</span> <span class="nu0">10</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; <span class="kw1">for</span> i<span class="sy1">:</span><span class="sy3">=</span><span class="nu0">0</span> <span class="kw1">to</span> SimbolCount<span class="sy3">-</span><span class="nu0">1</span> <span class="kw1">do</span>
&nbsp; &nbsp; <span class="kw1">begin</span>
&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="kw1">not</span> OneZip<span class="br0">&#40;</span>tmp<span class="br0">&#91;</span>i<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="kw1">then</span> &nbsp;<span class="co1">//собственно вывод цифры</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">Exit</span><span class="br0">&#40;</span><span class="kw2">false</span><span class="br0">&#41;</span><span class="sy1">;</span>
&nbsp; &nbsp; &nbsp; tx<span class="sy1">:</span><span class="sy3">=</span>tx<span class="sy3">+</span>dxw &nbsp;<span class="co1">//сдвиг позиции</span>
&nbsp; &nbsp; <span class="kw1">end</span><span class="sy1">;</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw2">true</span> <span class="co1">//если истина, то всё хорошо</span>
<span class="kw1">except</span>
&nbsp; Result<span class="sy1">:</span><span class="sy3">=</span><span class="kw2">false</span>
<span class="kw1">end</span>
<span class="kw1">end</span><span class="sy1">;</span>
&nbsp;
<span class="kw1">end</span><span class="sy1">.</span></pre></td></tr></table></div></td></tr></tbody></table></div></div>

]]></content:encoded>
			<dc:creator><![CDATA[Ales'hon'ne]]></dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/191506/35.html</guid>
		</item>
	</channel>
</rss>
