Дисциплина «Программирование» Институт информатики, инноваций и бизнес-систем Люлько Виктор Иванович, старший преподаватель

advertisement
Дисциплина «Программирование»
Специальность 08080165 «Прикладная информатика (в экономике)»
Институт информатики, инноваций и бизнес-систем
Кафедра информатики, инженерной и компьютерной графики
Люлько Виктор Иванович, старший преподаватель
Тема 7. Подпрограммы.
Процедуры и функции.
Символы и строки. Алгоритмы
с использованием случайных
величин. Рекурсивные алгоритмы.
Требования к знаниям, умениям и навыкам
После изучения темы студент должен
 уметь использовать в программах процедуры и функции,
символьные и строковые величины, стандартные
процедуры и функции для работы со строками
 уметь реализовывать алгоритмы с использованием
случайных величин и рекурсивные алгоритмы
2
Содержание
1. Ключевые понятия
2. Учебный материал
3
Ключевые понятия
 Подпрограммы
 Процедуры
 Функции
 Символьные переменные
 Строковые переменные
 Случайные величины
 Рекурсивные алгоритмы
4
Учебный материал
Основные задачи лекции
 Знакомство с понятиями подпрограммы, процедуры,
функции
 Изучение особенностей описания (объявления) и
использования процедур и функций
 Знакомство с особенностями описания (объявления) и
использования символьных и строковых переменных
 Знакомство с использованием стандартных процедур и
функций для работы со строками
 Знакомство с особенностями реализации алгоритмов с
использованием случайных величин
 Знакомство с возможностями использования
рекурсивных алгоритмов
5
Учебный материал
Понятие подпрограммы (начало)
 Подпрограмма – это группа операторов, логически
законченная и специальным образом оформленная.
 Подпрограмма описывается (объявляется) один раз, а
обращаться к ней (вызывать ее) можно по ее имени
неограниченное число раз из различных частей
программы там, где требуется получить результаты
работы подпрограммы.
 Внутри подпрограммы можно описывать другие
подпрограммы, к которым можно обращаться только из
той подпрограммы, внутри которой они описаны.
6
Учебный материал
Понятие подпрограммы (окончание)
 При вызове подпрограммы указываются ее имя и список
аргументов (фактических параметров), передаваемых
подпрограмме для выполнения операторов, входящих в
состав этой подпрограммы.
 Одна и та же подпрограмма может обрабатывать
различные данные, переданные ей в качестве
аргументов.
 Подпрограммы делятся на процедуры и функции,
основное различие между которыми состоит в том, что
результатом выполнения функции является некоторое
значение, присвоенное ее имени, и это имя можно
использовать как операнд выражения.
7
Учебный материал
Процедуры, их описание (объявление) и использование
(начало)
 Описание (объявление) процедуры располагается в
программе там же, где располагаются описания
(объявления) переменных, констант, меток.
 Описание (объявление) процедуры состоит из заголовка
и блока (тела процедуры).
 Заголовок имеет формат
procedure Имя(Формальные параметры);
и состоит из ключевого слова procedure, имени
процедуры и необязательного списка формальных
параметров в круглых скобках с указанием типа каждого
параметра.
8
Учебный материал
Процедуры, их описание (объявление) и использование
(продолжение)
 Пример заголовка процедуры:
procedure x2y2(var s:real; x,y:real);
В списке формальных параметров после указателя типа
ставится точка с запятой, если же тип указан сразу для
нескольких параметров, то их идентификаторы
отделяются друг от друга запятой.
9
Учебный материал
Процедуры, их описание (объявление) и использование
(продолжение)
 Блок процедуры начинается с begin и заканчивается
end. Внутри блока располагаются операторы с
формальными параметрами, например:
procedure x2y2(var s:real; x,y:real);
//Описание процедуры
begin
s:=x*x+y*y;
end;
10
Учебный материал
Процедуры, их описание (объявление) и использование
(продолжение)
 Для обращения к процедуре используется оператор
вызова процедуры, состоящий из имени процедуры и
списка разделенных запятыми аргументов в круглых
скобках, при этом каждому формальному параметру,
указанному в заголовке процедуры, должен
соответствовать аргумент того же типа, например,
x2y2(z,t,u); //Вызов процедуры
 При обращении к процедуре выполняются операторы ее
блока с аргументами вместо формальных параметров.
11
Учебный материал
Процедуры, их описание (объявление) и использование
(продолжение)
 Если в описании процедуры формальный параметр
указан с описателем var, то при обращении к процедуре
в качестве фактического параметра передается адрес
аргумента в памяти компьютера. Значение по такому
адресу может быть изменено при выполнении
процедуры и по такому адресу может быть помещен,
например, результат выполнения процедуры. В качестве
такого аргумента может быть переменная и не может
быть выражение или константа.
12
Учебный материал
Процедуры, их описание (объявление) и использование
(окончание)
 Если в описании процедуры формальный параметр
указан без описателя var, то при обращении к
процедуре в качестве фактического параметра
передается значение аргумента в памяти компьютера.
Это значение не может быть изменено при выполнении
процедуры. В качестве такого аргумента может быть
переменная, выражение или константа.
13
Учебный материал
Функции, их описание (объявление) и использование
(начало)
 Описание (объявление) функции располагается в
программе там же, где располагаются описания
(объявления) переменных, констант, меток, описания
(объявления) процедур.
 Описание (объявление) функции состоит из заголовка и
блока (тела функции).
14
Учебный материал
Функции, их описание (объявление) и использование
(продолжение)
 Заголовок описания (объявления) функции имеет
формат
function Имя(Формальные параметры):Тип результата;
и состоит из ключевого слова function, имени функции,
необязательного списка формальных параметров в
круглых скобках с указанием типа каждого параметра, а
также типа значения функции, например,
function x2y2(var x,y:real):real;
15
Учебный материал
Функции, их описание (объявление) и использование
(продолжение)
 Блок функции начинается с begin и заканчивается end.
Внутри блока располагаются операторы с формальными
параметрами, например:
function x2y2(var x,y:real):real;
//Описание функции
begin
result:=x*x;
x2y2:=result+y*y;
end;
16
Учебный материал
Функции, их описание (объявление) и использование
(продолжение)
 В блоке функции должен быть хотя бы один оператор
присваивания с именем функции в левой части этого
оператора. Последний выполненный из таких
операторов и определяет значение функции. В этих
операторах допускается использование вместо имени
функции переменной result, причем в отличие от
имени функции переменную result можно
использовать в выражениях блока функции в правой
части оператора присваивания. Использование этой
переменной дает возможность получить в любой момент
доступ к текущему значению функции.
17
Учебный материал
Функции, их описание (объявление) и использование
(продолжение)
 Для обращения к функции используется ее имя со
списком разделенных запятыми аргументов в круглых
скобках, при этом каждому формальному параметру,
указанному в заголовке функции, должен
соответствовать аргумент того же типа. В отличие от
имени процедуры имя функции может входить в
выражения в качестве операнда, значение которого
равно значению функции в зависимости от значений
аргументов, например,
z:=x2y2(t,u); //Вызов функции
18
Учебный материал
Функции, их описание (объявление) и использование
(окончание)
 При обращении к функции передача адреса или
значения аргумента происходит так же, как и при
обращении к процедуре.
 При обращении к функции выполняются операторы ее
блока с аргументами вместо формальных параметров.
19
Учебный материал
Описание (объявление) символьных и строковых
переменных (начало)
 Символьный тип данных (сhar) используется для
представления любого символа из набора допустимых
символов. Для каждого символа отводится один байт
памяти.
 Пример описания (объявления) величин символьного
типа:
var a,s: char;
 К символам можно применять операции сравнения
(<, <=, =, >, >=, <>), при этом сравниваются коды
символов.
20
Учебный материал
Описание (объявление) символьных и строковых
переменных (окончание)
 Строки представляют собой последовательности
символов. Строки при описании (объявлении)
обозначаются ключевым словом string с возможным
указанием максимальной длины строки, например:
var s: string; t: string[30];
Длины строк в описаниях (объявлениях) можно задавать
именованными константами.
21
Учебный материал
Использование символов и строк (начало)
 Некоторые функции для символьных величин:
Функция
Описание
Тип
аргумента
результата
char
integer
integer
char
Pred(s) например, pred('b') => 'a'
char
char
символ,
Succ(s) Последующий
например, succ('b') => 'c'
char
char
Ord(s)
Код (порядковый номер)
символа, например,
ord('b') => 98
Chr(n)
Преобразование в символ,
например, chr(98) => 'b'
Предыдущий символ,
22
Учебный материал
Использование символов и строк (продолжение)
 Строки можно присваивать друг другу (операция
присвоения := ).
 Если максимальная длина результирующей строки
меньше длины исходной строки, то лишние символы
справа отбрасываются, например:
var s1: string[3];
s2: string[6];
...
s2:='Summer';
s1:=s2;
//s1:='Sum'
23
Учебный материал
Использование символов и строк (продолжение)
 Строки можно объединять (сцеплять, склеивать) между
собой с помощью операции конкатенации, обозначаемой
знаком +, например:
s1:='Sum';
s2:='mer';
s3:=s1+s2;
//s3:='Summer'
24
Учебный материал
Использование символов и строк (продолжение)
 Строки можно сравнивать между собой с помощью
операций сравнения, при этом справедливы, например,
следующие соотношения:
'abc'>'ab'
'abc'='abc'
'abc'<'abc '
 К отдельному символу строки можно обращаться как к
элементу массива символов, например, s1[4].
 Один символ из строки совместим с величиной типа
char и их можно использовать в выражениях
одновременно.
25
Учебный материал
Использование символов и строк (окончание)
 При вводе и выводе может использоваться имя строки,
например:
readln(s1,s2);
writeln(s3);
 При вводе в строку считывается количество символов,
равное длине строки или меньшее, если клавиша Enter
будет нажата раньше.
 При выводе для строки отводится количество позиций,
равное ее фактической длине.
26
Учебный материал
Использование стандартных процедур и функций для
работы со строками (начало)
 Некоторые функции для работы со строками:
Процедура или функция
с именем
и примером перечня
аргументов
Описание
1
2
Функция
Concat(s1,s2,...,sN)
Возвращает строку, являющуюся слиянием строк
s1,s2,...,sN. Действие функции аналогично операции
конкатенации
Функция
Copy(s,start,len)
Возвращает подстроку длиной len, начинающуюся с
позиции start строки s
Процедура
Delete(s,start,len)
Удаляет из строки s, начиная с позиции start, подстроку
длиной len
Процедура
Insert(subs,s,start)
Вставляет подстроку subs в строку s, начиная с позиции
start
27
Учебный материал
Использование стандартных процедур и функций для
работы со строками (продолжение)
 Некоторые функции для работы со строками:
1
2
Функция
Length(s)
Возвращает фактическую длину строки
Функция
Pos(subs,s)
Ищет вхождение подстроки subs в строку s и возвращает
номер первого символа subs в s или нуль, если subs не
содержится в s
Процедура
Str(x,s)
Преобразует числовое значение x в строку s, при этом для x
может быть задан формат, как в процедурах Write и
Writeln, например Str(x:8:2,s)
Процедура
Val(s,x,errcode)
Преобразует строку s, содержащую символьное
представление числа, в значение числовой переменной x.
При успешном преобразования значение переменной
errcode равно нулю, при обнаружении ошибки в
символьном представлении числа значение errcode будет
содержать номер позиции первого ошибочного символа в
строке s, а значение x не определено
28
Учебный материал
Использование стандартных процедур и функций для
работы со строками (окончание)
 Некоторые функции для работы со строками:
1
2
Функция
IntToStr(n)
Преобразует целочисленное значение n в строку
Функция
StrToInt(s)
Преобразует строку s в целое число
Функция
FloatToStr(x)
Преобразует вещественное значение x в строку
Функция
StrToFloat(s)
Преобразует строку s в вещественное число
Функция
AnsiUpperCase(s)
Возвращает строку s, преобразованную к верхнему регистру
Функция
AnsiLowerCase(s)
Возвращает строку s, преобразованную к нижнему регистру
29
Учебный материал
Реализация алгоритмов с использованием случайных
величин (начало)
 При реализации алгоритмов с использованием
случайных величин могут быть использованы
следующие функции и процедуры генерации случайных
чисел:
RandG(m,sq) – функция, генерирующая случайные
числа, распределенные по нормальному
закону с математическим ожиданием m
и средним квадратическим отклонением
sq;
30
Учебный материал
Реализация алгоритмов с использованием случайных
величин (продолжение)
Random(R) – функция, генерирующая равномерно
31
распределенные действительные или
целые случайные числа, причем если
необязательный целочисленный параметр
R не задан, то функция возвращает
случайные действительные числа,
равномерно распределенные в диапазоне
0<=X<1 или, по другому обозначению,
в диапазоне [0,1), а если параметр R задан,
то функция возвращает случайные целые
числа, равномерно распределенные
в диапазоне 0<=X< R или, по другому
обозначению, в диапазоне [0,R).
Учебный материал
Реализация алгоритмов с использованием случайных
величин (окончание)
Randomize – процедура, задающая случайное начальное
значение для функций RandG или Random
(иначе говоря, рандомизирует эти функции),
причем если перед первым обращением к
любой из указанных функций не использовать
эту процедуру, то при каждом запуске
программы функции RandG и Random
будут генерировать одинаковые
последовательности случайных чисел, а при
использовании же этой процедуры при каждом
запуске программы последовательности
случайных чисел будут разными.
32
Учебный материал
Использование рекурсивных алгоритмов (начало)
 Рекурсивный алгоритм предполагает использование
этого же алгоритма при своей реализации. При
реализации рекурсивного алгоритма используется
рекурсивная подпрограмма (процедура или функция), в
которой содержится обращение к этой же подпрограмме.
 При обращении подпрограммы к самой себе, как и при
обращении к любой другой подпрограмме, используется
стек для записи информации, необходимой для работы
подпрограммы и для последующего выхода из нее и
возврата в вызывающую программу. При повторных
вызовах этот процесс повторяется.
33
Учебный материал
Использование рекурсивных алгоритмов (продолжение)
 Для завершения вычислений каждая рекурсивная
подпрограмма должна содержать нерекурсивную часть
алгоритма, реализующую возврат в вызывающую
программу и вызывающую соответствующее
освобождение стека.
 Например, для вычисления суммы первых N чисел
натурального ряда может быть использовано
рекуррентное соотношение вида SN=SN-1+N при условии,
что S1=1.
34
Учебный материал
Использование рекурсивных алгоритмов (окончание)
 Описание соответствующей рекурсивной функции может
выглядеть следующим образом:
function sumN(N:integer):integer;
begin
if N=1 then sumN:=1 //Нерекурсивная часть
else sumN:=sumN(N-1)+N;
//Рекурсивная часть
end;
35
Использование материалов презентации
Использование данной презентации, может осуществляться только при условии соблюдения требований законов РФ
об авторском праве и интеллектуальной собственности, а также с учетом требований настоящего Заявления.
Презентация является собственностью автора. Разрешается распечатывать копию любой части презентации для
личного некоммерческого использования, однако не допускается распечатывать какую-либо часть презентации с
любой иной целью или по каким-либо причинам вносить изменения в любую часть презентации. Использование
любой части презентации в другом произведении, как в печатной, электронной, так и иной форме, а также
использование любой части презентации в другой презентации посредством ссылки или иным образом допускается
только после получения письменного согласия автора.
36
Download