Уроки Delphi
1. Первая программа
2. Использование компонентов
3. События Delphi
4. Типы данных Delphi
5. Создание своих типов данных
6. Выражения и операторы
7. Работа с файлами в Delphi
8. Дополнительные формы
9. Подпрограммы в Delphi
10. Исключительные ситуации
11. Взаимодействие приложения с пользователем
12. Указатели в Delphi
13. Обзор компонентов
14. Работа со строками
15. Создание интерфейса
16. Графика в Delphi
17. Многопоточность в Delphi
18. Динамическое создание компонентов
Поиск по сайту
Это важно:
Метод Application.ProcessMessages;
Это полезно:
Параметр Sender в обработчиках событий;
Бояться не надо
|
|
-
Как продвинуть сайт на первые места?
Вы создали или только планируете создать свой сайт, но не знаете, как продвигать?
Продвижение сайта – это не просто процесс, а целый комплекс мероприятий,
направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
Ускорение продвижения
Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст,
она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней.
Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
Начать продвижение сайта
-
-
Сервис онлайн-записи на собственном Telegram-боте
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание,
но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
Для новых пользователей первый месяц бесплатно.
Чат-бот для мастеров и специалистов, который упрощает ведение записей:
— Сам записывает клиентов и напоминает им о визите;
— Персонализирует скидки, чаевые, кэшбэк и предоплаты;
— Увеличивает доходимость и помогает больше зарабатывать;
Начать пользоваться сервисом
Применяя для вычисления дискриминанта матрицы рекурсию вместо вложенных циклов (в случае метода Гаусса), мы можем получить очень простой и элегантный алгоритм.
Для вычисления дискриминанта матрицы A размером N*N воспользуемся разложением по первому столбцу:
function Discr(A: Ar2): Real;
var i: Integer;
D: Real;
begin
if High(A)=0 then//если макс. величина индекса массива = 0(массив размером 1*1), то
begin
Result:=A[0, 0];//значение функции равно данному числу
exit;//выходим из функции
end;
D:=0;//инициируем начальное значение функции
k:=1;//начальное значение коэффициента суммирования
for i:=0 to N-1 do//цикл по первому столбцу
begin
D:=D+k*A[0, i]*Discr(Matr(A, i));//суммируем слагаемые дискриминанта, с учётом коэффициента суммирования
k:=-1*k;//на очередной строке коэффициент суммирования меняется на противоположный
end;
Result:=D;
end;
Здесь Ar2 - тип данных, двумерный динамический массив, а Matr(A, i) - функция, возвращающая новую матрицу, получающаюся из текущей после удаления первого (нулевого, в программистской терминологии) столбца и i -й строки.
Таким образом, видим, что громоздкая структура из вложенных циклов заменяется одной функцией, обращающейся к самой себе. Дополнительно лишь требуется написать ещё одну функцию, которая возвращает новую матрицу, получающуюся в результате удаления из текущей нулевого столбца и i-ой строки. Результатом такого удаления является матрица на единицу меньшего размера. Рекурсия работает до тех пор, пока мы не получим матрицу размером 1*1, дискриминантом которой является число A[0, 0]. Когда рекурсия достигнет этого, дальнейшие вызовы функции прекратятся, и дискриминант будет подсчитан.
Недостатком данного алгоритма является необходимость выделения дополнительной памяти для сохранения параметров при рекурсивном вызове функции, и заметное снижение быстродействия при увеличении размера матрицы.
Предлагается готовый работающий проект программы, вычисляющий дискриминант матрицы методом рекурсии. Обратиться вы можете в комментариях. Скачать программу.
|