C++
Для чего служит пустой файл stdafx.h?
Как организована работа с массивами в С++?
Почему для обращения к массивам используются не квадратные скобки, а круглые?
Будет ли пакет ALGLIB работать в 64-битной среде?
Delphi
Почему везде вместо цикла for используется цикл while?
Для чего служит функция DynamicArrayCopy?
Вопросы по алгоритмам на Visual Basic
На какую именно версию языка Visual Basic транслируются алгоритмы?
Программы с сайта будут работать в VB.NET?
Почему в некоторых программах используется оператор goto?
Общие вопросы по исходным кодам
Что такое библиотека AP?
Что такое библиотека ABLAS?
Некоторые алгоритмы начинают нумерацию элементов массивов с единицы. Так уже никто не делает!
Язык программирования YYY не поддерживает массивы, нумерация которых начинается не с ноля. Что в этом случае?
Общие вопросы по проекту
В чем цель проекта ALGLIB?
Чем проект ALGLIB отличается от других аналогичных проектов?
Кто авторы проекта?
Какое отношение проект имеет к сайтам alglib.chat.ru и alglib.dore.ru?
Какое отношение проект имеет к проекту MANUAL.RU?
Что такое "алгоритмический Паскаль" (AlgoPascal)?
Что такое "редактор блок-схем"?
А где алгоритмы для шифрования, рисования графиков, картинок в OpenGL и т.д.?
stdafx.h?
MSVC и некоторые другие компиляторы требуют, чтобы в коде программы присутствовала директива #include <stdafx.h>, служащая для управления прекомпилированными заголовками, и автоматически создают файл stfafx.h при генерации нового проекта. Однако некоторые компиляторы (например, BCB) используют другие средства для управления прекомпилированными заголовками. При этом директива #include <stdafx.h> сама по себе не мешает их работе, однако отсутствие файла с таким именем приводит к ошибке компиляции. Пустой файл stfafx.h служит для того, чтобы избежать этой ошибки. Если вашей средой разработки уже создан файл с таким именем, оставьте его без изменений.
Поскольку поддержка динамических массивов со стороны языка С++ отсутствует (update: я знаю про указатели и динамическое выделение памяти, но это не совсем то, что необходимо), то были разработаны классы-шаблоны для работы с одномерными и двухмерными массивами. Необходимый исходный код и описание находятся в стандартной библиотеке AP, которая прилагается к каждому архиву с исходниками на C++. Обратите внимание, что массивы в этой библиотеке начинают нумерацию элементов не с 0, а с произвольного числа по выбору программиста.
Представьте себе, что вы обращаетесь к элементу матрицы а в привычной нотации: a[x][y] вместо a(x,y). На самом деле здесь спрятан не один вызов оператора индекса, а два. Первый из них - индексация матрицы a по x, которая возвращает ссылку на какую-то временную структуру, описывающую строку матрицы. Второй - индексация временной структуры по y, которая возвращает ссылку на требуемый элемент. Обращение через перегрузку круглых скобок существенно эффективнее, поскольку не требуется создание временных структур.
Пакет ALGLIB не тестировался в 64-битной среде.
Вместе с тем, сам пакет и используемая им библиотека AP/C++ не содержат кода, в котором явно выдвигались бы какие-то предположения относительно характера среды, в которой осуществляется работа. Таким образом, компиляция и использование пакета ALGLIB в 64-битной среде теоретически не должны вызывать проблем, если не используются дополнительные библиотеки (такие, как ABLAS, которая на момент написания этих строк существует только в 32-битном варианте).
Причиной тому некоторые особенности реализации цикла for в Delphi. Если цикл не выполнялся не разу, то во многих языках программирования управляющая переменная цикла содержит стартовое значение. В Delphi если цикл не выполнялся не разу, то управляющая переменная цикла не изменяется. Однажды я встретил исходник, в котором эта разница играла большую роль, и решил заменить цикл for в программах на Delphi циклом while, который полностью совпадает по своему поведению с другими языками.
DynamicArrayCopy?
В Delphi динамические массивы являются ссылочными типами, т.е. если параметр-массив передается по значению, то при этом не происходит копирования массива. Для эмуляции передачи параметра-массива по значению используется функция DynamicArrayCopy. Она принимает в качестве аргумента динамический массив и возвращает копию этого массива. Присваивание вида A:=DynamicArrayCopy(A) заменяет ссылку на оригинальный массив ссылкой на его копию.
Алгоритмы транслируются на VBA, однако в целом совместимы с VB6.
Без портирования - нет.
Во многих языках программирования есть управляющий оператор continue, но в VB он отсутствует. Я не знаю, чем объяснить этот факт. Так вот, в программах на AlgoPascal этот оператор время от времени появляется. Оператор goto используется в качестве замены ему, осуществляя досрочный переход к очередной итерации цикла.
Библиотека AP - это общее название набора библиотек на нескольких языках программирования, решающих низкоуровневые задачи, привязанные к специфике конкретного языка программирования. Библиотека решает такие задачи, как работа с динамическими одномерными и многомерными массивами в языках, не поддерживающих этот тип данных, содержит реализации базовых алгоритмов линейной алгебры и т.д. Библиотека распространяется в виде исходных кодов под лицензией BSD. Библиотека автоматически прикрепляется к каждому архиву с алгоритмами, доступному для скачивания с сайта. Последняя версия библиотеки доступна для скачивания по адресу http://alglib.sources.ru/translator/aplib.zip или http://www.alglib.net/translator/aplib.zip
ABLAS - это оптимизированная реализация базовых алгоритмов линейной алгебры, написанная на ассемблере. Чтобы использовать ABLAS, достаточно скопировать динамически загружаемый файл библиотеки в одну из системных папок или в папку с программой, а также включить поддержку ABLAS (как указано в интструкции к библиотеке). При запуске программы, использующей пакет ALGLIB, осуществляется автоматическое обнаружение и подключение библиотеки ABLAS. В случае отсутствия ABLAS используется стандартная реализация операций линейной алгебры, написанная на языке высокого уровня. На странице http://www.alglib.net/projects/ablas/ (или http://alglib.sources.ru/projects/ablas/ для русской версии сайта) находятся описание библиотеки, список поддерживаемых платформ и языков программирования, а также исходные коды и прекомпилированные двоичные файлы.
Делают. Скажем, библиотека netlib.org содержит мегабайты вполне работоспособного кода на Фортране, в котором принято начинать нумерацию с единицы. В современном мире принято начинать нумерацию с 0, но многие уникальные алгоритмы широко распространяются именно в старой редакции. На данный момент большинство алгоритмов приведено к современной, базирующейся на ноле системе нумерации, однако небольшое количество очень полезных алгоритмов использует старую систему. В перспективе все они будут приведены к новой системе, однако пока приходится использовать их, как есть.
В этом случае элементы, содержащие ноль в одном из индексов, не будут использоваться. Например, если подпрограмма ожидает получить массив размером 2x2, нумерация которого начинается с 1 (т.е. индексы элементов имеют вид [1..2,1..2]), то в неё следует передать массив с нумерацией элементов [0..2,0..2]. Это не самое красивое решение, но оно работает.
Создать удобную в использовании многоязыковую коллекцию алгоритмов для решения проблем в области численного анализа (в основном) и некоторых других задач.
Пакет ALGLIB:
Теперь о том, чем ALGLIB не является и не старается быть. ALGLIB:
Первая версия библиотеки алгоритмов была создана Владимиром Быстрицким, и на протяжении нескольких лет он в одиночку развивал сайт. Впоследствии он утратил интерес к сайту, и его развитием по общему согласию занялся я - Сергей Бочканов.
Это зеркала ранних версий проекта, которые сейчас закрыты.
Этот проект помог библиотеке алгоритмов на одном из ключевых этапов развития, предоставив качественный бесплатный хостинг и, что более ценно, PHP-код для нового движка сайта, а также помощь по ряду других вопросов.
AlgoPascal - это разработанный специально для данного проекта язык программирования. Программы на этом языке обрабатываются программой-транслятором, и затем на их основе строятся исходники на требуемом посетителю языке программирования. Более подробном об этом можно узнать в разделе "О сайте".
Это программа, которая служит для просмотра и редактирования блок-схем. Первоначально все алгоритмы на сайте хранились в виде блок-схем, но затем в качестве основного способа представления был выбран AlgoPascal, на который были переведены блок-схемы. Тем не менее, старые блок-схемы остались на русской версии сайта, хотя их поддержка была прекращена, да и сам редактор может оказаться полезным посетителям. Более подробном об этом можно узнать в разделе "О сайте" и на страничке редактора блок-схем.
Как уже говорилось, цель библиотеки алгоритмов - создать многоязыковую библиотеку алгоритмов в области численного анализа. Задачи вроде указанных в оглавлении под эту классификацию не попадают. Для некоторых задач делается исключение, но в целом у проекта ярко выраженная специализация.