Уроки 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 в обработчиках событий;
Бояться не надо
|
|
-
Сервис онлайн-записи на собственном Telegram-боте
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание,
но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
Для новых пользователей первый месяц бесплатно.
Чат-бот для мастеров и специалистов, который упрощает ведение записей:
— Сам записывает клиентов и напоминает им о визите;
— Персонализирует скидки, чаевые, кэшбэк и предоплаты;
— Увеличивает доходимость и помогает больше зарабатывать;
Начать пользоваться сервисом
-
Как продвинуть сайт на первые места?
Вы создали или только планируете создать свой сайт, но не знаете, как продвигать?
Продвижение сайта – это не просто процесс, а целый комплекс мероприятий,
направленных на увеличение его посещаемости и повышение его позиций в поисковых системах.
Ускорение продвижения
Если вам трудно попасть на первые места в поиске самостоятельно, попробуйте технологию Буст,
она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней.
Если ни один запрос у вас не продвинется в Топ10 за месяц, то в SeoHammer за бустер вернут деньги.
Начать продвижение сайта
-
Для вычисления дискриминанта матрицы A размером N*N воспользуемся методом Гаусса, то есть приведением матрицы к треугольному виду. Для этого умножением второй строки на коэффициент z=А11/A12 и вычитанием первой строки получаем равное нулю значение первого элемента второй строки, и так далее, пока все элементы лежащие ниже главной диагонали матрицы не станут равны нулю. Дискриминант получившейся матрицы равен частному от произведения диагональных элементов и произведения указанных коэффициентов:
function Discr: Real;
var p, j, i: Integer;
z: Real;
begin
Result:=1;//инициализация дискриминанта
for p:=0 to High(A)-1 do//цикл по строкам, которые отнимаем от изменяемых строк
if A[p, p]=0 then//если первый элемент в строке равен нулю, то
begin
Result:=0;//дискриминант равен нулю, так как это диагональный элемент
exit;//выходим
end else//иначе:
for j:=p+1 to High(A) do//цикл по строкам, которые в данный момент изменяем
if A[p, j]=0 then//если первый элемент строки равен нулю, то эта строка не нуждается в изменении
then continue else//и тогда пропускаем эту строку, иначе
begin
z:=A[p, p]/A[p, j];//вычисляем коэффициент
Result:=Result/z;//вычисляем частное
A[p, j]:=0;//начальный элемент строки будет равен нулю по определению
for i:=p+1 to High(A) do//цикл по элементам изменяемой строки
A[i, j]:=z*A[i, j]-A[i, p];//умножаем элемент на коэффициент и вычитаем элемент отнимаемой строки
end;
for i:=0 to High(A) do//цикл по диагональным элементам
Result:=Result*A[i, i];//для получения дискриминанта перемножаем диагональные элементы
end;
На первый взгляд функция достаточно громоздкая, состоит из трёх вложенных циклов, требует проверок на равенство нулю элементов матрицы, чтобы не получить исключительную ситуацию. Можно сравнить с функцией вычисления дискриминанта, использующей рекурсию, которая более проста и наглядна, но требует выделения дополнительной памяти на вызовы рекурсивной функции. Также достоинством метода Гаусса является более высокое быстродействие, по сравнению с рекурсивным алгоритмом.
Скачать программу.
|