- •Алгоритмы
- •Свойства алгоритма
- •Способы описания алгоритмов
- •Язык программирования
- •Способы описания синтаксиса языка программирования
- •1. Бнф (Бэкуса-Наура форма)
- •Компиляторы и интерпретаторы
- •Обзор языков программирования высокого уровня (таблица)
- •Язык программирования Паскаль Первая программа на языке программирования Паскаль
- •Типы, переменные и константы
- •Основные типы данных языка Pascal
- •Операторы ввода/вывода
- •Форматы вывода
- •Выражения и операции Выражения
- •Операции
- •Операции div и mod для целых
- •Операции shl и shr для целых
- •Логические операции
- •Часто используемые правила математической логики
- •Стандартные процедуры и функции Стандартные функции
- •Стандартные функции в Dephi
- •Стандартные процедуры для целых
- •Явление переполнения
- •Погрешность округления и вычислительная погрешность
- •Примеры на суммирование рядов
- •Процедуры break и continue
- •Оператор безусловного перехода goto
- •Подпрограммы. Процедуры и функции
- •Процедуры
- •Синтаксис описания процедуры
- •Оператор вызова процедуры
- •Функции
- •Переменная Result
- •Способы передачи параметров Передача по значению. Параметры-значения
- •Передача по ссылке. Параметры-переменные (с ключевым словом var)
- •Семантика вызова подпрограммы
- •Алгоритм вызова подпрограммы
- •Статическая и автоматическая память
- •Локальные и глобальные переменные
- •Обращение к глобальным переменным и побочный эффект
- •Область видимости и время жизни объекта
- •Статическая локальная переменная
- •Перегрузка имен подпрограмм
- •Структура модуля
- •Перечислимый и диапазонный типы Перечислимый тип
- •Записи с вариантами
- •Как записи с вариантами хранятся в памяти
- •Сортировка массивов записей
- •Индексная сортировка
- •Множества
- •Стандартные подпрограммы для работы с символами
- •Виды строк в Delphi
- •Cтроки shortstring
- •Основные подпрограммы для работы со строками
- •Основные подпрограммы для работы со строками (Delphi)
- •Алгоритмы на строках
- •Использование Split
Синтаксис описания процедуры
procedure имя [(список формальных параметров)] раздел локальных описаний begin операторы end;
Оператор вызова процедуры
имя[(список фактических параметров)]
Количество и типы фактических параметров при вызове процедуры должны соответствовать количеству и типам формальных параметров.
Функции
Функция - это подпрограмма, возвращающая одно значение особым образом так, что это значение может быть непосредственно использовано в выражении.
Пример. Функция
function sign(x: real): integer; begin if x<0 then sign:=-1 else if x>0 then sign:=1 else sign:=0 end;
Для того, чтобы функция вернула значение необходимо в её теле имени функции присвоить некоторое значение. Имя функции в этом контексте ведет себя как обычная переменная, но имя функции нельзя использовать в правой части оператора присваивания в качестве значения этой переменной.
var s,a: real; begin s:=sign(-3); writeln(s); read(a); writeln(sign(a)+sign(1)); end.
Для сравнения реализуем вычисление sign в виде процедуры.
procedure CalcSign(x: real; var sign: integer); begin if x<0 then sign:=-1 else if x>0 then sign:=1 else sign:=0 end;
var a: real; s,s1,s2: integer;
begin Calcsign(-3,s); writeln(3); read(a); Calcsign(a,s1); Calcsign(1,s2); writeln(s1+s2); end.
Переменная Result
В Delphi и FreePascal неявно определена переменная Result, присваивание которой равносильно и хранит результат функции.
function Sum(n: integer): integer; var i: integer; begin Result:=0; for i:=1 to n do Result:=Result+i // Inc(Result,i) end;
Локальные переменные подпрограмм не инициализируются (место на программном стеке под них отводится при выделении памяти под запись активации), поэтому их явная инициализация обязательна.
Способы передачи параметров Передача по значению. Параметры-значения
procedure Mean(A,B: real; var MA,MG: real); . . . . . . Mean(3,2.1*C+1,MA1,MG1)
При передаче по значению соответствующим формальным параметрам при вызове присваиваются значения фактических параметров.
A:=real(3); B:=2.1*C+1;
В качестве фактических параметров могут быть выражения. Происходит вычисление выражений и, если это необходимо, преобразование их к типу формального параметра.
Передача по ссылке. Параметры-переменные (с ключевым словом var)
procedure Mean(A,B: real; var MA,MG: real); . . . . . . Mean(3,2.1*C+1,MA1,MG1)
При передаче по ссылке передаются не значения, а адреса соответствующих параметров-переменных. В результате любое изменение формального параметра-переменной внутри подпрограммы приводит к изменению соответствующего фактического параметра.
@MA:=@MA1 @-адрес @MG:=@MG1
Фактические параметры-переменные должны иметь ровно тот же тип, что и формальные. Они не могут быть выражениями и должны быть именно переменными.
Передача по ссылке используется для выходных параметров, а по значению - для входных.
Пример. Процедура swap перемены местами двух значений. Входно-выходные параметры.
procedure Swap(var A,B: real); var C: real; begin C:=A; A:=B; B:=C; end;
Семантика вызова подпрограммы
При вызове подпрограммы в памяти формируется структура следующего вида, называемая записью активации.
Записи активации располагаются в специальном участке памяти, называемом стеком выполняемой программы или программным стеком.
var r:real; function p(i:integer):real; var r:real; begin ... end; procedure q(j:integer); var z1:real; begin r1:=p(1); writeln; end; begin q(2); writeln; end
Статистическая память - это память, которая отводится 1 раз до начала программы. Автоматическая память - это память, которая выделяется на программном стеке и освобождается по ходу работы программы.