Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практика Алгоритмические языки.doc
Скачиваний:
11
Добавлен:
14.02.2015
Размер:
360.45 Кб
Скачать

Программа

Program Problem2;

var

name : string;

f : file of integer;

x, i : integer;

begin

write('Введите имя файла '); readln(name);

assign(f, name);

rewrite(f);

for i := 1 to 5 do write(f, i);

reset(f);

for i := 3 to 5 do

begin

seek(f, i - 1); read(f, x);

x := 10*i;

seek(f, i - 1);

write(f, x)

end;

writeln('Содержимое файла f');

reset(f);

while not eof(f) do

begin

read(f, x);

write(x, ' ')

end;

close(f);

end.

Пример 23. Компонентами файла f являются действительные числа. Найти:

а) сумму компонент; б) произведение компонент;

в) сумму квадратов компонент;

г) модуль суммы и квадрат произведения компонент;

д) последнюю компоненту файла.

Program Problem3; { Обработка компонентов файла }

const

name = 'd:\Bp\Prakt\P23\array3.dat';

type

v = file of real;

var

f : v;

a, s, sk, p : real;

i : integer;

{---------------------------------------------------------------------------------}

{Открытие файла f, соответствующего на диске файлу arra3.dat

и процедура заполнения его действительными числами}

Procedure create(var f : v);

var

i, n : integer;

a : real;

begin

assign(f, name); { доступ к файлу f }

{$i-}

rewrite(f); { открытие его для записи }

{$i+}

if ioresult <> 0 then writeln('Такой файл не существует');

write('Введите число элементов '); readln(n);

for i := 1 to n do

begin

write('Введите ', i, '-й элемент '); readln(a);

write(f, a) { запись элементов массива в файл f }

end;

close(f); { закрытие файла f }

end;

{---------------------------------------------------------------------------------}

begin

create(f);

assign(f, name); {доступ к файлу f}

{$i-}

reset(f); {Открытие файла f для чтения}

{$i+}

if ioresult <> 0 then writeln('Такой файл не существует');

s := 0; p := 1; sk := 0;

while not eof(f) do

begin

read(f, a); { Чтение элементов массива из файла f }

s := s + a; p := p*a;

sk := sk + a*a;

end;

writeln('Сумма компонент файла равна ', s:6:4);

writeln('Произведение компонент файла ', p:6:4);

writeln('Сумма квадратов компонент ', sk:12:4);

write('Модуль суммы и квадрат произведения компонент ');

writeln(abs(s):6:4, ' ', p*p:10:4);

seek(f, FileSize(f) - 1); read(f, a);

writeln('Последний компонент файла ', a:6:4);

close(f) { Закрытие файла f }

end.

Пример 24. Дан файл f, компонентами которого являются целочисленные массивы Каждый массив преобразовать в квадратную матрицу размера

а) б)

записать в файл g.

В этом примере задан не один массив, несколько целочисленных массивов по 7 элементов каждый, причем количество таковых массивов определяет пользователь. Каждый из них следует преобразовать в виде матрицы заданного вида.

Здесь мы воспользуемся двумя файлами, один - содержит элементы заданного массива, а второй - матрицы размера .

Опишем в разделе констант физические имена файлов и путь к ним:

const

n = 7;

name = 'd:\Bp\Prakt\P23\arr20a.dat';

name1 = 'd:\Bp\Prakt\P23\matr20wa.dat';

Опишем массивы и файлы

t = array[1..n] of integer; - массив по числу столбцов, s = array[1..n] of longint - массив по числу строк, m = array[1..n] of s; - массив матрица из s строк и n столбцов. С такими описаниями мы уже знакомы из предыдущих глав.

Теперь следует описать файловые переменные для этих массивов.

v = file of t; - файловая переменная для заданного одномерного массива;

vv = file of m; - файловая переменная для матриц.

type

t = array[1..n] of integer;

s = array[1..n] of longint;

m = array[1..n] of s;

v = file of t;

vv = file of m;

var

x : t;

p : s;

a : m;

f : v;

g : vv;

n1, i, j, d, k : integer;

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

Файл g открывается для записи, организуется внешний цикл по k по числу двумерных массивов n1, заданных пользователем.

rewrite(g);

for k := 1 to n1 do

begin

read(f, x);

for d := 1 to n do p[d] := 1;

for j := 1 to n do

for i := 1 to n do

begin

p[i] := x[i]*p[i];

a[j, i] := p[i]

end;

write(g, a)

end;

В цикле открывается файл для чтения read(f, x); организуется цикл для присваивания элементам p[d] значений 1, так как их придется впоследствии умножать на элементы заданного массива и таким образом получать построчно элементы матрицы. Это делается с помощью двух циклов по количеству строк и столбцов. Полученная каждая матрица, поочередно, записывается в файл g. Причем оператор записи находится внутри внешнего цикла по k: write(g, a).