Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль(методичка).doc
Скачиваний:
39
Добавлен:
09.11.2019
Размер:
1.27 Mб
Скачать

Параметр процедурного типа

В Паскале допускается передача в качестве параметра имени других процедур или функций.

Например:

Type

Func = function(x,y:byte):byte;

Proc = procedure(var x,e:byte);

var

P1 : Proc; F1: Func;

При этом должны совпадать число параметров и соответственно типы параметров. Всем процедуры и функции, имена которых присваиваются процедурным переменным, необходимо компилировать в режиме {$F+}.

Описание процедурных типов вводится в разделе Type. Синтаксис описания совпадает с заголовком процедуры, однако имя процедуры в описании опускается.

Имена параметров в описании процедурного типа играет чисто иллюстративную роль. Никакого влияния на значение этого описания данные имена не оказывают.

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

Для обеспечения такой совместимости процедура, если её нужно присвоить процедурной переменной, должна удовлетворять следующим требованиям:

  1. Она должна компилироваться в состоянии {$F+} (в исходном тексте программы перед описанием такой процедуры должна быть размещена директива компилятора {$F+}, а в конце описания {$F-})

  2. Она не должна быть стандартной процедурой или функцией.

  3. Она не должна быть вложенной.

  4. Она не должна быть процедурой типа inline.

  5. Она не должна быть процедурой прерывания (interrupt).

Пример 3.

Program Primer3;

Type

Func=function(x,y:anteger):integer;

{$F+}

Function Add(a,b:integer):integer;

Begin

Add:=a+b;

end;

Function Multiplay(a,b:int):int;

Begin

Multiplay:=a+b;

end;

Function Div(a,b:int):int;

Begin

Div:=a/b;

end;

{$F-}

Procedure RAB(n,m:integer;Operation:Func); {Operation-параметр процедурного типа}

Var

i,j:integer;

Begin

for i:=1 to n do

for j:=1 to m do

write(operation (i,j):5);

end;

Begin {основная программа}

RAB(10,10,Add); {вызов процедуры RAB с последним параметром- процедурой Add}

RAB(20,10,Multiplay); ); {вызов процедуры RAB с последним параметром- процедурой Multiplay}

RAB(10,5,Div); ); {вызов процедуры RAB с последним параметром- процедурой Div}

End.

Порядок выполнения работы

  1. Изучить теоретические сведения по теме “ Разработка программы для работы с процедурным типом”.

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

  3. Показать работающую программу преподавателю.

  4. Ответить на контрольные вопросы.

Контрольные вопросы

  1. Нетипизированный параметр. Способы присвоения конкретного типа нетипизированному параметру.

  2. Назначение процедурной переменной, объявление.

  3. Обеспечение совместимости процедуры, если её нужно присвоить процедурной переменной.

Литература

  1. Гусева А. И. Учимся программировать: Pascal 7.0. - М.: Бином, 1999.

  2. Сурков Д.А., и др. Программирование в среде Borland Pascal для Windows.-Мн.: “Вышэйшая школа”, 1996.

  3. Грызлов В.И. и др. Pascal 7.0.- Киев, BHV, 1999.

  4. Вирт Н. Алгоритмы и структуры данных –М.: “Мир”, 1989

Содержание

Лабораторная работа № 1 4

Блок-схемы как графическое представление алгоритмов. Основные блоки, используемые в блок- схемах алгоритмов 4

Лабораторная работа № 2 9

Построение блок-схем алгоритмов 9

Лабораторная работа № 3 15

Вызов интегрированной среды (ИС) языка программирования Паскаль. Структура основного экрана. Изучение меню 15

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

Для выполнения каждого этапа применяются специальные средства: для ввода и редактирования текста используется редактор текстов, для трансляции програм­мы - компилятор, для построения исполняемого компьютером программного мо­дуля с объединением разрозненных откомпилированных модулей и библиотекой стандартных процедур Паскаля - компоновщик (linker), для отладки программ с анализом ее поведения, поиском ошибок, просмотром и изменением содержимого ячеек памяти компьютера- отладчик (debugger). 15

Лабораторная работа № 4 24

Написание программы на Паскале с использованием операторов ввода-вывода данных 24

Лабораторная работа № 5 27

Написание программы на Паскале 27

с использованием операторов ввода-вывода данных с различными форматами выводимых данных 27

Лабораторная работа № 6 30

Написание программы на Паскале с использованием операторов присваивания и безусловного перехода 30

Лабораторная работа № 7 34

Написание программы на Паскале с использованием условных операторов и оператора выбора Case 34

Лабораторная работа № 8 39

Написание программы на Паскале с использованием 39

операторов повтора (For, Repeat) 39

Лабораторная работа № 9 44

Написание программы на Паскале 44

с использованием операторов повтора (While) 44

Лабораторная работа № 10 46

Написание программы на Паскале для решения задач на ввод-вывод линейных и двумерных массивов 46

Лабораторная работа № 11 53

Написание программы на Паскале для решения задач на обработку линейного массива 53

Лабораторная работа № 12 57

Написание программы на Паскале для решения задач на обработку двумерного массива 57

Лабораторная работа № 13 61

Написание программы на Паскале с использованием встроенных функций 61

Лабораторная работа № 14 66

Написание программы на Паскале с использованием функций, определенных пользователем 66

Лабораторная работа № 15 69

Написание программы на Паскале с использованием процедур, определенных пользователем. 69

Лабораторная работа № 16 74

Написание программы на Паскале с использованием рекурсии 74

Лабораторная работа № 17 78

Реализация алгоритма бинарного поиска при написании программы на Паскале 78

Лабораторная работа № 18 82

Реализация алгоритмов сортировок включением и выбором при написании программы на Паскале 82

82

Лабораторная работа № 19 85

Лабораторная работа № 20 89

Реализация алгоритмов внешних сортировок при написании программы на Паскале 89

Лабораторная работа № 21 92

Написание программы на языке Паскаль с использованием разработанного собственного модуля 92

Начнем разработку модуля, который будет носить название Matrix. Программно это будет выглядеть так: 95

Unit Matrix; 95

Interface 95

Type 95

Implementation 95

Эта процедура используется при транспонировании матрицы, но ее 95

Var 97

Begin 97

Лабораторная работа № 22 97

Изучение наиболее часто употребляемых универсальных процедур и оформление их в виде личной библиотеки программиста 97

Лабораторная работа № 23 102

Написание программы на языке Паскаль с использованием стандартных строковых процедур и функций 102

Лабораторная работа № 24 106

Написание программы на языке Паскаль с использованием строковых переменных 106

Лабораторная работа № 25 112

Написание программы на языке Паскаль с использованием записей 112

Лабораторная работа № 26 116

Написание программы на языке Паскаль с использованием записей с вариантами 116

Лабораторная работа № 27 121

Написание программы на языке Паскаль с использованием множеств 121

Лабораторная работа № 28 127

Написание программы на языке Паскаль с использованием с использованием файловых переменных. 127

Разработка программы для работы с текстовым файлом 127

Лабораторная работа № 29 136

Разработка программы для работы с типизированным файлом 136

Лабораторная работа № 30 144

Разработка программы для работы с нетипизированным файлом 144

Лабораторная работа № 31 148

Изучение карты памяти. Разработка программы доступа к полям PSP 148

Лабораторная работа № 32 151

Разработка программы использования динамической памяти 151

Лабораторная работа № 33 158

Разработка программы создания связанного списка 158

Лабораторная работа № 34 162

Разработка программы для работы с процедурным типом 162

Литература 166

Содержание 167

Литература…………………………………………………………………………166

168