forked from Kitware/VTK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
faq.russian.html
224 lines (162 loc) · 14.6 KB
/
faq.russian.html
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
<html>
<head>
<title>ALGLIB FAQ</title>
<style type="text/css">
<!--
h1 { font-family: Tahoma,sans-serif; font-size : larger; }
h2 { font-family: Arial,sans-serif; font-size : 11pt; }
h3 { font-family: Arial,sans-serif; font-size : 9pt; }
.cond { color:blue; }
.const { color:#222222; }
.func { color:#111111; }
.smalltext { font-size : 10pt; }
-->
</style>
</head>
<body>
<p align=justify>
<b>C++</b><br>
<span class=smalltext>
<a href="#stdafx">Для чего служит пустой файл <code>stdafx.h</code>?</a><br>
<a href="#cpparrays">Как организована работа с массивами в С++?</a><br>
<a href="#cpparrays2">Почему для обращения к массивам используются не квадратные скобки, а круглые?</a><br>
<a href="#cpp64">Будет ли пакет ALGLIB работать в 64-битной среде?</a><br>
</span><br>
<b>Delphi</b><br>
<span class=smalltext>
<a href="#forwhile">Почему везде вместо цикла for используется цикл while?</a><br>
<a href="#dac">Для чего служит функция <code>DynamicArrayCopy</code>?</a><br>
</span><br>
<b>Вопросы по алгоритмам на Visual Basic</b><br>
<span class=smalltext>
<a href="#vbver">На какую именно версию языка Visual Basic транслируются алгоритмы?</a><br>
<a href="#vbnet">Программы с сайта будут работать в VB.NET?</a><br>
<a href="#vbgoto">Почему в некоторых программах используется оператор goto?</a><br>
</span><br>
<b>Общие вопросы по исходным кодам</b><br>
<span class=smalltext>
<a href="#ap">Что такое библиотека AP?</a><br>
<a href="#ablas">Что такое библиотека ABLAS?</a><br>
<a href="#arr1">Некоторые алгоритмы начинают нумерацию элементов массивов с единицы. Так уже никто не делает!</a><br>
<a href="#arrnz">Язык программирования YYY не поддерживает массивы, нумерация которых начинается не с ноля. Что в этом случае?</a><br>
</span><br>
<b>Общие вопросы по проекту</b><br>
<span class=smalltext>
<a href="#project">В чем цель проекта ALGLIB?</a><br>
<a href="#diff">Чем проект ALGLIB отличается от других аналогичных проектов?</a><br>
<a href="#authors">Кто авторы проекта?</a><br>
<a href="#old">Какое отношение проект имеет к сайтам alglib.chat.ru и alglib.dore.ru?</a><br>
<a href="#manual">Какое отношение проект имеет к проекту MANUAL.RU?</a><br>
<a href="#algopascal">Что такое "алгоритмический Паскаль" (AlgoPascal)?</a><br>
<a href="#bls">Что такое "редактор блок-схем"?</a><br>
<a href="#other">А где алгоритмы для шифрования, рисования графиков, картинок в OpenGL и т.д.?</a><br>
</span><br>
</p>
<hr width=80% size=1>
<h1>C++</h1>
<a name=stdafx><h2>Для чего служит пустой файл <code>stdafx.h</code>?</h2></a>
<p align=justify>
MSVC и некоторые другие компиляторы требуют, чтобы в коде программы присутствовала директива <code>#include <stdafx.h></code>, служащая для управления прекомпилированными заголовками, и автоматически создают файл <code>stfafx.h</code> при генерации нового проекта. Однако некоторые компиляторы (например, BCB) используют другие средства для управления прекомпилированными заголовками. При этом директива <code>#include <stdafx.h></code> сама по себе не мешает их работе, однако отсутствие файла с таким именем приводит к ошибке компиляции. Пустой файл <code>stfafx.h</code> служит для того, чтобы избежать этой ошибки. Если вашей средой разработки уже создан файл с таким именем, оставьте его без изменений.
</p>
<a name=cpparrays><h2>Как организована работа с массивами в С++?</h2></a>
<p align=justify>
Поскольку поддержка динамических массивов со стороны языка С++ отсутствует (<b>update:</b> <i>я знаю про указатели и динамическое выделение памяти, но это не совсем то, что необходимо</i>), то были разработаны классы-шаблоны для работы с одномерными и двухмерными массивами. Необходимый исходный код и описание находятся в стандартной библиотеке AP, которая прилагается к каждому архиву с исходниками на C++. Обратите внимание, что массивы в этой библиотеке начинают нумерацию элементов не с 0, а с произвольного числа по выбору программиста.
</p>
<a name=cpparrays2><h2>Почему для обращения к массивам используются не квадратные скобки, а круглые?</h2></a>
<p align=justify>
Представьте себе, что вы обращаетесь к элементу матрицы а в привычной нотации: <code>a[x][y]</code> вместо <code>a(x,y)</code>. На самом деле здесь спрятан не один вызов оператора индекса, а два. Первый из них - индексация матрицы <code>a</code> по <code>x</code>, которая возвращает ссылку на какую-то временную структуру, описывающую строку матрицы. Второй - индексация временной структуры по <code>y</code>, которая возвращает ссылку на требуемый элемент. Обращение через перегрузку круглых скобок существенно эффективнее, поскольку не требуется создание временных структур.
</p>
<a name=cpp64><h2>Будет ли пакет ALGLIB работать в 64-битной среде?</h2></a>
<p align=justify>
Пакет ALGLIB не тестировался в 64-битной среде.
</p>
<p align=justify>
Вместе с тем, сам пакет и используемая им библиотека AP/C++ не содержат кода, в котором явно выдвигались бы какие-то предположения относительно характера среды, в которой осуществляется работа. Таким образом, компиляция и использование пакета ALGLIB в 64-битной среде теоретически не должны вызывать проблем, если не используются дополнительные библиотеки (такие, как ABLAS, которая на момент написания этих строк существует только в 32-битном варианте).
</p>
<h1>Delphi</h1>
<a name=forwhile><h2>Почему везде вместо цикла <i>for</i> используется цикл <i>while</i>?</h2></a>
<p align=justify>
Причиной тому некоторые особенности реализации цикла <b>for</b> в Delphi. Если цикл не выполнялся не разу, то во многих языках программирования управляющая переменная цикла содержит стартовое значение. В Delphi если цикл не выполнялся не разу, то управляющая переменная цикла не изменяется. Однажды я встретил исходник, в котором эта разница играла большую роль, и решил заменить цикл <b>for</b> в программах на Delphi циклом <b>while</b>, который полностью совпадает по своему поведению с другими языками.
</p>
<a name=dac><h2>Для чего служит функция <code>DynamicArrayCopy</code>?</h2></a>
<p align=justify>
В Delphi динамические массивы являются ссылочными типами, т.е. если параметр-массив передается по значению, то при этом не происходит копирования массива. Для эмуляции передачи параметра-массива по значению используется функция <code>DynamicArrayCopy</code>. Она принимает в качестве аргумента динамический массив и возвращает копию этого массива. Присваивание вида <code>A:=DynamicArrayCopy(A)</code> заменяет ссылку на оригинальный массив ссылкой на его копию.
</p>
<h1>Вопросы по алгоритмам на Visual Basic</h1>
<a name=vbver><h2>На какую именно версию языка Visual Basic транслируются алгоритмы?</h2></a>
<p align=justify>
Алгоритмы транслируются на VBA, однако в целом совместимы с VB6.
</p>
<a name=vbnet><h2>Программы с сайта будут работать в VB.NET?</h2></a>
<p align=justify>
Без портирования - нет.
</p>
<a name=vbgoto><h2>Почему в некоторых программах используется оператор goto?</h2></a>
<p align=justify>
Во многих языках программирования есть управляющий оператор <b>continue</b>, но в VB он отсутствует. Я не знаю, чем объяснить этот факт. Так вот, в программах на AlgoPascal этот оператор время от времени появляется. Оператор <b>goto</b> используется в качестве замены ему, осуществляя досрочный переход к очередной итерации цикла.
</p>
<h1>Общие вопросы по исходным кодам</h1>
<a name=ap><h2>Что такое библиотека AP?</h2></a>
<p align=justify>
Библиотека AP - это общее название набора библиотек на нескольких языках программирования, решающих низкоуровневые задачи, привязанные к специфике конкретного языка программирования. Библиотека решает такие задачи, как работа с динамическими одномерными и многомерными массивами в языках, не поддерживающих этот тип данных, содержит реализации базовых алгоритмов линейной алгебры и т.д. Библиотека распространяется в виде исходных кодов под лицензией BSD. Библиотека автоматически прикрепляется к каждому архиву с алгоритмами, доступному для скачивания с сайта. Последняя версия библиотеки доступна для скачивания по адресу <a href="http://alglib.sources.ru/translator/aplib.zip">http://alglib.sources.ru/translator/aplib.zip</a> или <a href="http://www.alglib.net/translator/aplib.zip">http://www.alglib.net/translator/aplib.zip</a>
</p>
<a name=ablas><h2>Что такое библиотека ABLAS?</h2></a>
<p align=justify>
ABLAS - это оптимизированная реализация базовых алгоритмов линейной алгебры, написанная на ассемблере. Чтобы использовать ABLAS, достаточно скопировать динамически загружаемый файл библиотеки в одну из системных папок или в папку с программой, а также включить поддержку ABLAS (как указано в интструкции к библиотеке). При запуске программы, использующей пакет ALGLIB, осуществляется автоматическое обнаружение и подключение библиотеки ABLAS. В случае отсутствия ABLAS используется стандартная реализация операций линейной алгебры, написанная на языке высокого уровня. На странице <a href="http://www.alglib.net/projects/ablas/">http://www.alglib.net/projects/ablas/</a> (или <a href="http://alglib.sources.ru/projects/ablas/">http://alglib.sources.ru/projects/ablas/</a> для русской версии сайта) находятся описание библиотеки, список поддерживаемых платформ и языков программирования, а также исходные коды и прекомпилированные двоичные файлы.
</p>
<a name=arr1><h2>Некоторые алгоритмы начинают нумерацию элементов массивов с единицы. Так уже никто не делает!</h2></a>
<p align=justify>
Делают. Скажем, библиотека netlib.org содержит мегабайты вполне работоспособного кода на Фортране, в котором принято начинать нумерацию с единицы. В современном мире принято начинать нумерацию с 0, но многие уникальные алгоритмы широко распространяются именно в старой редакции. На данный момент большинство алгоритмов приведено к современной, базирующейся на ноле системе нумерации, однако небольшое количество очень полезных алгоритмов использует старую систему. В перспективе все они будут приведены к новой системе, однако пока приходится использовать их, как есть.
</p>
<a name=arrnz><h2>Язык программирования YYY не поддерживает массивы, нумерация которых начинается не с ноля. Что в этом случае?</h2></a>
<p align=justify>
В этом случае элементы, содержащие ноль в одном из индексов, не будут использоваться. Например, если подпрограмма ожидает получить массив размером 2x2, нумерация которого начинается с 1 (т.е. индексы элементов имеют вид <code>[1..2,1..2]</code>), то в неё следует передать массив с нумерацией элементов <code>[0..2,0..2]</code>. Это не самое красивое решение, но оно работает.
</p>
<h1>Общие вопросы по проекту</h1>
<a name=project><h2>В чем цель проекта ALGLIB?</h2></a>
<p align=justify>
Создать удобную в использовании многоязыковую коллекцию алгоритмов для решения проблем в области численного анализа (в основном) и некоторых других задач.
</p>
<a name=diff><h2>Чем проект ALGLIB отличается от других аналогичных проектов?</h2></a>
<p align=justify>
Пакет ALGLIB:
</p>
<ul>
<li>это многоязыковый проект. Особенность проекта - то, что каждый алгоритм представлен программами на нескольких языках, и список языков один и тот же для всех алгоритмов. Это главное преимущество сайта перед другими подобными коллекциями - один алгоритм, несколько языков, идентичная функциональность на каждом языке.</li>
<li>это коллекция программ. Иногда посетители жалуются на то, что на сайте почти нет описаний используемых алгоритмов. Да, их почти нет - но потому что ALGLIB является коллекцией именно программ, а не описаний используемых алгоритмов. На всё сил не хватит, увы.</li>
<li>специализируется на численном анализе. В рамках проекта представлены и некоторые другие направления (например, есть алгоритмы сортировки и работы с графикой), но приоритетом является именно численный анализ.</li>
<li>легко использовать. Для использования пакета ALGLIB не надо изучать незнакомый язык программирования, подключать дополнительные внешние библиотеки, или работать через громоздкий и неудобный интерфейс к коду, написанному на другом языке программирования.</li>
</ul>
<p align=justify>
Теперь о том, чем ALGLIB не является и не старается быть. ALGLIB:
</p>
<ul>
<li>не соревнуется со специализированными пакетами. Цель проекта не в этом. И как бы я ни старался, мне не обогнать по скорости MKL и не добиться той же широкой функциональности, что и в LAPACK.</li>
<li>не выходит за рамки концепции проекта. Например, параллельные вычисления - это очень интересно, но решение этой проблемы обычно тесно привязано к какой-то конкретной платформе, программной среде и языку, что идет вразрез с главной идеей проекта.</li>
</ul>
<a name=authors><h2>Кто авторы проекта?</h2></a>
<p align=justify>
Первая версия библиотеки алгоритмов была создана Владимиром Быстрицким, и на протяжении нескольких лет он в одиночку развивал сайт. Впоследствии он утратил интерес к сайту, и его развитием по общему согласию занялся я - Сергей Бочканов.
</p>
<a name=old><h2>Какое отношение проект имеет к сайтам alglib.chat.ru и alglib.dore.ru?</h2></a>
<p align=justify>
Это зеркала ранних версий проекта, которые сейчас закрыты.
</p>
<a name=manual><h2>Какое отношение проект имеет к проекту MANUAL.RU?</h2></a>
<p align=justify>
Этот проект помог библиотеке алгоритмов на одном из ключевых этапов развития, предоставив качественный бесплатный хостинг и, что более ценно, PHP-код для нового движка сайта, а также помощь по ряду других вопросов.
</p>
<a name=algopascal><h2>Что такое "алгоритмический Паскаль" (AlgoPascal)?</h2></a>
<p align=justify>
AlgoPascal - это разработанный специально для данного проекта язык программирования. Программы на этом языке обрабатываются программой-транслятором, и затем на их основе строятся исходники на требуемом посетителю языке программирования. Более подробном об этом можно узнать в разделе <a href="http://alglib.sources.ru/aboutsite.php">"О сайте"</a>.
</p>
<a name=bls><h2>Что такое "редактор блок-схем"?</h2></a>
<p align=justify>
Это программа, которая служит для просмотра и редактирования блок-схем. Первоначально все алгоритмы на сайте хранились в виде блок-схем, но затем в качестве основного способа представления был выбран AlgoPascal, на который были переведены блок-схемы. Тем не менее, старые блок-схемы остались на русской версии сайта, хотя их поддержка была прекращена, да и сам редактор может оказаться полезным посетителям. Более подробном об этом можно узнать в разделе <a href="http://alglib.sources.ru/aboutsite.php">"О сайте"</a> и на <a href="http://alglib.sources.ru/aboutbls.php">страничке редактора блок-схем</a>.
</p>
<a name=other><h2>А где алгоритмы для шифрования, рисования графиков, картинок в OpenGL и т.д.?</h2></a>
<p align=justify>
Как уже говорилось, цель библиотеки алгоритмов - создать многоязыковую библиотеку алгоритмов в области численного анализа. Задачи вроде указанных в оглавлении под эту классификацию не попадают. Для некоторых задач делается исключение, но в целом у проекта ярко выраженная специализация.
</p>
</body>
</html>