Для чего нам нужно уметь работать с файлами в Паскаль?
Ранее мы рассмотрели ввод и вывод данных в Паскале. Он осуществлялся вручную, с помощью клавиатуры и результат мы также смотрели сами в окне вывода. Для того чтобы быть уверенным в том, что программа написана правильно необходимо протестировать её. Для того чтобы специальные тестирующие системы автоматически проверяли решение необходимо, ввод и вывод данных осуществлять из текстовых файлов. По такой же схеме тестируются задачи на всех этапах республиканских олимпиад по информатике.
Ввод мы будем осуществлять из файла input.txt
Вывод будем производить в файл output.txt
4. Как только все переменные прочитаны необходимо закрыть файл.
close(input);
Входные данные:
Первая строка содержит три целых числа через пробел.
Ранее мы рассмотрели ввод и вывод данных в Паскале. Он осуществлялся вручную, с помощью клавиатуры и результат мы также смотрели сами в окне вывода. Для того чтобы быть уверенным в том, что программа написана правильно необходимо протестировать её. Для того чтобы специальные тестирующие системы автоматически проверяли решение необходимо, ввод и вывод данных осуществлять из текстовых файлов. По такой же схеме тестируются задачи на всех этапах республиканских олимпиад по информатике.
Ввод мы будем осуществлять из файла input.txt
Вывод будем производить в файл output.txt
Для организации ввода данных из файла надо:
1.Связать текстовый файл для чтения исходных данных с input:
assign(input,'input.txt').
2. Открыть файл для чтения:
reset(input);
3. При работе нужно понимать и помнить отличия процедуры read, от readln. Если в файле данные записаны в одной строке, через пробел, то мы пользуемся все время процедурой read столько раз, сколько чисел нужно прочитать.
Если же строк несколько, то когда доходим до символа стоящего в конце строки, используем readln. В результате чего будет считано последнее число строки и курсор переместится на новую.
read(a); readln(a);
Например, указан следующий формат ввода:
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]);
close(input);
Для организации вывода данных в файл надо:
1.Связать текстовый файл для записи результатов с output:
assign(output,'output.txt').
2. Открыть файл для записи:
rewrite(output);
3.Для вывода используем операторы write и writeln также, как и было до сих пор.
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.
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). Вывести в выходной файл количество отрицательных чисел массива, его наименьшее и наибольшее значения.
Задание 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. Имеются два текстовых файла с одинаковым числом строк. Переписать с сохранением порядка следования строки первого файла во второй, а строки второго файла — в первый. Использовать вспомогательный файл.
Входные данные:
Задание 8. Даны три целых числа. Определить, имеется ли среди них хотя бы
одна пара равных между собой чисел.
Входные данные:
В единственной строке входного файла 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)
Выходные данные:
В первой строке выходного файла должно быть число В.
Во второй строке выходного файла число А.
Тесты Посмотреть решение
а) его первую строку;
б) его пятую строку;
в) его первые 5 строк;
г) его строки с s1-й no s2-ю (s1 и s2 записаны в 11 строке входного файла через пробел);
д) весь файл.
Тесты Посмотреть решение
Задание 5. Сформируйте массив целых чисел (значения для него взять из файла, они записаны во 2-ой строке входного файла). В первой строке этого файла указано количество элементов массива (n<=50). Вывести в выходной файл количество отрицательных чисел массива, его наименьшее и наибольшее значения.
Входные данные:
В первой строке входного файла содержится единственное число n - количество элементов массива
В первой строке входного файла содержится единственное число n - количество элементов массива
Во второй строке входного файла содержатся N чисел через пробел - элементы массива
Выходные данные:
Первая строка - количество отрицательных элементов массива
Выходные данные:
Первая строка - количество отрицательных элементов массива
Вторая строка - наименьший элемент массива
Третья строка - наибольший элемент массива
Тесты Посмотреть решение
Тесты Посмотреть решение
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 - количество строк
Вторая строка - n-ая строки содержат текст
Выходные данные:
Для каждого выходного файла
Первая строка - n-ая строка содержат текст
Тесты Посмотреть решение
Для каждого выходного файла
Первая строка - n-ая строка содержат текст
Тесты Посмотреть решение
одна пара равных между собой чисел.
Входные данные:
Первая строка содержит три целых числа через пробел.
Выходные данные:
Выведите 'YES' если это так, и 'NO' в противном случае.
Тесты Посмотреть решение
а) Выведите на экран сумму этих чисел, среднее арифметическое и произведение;
б) то же вывести в файл в отдельные строки.
2. Дан файл, заполненный целыми числами через пробел. Вывести в новый файл все:
а) четные числа;
б) числа, делящиеся на 3 и не делящиеся на 7.
3. Имеется текстовый файл, состоящий из n строк, записанных в столбик. Переписать его строки в другой файл. Порядок строк во втором файле должен:
а) совпадать с порядком строк в заданном файле;
б) быть обратным по отношению к порядку строк в заданном файле.
4. Имеется текстовый файл, состоящий из n строк, записанных в столбик. Все четные строки этого файла записать во второй файл, а нечетные — в третий файл. Порядок следования строк сохраняется.
Выведите 'YES' если это так, и 'NO' в противном случае.
Тесты Посмотреть решение
Задание 9. Даны три числа. Определить, существует ли треугольник, сторонами которого являются эти числа, и если существует, найти его площадь.
Замечание: треугольник существует, если каждая сторона меньше суммы двух других сторон. Площадь треугольника равна sqrt(p*(p-a)*(p-b)*(p-c)), где р - полупериметр, a,b,c - стороны треугольника.
Входные данные:
Первая строка содержит три числа через пробел.
Входные данные:
Первая строка содержит три числа через пробел.
Выходные данные:
В первой строке запись "да" или "нет"
Во второй строке значение площади, если треугольник существует
Тесты Посмотреть решение
В первой строке запись "да" или "нет"
Во второй строке значение площади, если треугольник существует
Тесты Посмотреть решение
Задачи для самостоятельного решения
1. Создайте текстовый файл на диске, заполненный N целыми числами, записанными через пробел.а) Выведите на экран сумму этих чисел, среднее арифметическое и произведение;
б) то же вывести в файл в отдельные строки.
2. Дан файл, заполненный целыми числами через пробел. Вывести в новый файл все:
а) четные числа;
б) числа, делящиеся на 3 и не делящиеся на 7.
3. Имеется текстовый файл, состоящий из n строк, записанных в столбик. Переписать его строки в другой файл. Порядок строк во втором файле должен:
а) совпадать с порядком строк в заданном файле;
б) быть обратным по отношению к порядку строк в заданном файле.
4. Имеется текстовый файл, состоящий из n строк, записанных в столбик. Все четные строки этого файла записать во второй файл, а нечетные — в третий файл. Порядок следования строк сохраняется.