
- •1. Типы в Турбо-Паскале. Объявление новых типов. Порядковые типы.
- •2.Структура программы в тп.
- •3. Подпрограммы. Применение. Структура описания. Отличие процедуры от функции.
- •4. Вложенные подпрограммы
- •5. Вызов подпрограмм (формальные и фактические параметры).
- •6.Процедуры без параметров и с параметрами.
- •7.Передача в подпрограмму параметров- массивов и параметров-строк
- •8. Функции
- •9. Рекурсия
- •10. Символьный тип
- •17. Процедурные типы
- •11. Строковый тип
- •12.Множества
- •13. Записи
- •14. Файлы
- •15. Текстовые файлы
- •16. Типизированные и нетипизированные файлы
- •18.Указатели и динамическая память
- •19. Среда тп. Основные выполняемые функции. Система меню.
- •20. Модули
- •21. Структуризация. Восходящее программирование.
- •22. Нисходящее программирование.
- •23.Этапы подготовки и решения задач на эвм.
- •24. Тестирование программных средств из одного модуля.
- •25. Межмодульное тестирование программных средств.
- •27. Диалоговые программы
- •28. Жизненный цикл программы.
- •31. Возможности Norton Commander.
- •32.Компиляция программы
- •34. Динамические структуры данных. Очередь.
- •35. Однонаправленные списки.
- •36.Стек. Дек.
- •37. Двунаправленные списки.
- •38. Среда delphi.
16. Типизированные и нетипизированные файлы
Типизированные файлы позволяют организовать прямой доступ к каждой из компонент (по его порядковому номеру), поскольку длина любого компонента типизированного файла строго постоянна. Описание файловой переменной для таких файлов выполняется в следующем виде
Var <ф.п.>: file of <тип_компонетов>;
Перед первым обращением к процедуре ввода-вывода указатель файла стоит в его начале и указывает на компонент с номером куль. После каждого чтения или записи указатель сдвигается с следующему компоненту файла. Переменные в списках ввода-вывода должны иметь тот же тип, что и компоненты файла. Если этих переменных в списке несколько, указатель будет смешаться после каждой операции обмена данными между переменными и дисковым файлом. Для работы с типизированными файлами определены следующие процедуры и функции (табл.9). Процедура SEEK и функции FILESIZE, FILEPOS нельзя использовать для текстовых файлов. Нетипизированные файлы объявляются без указания типа ключевым словом FILE: TYPE <имя_типа>=FILE, а переменные для нетипизированных файлов описываются в виде: VAR <ф.П.>: FILE;
Для данных файлов не указывается тип компонентов, что делает их совместимыми с любыми другими файлами и позволяет организовать высокоскоростной обмен данными между диском и памятью. При инициализации нетипизированных файлов процедурами RESET и REWRITE указывается длина записи нетипизированного файла в байтах. Длина записи указывается вторым параметром и может быть представлена выражением типа WORD. Для обеспечения максимальной скорости обмена данными следует задавать длину, кратную длине физического сектора дискового носителя (512 байт). При работе с нетипизированными файлами применяются все рассмотренные процедуры и функции, доступные типизированным файлам, за исключением READ и WRITE, которые для чтения и записи заменяются соответственно высокоскоростными процедурами BlockREAD и BlockWRITE.
.
18.Указатели и динамическая память
Динамическая память - оперативная память персонального компьютера, предоставляемая программе при ее работе, за вычетом сегмента данных (64 Кбайт), стека (16 Кбайт) и собственно тела программы. Ее применение является фактически единственной возможностью обработки данных большой размерности. По умолчанию размер динамической памяти составляет не менее 200..300 Кбайт (вся доступная память ПК), однако может изменяться настройкой среды Турбо Паскаля. Для управления динамической памятью используются указатели. Указатель - это переменная, которая в качестве своего значения содержа адрес байта памяти (или номер ячейки оперативной памяти, состоящей из сегмента и смещения). Указатели делятся на типизированные и нетипизированнные. Они описываются они в разделе VAR как
<имя переменной>: <тип_указателя>;
Для объявления типизированного указателя используется символ, который помещается перед соответствующим типом. Поскольку нетипизированные указатели не связаны с конкретным типом, с их помощью удобно размещать данные, тип которых меняются в процессе работы программы. Нетипизированный указатель не может быть явно выведен на экран или печать. Вся динамическая память в турбо паскале рассматривается как сплошной массив байтов, который называется кучей. Физически куча размещается в старших адресах сразу за областью памяти, которую занимает тело программы. Память в куче под любую динамически размещаемую переменную выделяется процедурой
HEW (<типизированиый_указатель>;
В результате обращения к ней указатель приобретает значение, соответствующее динамическому адресу, начиная с которого можно разместить данные После того, как определен физический байт памяти, по указанному адресу можно разместить любое значение соответствующего типа. Для адресного типа разрешены операции присваивания между указателями одного типа. Указатели можно сравнивать на равенство и неравенство. В ТП можно передавать значения только между указателями, связанными с одним и тем. же типом данных. Не допустимо в выражениях смешивать адреса(указатели) и значения (данные). Для освобождения динамической памяти (возврата динамической памяти в кучу) используется процедура DISPOSE (<типизированный указатель>. Повторное применение процедуры DISPOSE к свободному указателе приведет к возникновению ошибки периода исполнения. Поэтому для пометки освободившегося указателя обычно используется зарезервированное слово NIL (пустой). Все операции с кучей выполняются под управлением особой программы, которая называется администратором кучи. Она ведет учет всех свободных фрагментов в куче. При очередном обращении к процедуре NEW администратор отыскивает в куче наименьший свободный фрагмент, в котором может разместиться требуемая переменная. Адрес начала найденного фрагмента возвращается в указателе, а сам фрагмент или его часть нужной длины помечается как занятая часть кучи. Для работы с нетипизированными указателями используют процедуры: GЕТМЕМ(<нетип.указатель),SIZE); для резервирования памяти, FEEMЕМ(<нетип. указатель) ,SIZE); для освобождения памяти. SIZE - размер в байтах требуемой или освобождаемой части кучи. За одно обращение к куче процедурой GETMEM можно зарезервировать до 65521 байта динамической памяти. При работе с динамической памятью необходимо соблюдать правило: освобождать столько памяти, сколько ее было зарезервировано., и именно с того адреса, с которого она была зарезервирована.