- •Псевдокод
- •Один из примеров псевдокода - школьный алгоритмический язык.
- •Блок-схема
- •Запись на псевдокоде
- •Вопросы для самоконтроля
- •Сортировка с помощью прямого включения
- •Формулы бэкуса-наура
- •Перминов о.Н. Программирование на языке Паскаль
- •Синтаксические диаграммы
- •Алгоритмы сортировки
- •Сортировка с помощью прямого выбора (линейная)
- •Сортировка с помощью прямого обмена (пузырьковая)
- •Быстрая сортировка (ч. Хоара, сортировка с помощью разделения)
- •Рекурсия
- •Параметры-процедуры и параметры-функции
- •Символьные типы
- •Строковые типы
- •Строковые типы в Borland Pascal
- •Строковые типы в Delphi
- •Множества
- •Тип "запись" (record)
- •Вариантная часть записи
- •Процедуры и функции для работы с файлами
- •Работа с текстовыми файлами*
- •Работа с типизированными и нетипизированными файлами
- •Типизированные файлы
- •Последовательный и прямой доступ к файлам
- •Нетипизированные (бестиповые) файлы
- •Класс tfilestream (факультатив, для зачета 1 семестра не требуется)
- •Работа с данными файла
- •Закрытие файла
Параметры-процедуры и параметры-функции
Процедурный и функциональный типы задаются общим видом заголовка подпрограммы без указания ее конкретного имени.
ПРИМЕР 1. ОПИСАНИЕ ПРОЦЕДУРНОГО И ФУНКЦИОНАЛЬНОГО ТИПОВ
Type
FunctReal=function(x:Real):Real; {функция с вещественным параметром, возвращающая вещественное значение}
ProcNoParam=procedure; {процедура без параметров}
В определении типов обязательно указываются все параметры (и тип результата - для функции).
Возможно определение переменных процедурного и функционального типов.
В качестве фактических параметров нельзя использовать стандартные процедуры и функции (способ обхода ограничения - см. в примере 2).
Borland Pascal
Для передачи в подпрограмму значений процедурного или функционального типа нужно после заголовка соответствующей подпрограммы указать в ее описании зарезервированное слово far, либо задать для нее режим компиляции {$F+}.
Ключ компиляции {$F+} (команда меню Options>Compiler>Code Generation-Force far calls) обеспечивает выбор модели вызовов процедур и функций: {$F+} - дальняя (FAR); {$F-}- ближняя модель (NEAR) ).
Delphi
Данные установки не требуются (в примере 2 - зачеркнуто).
ПРИМЕР 2. ИСПОЛЬЗОВАНИЕ ПАРАМЕТРОВ-ФУНКЦИЙ
Type
Functype=function (t:real):real;
Var
x:real;
Function Fx(x:Real; F:Functype):real;
begin
Fx:=F(x);
End;
{$F+}
Function Ln2(x:real):real;
Begin
Ln2:=ln(x); // использование стандартной функции Ln
End;
{$F-}
Function
exp2(x:real):real;far;
Begin
exp2:=exp(x); // использование стандартной функции Exp
end;
begin
x:=1;
Writeln(x:8, Fx(x,Ln2));
Writeln(x:8, Fx(x,exp2))
end.
ТЕМА. МОДУЛИ (UNIT)
МОДУЛИ
СТРУКТУРА МОДУЛЯ |
UNIT <имя_модуля> заголовок модуля, обязательный. Используется для связи модуля с главной программой/другими модулями
|
INTERFACE раздел внешних объявлений, обязательный (интерфейсная секция, секция связи)
Содержит имена модулей, необходимых в интерфейсной части данного модуля (при определении констант, типов, переменных, параметров подпрограмм).
Объявления констант/переменных/типов/заголовки подпрограмм/методов, доступных в самом модуле и за его пределами (в других модулях/программах), при подключении данного модуля. |
IMPLEMENTATION раздел реализации, обязательный.
Список модулей, используемых в разделе реализации
|
INITIALIZATION раздел инициализации, необязательный.
Операторы, выполняемые 1 раз перед выполнением основной программы (стартовые значения переменных, одноразовые действия). Если в программе несколько модулей содержат разделы инициализации, то они выполняются в порядке перечисления модулей в директиве uses. |
FINALIZATION раздел завершения, необязательный.
Операторы, выполняемые при завершении работы программы, например, освобождение всех элементов, назначенных в разделе инициализации. Раздел может присутствовать только в модуле, где есть раздел initialization Выполняется по окончании работы программы; для нескольких модулей - в порядке, обратном их перечислению в директиве uses. |
END. |
ПРИМЕР 1. ПЕРЕВОД ЧИСЛА В ДЕСЯТИЧНУЮ СИСТЕМУ счисления
Рис.1. Главная форма проекта |
|
СТРУКТУРА МОДУЛЯ |
МОДУЛЬ С ФУНКЦИЕЙ ПЕРЕВОДА (Convert.PAS) |
МОДУЛЬ ГЛАВНОЙ ФОРМЫ (MAINFRM.PAS) |
UNIT <имя_модуля> заголовок модуля |
UNIT Convert; |
UNIT MainFrm; |
INTERFACE раздел внешних объявлений |
INTERFACE
function AnyToDec(chis:String; osn:Integer):Integer;
|
INTERFACE {набор модулей, пополняемый при добавлении компонентов на форму} USES Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; // ОБЪЯВЛЕНИЕ КЛАССА (ТИПА) - ФОРМЫ TYPE TForm1 = class(TForm) { компоненты, размещаемые на форме, и методы-обработчики событий; добавляются автоматически } GroupBox1: TGroupBox; Edit1: TEdit; Edit2: TEdit; Label1: TLabel; Label2: TLabel; Panel1: TPanel; Button1: TButton; Label3: TLabel; Memo1: TMemo; procedure Button1Click(Sender: TObject); ... end; // ОБЪЯВЛЕНИЕ ОБЪЕКТА (ПЕРЕМЕННОЙ) - ФОРМЫ VAR Form1: TForm1; |
IMPLEMENTATION раздел реализации |
IMPLEMENTATION CONST ChrDgts:String='0123456789ABCDEF'; function AnyToDec(chis:String; osn:Integer):Integer; var d, Res,i:Integer; begin Res:=0; d:=1; For i:=Length(chis) downto 1 do begin Res:=Res+ (Pos(UpCase(chis[i]),ChrDgts)-1)*d; d:=d*osn; end; AnyToDec:=Res; end; |
IMPLEMENTATION {$R *.dfm} // Подключение настроек формы uses Convert; // Подключение модуля с описанием функции преобразования числа
// РЕАЛИЗАЦИЯ МЕТОДОВ (ПОДПРОГРАММ) procedure TForm1.Button1Click(Sender: TObject); var E1t,E2t:string; begin e1T:=Edit1.text; e2T:=Edit2.text; Memo1.Lines.Add(E1T+'('+E2t+')='+ IntToStr(AnyToDec(e1t,StrToInt(e2t)))+ '(10)'); end; |
INITIALIZATION раздел инициализации |
ОТСУТСТВУЕТ |
ОТСУТСТВУЕТ |
FINALIZATION раздел завершающих действий |
ОТСУТСТВУЕТ |
ОТСУТСТВУЕТ |
END. |
END. |
END. |
ПРИМЕР 2. Проект, содержащий две формы
|
При нажатии на кнопку «Добавить строку» первой формы выводится вторая форма, при нажатии на кнопку «OK» второй формы содержимое поля редактирования Edit1 переносится в memo-поле (многострочное поле) первой формы. |
program Project1; uses Forms, // <имя модуля> in '<имя файла модуля>' [{<имя формы>}]; Unit1 in 'Unit1.pas' {Form1}, Unit2 in 'Unit2.pas' {Form2}; {$R *.res} // директива компилятора - подключение файла ресурсов begin Application.Initialize; // инициализация приложения // Создание форм приложения: Application.CreateForm(TForm1, Form1); Application.CreateForm(TForm2, Form2); Application.Run; // запуск приложения end. |
UNIT Unit1; //ЗАГОЛОВОК МОДУЛЯ INTERFACE //РАЗДЕЛ ИНТЕРФЕЙСА Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; TYPE TForm1 = class(TForm) // описание типа формы Memo1: TMemo; Button1: TButton; procedure Button1Click(Sender: TObject); ... end; VAR Form1: TForm1; // объявление переменной-формы Form1 IMPLEMENTATION //РАЗДЕЛ РЕАЛИЗАЦИИ uses Unit2; // подключение модуля второй формы (Unit2) {$R *.dfm} // подключение файла описания формы Unit1.dfm procedure TForm1.Button1Click(Sender: TObject); begin Form2.showmodal; // обращения к объявлениям модуля Form2 end; END. |
UNIT Unit2; //ЗАГОЛОВОК МОДУЛЯ INTERFACE //РАЗДЕЛ ИНТЕРФЕЙСА uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons; TYPE TForm2 = class(TForm) // описание типа формы Edit1: TEdit; BitBtn1: TBitBtn; BitBtn2: TBitBtn; procedure BitBtn1Click(Sender: TObject); ... end; VAR Form2: TForm2; // объявление переменной-формы Form2 IMPLEMENTATION //РАЗДЕЛ РЕАЛИЗАЦИИ uses Unit1; // подключение модуля первой формы (Unit1) {$R *.dfm} // подключение файла описания формы Unit2.dfm procedure TForm2.BitBtn1Click(Sender: TObject); begin Form1.memo1.Lines.Add(Edit1.text); // обращения к объявлениям первого модуля (Form1) end; END. |
|
ТЕМА. СИМВОЛЬНЫЕ И СТРОКОВЫЕ ТИПЫ
