
- •Данные. Обзор типов данных. Особенности численных данных.
- •Структура программы. Разделы объявления модулей, меток, данных, процедур и функций.
- •Оператор повтора «For». Пример.
- •Процедуры и функции. Способы и особенности передачи данных через имя и окно данных.
- •Стандартные процедуры и функции по работе со строками.
- •Записи. Объявление нового типа записи, обращение к полям записи.
- •Создание, чтение и запись текстовых файлов.
- •Создание, чтение и запись типизированных файлов.
- •Другие события
- •Проект в Delphi. Структура, основные файлы.
- •Файл Проект
- •Файл модуля формы.
- •Опции проекта
- •Модальные формы
- •Вывод в поле диалогового окна
- •Назначение файла (AssignFile)
Оператор повтора «For». Пример.
Оператор повтора for Оператор повтора for используется в том случае, если заранее известно количество повторений цикла. Приведем наиболее распространенную его форму:
for <параметр цикла> := <значение 1> to <значение 2> do <оператор>;
где <параметр цикла> - это переменная любого порядкового типа данных (переменные вещественных типов данных недопустимы); <значение 1> и <значение 2> - выражения, определяющие соответственно начальное и конечное значения параметра цикла (они вычисляются только один раз перед началом работы цикла); <оператор> - тело цикла. Оператор for обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного. После каждого повтора значение параметра цикла увеличивается на единицу. Например, в результате выполнения следующей программы на экран будут выведены все значения параметра цикла (от 1 до 10), причем каждое значение - в отдельной строке:
program Console;
{$APPTYPE CONSOLE}
uses SysUtils;
var I: Integer;
begin for I := 1 to 10 do Writeln(I); Writeln('Press Enter to exit...'); Readln; end.
Заметим, что если начальное значение параметра цикла больше конечного значения, цикл не выполнится ни разу.
В качестве начального и конечного значений параметра цикла могут использоваться выражения. Они вычисляются только один раз перед началом выполнения оператора for. В этом состоит важная особенность цикла for в языке Delphi, которую следует учитывать тем, кто имеет опыт программирования на языках C/C++.
После выполнения цикла значение параметра цикла считается неопределенным, поэтому в предыдущем примере нельзя полагаться на то, что значение переменной I равно 10 при выходе из цикла.
Вторая форма записи оператора for обеспечивает перебор значений параметра цикла не по возрастанию, а по убыванию:
for <параметр цикла> := <значение 1> downto <значение 2> do <оператор>;
Например, в результате выполнения следующей программы на экран будут выведены значения параметра цикла в порядке убывания (от 10 до 1):
program Console;
{$APPTYPE CONSOLE}
uses SysUtils;
var I: Integer;
begin for I := 10 downto 1 do Writeln(I); Writeln('Press Enter to exit...'); Readln; end.
Если в такой записи оператора for начальное значение параметра цикла меньше конечного значения, цикл не выполнится ни разу.
Оператор повтора «While». Пример.
Оператор повтора while
Оператор повтора while имеет следующий формат: while <условие> do <оператор>;
Перед каждым выполнением тела цикла происходит проверка условия. Если оно истинно, цикл выполняется и условие вычисляется заново; если оно ложно, происходит выход из цикла, т.е. переход к следующему за циклом оператору. Если первоначально условие ложно, то тело цикла не выполняется ни разу. Следующий пример показывает использование оператора while для вычисления суммы S = 1 + 2 + .. + N, где число N задается пользователем с клавиатуры:
program Console;
{$APPTYPE CONSOLE}
uses SysUtils;
var S, N: Integer;
begin Readln(N); S := 0; while N > 0 do begin S := S + N; N := N - 1; end; Writeln('S=', S); Writeln('Press Enter to exit...'); Readln; end.
Оператор повтора «Repeat». Пример.
Оператор повтора repeat Оператор повтора repeat используют в тех случаях, когда тело цикла должно быть выполнено перед тем, как произойдет проверка условия завершения цикла. Он имеет следующий формат:
repeat <оператор 1>; ... <оператор N>; until <условие завершения цикла>;
Тело цикла выполняется до тех пор, пока условие завершения цикла (выражение булевского типа) не станет истинным. Оператор repeat имеет две характерные особенности, о которых нужно всегда помнить:
между словами repeat и until может находиться произвольное число операторов без операторных скобок begin и end; так как условие завершения цикла проверяется после выполнения операторов, цикл выполняется, по крайней мере, один раз. В следующем примере показано, как оператор repeat применяется для суммирования вводимых с клавиатуры чисел. Суммирование прекращается, когда пользователь вводит число 0:
program Console;
{$APPTYPE CONSOLE}
uses SysUtils;
var S, X: Integer;
begin S := 0; repeat Readln(X); S := S + X; until X = 0; Writeln('S=', S); Writeln('Press Enter to exit...'); Readln; end.
Часто бывает, что условие выполнения цикла нужно проверять перед каждым повторением тела цикла. В этом случае применяется оператор while, который, в отличие от оператора repeat, содержит условие выполнения цикла, а не условие завершения.
Понятие о процедурах и функциях. Общее и различия между процедурами и функциями.
Процедуры программиста Очевидно, что встроенных процедур и функций для решения большинства прикладных задач недостаточно, поэтому приходиться придумывать собственные процедуры и функции. По своей структуре они очень напоминают программу и состоят из заголовка и блока. Заголовок процедуры состоит из зарезервированного слова procedure, имени процедуры и необязательного заключенного в круглые скобки списка формальных параметров. Имя процедуры - это идентификатор, уникальный в пределах программы. Формальные параметры - это данные, которые вы передаете в процедуру для обработки, и данные, которые процедура возвращает (подробно параметры описаны ниже). Если процедура не получает данных извне и ничего не возвращает, формальные параметры (в том числе круглые скобки) не записываются. Тело процедуры представляет собой локальный блок, по структуре аналогичный программе:
procedure <имя процедуры> ( <список формальных параметров> ) ; const ...; type ...; var ...; begin <операторы> end;
Описания констант, типов данных и переменных действительны только в пределах данной процедуры. В теле процедуры можно использовать любые глобальные константы и переменные, а также вызывать любые подпрограммы (процедуры и функции).
Вызов процедуры для выполнения осуществляется по ее имени, за которым в круглых скобках следует список фактических параметров, т.е. передаваемых в процедуру данных:
<имя процедуры> ( <список фактических параметров> );
Если процедура не принимает данных, то список фактических параметров (в том числе круглые скобки) не указываются.
Понятие процедуры является чрезвычайно важным, так как именно оно лежит в основе одной из самых популярных технологий решения задач на языке Delphi. Технология эта внешне проста: задача разбивается на несколько логически обособленных подзадач и решение каждой из них оформляется в виде отдельной процедуры. Любая процедура может содержать в себе другие процедуры, их количество ограничено только объемом памяти вашего компьютера.
Приведем пример небольшой программы, использующей процедуру Power для вычисления числа X в степени Y. Результат вычисления процедура Power заносит в глобальную переменную Z.
program Console;
{$APPTYPE CONSOLE}
uses SysUtils;
var Z: Double;
procedure Power(X, Y: Double); // X и Y - формальные параметры begin Z := Exp(Y * Ln(X)); end;
begin Power(2, 3); // 2 и 3 - фактические параметры Writeln('2 в степени 3 = ', Z); Writeln('Press Enter to exit...'); Readln; end.
Функции программиста Функции программиста применяются в тех случаях, когда надо создать подпрограмму, участвующую в выражении как операнд. Как и процедура, функция состоит из заголовка и блока. Заголовок функции состоит из зарезервированного слова function, имени функции, необязательного заключенного в круглые скобки списка формальных параметров и типа возвращаемого функцией значения. Функции возвращают значения любых типов данных кроме Text и file of (см. файлы). Тело функции представляет собой локальный блок, по структуре аналогичный программе.
function <имя функции> ( <список формальных параметров> ): <тип результата>; const ...; type ...; var ...; begin <операторы> end;
В теле функции должен находиться по крайней мере один оператор, присваивающий значение имени функции или неявной локальной переменной Result. Если таких присваиваний несколько, то результатом функции будет значение последнего из этих операторов. Преимущество от использования переменной Result состоит в том, что она может участвовать в выражениях как операнд.
В качестве примера заменим явно неуклюжую процедуру Power (см. выше) на функцию с таким же именем:
program Console;
{$APPTYPE CONSOLE}
uses SysUtils;
function Power(X, Y: Double): Double; // X и Y - формальные параметры begin Result := Exp(Y * Ln(X)); end;
begin Writeln('2 в степени 3 = ', Power(2, 3)); // 2 и 3 - фактические параметры Writeln('Press Enter to exit...'); Readln; end.