Nota10

Lecții · BAC · Informatica

Текстовые файлы: чтение, запись и большая задача

Tema din testele ANCE: Текстовые файлы

Задача с текстовым файлом — самое дорогое задание теста, от 12 до 16 баллов, и оценивается по шагам, а не по результату. Здесь операции с файлами на двух языках и порядок, в котором набираются баллы.

Lecția este în rusă.

Citește lecția în română

Ce trebuie să știi

Операции с текстовым файлом

Что делаешьПаскаль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);

Restul lecției e în abonament

Itemii reali ANCE în care apare tema, exemplul rezolvat pas cu pas, greșelile tipice și cele 7 întrebări de verificare se deschid cu abonamentul. „Ce trebuie să știi” rămâne gratuit.

Se deschide cu abonamentul

  • Cum apare la examen
  • Exemplu rezolvat
  • Greșeli tipice
  • Verifică-te

Verifică-ți nivelul gratuit