Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Теоретические сведения. Цель работы–детальное изучение файлов данных и способов доступа к ним; приобретение навыков ввода-вывода простых переменных различных типов; ознакомление с




ТЕКСТОВЫЕ ФАЙЛЫ

 

Цель работы –детальное изучение файлов данных и способов доступа к ним; приобретение навыков ввода-вывода простых переменных различных типов; ознакомление с вводом-выводом индексированных переменных, массивов; применение форматирования выводимой информации.

Постановка задачи:

1. Исходные величины представить в виде внешнего текстового файла, ввести их из файла и вывести на экран в формате.

2. Ввести исходный массив из текстового файла. Вывести его в естественном виде. Выполнить задание. Результаты вывести в другой текстовый файл.

Физические файлы

Файл – поименованная область для хранения данных на физическом носителе. Доступ к файлу для обмена данными происходит по имени.

Устройства ЭВМ, с которыми происходит обмен данными, в MS DOS также рассматриваются как файлы и имеют свои имена:

CON – клавиатура (экран дисплея); если ‘СОN’ организован для чтения, то это клавиатура, если для записи – экран;

LPT1, LPT2, LPT3 – параллельные порты (если установлены) – порты вывода данных;

PRN – принтер (синоним LPT1);

COM1, COM2 – последовательные порты коммуникации – порты ввода-вывода;

AUX – синоним COM1;

NUL – фиктивное устройство (бездонный файл) – только для вывода.

Логические файлы

Логический файл описывается с помощью переменной одного из файловых типов:

Var f: <файловый тип>.

Он связывается с физическим файлом путем присвоения переменной файлового типа имени физического файла:

assign (f, <имя физического файла>).

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

 

Буфер

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

Для некоторых типов файлов размер буфера можно определять программно (обычно размер задается по умолчанию).

При выводе на экран эффект буферизации отключается.

 

Файловые типы

В Турбо Паскале существует три типа файлов:

· текстовые файлы – TEXT;

· типизированные (компонентные) файлы – FILE OF <тип>;

· бестиповые файлы – FILE.

Например:

Var f1: text;

f2: file of real;

f3: file;

Текстовые файлы содержат коды ASCII (в этом смысле они как бы типизированы).

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

Бестиповые файлы также хранят данные в виде кодов, но более грубо – в виде произвольного набора отдельных байтов. Чтение из такого файла должно производиться программным путем.

Минимальной единицей хранения для файлов всех типов является байт.

Файловую переменную нельзя присвоить другой файловой переменной.

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

Процедуры, общие для всех типов файлов:

Процедура Действие
ASSIGN (var f, <имя файла>: string) Связывает файловую переменную f с именем физического файла
RESET(var f) Открывает файл с логическим именем f для чтения
REWRITE(var f) Открывает файл с логическим именем f для записи
СLOSE(var f) Закрывает канал ввода-вывода с логическим именем f
RENAME (var f, <новое имя файла>: string) Переименовывает физический файл, связанный с логическим файлом f, придавая ему <новое имя>. Применимо только к закрытому файлу
ERASE(var f) Стирает (удаляет) файл f. Файл должен быть закрытым (и существовать)
EOF(var f) Функция, принимающая значение true, если головка считывающего устройства достигла конца файла, и false – в противоположном случае

 

К команде RESET(f) (т.е. организации чтения) можно обращаться многократно, при этом каждый раз считывание начинается с первого элемента.

К команде REWRITE(f) также можно обращаться многократно, но при этом вся предыдущая информация стирается полностью.

Между повторными установками RESET или REWRITE не обязательно закрывать файл (т.е. не обязательно использовать CLOSE).

Команда CLOSE(f) должна лишь ОДИН раз закрывать ОТКРЫТЫЙ файл. Если не закрыть, то ошибка не будет зарегистрирована, но в случае записи в файл (rewrite) будет записана не вся информация, а только та, которую удалось переправить посредством буфера.

В новом имени файла при переименовании нельзя менять название диска.

Текстовые файлы с остоят из строк длиной от 0 до 256 символов. Признак конца строки – #13 (как и ENTER). Он объединен с символом #10. Признак конца файла – #26 (как и ^Z). Эти символы на экран не выводятся.

Числа при записи в текстовый файл автоматически преобразуются в строки, при чтении – наоборот.

Для чтения из файла используются функции:

READ (f,<список переменных>) – считывает одно или более значений из логического файла f в одну или более переменных, указанных в списке;

READLN(f,<список переменных>) – выполняет те же действия, что и процедура Read, а затем делает переход на начало следующей строки файла.

Для записи в файл используются функции:

WRITE(f,<список выражений>) – записывает результаты выражений из списка в файл с логическим именем f;

WRITELN(f,< список выражений >) – выполняет те же действия, что и процедура Write, а затем делает переход на начало следующей строки файла.

По умолчанию размеры буфера для текстового файла – 128 бит. Для его изменения используется команда SetTextBoof(f, Buffer). Величина Buffer должна быть определена ранее в описательной части, например так:

Var Buffer: array[1..4*1024] of byte;

Эта команда должна быть использована до открытия файла (т.е. до команд RESET (f) или REWRITE(f)).

Рекомендуется размеры буфера устанавливать кратными 512: диск читается по секторам и дорожкам, длина считываемой информации колеблется от 512 до 4096 байт.

ДОПИСЫВАНИЕ текста (или чисел) в текстовый файл обеспечивается командой APPEND(f), которая должна употребляться только после CLOSE(f). После нее файл также должен быть закрыт.

Команды Eof(f) и SeekEOf(f) схожи; различие в том, что для SeekEOf(f) “прозрачны” пробелы, символы конца строки, символы #10 и символы табуляции #9.

Функция SeekEOLn (VAR FV:text):boolean возвращает True при достижении маркера конца строки, причем указатель файла пропускает все пробелы и знаки табуляции, предшествующие маркеру.

Функция SeekEOfF (VAR FV:text):boolean возвращает значение True, если указатель файла находится на маркере конца файла.

Пример выполнения лабораторной работы

Задание.

1. q = 'AB*1', a = 'DF#2', b = 'KM@3', W = -122×10-9, E = 156,

F = (1,2,3,4,5).

2. Найти разность R между максимальным и минимальным элементами массива

Программа для первой части задания:

program lab_8_1;

uses crt;

var

F:array [1..10] of integer; {Массив F}

teta,alfa,beta:string[4]; {Стринги}

w:real; {Вещественное число W}

e:integer; {Целое число Е}

i:integer; {Счетчик элементов массива F}

n:integer; {Количество элементов массива F}

fi,fo:text; {Файловые переменные fi,fo}

begin

clrscr;

assign (fi,'input8_1.pas'); {Файловой переменной fi}

{назначается файл input8_1.pas }

reset (fi); {Текстовый файл открывается для чтения}

readln(fi,teta,alfa,beta); {Чтение из файла первой строки}

readln(fi,w,e); {Чтение из файла второй строки}

readln(fi,n); {Чтение из файла третьей строки}

for i:=1 to n do read(fi,F[i]);{ Чтение из файла четвертой строки}

close(fi); {Закрывается прочитанный файл fi }

{Выводим информацию в файл:}

assign(fo,'out_8_1.pas'); {Файловой переменной fo }

{назначается файл out_8_1.pas }

rewrite(fo); {Текстовый файл fo открывается}

{для записи}

writeln(fo,' teta=',teta,' alfa=',alfa,' beta=',beta);

writeln(fo,' w=',w:12:9,' e=',e:4);

write(fo,' F=(');

for i:=1 to n do write(fo,F[i]:3);

writeln(fo,')');

close(fo); {Закрывается файл fo,}

{созданный программой}

{выводим информацию на экран:}

writeln(' teta=',teta,' alfa=',alfa,' beta=',beta);

writeln(' w=',w:12:9,' e=',e:4);

write(' f=(');

for i:=1 to n do write(F[i]:3);

writeln(')'); writeln; writeln;

writeln('Смотрите результаты в файле out_8_1.pas');

repeat until keypressed; {Ожидание нажатия клавиши}

end.

Файл исходных данных Input8_1.pas:

AB*1DF#2KM@3 -122E-9 156 1 2 3 4 5

 

Файл результата Out_8_1.pas:

teta=AB*1 alfa=DF#2 beta=KM@3 w=-0.000000122 e= 156 F=(1 2 3 4 5)

 

Программа для второй части задания:

 

program lab_8_2;

uses crt;

const MaxDim = 10; {максимальный размер матрицы}

type arr=array[1.. MaxDim,1.. MaxDim] of integer; {описание типа arr}

{для массива А }

var A: arr; {массив А}

R: integer; {разность}

Amax: integer; {максимальный элемент}

Amin: integer; {минимальный элемент}

i,j: integer; {счетчики по строкам, столбцам}

m: integer; {размер квадратной матрицы}

fi,fo: text; {файловые переменные}

begin

clrscr;

assign (fi, 'input8_2.pas'); reset (fi);

assign (fo, 'out_8_2.pas'); rewrite (fo);

readln (fi,m); {чтение размера матрицы из}

{первой строки файла}

if m>DimMax then {проверка размера матрицы}

begin

m:=DimMax;

writeln(‘Матрица из файла урезана до размера массива’);

end;

 

for i:=1 to m do {чтение из файла матрицы А}

begin

for j:=1 to m do read (fi,A[i,j]);

readln(fi); {перевод указателя файла на новую строку}

end;

close(fi);

Amin:=A[1,1]; {начальные установки}

Amax:=A[1,1];

{поиск минимального и максимального элементов:}

for i:=1 to m do

for j:=1 to m do

begin

if A[i,j] < Amin then Amin:=A[i,j];

if A[i,j] > Amax then Amax:=A[i,j];

end;

R:=Amax-Amin; {разность}

writeln (fo,' Amax=',Amax,' Amin=',Amin,' Разность=',R);

writeln ('Amax=',Amax,' Amin=',Amin,' Разность=',R);

close (fo);

repeat until keypressed;

end.

 

Файл исходных данных Input8_2.pas:

 

12 4 -7 6 1 7 -8 3 2

 

Файл результата Out_8_2.pas:

Amax=12 Amin=-8 Разность=20

 

Варианты заданий

 

Задача 1

 

1. .

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21. .

22.

23.

24.

25. .

26.

27.

28.

29.

30.

 

Варианты заданий для задачи 2 взять из лабораторной работы № 5.

 




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 340; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.092 сек.