
- •Министерство образования и науки рф
- •Введение
- •Требования к оформлению отчета*
- •Задания к лабораторным работам.
- •Лабораторная работа 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
7.1. Указатель
Указатель в Тurbо Раsсаl дает адрес объекта, определенного типа, называемого базовым типом.
При определении типа-указателя используется этот базовый тип, перед которым ставится признак указателя
Пример
tyре
Mas = аrrау[1..10] оf Reаl; {базовый тип}
Point =^Маs; {тип-указатель на массив из 10 вещественных чисел}
Переменная типа-указателя, которая в дальнейшем будет называться просто указателем, является физическим носителем адреса величины базового типа. Она занимает 4 байта памяти (2 слова). Первое слово дает смещение адреса, а второе - адрес сегмента. Значение этой переменной можно задать процедурой New или GetMem, использованием адресного оператора @, а также присваивание ем ей значения другой переменной этого же типа. Переменной типа-указатель можно также присвоить значение nil, означающее отсутствие ссылки на какой-либо объект (фактически в этом случае переменной присваивается значение 0).
Пример.
typе
Соmplex = record {базовый тип}
Re,Im: Rеаl
end;
Point = ^Соmplех; {тип-указатель}
АdrInt =^Integer; {тип-указатель}
var
X: Соmplех;
Р1, Р2, Р3, Р4: Рoint;
Аd1: AdrInt;
…
New(Р1); {выделение нового элемента типа Соmplех}
Р2 := @X, {определение адреса переменной, X}
Р3 := Р1; {присвоение значения другого указателя}
Р4 :=nil; {присвоение значения nil}
New(Аd1); {выделение нового элемента типа Integer}
Следует иметь в виду, что указатели, ссылающиеся на объекты разных типов, сами являются объектами разных типов и для них недопустима операция присваивания значений друг другу. Указатели одного и того же типа можно сравнивать помощью операций = и <>.
Чтобы получить значение элемента, с которым связан указатель, следует взять имя указателя и после него поставить знак ^.
Пример.
Х := Р1^; {переменной Х присваивается значение элемента, на который указывает Р1}
Р3^:=Х; {элементу, на который указывает Р3, присваивается значение переменной X}
Стандартный тип-указатель Роinter дает указатель, не связанный ни с каким конкретным базовым типом. Этот тип совместим с любым другим типом-указателем, однако следует иметь в виду, что использование знака ^ после параметра типа Роinter дает параметр без типа.
В Тurbo Раscal существует операция получения адреса объекта - @, например. Х:=@У; {X - адрес параметра У}
Полученный адрес в версии 7.0 может иметь конкретный тип или быть совмеcтимым с любым указателем. Эти возможности зависят от использования ключа компилятора {$Т+/-}.
7.2. Работа с динамической памятью
Использование указателей совместно с процедурами New и Dispose позволяет осуществлять динамическое распределение памяти.
Процедура New(Р), где Р - указатель, позволяет выделить область памяти такого размера, в котором можно разместить величину базового типа. Указатель значение адреса выделенной области.
Процедура Dispose(Р), где Р - указатель, позволяет освободить область памяти, на которую указывает указатель Р, для последующего использования. После выполнения процедуры значение указателя Р становится неопределенным.
Пример. Ввести в память ПЭВМ 100 вещественных чисел, а затем вывести их в обратном порядке.
рrogram ЕХАМРLЕ;
type
Mas = array [1..100] of Real;
Point =^Mas;
var
P: Point;
i: Word;
begin
New (P) {выделение области для 100 чисел}
WriteLn('Введите 100 чисел');
for i := 1 to 100 do
Read(P^[i]);
for i := 100 down 1 do
WriteLn(Р^[i]);
Disposе(Р) {освобождение области}
end.
Существует и другая возможность работать с динамической памятью - использовать процедуры GetMem и FreeМеm.
Процедура GetMem(Р,Size), где Р - переменная типа-указатель (в том числе типа Роinter), а Size - выделяемая область памяти в байтах, позволяет выделить в динамической памяти область необходимого размера, при этом адрес выделенной области присваивается переменной Р.
Процедура FreeNem(Р,Size) - здесь параметры те же, что и в процедур GetMem, - освобождает занятую область памяти с адресом, задаваемым переменной Р и размером Size байтов. Эта область становится свободной для повторного использования, а указатель Р становится неопределенным.
Наконец, для управления динамической памятью существует еще две процедуры: Маrk и Rеleаsе.
Процедура Маrk(Р), где Р - переменная типа Рointer, фиксирует текущее состояние динамической памяти, записывая в переменную Р значение указателя свободной области динамической памяти.
Процедура Release(Р), где Р - переменная типа Pointer, позволяет вернуться к состоянию динамической памяти, определяемому переменной Р, которой был присвоено значение процедурой Маrk. При этом динамическая память, занятая после выполнения процедуры Маrk с адресами больше адреса, зафиксированного в указателе Р, освобождается.
Во избежание ситуаций, приводящих к неправильной работе с динамической памятью, нежелательно использовать процедуру Release попеременно с процедурами Dispose и FreeМеm.