Считывание данных и вывод результата. Работа с файлами. (RU)
Считывание и вывод данных. Работа с файлами.
При решении олимпиадных задач по программированию важную роль очень часто играет правильное считывание и вывод данных. Рассмотрим этот вопрос на примере двух задач, которые в большинстве случаев в АСМ-системах даются первыми для ознакомления со спецификой работы конкретной проверяющей системи.
Задача1. Простая задача?
Программа считывает двухцифровое число и выводит через пробел каждую цифру отдельно.
Решение:
var a, b, c : integer; // роздел описания переменных
begin // начало программы
readln(a); // считали заданное число
b := adiv10; // операция целочисленного деления
c := amod 10; // остаток при целочисленном делении
writeln(b,’ ’,c); // вывели результат
end. // конец программы
При работе с файлами программа будет чуть побольше. Покажем, как организовать ввод данных из файла и вывод результатов работы в файл на примере использования процедур пользователя. Файловая переменная f должна быть описана в разделе описания переменных как переменная типа text.
Считывание данных из файла:
procedureprint; // название процедуры
begin // начало процедуры
assign(f,’input..txt’); // установили соответствие между файловой переменной и именем файла
reset(f); // открыли файл для чтения
readln(f,a); // прочитали с файла значение переменной
close(f); // закрыли файл
end. // конец процедуры
Процедура решения задачи может быть написана, например, следующим образом:
procedure solve;
begin
b := adiv10;
c := amod 10;
end.
Процедура вывода результатов работы в файл:
procedure print;
begin
assign(f,’output.txt’);
rewrite(f); // открыли файл для записи
writeln(f,b,’ ’,c);
close(f);
end.
При таком подходе главная программа в большинстве случаев может иметь такой вид:
begin
load;
solve;
print;
end.
Задача 2. A+B Problem
Вычислить a+b.
Решение:
var a, b : integer;
begin
readln(a,b);
writeln(a+b);
end.
В случае, когда количество входных данных наперёд не указано, следует считывать до конца файла.
Задача 3. Задача A+B
Посчитайте A + B.
Решение:
var a,b : longint;
begin
readln(a,b);
writeln(a+b);
while not(eof()) do
begin
readln(a,b);
writeln(a+b);
end;
end.