Код++

5 февраля · how-to · js · программирование

Как сделать «интерпретатор» кода на сайте

На этом сайте есть статьи о некоторых алгоритмах сортировки и поиска решений уравнений. В них представлены фрагменты кода, которые пользователь пошагово выполняет, и анимация. Так имитируется работа трассировщика. Функционирование таких «интерпретаторов» строилось на неком допущении, которое значительно усложняло работу с рекурсивными функциями, поэтому до сего момента, например, не были рассмотрены рекурсивные сортировки.

Новое решение строится на промисах и асинхронных функциях (async/await). Для примера напишем функцию factorial() для вычисления факториала числа, он определён для целых чисел: n! = (n − 1)! × n, 1! = 1, 0! = 1.

Вызывать функцию будем по нажатию на кнопку с идентификатором start.

$('#start').click(async () => {
    buttonPromise = makeButtonPromise();
    const n = 5;
    const result = await factorial(n);
    // ...
});

Читать далее →
28 августа 2018 · php · программирование

Функция preg_replace_callback_array()

В PHP 7 появилась функция preg_replace_callback_array(). Я её использовал в последнем проекте. Хочется показать на простых примерах, как она работает. Для этого разберём и другие функции. Для понимания статьи нужно знать, как работают регулярные выражения.

Давайте напишем небольшой интерпретатор некоторых BB-кодов.

Замена по одному выражению

Начнём с простой замены: [b]<b> (здесь и далее с учётом пробелов и переносов, то есть варианты типа [ b ] тоже сработают). Для удобства основные символы выделены жёлтым цветом.

$subject = 'To [b]be[/b] or not to be?';
$pattern = '/\[\s*b\s*]/';
$replacement = '<b>';
echo preg_replace($pattern, $replacement, $subject) . PHP_EOL;
// 'To [b]be[/b] or not to be?'
// 'To <b>be[/b] or not to be?'

Читать далее →

Язык C для гениев

Целевая аудитория — владеющие основами алгоритмизации и какого-либо языка программирования, те, кого не пугают слова «переменная» и даже «рекурсия». В курс (пока что) не входят многие серьёзные темы, например, volatile или глубины стандарта. Также я не буду рассматривать конкретные средства разработки, процесс создания проекта и компиляции. Лучше сосредоточимся на средствах языка и стандартной библиотеки. Если вы можете самостоятельно справиться с этим, то справитесь и с материалом. Сперва нужно быть знакомым с основами компьютерных архитектур, уметь переводить числа между разными системами счисления, складывать, вычитать в них и так далее, владеть основами логики, комбинаторики. Не лишним будет умение читать технические тексты по-английски и писать комментарии.

C — язык промышленного программирования, а не учебный, поэтому многие детали могут изначально пугать. Например, диапазоны переменных одного типа при компиляции на разных компьютерах могут различаться, малейшие опечатки — оборачиваться странным поведением программы или непонятными сообщениями об ошибках. Об истории языка и различиях в версиях и стандартах читайте самостоятельно.

Это, скорее, конспект без лишнего шума. Люди не машины, нам нельзя скормить алфавит, ключевые слова, завалить терминами «сигнатура» и «семантика», дать грамматику языка и что-то ждать в ответ. Я буду показывать примеры — от простого к сложному — которые вам нужно компилировать, изучать, как-то изменять. Самостоятельность — ключ к глубокому пониманию.

Оглавление

§ 8.

§ 14.

Компиляция и выполнение программы

 

Литература

 

Задачи

Читать далее →

Нули функции. Численные методы

Постановка задачи: на интервале [a, b] задана функция f(x), удовлетворяющая некоторым условиям. Известно, что на этом интервале только один корень. Требуется его найти.

Читать далее →
3 2 1