
- •Министерство образования и науки рф
- •Введение
- •Требования к оформлению отчета*
- •Задания к лабораторным работам.
- •Лабораторная работа 2. Методы численного интегрирования.
- •Указания и требования к выполнению работы.
- •Методы численного интегрирования
- •Лабораторная работа № 3. Расчет реактора смешения для сложной реакции с линейной кинетикой
- •Требования по выполнению работы:
- •Замечания по выполнению работы.
- •Реактор идеального смешения
- •Методы решения систем линейных алгебраических уравнений.
- •Метод Жордана-Гаусса (обращения матриц).
- •Итерационные методы.
- •Лабораторная работа № 4
- •4.1 Обработка экспериментальных данных по парожидкостному равновесию.
- •Обработка экспериментальных данных.
- •38 Метанол-ацетон-гептан
- •43 Метанол-ацетон-циклогексан
- •1. Интерполирование.
- •2. Метод наименьших квадратов
- •4.2. Расчет температуры кипения и точки росы трехкомпонентной смеси.
- •Методы уточнения корней уравнений с одним неизвестным.
- •Расчет производится по следующим
- •Лабораторная работа 5 Расчет реактора идеального вытеснения
- •Требования по выполнению работы:
- •Методы решения обыкновенных дифференциальных уравнений
- •Лабораторная работа № 6 Исследование функции, нахождение ее характерных точек и ее графическое изображение в трехмерных координатах.
- •Содержание
- •Приложение –1 – описание языка турбо паскаль версия № 7.0
- •1. Алфавит языка
- •1.1. Символы, используемые в идентификаторах
- •1.2. Разделители.
- •1.3.2. Знаки операций
- •1.3.3. Зарезервированные слова
- •1.4. Неиспользуемые символы
- •2. Структура программы
- •3. Типы данных
- •3.1. Классификация типов данных
- •3.2. Простые типы данных
- •3.2.3. Символьный тип
- •3.2.4. Перечисляемый тип
- •3.2.6. Вещественные типы
- •4. Выражения
- •4.1. Переменные
- •4.2 .Константы.
- •4.2.1. Целые константы
- •4.2.4. Константные выражения
- •4.2.5. Типизированные константы
- •4.3. Стандартные функции
- •4.3.1. Арифметические функции
- •4.3.2. Функции преобразования типа
- •4.3.3. Функции для величин порядкового типа
- •4.4. Знаки операций
- •4.4.1. Арифметические операции
- •4.4.2. Логические операции
- •4.4.3. Операции с битами информации
- •4.4.4. Операции отношения
- •4.5. Круглые скобки
- •4.6. Порядок вычисления выражений
- •5. Операторы языка
- •5.1. Простые операторы
- •5.1.1. Оператор присваивания
- •5.1.2. Оператор безусловного перехода gото. Использование меток
- •5.1.3. Пустой оператор
- •5.2. Структурированные операторы
- •5.2.1. Составной оператор
- •5.2.2. Условный оператор if
- •5.2.3. Условный оператор саsе
- •5.2.4. Оператор цикла repeat
- •5.2.5. Оператор цикла while
- •5.2.6. Оператор цикла for
- •5.2.7. Использование стандартных процедур Break и Соntinue в операторах циклов repeat, while и for
- •6. Структурированные типы данных
- •6.1. Массив
- •6.2. Строка типа string
- •6.3. Аsciiz-строка
- •6.4. Запись
- •6.5. Множество
- •6.6. Файл
- •7 Динамические структуры — данных
- •7.1. Указатель
- •7.2. Работа с динамической памятью
- •7.3. Работа со структурами данных
- •8. Процедурные типы
- •9. Совместимость и преобразование типов данных
- •10 Процедуры и функции
- •10.1. Процедура
- •10.2. Функция
- •10.3. Формальные и фактические параметры
- •10.3.1 Параметры-значения
- •10.3.2. Параметры-переменные
- •10.3.3. Параметры-константы
- •10.3.4. Параметры без типа
- •10.3.5. Массивы и строки открытого типа
- •10.3.6. Параметры-процедуры и параметры-функции
- •10.4. Процедура еxit
- •10.5. Директивы подпрограмм
- •10.5.1. Директива forward
- •10.5.2. Директивы fаr и near
- •10.5.3. Директива ехтеrnal
- •10.5.4. Директива аssembler
- •Пример. Функция, определяющая максимальное из двух чисел
- •10.5.5. Директива inline
- •10.5.6. Директива interrupt
- •10.6. Рекурсивные процедуры и функции
- •11 Организация ввода-вывода
- •11.1. Стандартные процедуры и функции для всех файлов
- •Функции
- •11.2. Стандартные процедуры и функции для текстовых файлов
- •11.3. Стандартные процедуры и функции для типизированных файлов
- •Осуществляется настройка на элемент файла, с которым связана файловая переменная f. Элемент файла определяется номером №, причем нумерация элементов начинается с нуля.
- •11.4. Стандартные процедуры и функции для файлов без типа
- •11.5. Внешние устройства в качестве файлов
- •12 Объектно-ориентированное программирование в turbo pascal 7.0
- •12.1. Пример использования ооп
- •12.2. Понятие объекта
- •12.2.2. Наследование
- •12.2.3. Полиморфизм
- •12.3. Виртуальные методы
- •13 Модули
- •13.1. Заголовок модуля
- •13.2. Интерфейс модуля
- •13.3. Исполнительная часть модуля
- •13.4. Секция инициализации
- •13.5. Использование модуля в основной программе
- •13.6. Использование идентификаторов элементов модуля
- •14 Стандартные модули
- •14.1 Модуль System
- •Арифметические функции
- •Процедуры работы со строками
- •Функции работы со строками
- •Функции управления вводом-выводом
- •Процедуры управления вводом-выводом
- •Функции управления динамической памятью и адресные функции
- •Include Включение элементов множества
- •14.2. Модуль String
- •14.3. Модуль Сrt
- •C80 с080 Для совместимости с версией 3.0
- •14.4. Модуль Graph
- •14.4. Пример использования подпрограмм модуля Сrарh
8. Процедурные типы
В Turbo Pascal процедуры и функции можно рассматривать как некоторые параметры и можно использовать переменные, принимающие значение процедуры или функции. С этой цельно вводятся процедурные типы которые указывают, какой вид подпрограммы (процедуру или функцию) можно использовать в качестве параметра и с какими параметрами должны быть эти подпрограммы.
Объявление процедурного типа похоже на заголовок подпрограммы (см п. 10): пишется слово рrосеdurе или function, за которым в круглых скобках записывается список формальных параметров; для функции после списка формальных параметров через двоеточие указывается тип функции. В отличие от заголовка подпрограммы здесь не указывается имя подпрограммы.
Пример
tyре
Рroc1 = рrocedure; {процедура без параметров}
Рrос2 = рrосеdurе (var Х, Y: integer); {процедура с двумя параметрами-переменными целого типа}
Func1 = function(Х: Rеаl): Real; {функция вещественного типа С одним параметром-значением}
Далее можно ввести, переменные этих типов:
var
Р1: Proc1;
Р2: Proc2;
F1: Func1;
После этого процедурным переменным можно присваивать значения конкретных процедур и функций. Как и во всех других случаях, процедурная переменная и подпрограмма должны быть совместимы для присваивания (т.е. должны иметь одинаковое число формальных параметров, совпадающих по типам; функции, кроме того, должны иметь идентичный тип).
Существует ряд правил использования подпрограмм в качестве процедурной переменной:
они должны компилироваться с ключом компилятора {$F+} или иметь директиву far для получения полного адреса подпрограмм;
они не должны быть стандартными процедурами и функциями;
они не должны объявляться внутри других процедур и функций;
они не должны быть типа inline или interupt (пп. 10.5.5 и 10.5.6).
Пример.
{$F+} рrосеdurе Swap(vаr А, В: Вуtе);
var
Теmp: Вуtе;
begin
Теmp := А; А := В; В := Теmp
еnd;
function Tan(Angle: Real): Real;
begin
Tan:=Sin(Angle)/Cos(Angle) {проверка, что Cos(Angle)<>0, осуществляется в основной программе}
end;
{$F-}
В этом случае процедурным переменным, введенным ранее, можно присвоить значения:
F2:=Swap;
F1:=Tan;
а вызовы Р2(I,J) и F1(X) эквивалентны соответственно Swap(I,J) и Таn(Х).
Так же как и указатель, процедурная переменная занимает 4 байта памяти, в которых помещается полный адрес подпрограммы (поэтому подпрограммы необходимо компилировать с ключом {$Р+}).
Процедурные переменные можно использовать так же, как и переменные других типов: в выражениях (если эта переменная - функция), в виде оператора (если эта переменная - процедура), как компонента другой более сложной переменной, как передаваемый в подпрограмму параметр. Идея единства данных и подпрограмм получила дальнейшее развитие в объектно-ориентированном программировании.
9. Совместимость и преобразование типов данных
Когда в тех или иных операциях или операторах присутствуют данные, относящиеся к различным типам, возникает вопрос о соответствии типов. В связи с этим, говорят об идентичности типов, совместимости типов и совместимости типов для присваивания. Когда возникают проблемы с соответствием типов данных, можно осуществить преобразование тех или иных типов. Эти вопросы и будут рассмотрены в данном разделе.
9.1. Идентичность типов
Идентичность типов требуется от формальных параметров процедур и функций и соответствующих им фактических параметров во время вызова. Два типа Т1 и Т2 идентичны в следующих случаях:
Т1 и Т2 - один и тот же идентификатор типа (например, Integer, Rеаl и т.д.);
один тип объявляется эквивалентным другому.
Пример
type Т1 = Вооlean; T2 = T1; T3 = Boolean;
Все типы Т1,Т2, ТЗ и Воо1еаn идентичные типы.
type M1 = array[1..5] of Integer;
M2 = array[1..5] of Integer;
Типы М1 и М2 - не идентичные типы. Однако V1 и V2 - переменные идентичных типов:
var V1, V2: аrrау[1..5] оf Integer;
9.2. Совместимость типов
Совместимость типов требуется в выражениях (в том числе и в операциях отношения).
Два типа Т1 и Т2 совместимы в следующих случаях:
Т1 и Т2 - один и тот же тип или они идентичны;
Т1 и Т2 - вещественные типы;
Т1 и Т2 - целые типы;
один тип - вещественный, а другой - целый;
один тип представляет собой тип-диапазон другого;
оба типа являются типами-диапазонами какого-то одного типа;
оба типа являются типами-множествами с совместимыми базовыми типами;
один тип является строкой, а другой - строкой или символом;
один тип - Рointer, а другой - любой тип-указатель;
один тип Рсhar, а другой - массив символов. заканчивающийся символом с кодом 0 (только при наличии ключа компилятора {$Х+};
оба типа являются указателями, полученными с помощью адресной операции @, примененной к величинам идентичных типов (только при наличии ключа компилятора {$Т+};
оба типа -процедурные типы с идентичными типами результатов (для типа-функции), идентичным числом параметром и попарной идентичностью типов этих параметров.
9.3 Совместимость для присваивания
Эта совместимость необходима, когда значение какого-то выражения присваивается переменной, типизированной константе, функции. Если значение объекта типа Т2 присваивается объекту типа Т1, то это возможно в следующих случаях:
Т1 и Т2 - идентичные типы и не являются файловыми типами или структурированными типами, содержащими компоненты файлового типа на любом уровне структурирования;
Т1 и Т2 - совместимые порядковые типы и значение типа Т2 находится в границах возможных значений объекта типа Т1;
Т1 и Т2 - вещественные типы и значение типа Т2 находится в границах возможных значений объекта типа Т1;
Т1—вещественный тип, а Т2 - целый тип;
Т1 и Т2-строки;
Т1- строка, а Т2 - символ;
Т1 и Т2 - совместимые типы-множества и все компоненты значения типа Т2 находятся в множестве Т1;
Т1 и Т2 - совместимые указатели;
Т1 - типа РСhar, а Т2 - строковая константа (только при наличии ключа компилятора {$Х+};
Т1 - типа РChar, а Т2 - массив символов, заканчивающийся символом с кодом 0 (только при наличии ключа компилятора {$Х+});
Т1 и Т2 - совместимые процедурные типы;
Т1 - процедурный тип, а Т2 - процедура или функция с идентичным типом результата, числом параметров и попарной идентичностью типов этих параметров;
Т1 и Т2 - объектные типы и Т2 - потомок Т1;
• Т1 и Т2 - указатели на объектные типы и Т2 - указатель на потомок типа, на который указывает Т1.
9.4. Преобразование типов
В ряде случаев требуется преобразовать переменную одного типа переменную другого типа. В Turbo Pascal такое преобразование осуществляется сравнительно просто, если переменные обоих типов имеют один и тот же размер. Для этого следует указать идентификатор типа, а за ним в круглых скобках переменную исходного типа. Если новый тип – структурированный, можно в случае необходимости выбрать компоненту в соответствии с общими правилами.
Пример.
type
ВуteRec= record
Lo, Нi: Вуtе
еnd;
Wordrec = record
Low, High: Word
end;
РtrReс = record
Ofs, Seg: Word
end;
ВуtеРtr=^Вуtе;
Vаr
В: Вуtе;
W:Word;
Р: Роinter;
begin.
W:= $1234; {присвоение переменной W значения}
В := ВуteRec(W).Lo {преобразование переменной типа Word в запись из двух байтов и выделение младшего байта}
ВуteRес(W).НI := 0; {преобразование переменной типа Word в запись из двух байтов и запись в старший байт значения 0}
L :=$01234567; {присвоение переменной L значения}
W:=WordRес(L).Lоw; {преобразование переменной типаLongint. в запись из двух слов и выделение младшего слова}
В := ВуtеRес(WordRec(L).Low).Hi; {преобразование переменной типаLongintв запись из двух слов, выделение младшего слова, преобразование его в запись из двух байтов и выделение старшего байта}
В := ВуtеРtr(L); {преобразование переменной типаLongintв указатель и получение значения параметра на который он указывает}
Р :=Рtr($40, $49); {Присвоение указателю Р значения с помощью стандартной функции Рtr}
W := РtrReс(Р).Seg; {преобразование указателя в запись из двух слов выделение второго cлова (фактически адреса сегмента)}
Inc(РtrRес(Р).Ofs,4); {преобразование указателя в запись из двух слов, выделение первого слова (фактически смещения адреса) и увеличение его величины на 4 с помощью стандартной процедурыInc}
Такое преобразование возможно не только, когда исходный и окончательный типы имеют одинаковый размер. Оно возможно также в случае преобразования друг в друга двух порядковых типов (см. п. 3.2), независимо от их размера, а также преобразования параметра без типа (см. п. 10.3.4).