Страницы

Уроки 39, 40 Чтение и запись данных в файл на Паскаль.

Для чего нам нужно уметь работать с файлами в Паскаль?
Ранее мы рассмотрели ввод и вывод данных в Паскале. Он осуществлялся вручную, с помощью клавиатуры и результат мы также смотрели сами в окне вывода. Для того чтобы быть уверенным в том, что программа написана правильно необходимо протестировать её.  Для того чтобы специальные тестирующие системы автоматически проверяли решение необходимо, ввод и вывод данных осуществлять из текстовых файлов. 
По такой же схеме тестируются задачи на всех этапах республиканских олимпиад по информатике. 

Ввод мы будем осуществлять из файла input.txt

Вывод будем производить в файл output.txt


Для  организации ввода данных из файла надо:

1.Связать текстовый файл для чтения исходных данных с input:
assign(input,'input.txt').

2. Открыть файл для чтения:
reset(input);

3. При работе нужно понимать и помнить отличия процедуры read, от readln. Если в файле данные записаны в одной строке, через пробел, то мы пользуемся все время процедурой read столько раз, сколько чисел нужно прочитать.
Если же строк несколько, то когда доходим до символа стоящего в конце строки, используем readln. В результате чего будет считано последнее число строки и курсор переместится на новую.
read(a); readln(a);

Например, указан следующий формат ввода:
В первой строке ввода находятся три числа  через пробел R – радиус основания торта, N  – число коробок, С – стоимость за 1 см2 основания коробки.
Далее идет N строк, в каждой указаны два числа – длины сторон i-той коробки.

В программе записываем:
read(r,n,c);
for i:=1 to n do readln(x[i],y[i]);

4. Как только  все переменные прочитаны необходимо закрыть файл.
close(input);


Для  организации вывода данных в файл надо:

1.Связать текстовый файл для записи результатов с output:
assign(output,'output.txt').

2. Открыть файл для записи:
rewrite(output);

3.Для вывода используем операторы write и writeln также, как и было до сих пор.
4. Как только  все переменные выведены необходимо закрыть файл. 
close(output);


Задание 1. Перенаправление. Прочитайте число n из файла input.txt и выведите его в файл output.txt

Входные данные:
В единственной строке входного файла input.txt записано число.

Выходные данные:
В единственную строку выходного файла output.txt нужно вывести в точности то же число, которое задано во входном файле.

Program z1;
var a:longint;
Begin
assign(input,'input.txt');
reset(input);
read(a);
close(input);
assign (output,'output.txt');
rewrite(output);
writeln(a);
close(output);
End.


Экспериментальный раздел

Наберите программу в среде программирования Free Pascal, запустите ее на исполнение. У Вас может появится ошибка типа:
exited with exitcode=2 (для Free Pascal), если файла input.txt нет.

Создайте в папке, где сохранена ваша программа файл input.txt и введите в него число.

В этой же папке, после удачного (без ошибок) запуска программы на исполнение должен появиться файл output.txt.

Создание входного файла

Нажать F3, в открывшемся окне диалога Открыть файл написать имя входного файла (например, input.txt).
Если файл не существовал, среда  Паскаля откроет пустое окошко с нужным именем. Ввести данные. 
Не забыть нажать F2 — сохранить изменения.

Открытие входного и выходного файлов 

Переместить курсор на строку в одиноч­ных кавычках, содержащую имя файла, например 'input.txt' в операторе assign. 
Нажать Ctrl+Enter. 
 После изменения входных данных не забыть сохра­нить файл - F2.


Переход между окнами входных, выходных данных и текстом программы осуществляется нажатием клавиши F6.

Задание 2. Сумма двух чисел. Даны числа А и В (0<А, B<=32000). Найти сумму А+В и вывести ее в выходной файл.

Входные данные:
В первой строке входного файла содержится единственное число А, (0<А<=32000).
Во второй строке входного файла содержится единственное число В, (0<В<=32000).

Выходные данные:
В единственную строку выходного файла вывести сумму этих чисел.
       Тесты         Посмотреть решение       

Задание 3. Перепутал строки. Даны два числа А и В(0<=А,В<2 000 000 000). Вывести числа в обратном порядке.

Входные данные:
Первая строка входного файла содержит число А.
Вторая строка входного файла содержит число В.
(0<=А, В<2000000)

Выходные данные:
В первой строке выходного файла должно быть число В.
Во второй строке выходного файла число А.
       Тесты         Посмотреть решение       


Задание 4. Имеется текстовый файл на 10 строк. Вывести на экран:
а) его первую строку;
б) его пятую строку;
в) его первые 5 строк;
г) его строки с s1-й no s2-ю (s1  и s2 записаны в 11 строке входного файла через пробел);
д) весь файл.



       Тесты         Посмотреть решение       

Задание 5. Сформируйте массив целых чисел (значения для него взять из файла, они записаны во 2-ой строке входного файла). В первой строке этого файла указано количество элементов массива (n<=50). Вывести в выходной файл  количество отрицательных чисел массива, его наименьшее и наибольшее значения.

Входные данные:
В первой строке входного файла содержится единственное число n - количество элементов массива 
Во второй строке входного файла содержатся N чисел через пробел - элементы массива

Выходные данные:
Первая строка - количество отрицательных элементов массива
Вторая строка - наименьший элемент массива
Третья строка - наибольший элемент массива

       Тесты         Посмотреть решение       

Задание 6. Имеются два текстовых файла, состоящие из одной строки. Переписать  строку первого файла во второй, а строку второго файла — в первый. Использовать вспомогательный файл.


Program z6;
var s,t:string;
Begin
assign(input,'t1.txt');
reset(input);
read(s);
close(input);

assign(input,'t2.txt');
reset(input);
read(t);
close(input);

assign (output,'t.txt');
rewrite(output);
writeln(s);
close(output);

assign (output,'t1.txt');
rewrite(output);
writeln(t);
close(output);

assign(input,'t.txt');
reset(input);
read(s);
close(input);

assign (output,'t2.txt');
rewrite(output);
writeln(s);
close(output);
End.

       Тесты         Посмотреть решение       

Задание 7. Имеются два текстовых файла с одинаковым числом строк. Переписать с сохранением порядка следования строки первого файла во второй, а строки второго файла — в первый. Использовать вспомогательный файл.

Входные данные:
Для каждого входного файла
Первая строка содержит число n - количество строк
Вторая строка - n-ая строки содержат текст

Выходные данные:
Для каждого выходного файла
Первая строка - n-ая строка содержат текст


       Тесты         Посмотреть решение       

Задание 8. Даны три целых числа. Определить, имеется ли среди них хотя бы
одна пара равных между собой чисел.

Входные данные:
Первая строка содержит три целых числа через пробел.

Выходные данные:
Выведите 'YES' если это так, и 'NO' в противном случае.


       Тесты         Посмотреть решение       


Задание 9. Даны три  числа. Определить, существует ли треугольник, сторонами которого являются эти числа, и если существует, найти его площадь.
Замечание: треугольник существует, если каждая сторона меньше суммы двух других сторон. Площадь треугольника равна sqrt(p*(p-a)*(p-b)*(p-c)), где р - полупериметр, a,b,c - стороны треугольника.

Входные данные:
Первая строка содержит три  числа через пробел.

Выходные данные:
В первой строке запись "да" или "нет"
Во второй строке значение площади, если треугольник существует


       Тесты         Посмотреть решение       

Задачи для самостоятельного решения

1. Создайте текстовый файл на диске, заполненный N целыми числами, записанными через пробел.
а) Выведите на экран сумму этих чисел, среднее арифметическое и произведение;
б) то же вывести в файл в отдельные строки.

2. Дан файл, заполненный целыми числами через пробел. Вывести в новый файл все:

 а)  четные числа; 
б) числа, делящиеся на 3 и не делящиеся на 7. 

3. Имеется текстовый файл, состоящий из n строк, записанных в столбик. Переписать его строки в другой файл. Порядок строк во втором файле должен: 

а) совпадать с порядком строк в заданном файле; 
 б) быть обратным по отношению к порядку строк в заданном файле. 

4. Имеется текстовый файл, 
состоящий из n строк, записанных в столбик. Все четные строки этого файла записать во второй файл, а нечетные — в третий файл. Порядок следования строк сохраняется.