Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Учебное пособие по информатике. Часть 3

.pdf
Скачиваний:
25
Добавлен:
31.05.2015
Размер:
1.49 Mб
Скачать

41

Строковые функции [4]:

Запись

Действие

 

 

 

Тип результата

Length(s)

Возвращает длину строки s

Integer

Concat(sl[, s2,...,

Соединение строк s1 .. sn

 

String

sn])

 

 

 

 

 

Copy(S, Index,

Выделение из строки S подстроки

String

Count)

длиной Count символов; подстрока

 

 

выделяется, начиная с символа в

 

 

позиции Index

 

 

 

Pos(Substr, S)

Определение позиции (номера)

Integer

 

символа, начиная с которого подстрока

 

 

Substr входит в строку s, при этом

 

 

ищется первое вхождение; если

 

 

подстрока не найдена, то возвращается

 

 

ноль

 

 

 

 

Uppercase (S)

Перевод символов строки S в верхний

 

 

регистр (только лат. алфавит)

 

LowerCase (S)

Перевод символов строки S в нижний

 

 

регистр (только лат. алфавит)

 

Trim(S)

Удаление

пробелов

и

управляющих

 

 

символов в начале и в конце строки s

 

TrimLeft(S)

Удаление

пробелов

и

управляющих

 

 

символов в начале строки s

 

TrimRight(S)

Удаление

пробелов

и

управляющих

 

 

символов в конце строки s

 

Строковые процедуры:

 

 

 

 

Запись

Действие

 

 

 

Тип результата

Insert(Source, S,

Вставка строки Source в строку S,

String

Index)

начиная с позиции Index

 

 

Delete(S, Index,

Удаление из строки S подстроки

String

Count)

символов длиной Count, начиная с

 

 

позиции Index

 

 

 

Val(S, V, Code)

Преобразование строки S в число v,

 

 

тип которого зависит от представления

 

 

числа в строке; параметр Code

 

 

возвращает код результата операции

 

 

(ноль, если операция выполнена

 

 

успешно)

 

 

 

 

Str(x, s)

преобразование значения числа х в

 

 

строку s

 

 

 

 

SetLength(s, k)

устанавливает длину строки s равной k

 

42

Функции преобразования типа:

Chr(x) – возвращает символ, код которого равен x. Ord(символ) – возвращает код указанного символа. IntToStr(x) – преобразует целое число x в строку. FloatToStr(x) – преобразует вещественное число x в строку.

FloatToStrF(x, f, k, m) – преобразует вещественное число x в строку. При вызове функции указывают f - формат, k - точность, m - количество цифр после десятичной точки.

Формат определяет способ изображения числа: ffGeneral – универсальный;

ffExponent – научный;

ffFixed – с фиксированной точкой;

ffNumber – с разделителями групп разрядов; ffCurrency – финансовый.

Точность – нужное общее количество цифр 7 или меньше для значения типа Single, 15 или меньше для значения типа Double и 18 или меньше для значения типа Extended

Format(x, [nl, n2, ..]) – преобразование значений nl, n2 и т.д. в строку. Способ преобразования значений в строку символов определяют управляющие символы, которые находятся в строке форматирования x.

StrToInt(x:string) – преобразует строки в целое число. StrToFloat(x:string) – преобразует строки в вещественное число.

DateToStr(dt) – преобразует значение даты в строку в формате dd.mm.yyy StrToDate(S) –преобразует строку в формат даты dd.mm.yyy

TimeToStr(dt) – преобразует значение времени в строку в формате hh:mm:ss StrToTime(S) – преобразует строку в формат времени hh:mm:ss

DayOf(dt) – возвращает номер дня в месяце, соответствующий дате, указанной.

Для строк определены операции сравнения (> , <, = и т.п.). Сравниваются коды символов, входящих в строку.

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

Со строками можно оперировать как с индексированными массивами символов. Например, S[i] - это символ, расположенный в строке в позиции i (индексы отсчитываются от 1, т.е. индекс 1 соответствует первому символу).

5.10 Подпрограммы (процедуры и функции)

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

В языке Object Pascal подпрограммы разделяют на два вида: процедуры и функции.

Каждая подпрограмма должна быть определена в разделе описания процедур и функций.

43

5.11 Описание процедур и функций

Выполняемая часть программы начинается с зарезервированного слова Begin. Текст программы представляется в виде последовательности строк – инструкций (операторов). Текст строки может начинаться с любой позиции. Каждая инструкция заканчивается точкой с запятой, поэтому можно располагать более одного оператора в строке. Завершается раздел зарезервированным словом End, после которого указывается точка.

Комментарии это пояснительный текст, который можно записывать в любом месте программы. Текст комментария должен быть ограничен символами (* … *) (или их эквивалентами { … }) и может содержать любые символы языка, в том числе русские буквы. Комментарий, ограниченный указанными символами, может занимать несколько строк программы. Однострочный комментарий начинается с двойного слэша (//) в начале строки.

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

5.12 Структура модуля языка программирования Object Pascal

Среда программирования Delphi, как и любая другая среда программирования содержит наборы стандартных подпрограмм и данных позволяющих пользователю легко и быстро создавать приложения.

Вкаждой подпрограмме реализован (запрограммирован) какой-либо стандартный алгоритм, например, вычисления синуса угла, слияния строк либо создания стандартного окна Windows.

Все подпрограммы и данные, в зависимости от назначения, объединены в Delphi в стандартные модули (библиотеки).

Основными стандартными модулями Delphi являются System, SysUtils, Windows, Messages, Variants, Classes, Graphics, Controls, Forms, Dialogs.

Элементы любого модуля Delphi: типы, константы, переменные и подпрограммы допускается использовать в программе или в других модулях, обращаясь к ним по имени (идентификатору).

Чтобы иметь доступ к элементам модуля его необходимо подключить. Для подключения имя модуля указывается в разделе Uses.

Для каждой формы проекта автоматически создается связанный с ней модуль. Объявление перечисленных выше стандартных модулей автоматически добавляется в шаблон Unit-модуля для любой формы проекта, создавая приложение, мы автоматически получаем доступ к обширному инструменту управления формой, компонентами и пр.

Кроме модулей связанных с формами, при программировании можно использовать и отдельные модули. Они добавляются в проект командой File | New | Unit, оформляются по обычным правилам языка Object Pascal и сохраняются в отдельных файлах.

Вотдельном модуле можно размещать процедуры, функции, константы и переменные, общие для нескольких модулей проекта.

44

Вотличие от программы, модуль не может быть автономно запущен на выполнение. Компилятор распознает модуль по его заголовку и создает в результате своей работы не исполняемый файл (.ехе), как для приложения, а файл модуля с расширением dcu.

Модуль состоит из заголовка, в котором после зарезервированного слова unit указывается имя модуля, и четырех разделов, каждый из которых начинается своим зарезервированным словом: интерфейса (Interface), реализации (Implementation), инициализации (Initialization) и деинициализации

(Finalization).

Общий вид структуры модуля: Unit <Имя модуля>;

Interface // Раздел внешнего интерфейса Uses <Список модулей>;

Const <Список констант>; Type <Описание типов>;

Var <Объявление переменных>; <Заголовки процедур>; <Заголовки функций>;

Implementation // Раздел реализации Uses <Список модулей>;

Const <Список констант>; Туре <Описание типов>;

Var <Объявление переменных>; <Описание процедур>; <Описание функций>;

Initialization // Раздел инициализации

<Инструкции, выполняемые один раз при первом обращении к модулю> Finalization // Раздел деинициализации

<Инструкции, выполняемые при любом завершении работы модуля> end.

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

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

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

втом порядке, в котором они перечислены в списке раздела Uses основной программы.

45

В раздел деинициализации (есть при наличии раздела инициализации, также является необязательным) включаются инструкции, выполняемые при завершении программы. Разделы деинициализации модулей выполняются в порядке, обратном порядку их перечисления в списке Uses основной программы.

5.13 Операторы (инструкции) языка Object Pascal

Операторы представляют собой законченные предложения языка, которые выполняют некоторые действия над данными.

Операторы можно разделить на простые и структурированные.

Операторы разделяются между собой точкой с запятой. Лишняя точка с запятой обозначает пустую инструкцию и не является синтаксической ошибкой.

Простые операторы

Простыми операторами называются операторы, которые не содержат себе других операторов. К ним относятся:

оператор присваивания;

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

пустой оператор – пустым оператором считается лишняя «;».

Оператор присваивания

Инструкция присваивания является основной инструкцией языка. Формат:

имя переменной := выражение; При выполнении оператора вычисляется значение выражения, стоящее

справа от знака присваивания и результат записывается в переменную, имя которой стоит слева от знака присваивания.

Примеры: Summa := 10; s:=(a+b)/2; s:=sgr(r)*pi; k:=k+1;

REZ:=(k>o) and (k<10).

Тип переменной и тип выражения должны быть одинаковыми, либо совместимыми для присваивания.

Совместимость типов при присваивании: вещественный := целый (но не наоборот); строковый := символьный (но не наоборот).

Нельзя записывать: x:=y:=0;

Вместо имени переменной можно указывать элемент массива или поле записи.

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

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

46

какой-либо другой, помеченный меткой. Меткой может быть идентификатор или целое число в диапазоне 0..9999.

Формат:

goto <метка>;

При использовании оператора необходимо помнить: метка, на которую передается управление, должна быть описана в разделе описания меток.

Обычно оператор Goto используется для преждевременного выхода из цикла или при обработке ошибок.

Вызов процедуры

Процедура это структурная единица, в которой запрограммирован завершенный алгоритм, т.е. любая процедура, выполняя определенные операций, решает конкретную задачу. В Object Pascal созданы библиотеки (модули) стандартных процедур. Основная библиотека (модуль) - SYSTEM, загружается вместе со средой Delphi. Остальные, например, модули SysUtils, Windows могут быть загружены через раздел Uses.

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

Структурированные операторы

Структурированные операторы представляют собой структуры, построенные из других операторов по определенным правилам.

Структурированные операторы: составной оператор (Begin ... end;); условный оператор (If);

оператор выбора (Case);

операторы цикла (For, While, Repeat).

Составной оператор

Составной оператор – это группа из произвольного числа операторов, заключенная в операторные скобки:

Формат: begin <оператор>;

...

<оператор>; end;

Составной оператор воспринимается как единое целое.

Условный оператор (If)

Условный оператор позволяет в зависимости от истинности условия выполнить один или другой оператор.

Полный формат:

if <условие> then <оператор1> else <оператор2>; Сокращенная форма записи:

if <условие> then <оператор>;

условие – выражение логического типа.

оператор1 и оператор2любой простой или составной оператор, том числе и условный оператор

47

При выполнении оператора вычисляется значение выражения, записанного в условии и, если значение равно True (истина), то выполняется <оператор1>, если False (ложь), то выполняется <оператор2>.

Пример:

If х >= 0 then х:=х+1 else x:=0 If q=0 then a:=1;

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

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

Формат:

Case <выражение-селектор> of <список1>: <оператор1>; <списокN>: <операторN>

else <оператор>; end;

выражение-селектор – выражение порядкового типа; Список – список констант выбора состоит из произвольного количества

значений и диапазонов, разделенных запятыми.

При выполнении оператора Case вычисляется значение выражения - селектора, после чего полученный результат сравнивается со всеми константами и значениями из диапазона соответствующего списка. Если поиск успешный, то выполняется оператор этого варианта. После этого выполнение оператора заканчивается. Если совпадения не произошло, то выполняется оператор, стоящий за словом else. Если в операторе выбора Case нет строки else, то в случае не совпадения значений выполняется следующий за Case оператор. Case единственный оператор, который заканчивается зарезервированным словом end.

Пример: case N of

1 .. 5: day:= 'Рабочий день ';

6,7 : day:= 'Выходной день '; else day:=‟ „

end;

Операторы цикла (For, While, Repeat)

Цикл - это последовательность операторов, которая выполняется более одного раза. Если количество повторов известно, то используется оператор for, если неизвестно - операторы repeat или while.

Цикл for - цикл с параметром. Формат:

For <параметр цикла >: = <выражение1> to <выражение2 > do <оператор>;

параметр цикла – переменная порядкового типа, через которую идет отсчет количества повторов;

48

Выражение1 и выражение2 являются соответственно начальным и конечным значениями параметра цикла должны иметь тип, совместимый с типом параметра цикла.

Тело цикла по формату состоит из одного оператора. Если необходимо повторять несколько операторов, то используют составной оператор.

Пример. Циклы с параметром

Var n, k:integer;

S:=0;

For n:=1 to 10 do s:=s+m[n]; For k:=0 to 2 do

For n:=5 to 10 do begin Arr1[k,n]:=0; Arr2[k,n]:=1; End;слова

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

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

пересчитываются значения элементов двумерных массивов arr1 и arr2. Цикл с параметром может быть записан и в другом формате

For <параметр цикла >: = <выражение1> downto <выражение2 > do <оператор>; При таком формате переменная цикла изменяется от начального до

конечного значения с шагом -1. Отсюда следует, что для выполнения цикла начальное значение должно быть больше конечного значения.

While (пока) - оператор цикла с предусловием.

Формат:

 

 

while <условие> do

<оператор>;

Здесь:

 

 

условие

- логическое выражение.

тело цикла по формату состоит из одного оператора. Если необходимо повторять несколько операторов, то используют составной оператор.

Работа данного оператора начинается с вычисления выражения записанного в условии. Если значение выражения равно True, то тело цикла выполняется и снова вычисляется значение выражения записанного в условии. Цикл завершается, если значение выражения становится равным False.

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

Если при первом вычислении условие принимает значение false, то тело цикла вообще не выполняется.

Например, найти сумму первых 5 натуральных чисел можно с помощью следующих инструкций:

i: =1;

while i < 5 do

49

begin S: =S+i; i: =i+1; end;

Repeat – оператор цикла с постусловием. Формат:

Repeat <тело цикла> until <условие>;

Здесь:

слова обозначают: Repeat – повторять; until – до тех пор; условие – логическое выражение.

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

Работа оператора начинается с выполнения тела цикла, после чего вычисляется выражение, записанное в условии. Если значение выражения равно False, тело цикла выполняется и снова вычисляется значение выражения. Цикл завершается, если значение выражения записанного в условии становится равным True.

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

Пример, найти сумму первых 5 натуральных чисел можно с помощью следующих инструкций:

i: =1; Repeat S: =S+i; i: =i+1;

until i > 5;

Оператор доступа (With)

При обращении к свойствам и методам объектов в Delphi используются составные имена. Имя объекта и название свойства разделяются точкой, например, Form1.Label1.Caption. Оператор доступа With позволяет избежать повторных ссылок на объект в записи кода программы.

Формат:

With <имя объекта> do <оператор>;

В операторе, расположенном после слова do, для обращения к составной части объекта можно не указывать имя этого объекта, которое уже задано после слова with.

Например, запись кода:

Forml.Label1.Left := Forml.Label1.Left +17;

Forml.Label1.Caption := „Привет!‟;

Forml.Label1.Font.Color := clRed;

может быть сокращена:

With Forml.Label1 do begin

50

Left := Left +17;

Caption := „Привет!‟;

Font.Color := clRed; end;

5.14 Подпрограммы

Подпрограмма – логически законченная и специальным образом оформленная часть программы, которая может вызываться по имени для выполнения из других точек программы неограниченное число раз.

Использование подпрограмм позволяет улучшить структурированность программы, так как основная программа содержит основной алгоритм решения задачи, а в подпрограммах оформляются вспомогательные алгоритмы.

Вязыке Object Pascal подпрограммы разделяют на два вида: процедуры и функции.

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

Каждая пользовательская подпрограмма должна быть объявлена в разделе описания процедур или функций основной программы.

Описание пользовательских подпрограмм

Подпрограммы (процедуры и функции) имеют такую же структуру, как и основные программы.

При описании подпрограммы указывается ее имя, список формальных параметров и выполняемые подпрограммой действия (тело подпрограммы).

Описание процедуры

Procedure имя [(список формальных параметров с указанием типа)]; <описание локальных параметров>

Begin

<операторы тела процедуры> end;

Список параметров не является обязательным.

Описание функции

Function имя [(список формальных параметров с указанием типа)]: тип возвращаемого результата;

<описание локальных параметров>

Begin

< операторы тела функции> end;

Локальными параметрами могут быть: переменные (var); константы (const); метки (label); процедуры и функции и др. Локальные параметры могут быть использованы только при работе подпрограммы, к ним нет доступа из основной программы.

Вызов подпрограмм

При вызове подпрограммы указываются имя подпрограммы и список аргументов (фактических параметров), передаваемых подпрограмме.