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, на который были переведены блок-схемы. Тем не менее, старые блок-схемы остались на русской версии сайта, хотя их поддержка была прекращена, да и сам редактор может оказаться полезным посетителям. Более подробном об этом можно узнать в разделе "О сайте" и на страничке редактора блок-схем.
Как уже говорилось, цель библиотеки алгоритмов - создать многоязыковую библиотеку алгоритмов в области численного анализа. Задачи вроде указанных в оглавлении под эту классификацию не попадают. Для некоторых задач делается исключение, но в целом у проекта ярко выраженная специализация.