Nota10

Уроки · 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. 1)открываешь входной файл
  2. 2)читаешь из первой строки
  3. 3) раз читаешь строку или пару значений
  4. 4)считаешь
  5. 5)записываешь результат в выходной файл в требуемом формате
  6. 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 вопросов для самопроверки открываются по подписке. «Что нужно знать» остаётся бесплатным.

Открывается по подписке

  • Как это бывает на экзамене
  • Разбор примера
  • Типичные ошибки
  • Проверь себя

Проверь свой уровень бесплатно