Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций...
Эмиссия газов от очистных сооружений канализации: В последние годы внимание мирового сообщества сосредоточено на экологических проблемах...
Топ:
Характеристика АТП и сварочно-жестяницкого участка: Транспорт в настоящее время является одной из важнейших отраслей народного...
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов...
История развития методов оптимизации: теорема Куна-Таккера, метод Лагранжа, роль выпуклости в оптимизации...
Интересное:
Влияние предпринимательской среды на эффективное функционирование предприятия: Предпринимательская среда – это совокупность внешних и внутренних факторов, оказывающих влияние на функционирование фирмы...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Что нужно делать при лейкемии: Прежде всего, необходимо выяснить, не страдаете ли вы каким-либо душевным недугом...
Дисциплины:
2020-05-07 | 208 |
5.00
из
|
Заказать работу |
|
|
Формирование файла В Турбо Паскаль-программе выполняется только последовательно (см. часть 3). Проверка информации в файле, приведённая в программе на рис.7, выполняется также в режиме последовательного доступа. Напоминаем, что в этом режиме указатель текущей компоненты после каждой логической операции записи или чтения компоненты сдвигается к концу файла ровно на одну компоненту, т.е. автоматически устанавливается на следующую компоненту.
Прямой доступ предусматривает перемещение указателя текущей компоненты на любую компоненту файла. Причём, перемещение может осуществляться в любом направлении и с изменением направления (от начала файла к концу, от конца к началу и т.п.).
Установка указателя на требуемую компоненту выполняется обращением к процедуре
SEEK(f,i);
f – имя файловой переменной;
i – номер требуемой компоненты (переменная или константа целого типа).
Как правило, при сложной алгоритмической обработке файловой информации совместно используются последовательный и прямой доступ к компонентам файла. В таких алгоритмах полезны дополнительные системные функции и процедуры обработки:
N:=Filesize(f); - функция определения количества компонент в файле;
K:=Filepos(f); - функция определения номера текущей компоненты в файле;
Truncate(f); - процедура отсечения части файла, начиная с текущей компоненты и до конца файла (укорочение файла).
f – имя файловой переменной.
Совмещение последовательного и прямого доступа к компонентам файла позволяет выполнять различные модификации с файлом:
изменять значение компоненты или некоторого поля компонент;
исключать компоненту из файла;
записывать новые компоненты в начало, конец или на любую требуемую позицию (раздвинуть) в файл.
|
Напоминаем, что любой модификации может быть подвержен любой файл, открытый для чтения.
РЕКОМЕНДУЕМАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ ПРОГРАММНЫХ ДЕЙСТВИЙ ПРИ ОБРАБОТКЕ ФАЙЛОВ
1) Объявить все имена файлов в заголовке программы.
2) Объявить имя файла в разделе объявлений данных; объявить имя логической компоненты.
3) Выполнить обращение к процедуре связывания логического и физического файлов.
4) Если необходимо, сформировать файл:
открыть для записи;
выполнить цикл записи компонент в файл;
закрыть файл.
5) Если необходимо распечатать сформированный программой или ранее сформированный файл:
открыть для чтения;
распечатать компоненты в режиме последовательного доступа;
закрыть файл.
6) Открыть файл для чтения и обработать файл в соответствии с требуемым алгоритмом задачи, используя последовательный и прямой методы доступа к компонентам файла.
7) Закрыть файл.
ФАЙЛЫ В КАЧЕСТВЕ ПАРАМЕТРОВ ПОДПРОГРАММ
Файлы могут объявляться как формальные параметры в подпрограммах и, следовательно, использоваться в качестве фактических параметров при вызове подпрограмм. Желательно передачу файлов организовывать по наименованию. Открытие файла – параметра для обработки – и закрытие его необходимо выполнять в той подпрограмме, где он объявлен.
Примеры решения задач на обработку файлов
Пример 1.
Создать файл, состоящий из последовательности чисел целого типа. Вычислить среднее арифметическое квадратов нечётных компонент файла. Исходный файл распечатать.
Тестовый пример:
Созданный файл:
S:=32+52+72+12=84; S – сумма квадратов нечётных компонент в файле f.
K=4; K – количество нечётных компонент в файле f.
; SR – среднее арифметическое нечётных компонент.
Блок-схема алгоритма приведена на рис.8.
Шаги основного проекта алгоритма пояснены в предыдущих параграфах и не требуют детализации в виде блок-схемы.
|
Программа на языке Турбо Паскаль приведена на рис.9.
Program Pr1(f);
{Формирование файла из целых чисел и вычисление ср. арифметического нечётных компонент}
TYPE FAL=file of integer;
VAR f: FAL; {имя файловой переменной}
K: integer; {счётчик нечётных компонент}
S, a: integer; { S – сумма квадратов нечётных компонент,
а – компонента логического файла}
SR: real; { SR - среднее арифметическое нечётных компонент файла}
name: string[20]; { метка файла }
Begin
writeln(‘Введите имя файла: ‘);
readln(name);
ASSIGN(f,name);
{ писать в файл }
REWRITE(f);
writeln(‘Признак конца ввода – 999’);
writeln(‘Вводите очередное целое число’);
read(a);
while a<>999 do
begin
write(f,a);
Writeln(‘Вводите очередное целое число’);
read(a);
end;
CLOSE(f); { Файл сформирован }
writeln(‘Сформирован файл’);
{ Просмотр созданного файла }
RESET(f);
while not EOF(f) do
begin
read(f,a);
write(‘ ‘,a);
end;
CLOSE(f); { Просмотр завершён }
{Вычислено ср. ар. нечётных компонент файла f }
RESET(f); {Открыть файл для обработки}
S:=0;
K:=0;
while not EOF(f) do
begin
read(f,a);
if (a mod 2)<>0 then
begin
S:=S+SQR(a);
K:=K+1;
end;
end;
CLOSE(f);
SR:=S/K;
writeln(‘ср. ар. = ’,SR:6:2)
end. {Pr1}
Рис.9
Пример 2.
Даны символьные файлы f1 и f2. Переписать с сохранением порядка следования компоненты файла f1 в файл f2, а компоненты файла f2 - в файл f1. Вспомогательный файл не использовать. Блок-схема основного проекта приведена на рис.10.
Программа алгоритма обмена содержимым символьных файлов f1 и f2 приведена на рис.11.
Program Pr2(f1,f2);
{Программа создаёт два символьных файла и выполняет обмен их содержимым}
Var
n1,n2: integer; {соответственно кол-во компонент в файле f 1 и
в файле f2}
f1,f2: file of char;
|
a,b: char {компоненты логического файла}
Begin
ASSIGN(f1,’e:\Cat\d1.dat’);
ASSIGN(f2,’e:\Cat\d2.dat’);
Rewrite(f1); {файл f 1 открыт для записи}
write(‘Пиши в файл f1 символы’);
writeln(‘Признак конца ввода - *’);
readln; {очистить буфер перед вводом первого символа}
read(a);
while a<>’*’ do
begin
write(f1,a);
read(a);
end;
CLOSE(f1);
Rewrite(f2); {файл f 2 открыт для записи}
write(‘Пиши в файл f2 цепочку символов’);
writeln(‘Признак конца ввода - *’);
readln;
read(a);
while a<>’*’ do
begin
write(f2,a);
read(a);
end;
CLOSE(f2);
writeln(‘Файлы: f1, f2 созданы’);
{обмен компонентами, пока файлы f1 и f2 не кончились}
Reset(f1);
Reset(f2);
while(not eof(f1)) and (not eof(f2)) do
Begin
read(f1,a);
read(f2,b);
{после чтения компоненты указатель переместился за
компоненту }
seek(f1,filepos(f1)-1);
seek(f2,filepos(f2)-1);
{Перед обменом компонентами файлов f1 и f2 указатель необходимо вернуть назад на одну компоненту, иначе компоненты будут записаны на место последующих компонент}
write(f1,b);
write(f2,a);
end;
n1:=filesize(f1);
n2:=filesize(f2);
{Дописать остаток более длинного файла}
if n1>n2 then
{ файл f1 длиннее файла f2}
begin
while not eof(f1) do
begin
read(f1,a);
write(f2,a);
end;
{усечение «хвоста» более длинного файла f 1}
seek(f1,n2); truncate(f1);
end
else
{файл f 2 длиннее файла f 1}
begin
while not eof(f2) do
begin
read(f2,a);
write(f1,a);
|
end;
{усечение «хвоста» более длинного файла f 2}
seek(f2,n1);
truncate(f2);
end;
{ распечатать файл f1}
writeln(‘Файл f1 после обмена’);
seek(f1,0);
while not eof(f1) do
begin
read(f1,a);
write(a);
end;
writeln(‘Файл f2 после обмена’);
seek(f2,0);
while not eof(f1) do
begin
read(f2,a);
write(a);
end;
Close(f1);
Close(f2);
end. {Pr2}
Рис.11
Пример 3.
В заданной целой матрице A(m,n) строки, не содержащие ни одного нуля, переписать последовательно в файл f. Если файл не сформирован, сделать сообщение. Начальная строка при обработке матрицы – первая.
Тестовый пример:
В тестовой матрице вторая строка должна быть переписана в файл f. Очевидно, файл не будет сформирован, если в каждой строке матрицы встретится хотя бы один нуль.
Блок-схема основного проекта приведена на рис.12.
На рис.13 показана последовательная обработка строк:
kF – переменная-флажок, сигнализирующая, что хотя бы одна строка в файл будет записана (kF=1);
i – номер обрабатываемой очередной строки;
j – текущий номер элемента в строке;
ki – переменная-флажок: ki=0, если нет ни одного нулевого элемента в строке; ki=1, если есть хотя бы один нуль в строке.
N – количество столбцов матрицы, M – количество строк матрицы.
Остальные шаги на рис.12 не требуют детализации. Программа алгоритма задачи приведена на рис.14.
Program PR3(f);
{формирование файла из элементов строк матрицы A (M, N), не содержащих нулевых элементов}
Const M1=50;
N1=70;
Var
A: array [1..M1,1..N1] of integer;
f: file of integer;
h: integer; {логическая компонента файла}
kF,ki,i,j,M,N: integer;
Begin
ASSIGN(f,’E:\ARTM\fil.dat’);
{ формируем матрицу }
writeln(‘Введите M – кол. строк матр., N – кол. столбцов’);
write(‘M=’); readln(M);
write(‘N=’); readln(N);
writeln(‘Введите матрицу строками’);
for i:=1 to M do
for j=1 to N do
read(A[i,j]);
{ открываем файл для записи }
rewrite(f);
{выполняем просмотр строк матрицы: строки,
не содержащие нулей, записываем в файл f }
kF:=0; {флаг формирования файла}
for i:=1 to M do
begin(i)
ki:=0; {флаг наличия нуля в строке}
j:=1;
{ начало просмотра очередной строки }
REPEAT
IF A[i,j]=0 then
begin
ki:=1; {в строке есть нуль}
|
j:=n {необходимо закончить просмотр строки}
end;
j:=j+1
until j>n; {конец просмотра очередной строки}
{есть нуль в строке i?}
IF ki=0 then
{в строке нет нуля, пишем её в файл}
begin
kF:=1; { файл сформирован }
for j:=1 to N do
begin
b:=A[i,j];
write(f,b)
end;
end; {i} close(f);
{ файл сформирован?}
IF kF=1 then
{ файл сформирован, распечатать его }
begin
reset (f); {открываем файл для чтения}
while not EOF (f) do
begin
read(f,b);
write(‘ ‘, b)
end;
close (f)
end
else
writeln(‘файл не сформирован’);
end. { Pr 3}
Рис.14
|
|
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
Двойное оплодотворение у цветковых растений: Оплодотворение - это процесс слияния мужской и женской половых клеток с образованием зиготы...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!