Работа в Турбо Паскаль

Ввода-вывода данных в программе Турбо Паскаль. Принципы описания логических и физических файлов, правила их связывания, открытия, закрытия, переименования и анализа состояния. Основные процедуры с текстовыми, компонентными и бестиповыми файлами.

Рубрика Программирование, компьютеры и кибернетика
Вид реферат
Язык русский
Дата добавления 31.05.2010
Размер файла 63,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Минимальный блок, который может быть записан или прочитан из файла, это 1 байт. Чтобы задать его, надо установить именно такую величину буфера при открытии файла. Максимальный размер блока не может превышать 64К.

Во время отладки программ в среде Турбо Паскаль можно проверить размер буфера, поместив в окно просмотра (Watch) или анализа (Evaluate) файловую переменную f, приведенную к типу FileRec (для этого может понадобиться подключение модуля DOS):

FileRec (f), R

или

FileRec (f) . BufSize

Для чтения или записи данных в бестиповый файл используются процедуры:

BlockRead (VAR f: File; VAR Destin; Count: Word [; VAR ReadIn: Word])

BlockWrite (VAR f: File; VAR Source; Count: Word [; VAR WriteOut: Word]).

Эти процедуры осуществляют чтение в переменную Destin и запись из переменной Source не компонентов файла или его строк, а блоков, состоящих из того количества байтов, которое определено для буфера файла. Если Count больше 1, то за одно обращение будет считано Count емкостей буфера. Значение Count, меньшее единицы, не имеет смысла. Всегда должно выполняться условие:

Count * Размер_буфера < 64К.

Необязательный параметр Readin возвращает число блоков (буферов), считанное текущей операцией BlockRead. Аналогичный параметр WriteOut процедуры BlockWrite после каждой операции записи показывает число блоков (буферов), записанное в данный файл этой операцией.

Если операции записи или чтения прошли успешно, то значения Readin и WhiteOut будут равны соответствующим значениям параметров Count. Но если произошел сбой при вводе-выводе, и заказанное число блоков не перенеслось, то параметры Readin и WhiteOut будут содержать целое число удачно перенесенных блоков (неудача посередине блока практически равносильна отмене его чтения или записи).

Таким образом, эти параметры могут использоваться для контроля исполнения операций BlockRead и BlockWrite:

VAR

Fr, Fw: File;

{файловые переменные}

Readin, WriteOut: Word;

{ переменные контроля }

Destin :........;

{ приемник при чтении }

Source:........;

{ источник при записи }

BEGIN

BlockRead (Fr, Destin, 3, ReadIn);

If ReadIn <> 3 then обработка ошибки чтения;

BlockWrite (Fw, Source, 4, WhiteOut);

If WhiteOut <>4 then обработка ошибки записи;

END.

Если в вызове BlockRead последний параметр не указан, то невозможность считать заданное число блоков вызовет ошибку ввода-вывода и остановку программы.

Процедуры BlockRead и BlockWrite не имеют списков ввода и вывода, поскольку не определен тип компонента файла. Взамен их в вызовах присутствуют бестиповые переменные. Адрес начала переменной в памяти соответствует адресу области памяти, начиная с которого заданное количество байт будет выведено в файл при записи или помещено в память из файла при чтении. Передавая переменную процедуре, мы всегда тем самым передаем адрес ее содержимого, точнее, первого байта ее значения. Если переменная Х - массив

VAR

Х : Array [1..10] Of ... ;

то вызов BlockWrite или BlockRead с ней будет принимать за точку начала отсчета блока первый элемент массива. Можно более явно указать в вызове начало блока как Х[1]. Но если подставить Х[5], то отсчет блока будет вестись уже сразу с пятого элемента массива.

Особенно осторожно надо будет обращаться со ссылками при подстановке их в BlockWrite и BlockRead. Ссылки должны быть разыменованы, с тем, чтобы показывать на данные, а не на место в памяти, где хранится сама ссылка. Так, если определена ссылочная переменная Р:

TYPE

Dim = Array [0..999] of Real;

{массив}

VAR

P: ^Dim;

{ссылка на массив}

f : File;

{ бестиповый файл }

то после создания динамического массива Р^ вызовом процедуры New ( Р ) и его заполнения, он может быть записан в файл f следующим образом:

Assign (f, `DIMFILE.DAT');

{ связывание f с диском }

Rewrite (f, Size0f (Dim) );

{ открытие f для записи }

BlockWrite (f, P^, 1 );

{ запись массива в файл }

{ ^ Ссылка Р разыменована! }

Close (f);

{ закрытие файла f }

Если ошибочно написать Р вместо P^, то процедура сработает, но сохранит в файле кусок памяти, начиная с Addr(P), который вовсе не равен адресу динамического массива Addr(P')!

Чтобы прочитать впоследствии записанный массив из файла, нужно «развернуть» направление вывода данных:

{ Место под массив P^ должно быть зарезервировано! }

New (P);

Assign (f, 'DIMFILE.DAT' );

{ связывание f с диском }

Reset (f, Size0f (Dim));

{ открытие f для чтения }

BlockRead (f, P^, 1 );

{ чтение массива из файла}

{ Ссылка Р разыменована! }

Close (f);

{закрытие файла f }

Перед чтением блока в динамическую переменную ( здесь: P^ ), она должна быть корректным образом создана (через вызов New либо GetMem или присвоением значения адреса), иначе последствия будут

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

VAR

Array [1..2000] of Real;

То их элементы выстраиваются в одну сплошную цепочку. Иными словами:

Addr (B)= Addr (A)+ SizeOf (A),

Addr (С) = Addr (B) + SizeOf (B).

(Это верно не только для массивов, но и для любых статических структур кроме объектов: память в пределах блока описания переменных отводится последовательно по мере их следования.)

Используя этот факт, можно записать или считать блоком сразу несколько структур данных, приняв за начало блока первую из них:

Assign (f, `ABC.DAT');

Rewrite (f, Size0f (A)); {открыть f и записать в}

BlockWrite (f, A, 3); {него три блока сразу}

Close (f);

или

Reset (f, Size0f (A)); {открыть f и считать из}

BlockRead (f, А, 3); {него три блока сразу}

Close (f);

Другой, более специфичной областью применения бестиповых файлов является работа с системными областями памяти ПЭВМ, в том числе с видеопамятью.


Подобные документы

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

  • Особенности использования графического режима в среде Турбо Паскаль. Типы драйверов. Инициализация графики. Построение изображения на экране. Графические примитивы и работа с текстом. Разработка и реализация программ в среде Турбо Паскаль "Графика".

    курсовая работа [1,2 M], добавлен 26.09.2014

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

    лекция [55,7 K], добавлен 21.05.2009

  • Правила описания множественных типов данных, приемов использования множеств и операций над множествами в Паскаль-программах. Разработка в Турбо Паскале программы вывода всех согласных букв, которые входят хотя бы в одно слово заданного предложения.

    контрольная работа [30,8 K], добавлен 25.12.2010

  • Разновидности и задачи подпрограмм в языке Турбо Паскаль, их локальные и глобальные параметры. Использование процедуры для выполнения законченной последовательности действий. Формат объявления функции, особенности рекурсивного оформления подпрограммы.

    реферат [20,0 K], добавлен 08.02.2012

  • Развертывание системы на жестком диске, диалоговая система программирования Турбо Паскаль, запуск программы и выполнение задания. Функциональные клавиши и их назначение. Текстовый редактор, средства создания и редактирования текстов программ, курсор.

    реферат [18,6 K], добавлен 01.04.2010

  • Расчет на устойчивость в системе программирования Турбо Паскаль. Определение критического напряжения стержня по формуле Ясинского, предельной гибкости в зависимости от материала. Программирование алгоритма расчета. Порядок ввода исходных данных.

    курсовая работа [1,0 M], добавлен 27.04.2013

  • Использование графических возможностей Турбо Паскаля, подключение графического модуля Graph. Графические функции и процедуры. Общая структура графической программы. Построение фигур, определение цветов и стилей, работа с текстом, сообщения об ошибках.

    реферат [109,3 K], добавлен 28.04.2010

  • Изучение истории создания языка Турбо-Паскаль, важнейшего инструмента для обучения методам структурного программирования. Анализ меню управления всеми ресурсами интегрированной инструментальной оболочки, зарезервированных слов, символьных переменных.

    презентация [989,7 K], добавлен 06.12.2011

  • Разработка программы, создающей и управляющей базой данных, ее реализация на языке Turbo Pascal. Организация алгоритма программы. Вывод информации и возможность добавления информации в базу данных. Поиск информации в базе данных по заданному значению.

    курсовая работа [26,7 K], добавлен 19.06.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.