Уроки · BAC · Информатика
Текстовые файлы: чтение, запись и большая задача
Тема из тестов ANCE: Текстовые файлы
Задача с текстовым файлом — самое дорогое задание теста, от 12 до 16 баллов, и оценивается по шагам, а не по результату. Здесь операции с файлами на двух языках и порядок, в котором набираются баллы.
- Что нужно знать
- Как это бывает на экзамене
- Разбор примера
- Типичные ошибки
- Проверь себя
Что нужно знать
Операции с текстовым файлом
| Что делаешь | Паскаль | C++ |
|---|---|---|
| описываешь | var f: text; | ifstream fin; ofstream fout; |
| связываешь с именем | assign(f, 'tur.in'); | ifstream fin("tur.in"); |
| открываешь для чтения | reset(f); | открытие происходит при описании |
| открываешь для записи | rewrite(f); | ofstream fout("tur.out"); |
| читаешь | read(f, x); или readln(f, x); | fin >> x; |
| пишешь | write(f, x); или writeln(f, x); | fout << x; |
| закрываешь | close(f); | fin.close(); fout.close(); |
reset открывает уже существующий файл для чтения. rewrite создает файл вывода, а если он существует, очищает его. Закрытие через close при записи обязательно: без него последние данные могут не попасть в файл.
Как устроены данные в тестах
Входной файл почти всегда имеет один и тот же вид: в первой строке целое число , затем строк или значений. Отсюда и порядок действий в программе:
- 1)открываешь входной файл
- 2)читаешь из первой строки
- 3) раз читаешь строку или пару значений
- 4)считаешь
- 5)записываешь результат в выходной файл в требуемом формате
- 6)закрываешь оба файла
readln переходит на следующую строку после чтения, поэтому применяется, когда каждое значение на своей строке; read оставляет курсор на той же строке и нужен, когда в строке несколько значений.
Формат вывода
Читай требование до конца: «два числа, разделенные пробелом» или «по одной строке на каждого ученика» — это отдельно оцениваемые условия. В Паскале пробел пишется явно, writeln(f, k, ' ', c), а перевод строки дает writeln, а не write.
Где баллы
В задании на 16 баллов реального профиля баллы распределены так: 1 за описание типов и переменных, 1 за заголовок требуемой функции, 1 за операции с файлом, 1 за чтение , 1 за циклический оператор, 1 за чтение данных, 1 за вызов функции, остальные — за шаги алгоритма и за запись в файл, где даже пробел между значениями имеет свой балл. Поэтому незаконченная программа с верно открытыми файлами и написанным заголовком функции набирает реальные баллы.
Массив
Когда результат требует всех данных сразу, их держат в массиве: var c : array[1..50] of integer; в Паскале, int c[51]; в C++. Размер берется из верхней границы, данной в условии, например .
Полная структура на Паскале
assign(fin, 'date.in'); reset(fin);
assign(fout, 'date.out'); rewrite(fout);
readln(fin, n);
for i := 1 to n do readln(fin, a[i]);
writeln(fout, rezultat);
close(fin); close(fout);Остальная часть урока доступна по подписке
Настоящие задания ANCE по этой теме, разбор примера шаг за шагом, типичные ошибки и 7 вопросов для самопроверки открываются по подписке. «Что нужно знать» остаётся бесплатным.
Открывается по подписке
- Как это бывает на экзамене
- Разбор примера
- Типичные ошибки
- Проверь себя
