Файловая переменная не может быть задана константой

Назначение файла

Процедура assign(f,'<имя_файла>'); служит для установления связи между файловой переменной f и именем того файла, за действия с которым эта переменная будет отвечать.

На разных этапах работы программы одной и той же файловой переменной можно присваивать разные значения. Например, если в начале программы мы напишем

assign(f,'input.txt'); ― то переменной f будет соответствовать файл, из которого производится считывание входных данных, вплоть до того момента, когда в программе встретится, скажем, команда

assign(f,'output.txt'); ― после которой переменной f будет уже соответствовать тот файл, куда выводятся результаты.

Строка '<имя_файла>' может содержать полный путь к файлу. Если путь не указан, файл считается расположенным в той же директории, что и исполняемый модуль программы. Именно этот вариант обычно считается наиболее удобным.

Открытие файла

В зависимости от того, какие действия программа собирается производить с открываемым файлом, возможно троякое его открытие:

reset(f); ― открытие файла для считывания из него информации; если такого файла не существует, попытка открыть его вызовет ошибку и аварийную остановку работы программы. Эта же команда служит для возвращения указателя на начало файла;

rewrite(f); ― открытие файла для записи в него информации; если такого файла не существует, он будет создан; если файл с таким именем уже есть, вся содержавшаяся в нем ранее информация исчезнет;

append(f); ― открытие файла для записи в него информации (указатель помещается в конец этого файла). Если такого файла не существует, он будет создан; а если файл с таким именем уже есть, вся содержащаяся в нем ранее информация будет сохранена, потому что запись будет производиться в его конец.

Закрытие файла

После того как ваша программа закончит работу с файлом, очень желательно закрыть его:

close(f);

В противном случае информация, содержащаяся в этом файле, может быть потеряна.

Считывание из файла

Чтение данных из файла, открытого для считывания, производится с помощью команд read() и readln(). В скобках сначала указывается имя файловой переменной, а затем ― список ввода.

Пример.

read(f,a,b,c); ― читать из файла f три переменные a, b и c. После выполнения этой процедуры указатель в файле передвинется за переменную с;

readln(f,a,b,c); ― читать из файла f три переменные a, b и c, а затем перевести указатель ("курсор") на начало следующей строки; если кроме уже считанных переменных в строке содержалось еще что-то, то этот "хвост" будет проигнорирован.

Если вспомнить, что в памяти компьютера любой файл записывается линейной последовательностью символов и никакой разбивки на строки там реально нет, то действия процедуры readln() можно пояснить так: читать все указанные переменные, а затем игнорировать все символы вплоть до ближайшего символа "конец строки" или "конец файла". Указатель при этом перемещается на позицию непосредственно за первым найденным символом "конец строки".

Запись в файл

Сохранять переменные в файл, открытый для записи командами rewrite(f) или append(f), можно при помощи команд write() и writeln(). Так же как в случае считывания, первой указывается файловая переменная, а за ней - список вывода:

write(f,a,b,c); ― записать в файл f переменные a,b и c;

writeln(f,a,b,c); ― записать в файл f переменные a, b и c, а затем записать туда же символ "конец строки".

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

Структурированные типы данных можно записывать только поэлементно.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

В квадратной матрице n-го порядка найти и вывести на экран строку, сумма элементов которой максимальна.

Program matrica;

Сonst Nmax = 20;

Var A : Array [1..nmax, 1..nmax ] Of Real;

i,j,N,Nstr : Byte;

S,Smax : Real;

Begin

Writeln ('Ввести порядок матрицы ( не более ',nmax,' )');

Readln (n);

For i:=1 To N Do

Begin

Writeln ('Введите элементы ',i,'-й строки ');

For j:=1 To N Do Read (A[i,j]);

S:=0;

For j:=1 To N Do S:=S + A[i,j];

If i=1 Then

Begin

Nstr:=1;

Smax:=S;

End

Else if S > Smax Then

Begin

Nstr:=i;

Smax:=s;

End;

End;

Writeln ( 'Номер строки : ',nstr );

For j:=1 To N Do Write (A[nstr,j]:10:3);

Writeln;

End.

СОДЕРЖАНИЕ РАБОТЫ: Написать алгоритм, составить блок-схему и отладить программу. Данные введены и выведены из файла и в файл.

Вариант Задание
№1, 9 Определить среднее арифметическое элементов строк двухмерного массива и сформировать новый одномерный массив.
№2, 10 Определить среднее арифметическое элементов столбцов двухмерного массива и сформировать новый одномерный массив.
№3, 11 Определить среднее арифметическое всех элементов двухмерного массива.
№4, 12 Определить среднее арифметическое максимальных элементов строк двухмерного массива.
№5, 13 Определить среднее арифметическое минимальных элементов строк двухмерного массива.
№6, 14 Определить среднее арифметическое максимальных элементов столбца двухмерного массива.
№7, 15 Определить среднее арифметическое минимальных элементов столбца двухмерного массива.
№8, 16 Определить сумму индексов минимального и максимального элемента двухмерного массива.

ВОПРОСЫ ВЫХОДНОГО КОНТРОЛЯ:

1. Приведите примеры описания массива.

2. Опишите принцип ввода-вывода элементов многомерного массива.

3. Как получить доступ к определенному элементу многомерного массива?

4. Опишите принцип использования вложенных циклов.

ДОМАШНЕЕ ЗАДАНИЕ

Выучить определение массива, определение, размещение в памяти; операции с элементами многомерного массива.

Наши рекомендации