- •Цель работы
- •Краткая теоретическая справка
- •2.1 Среда Turbo Pascal
- •2.2 Текстовый редактор среды Турбо Паскаля
- •2.3 Словарь языка Turbo Pascal
- •2.4 Структура программы на языке Turbo Pascal
- •2.5 Операторы ввода-вывода
- •Read ([ф.П.], сп. Ввода); или read (сп. Ввода); и readln ([ф.П.], сп. Ввода); или readln (сп. Ввода); или readln;.
- •Write ([ф.П.], сп. Вывода); или write (сп. Вывода); и writeln ([ф.П.], сп. Вывода); или writeln (сп. Вывода); или writeln;.
- •Порядок выполнения работы
- •Второй блок выводимой на экран информации:
- •Третий блок выводимой на экран информации:
- •Четвёртый блок выводимой на экран информации:
- •Содержание отчета
- •Варианты заданий
- •Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •2.1 Организация цикла с предусловием
- •2.2 Организация цикла с постусловием
- •2.3 Организация цикла с параметром
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •2.1 Процедуры
- •Procedure имя_процедуры;
- •2.2 Функции
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •Методы численного интегрирования
- •2.1.1 Метод прямоугольников
- •2.1.2 Метод трапеций
- •2.1.3 Метод Симпсона
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •2.1 Понятие массивов, описание массивов в Turbo Pascal
- •А) с использованием разделов типа и переменных:
- •Б) с использованием только раздела переменных:
- •А) разделов типа и переменных в виде
- •Б) только раздела переменных в виде
- •2.2 Действия над массивами
- •2.3 Ввод данных в массивы
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •2.1 Понятия динамических переменных
- •2.2 Ссылочный тип данных и адресация
- •2.3 Создание и удаление динамических переменных
- •2.4 Динамические массивы
- •Пример 1.
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •2.1 Строковый тип данных
- •#7'Допущена ошибка !'#13'Нажмите клавишу ввода "Enter"',
- •2.2 Операции над строками
- •Concat ('abc', 'def');
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •2.1 Понятие файла
- •2.2 Взаимодействие программ с файлами
- •2.3 Инициализация файла
- •2.4 Процедуры и функции для работы с файлами
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •2.1 Модуль Graph
- •InitGraph (var Driver, Mode: integer; Path: string);
- •2.2 Вывод точек
- •2.3 Вывод отрезков прямых линий
- •SetLineStyle (Type, Pattern, Thickness);
- •2.4 Вывод прямоугольников и многоугольников
- •2.5 Вывод окружностей, эллипсов и их дуг
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
- •1 Цель работы
- •2 Краткая теоретическая справка
- •2.1 Особенности вывода текста в графическом режиме
- •2.2 Стандартные средства Graph, обеспечивающие вывод текста
- •2.3 Шрифты
- •2.4 Вывод функциональных зависимостей
- •(* Определение начальных b конечных координат графика *)
- •(* Блок вычисления и рисования синусоидальной функции.
- •(* Получение номера ошибки, если инициализация режима не произошла *)
- •(* Блок вычисления и рисования синусоиды *)
- •(* Рисование синусоиды с помощью процедуры DrawPoly)
- •3 Порядок выполнения работы
- •4 Содержание отчета
- •5 Варианты заданий
- •6 Контрольные вопросы
2.3 Создание и удаление динамических переменных
Для работы с динамическими переменными в модуле System языка Турбо Паскаль предусмотрено несколько процедур и функций.
В случае типизированных указателей динамические переменные создают с помощью процедуры new(p), которая выделяет в динамической памяти столько байтов, сколько требуется для хранения переменной заданного указателем р типа, а указателю р присваивается адрес первого байта выделенной в памяти ячейки.
В случае нетипизированных указателей динамические переменные создают с помощью процедуры getmem(p, size), которая выделяет в динамической памяти столько байтов, сколько указано переменной size, а указателю р присваивается адрес первого байта выделенной в памяти ячейки.
Для освобождения динамически выделенной для типизированных указателей памяти можно использовать процедуру dispose(p), которая очищает память, указанную ссылкой р.
В случае нетипизированных указателей для очистки динамической памяти предусмотрена процедура freemem(p, size), которая освобождает size байтов, начиная с адреса р.
После очищения (освобождения) указатели сохраняют свои значения, однако при этом указывают уже на несуществующие динамические переменные. Поэтому рекомендуется всем высвободившимся указателям присвоить значение nil.
При выделении динамической памяти полезными являются функции memavail и maxavail, первая из которых возвращает общий размер свободной динамической памяти в байтах, а вторая – размер наибольшего непрерывного участка свободной памяти.
Например,
var
p: ^real;
. . . . .
if maxavail > sizeof (real) then new(p);
. . . . .
2.4 Динамические массивы
Рассмотрим работу с динамическими массивами на примере программы перемножения прямоугольных матриц, размер которых заранее не известен, но может быть определён динамически.
Размеры перемножаемых матриц должны быть согласованы, а именно количество столбцов первого сомножителя должно равняться количеству строк второго.
Так как размер переменных заранее не известен, то процедуры new и dispose применить нельзя.
Для данной задачи подходят стандартные процедуры getmem и freemem.
Процедура getmem (var d: pointer; m: word) создаёт динамическую переменную указанного размера и присваивает значение адреса ссылочной переменной d. Если в памяти ЭВМ не хватает места для размещения переменной, то появляется сообщение об ошибке.
Процедура freemem (var d: pointer; m: word) как и процедура dispose освобождает память, отведённую под динамическую переменную, и делает эту память доступной для другого использования. Точно также после этого указателю d обязательно нужно присвоить значение nil.
Пример 1.
program Mult_Matr;
uses Crt;
type
Index_Of_Row = array [1..100] of ^VectColumn;
VectColumn = array [1..100] of integer; {здесь Index_Of_Row – имя типа ссылочных переменных, имеющих базовый тип динамического массива, VectColumn – имя типа ссылочной переменной типа "массив целых чисел"}
matrix = record {matrix – переменная типа "запись"}
N_rows, N_column: word; {Номер строки (ряда), номер столбца}
index: ^Index_Of_Row; {index – ссылка (указатель) на вектор-столбец VectColumn, длина которого равна числу строк матрицы Index_Of_Row. Каждый элемент столбца VectColumn сам является указателем на вектор-строку}
end;
var
A, B, C: matrix; {А и В – исходные матрицы, С – матрица – результат перемножения матриц А и В}
IndexSize, ElemSize, I, K: word; (* Размеры индекса и элемента матрицы, I, K – счётчики. Ссылка на элемент матрицы А имеет вид: A.index ^[I]^[K] *)
M, N: longint; (* Размеры матрицы *)
procedure CreateMatrix( var A: matrix; r c: word ); {Процедура создания матрицы}
var
j, k: word;
begin
with A do
begin
N_rows:= r; N_column:= c;
j:= N_rows * SizeOf (Pointer);
inc ( IndexSize, j );
GetMem (index^[j], k);
for k := 1 to N_column do
index^[j]^[k] := -5 + random (11);
end;
end;
begin
………………..
end.
