Файловая переменная не может быть задана константой
Назначение файла
Процедура 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. Опишите принцип использования вложенных циклов.
ДОМАШНЕЕ ЗАДАНИЕ
Выучить определение массива, определение, размещение в памяти; операции с элементами многомерного массива.