Архив рубрики «Программирование»

Python vs Perl — продолжение

Доисторические времена
Perl появился в 1988 году (строго говоря, в декабре 1987-го).
Какие основные идеи легли в основу Perl?

Основная объективная идея состояла в объединении возможностей различных средств для манипулирования текстовыми файлами: sh, awk, sed, tr. На тот момент такого единого средства не существовало, а необходимость в нём была.
Прочитать остальную часть записи »

Python vs Perl: Python против Perl

Читатель спросит: «Зачем сравнивать два таких несравнимых языка?» Отвечу. Perl и Python, будучи очень разными языками, всё же имеют много общего. Они универсальны (в отличии от, скажем, PHP), очень развиты (в отличии от shell, awk и подобных) и они оба являются скриптовыми языками (в отличии от не менее мощных C/C++, Pascal и других). Таким образом, они часто соперничают на одной территории и сравнивать их приходится.
Прочитать остальную часть записи »

О пользе рекурсии: примеры использования рекурсии

Эту заметку о пользе рекурсии я написал после прочтения соответствующей части книги С. Макконнелла «Совершенный код». Книга прекрасная, но, на мой взгляд, автор совершенно напрасно обещает уволить сотрудника, использующего рекурсию. Мне рекурсия помогала много раз, и я видел множество превосходных примеров её использования.
Прочитать остальную часть записи »

C++: Памятка C++, конструкторы, копирование, присвоение, деструкторы

Очень долго собирался написать памятку по разным приёмам программирования на C++. Но никак не мог выбрать достаточно компактный способ изложения. Получалось либо непонятно, либо очень длинно. В конце концов, я решил написать небольшой пример, снабжённый комментариями. Здесь, конечно, представлено далеко не всё, что стоило бы включить в памятку, но за-то то, что есть, изложено очень сжато, компактно и, мне кажется, что понятно. Я не планирую останавливаться на этом примере, для других аспектов программирования на C++ я постараюсь придумать другие примеры. Пока же, жду замечаний, предложений и критики этой первой заметки.
Прочитать остальную часть записи »

Кодировка в MySQL 4.1 : русские кодировки koi8r, windows 1251

Несколько слов о кодировках в MySQL 4.1 (но не 4.0).

Самое приятное в версии 4.1 то, что кодировки в которых работают клиент и сервер можно указывать отдельно. Поэтому для смены кодировки пересобирать сервер совсем не обязательно.
Настройка клиентов через my.cnf
Прочитать остальную часть записи »

Протоколирование SQL-запросов : log-file, протокол, MySQL запросы, отладка

Иногда, при отладке, очень хочется посмотреть, какие запросы получает MySQL-сервер. Узнать это очень просто: надо включить режим протоколирования.
Включаем протоколирование SQL-запросов

Пишем в /etc/my.cnf в секцию mysqld строчку:

[mysqld]
log = /var/log/MySQL.log

Прочитать остальную часть записи »

Обработка исключений при работе с базами данных

Одним из самых показательных примеров использования экземпляров исключений является известный пример работы с исключениями класса EDBEngineError при работе с базами данных. Особенно это касается баз данных Paradox и dBase, в которых не предусмотрено создание триггеров и ограничений. Последовательность действий следующая:
Прочитать остальную часть записи »

Хранимые процедуры в SQL

Объявление процедуры

CREATE PROCEDURE < имя процедуры> [({IN|OUT|INOUT} < имя параметра> < тип данных> [< размер>] [,…])]
[DYNAMIC RESULT SET < целое>]
BEGIN [ATOMIC]
<SQL-операторы>
END

Прочитать остальную часть записи »

Оператор выбора CASE в Pascal

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

Технология обработки исключений в Delphi

Уровни обработки исключительных ситуаций

Программы, написанные на Delphi, имеют два уровня обработки исключений. Библиотека визуальных компонентов VCL имеет свой уровень обработки исключений, с которым в большинстве случаев и встречаются пользователи. Чаще всего исключения на этом уровне, так или иначе, обрабатываются, и далее пользователь может продолжить работу с программой. На этом уровне программистам предоставляется возможность включить в программу свои обработчики исключений. Возможные варианты обработчиков выше были уже рассмотрены.
Прочитать остальную часть записи »

Введение в SQL/PSM — объявление переменных, операторы циклов и т.д.

1. Объявление переменных

DECLARE < имя переменной> [DEFAULT < значение>]

Примечания: переменные могут иметь любой SQL-тип данных (использование доменов не предусмотрено). Особенностью этих переменных является то, что они могут хранить NULL-значения. В SQL Server имя локальной переменной предваряется символом @, а глобальной — @@.
Прочитать остальную часть записи »

Операторы условного и безусловного перехода в Pascal

Операторы безусловного перехода

Оператор перехода позволяет перейти от текущего места выполнения программы в другое место, которое не является следующим по порядку. Данный оператор нарушает нормальный ход выполнения программы.

Переход осуществляется при помощи так называемых меток.
Метка — это идентификатор или целое число без знака в диапазоне от 0 до 9999, которое находится перед каким-либо оператором программы и отделен от него двоеточием. Все используемые в программе метки должны быть предварительно объявлены в разделе объявления меток, начинающимся СЛОВОМ label.
Прочитать остальную часть записи »

Процедуры, возбуждающие исключения в Delphi

Возбуждение исключений

При создании приложений часто приходится проектировать блоки кода, которые могли бы возбуждать исключения. В Delphi для этих целей предусмотрены оператор Raise и несколько специальных процедур.

Оператор Raise

Для возбуждения исключений обычно используется оператор Raise. Синтаксис его использования следующий:

Raise [< объект>] [At < адрес>]

Прочитать остальную часть записи »

Использование API для доступа к БД

В ряде СУБД при разработке приложений используются библиотеки функций, представляющие собой интерфейс между прикладными программами и СУБД(Application Program Interface — API). В настоящее время существует много новых API для доступа к БД. Это ODBC, JDBC, OLE DB.
Прочитать остальную часть записи »

Массивы в Pascal, многомерные массивы, примеры использования

Статические массивы

Дискриминант компонента массива — это индекс, записываемый в скобках []. Например, обозначения Х[1], Х[2], …, Х [n] представляют компоненты одномерного массива X. Индекс имеет порядковый тип, указываемый в описании массива, и является в общем случае выражением. Тип «статический одномерный массив» описывают следующим образом:

Array [Тип индекса] of Тип компонентов массива;

как правило, Тип индекса — это диапазон его значений. Тип-массив можно обозначить именем и записать объявление типа с этим именем, но массив еще не будет создан. Последнее произойдет, когда опишем переменную данного типа, т.е. потратим память. Изучите следующие два варианта описания массива X с п элементами типа double. Возьмем n = 50:
Var X: Array [1…n] of double; Type mas = Array [1…n] of double; {1…n — это ТИП индекса) Var X: mas;
Границы значений индекса могут быть любыми, например -5..20. В случаях, когда необходимая мощность массива точно не известна, можно задать ее с запасом. Помните, выход индекса за пределы массива — катастрофичен!
Прочитать остальную часть записи »

Использование экземпляров исключений, операторы On..Do в Delphi

За ключевым, словом Except обычно следует список обработчиков исключений состоящий из одного или нескольких операторов On..Do. Общий синтаксис конструкции Try..Except с операторами On..Do следующий:

Try
< операторы, которые могут вызвать исключений>
Except
On <исключение Класса1> Do [<оператор очистки, возможно составной>];
On <исключение класса2> Do [<оператор очистки, возможно составной>];
[Else
<операторы очистки по умолчанию, возможно составные>;] End;

Прочитать остальную часть записи »

Динамический SQL в Delphi

1) Основные свойства компонента TQuery
SQL : TStrings – позволяет разместить в нем текст SQL-оператора.
Params[Index : Word] : TParams – позволяет указать значения параметров при многократных запросах.
Примечание: свойства SQL имеет методов Clear, Add, Append, LoadFromFile, LoadFromStream и ряд других для очистки свойства и помещения в него текста SQL-оператора.
Прочитать остальную часть записи »

Выражения в Pascal: арифметические, логические

Выражения представляют собой конструкцию языка, которая содержит в себе данные, операции и имеется строгий порядок выполнения этих операций. Выражения всегда возвращают какое-либо значение.

Операнды — это данные, над которыми производятся действия. Операндами могут быть переменные, константы, переменные массивов и другие элементы.
Прочитать остальную часть записи »

Конструкции Try..Finally и Try..Except в Delphi

Программы Delphi имеют встроенную обработку исключений по умолчанию, которая в некоторых случая может оказаться достаточной. встроенная обработка исключений преследует, во-первых, получение более подробной информации об ошибке и/или месте ее возникновения и, во-вторых, включение собственного кода по ее обработке, если стандартная обработка не устраивает.
Прочитать остальную часть записи »

Курсоры в SQL — способы объявления курсоров, связывание курсора с оператором

1) Способы объявления курсоров
• С помощью оператора DECLARE (объявленный), аналогичный рассмотренному нами ранее.
• Создан из ранее подготовленного оператора (выделенный курсор).

2) Связывание курсора с оператором

ALLOCATE < имя курсора> [INSENSITIVE][SCROLL] CURSOR FOR < имя оператора>

Прочитать остальную часть записи »

Совместимость типов в Pascal

1. Статическое соответствие
Компилятор приемлет любые сочетания числовых типов левой и правой части, кроме сочетания «слева целый тип, справа — вещественный». Если правая часть — константное выражение, дополнительно проверяется, не выходит ли его значение из диапазона значений типа левой части. Если бы в нашем примере был записан оператор m:= Round(x*j)/5 + (j + 2E3)*k, то компиляция выявила бы несоответствие типов левой (integer) и правой части.
Прочитать остальную часть записи »

Исключения в Delphi, классы исключений

Исключения (exceptions) — это способ передачи информации об ошибке времени выполнения или о других исключительных ситуациях из того места, которое первым ее обнаружило, в код, предусмотренный для обработки таких ситуаций. В конечном итоге ошибки обусловлены неполной проработкой всех вариантов работы программы. В последующих версиях программы обнаруженные ошибки можно попытаться устранить, однако многое можно предусмотреть и сразу.
Прочитать остальную часть записи »

Оператор присваивания: арифметический и логический — Pascal

Данный оператор является наиболее часто используемым в программах на языке Delphi. Оператор присваивания записывается с помощью знака:=. Данный оператор применяется для присваивания значения, записанного справа от знака присваивания, переменной, записанной слева от знака присваивания:
А := 10; // Переменной А присваивается значение 10
Прочитать остальную часть записи »

Событие OnMessage, перехватчики сообщений, перехваты Windows

Использование события OnMessage
Для обработки сообщений в приложении можно использовать событие Application.OnMessage. Как уже говорилось ранее, цикл обработки сообщений периодически просматривает содержимое поля FOnMessage. Фактически проверяется наличие обработчика у события OnMessage. С помощью этого обработчика можно перехватить или изменить обработку любых сообщений, кроме сообщений оперативной подсказки и (напомним, что сообщения, посланные функцией SendMessage, не попадают в цикл сообщений и также не могут быть перехвачены этим обработчиком этого события).
Прочитать остальную часть записи »

Способы передачи параметров во встроенном SQL

1) Переменные HOST-языка

Это простейший способ, основанный на применении раздела USING оператора EXECUTE. Число и типы данных переменных должны быть совместимы с типами данных соответствующих параметров. Если какая-нибудь переменная содержит отрицательное значение, то соответствующему маркеру параметра присваивается NULL-значение.
Прочитать остальную часть записи »

Описание целочисленных, вещественных, логических данных и операции над ними в Pascal

1. Описание целочисленных данных

В целом типе над ограниченным множеством математически целых чисел выполняются операции +, -, *, /, div, mod, где div — операция деления нацело (ее результат — целая часть обычного частного), mod — операция взятия остатка от деления. Только результат операции / имеет вещественный тип, результаты прочих — целого типа. Возведение в целую степень выполняют через умножения.
Прочитать остальную часть записи »

Механизм обработки сообщений в Delphi

Последовательность обработки сообщений в Delphi
Все классы Delphi имеют встроенный механизм обработки сообщений, называемый обработчики сообщений. Класс получает какое-либо сообщение и вызывает один из набора определенных методов в зависимости от полученного сообщения. Если соответствующий метод не определен, то вызывается заданный по умолчанию обработчик. Более подробно этот механизм работает следующим образом.
Прочитать остальную часть записи »

Операторы двухэтапного исполнения в динамическом SQL

Особенности оператора

Если в программе содержится много динамических операторов, то машинное время, затрачиваемое на одноэтапное выполнение операторов, может быть очень значительным.

Если выполняемые операторы похожи друг на друга, то расход машинного времени будет просто расточительным.
Прочитать остальную часть записи »

Понятие алгоритма и типы данных в Object Pascal

Алгоритм — совокупность инструкций, описывающих решение задачи. Свойства алгоритма — массовость, точность, результативность. Основные способы записи алгоритма — блок-схема, псевдокод.
Прочитать остальную часть записи »

Рассылки сообщений, методы: Dispatch, Perform, Broadcast, NotifyControls, функции Windows API

Рассылка сообщений может быть выполнена несколькими способами.
А) Непосредственный вызов метода сообщения. В этом случае необходимо знать точное имя метода и тип параметра метода-приемника сообщения, как это требуется и при вызове статического метода. Полиморфизм в таких вызовах не проявляется.

procedure TForm1.WMMyCol(var Message: TMessage);
var Pan: TPanel;
begin
Pan:=pointer(Message.Lparam);
Pan.Color:=Message.WParam;
inherited;
end;

Прочитать остальную часть записи »




Статистика