Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Создание исходных текстовых файлов.

С использованием файловых переменных текстового типа.

С перенаправлением ввода-вывода.

Оба метода в принципе очень похожи, но у каждого из них есть свои преимущества и недостатки, которые особенно важно помнить при решении задач именно на олимпиадах (когда один неправильно поставленный символ может лишить участника большого количества баллов).

 

  1.  Этап подготовки.

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

Создание исходных текстовых файлов.

Текстовые файлы можно создавать в Проводнике (правая кнопка мыши, Создать, Текстовый документ) – в этом случае обязательно просмотрите свойства файла (правая кнопка мыши, Свойства). Одна из наиболее частых ошибок: набирается имя файла с расширением txt, Windows (не всегда!) дописывает расширение txt еще раз и имя файл, например, вместо input.txt, выглядит так: input.txt.txt.

Второй способ создания тестового файла в Total Commander (Windows Commander): нажать Shift+F4, ввести имя фала, ввести данные, при выходе – сохранить.

Третий способ – создание текстовых файлов в самом FreePascal. В окне, где мы обычно набираем программу, ввести данные, File – Save as …, набрать имя файла с нужным расширением (например: input.txt) и ОК. Файл будет создан в той же папке, где обычно сохраняются программы.

Внимание! При вводе исходных данных на олимпиаде строго следуйте условию задачи и приведенным примерам!

Перед созданием файлов с исходными данными при решении прикладных задач предварительно тщательно продумайте порядок и структуру исходных данных! От этого зависит весь алгоритм решения задачи.

Числовые данные разделяйте одним пробелом или записывайте в столбик (если это не регламентировано условием задачи).

Где создавать файлы?

Исходные текстовые файлы должны «лежать» в рабочей папке. Почти для всех версий Паскаля, чтобы узнать расположение рабочей папки на диске достаточно запустить Паскаль, выбрать пункт меню File-Change dir и посмотреть путь.

Внимание! Рекомендуем для работы с ранее созданными программами скопировать их в рабочую папку Паскаля. Для некоторых версий (в том числе для PascalABC) при открытии готового файла с расширением pas рабочей папкой становится папка с открытым файлом! При этом если полный путь к этой папке содержит русские буквы или длинные имена, может возникать сообщение об ошибке!

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

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

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

И, наконец, принцип работы с файлами:

 

  1. Работа с текстовыми файлами с использованием файловых переменных текстового типа.

Прежде всего в разделе описания переменных необходимо указать переменную текстового типа (текстовый файл):

var f:text;

В основном блоке программы связываем переменную с конкретным файлом на диске, например:

assign (f,’input.txt’);

Теперь при любом указании в программе переменной f она будет обращаться к файлу input.txt в рабочей папке (так как не указан путь к файлу).

Обратите внимание на то, что Паскалю «абсолютно все равно», какое расширение имеет файл. К указанному между апострофами файлу, он будет обращаться как к текстовому. На олимпиаде имя файла должно совпадать с указанным в условии задачи!

Далее попробуем прочитать данные из файла и записать результаты в файл.

Для чтения используются процедуры работы с файлами (где f – описанная Вами переменная текстового типа):

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

readln (f,t); или read (f,t); - Прочитать значение из файла в переменную t, причем ввод данных из файла практически не отличается от ввода с клавиатуры, только перед именем переменной указывается файловая (текстовая) переменная. Но в отличии от ввода с клавиатуры появляются существенные различия между операторами read и readln (чтение без перевода строки и чтение с переводом строки). Если данные в исходном файле расположены в столбик, то разницы нет, так как и оператор read, доходя до конца строки, переводит «курсор». А вот если данные записаны в несколько строк, то с помощью readln при чтении чисел можно сразу перейти к следующей строке, игнорируя расположенные правее значения.

Например, если в файле:

14 17 235

15 2 191

2 1 3

то при использовании операторов:

read(f,a); read(f,b); read(f,c); read(f,d); writeln(a,' ',b,' ',c,' ',d);

на экране появится: 14 17 235 15

а при использовании операторов:

readln(f,a); readln(f,b); read(f,c); read(f,d); writeln(a,' ',b,' ',c,' ',d);

строка будет выглядеть так: 14 15 2 1

close (f); - Закрыть файл. Никогда не забывайте закрывать файл, особенно при записи данных, иначе можно «нарваться» на ошибку или последняя строка выходного файла может остаться не записанной. А на олимпиаде – это практически не решенная задача!

Для записи используются процедуры работы с файлами (где f – описанная Вами переменная текстового типа):

rewrite (f); - Открыть файл для записи. То есть файл будет создан, если его не было или уничтожен и создан, если был.

write (f,t); или writeln (f,t); - Вывод данных в файл. Формат операторов вывода полностью аналогичен выводу на экран, только перед именем переменной указывается файловая (текстовая) переменная.

close (f); - Закрыть файл. Иначе последняя строка выходного файла может остаться не записанной!

Пример: Вычислить среднее арифметическое N целых чисел (N<=1000, числа <=50000). Исходный файл text.in, в котором в первой строке указано N, а затем в столбик записано соответствующее количество чисел. Результат записать в файл text.out. Ответ округлить до сотых.

 Перед тем, как решать задачу создаем в рабочей папке текстовый файл text.in, в котором в первой строке указываем число N (например, 5, так как сначала надо на простых значениях проверить программу), а далее в столбик набираем соответствующее количество чисел, одно из которых 50000. Вычисляем и записываем среднее арифметическое. А теперь составляем программу:

program prim;var f:text;    {описать переменную f как файл текстового типа} n,i:integer; t:longint; s:real;begin assign(f,'text.in'); {связать переменную f с файлом на диске} reset(f);       {открыть файл для чтения} readln(f,n);    {прочитать значение переменной n из файла} s:=0; for i:=1 to n do begin  readln(f,t); {прочитать значение переменной t из файла}  s:=s+t; end; close(f);       {закрыть файл} s:=s/n; assign(f,'text.out');{связать переменную f с файлом на диске} rewrite(f);     {открыть файл для записи} writeln(f,s:0:2); {записать в файл результат} close(f);     {закрыть файл}end.

Вывод: Работа с текстовыми файлами с использованием файловых переменных текстового типа удобна тем, что легко можно организовать параллельный ввод из файла и с клавиатуры и вывод в файл и на экран. Способ более надежен и универсален, но… Если при отладке программы на олимпиаде использовался клавиатурный ввод и экранный вывод (что зачастую удобнее), то перед «сдачей» программы необходимо во все операторы ввода-вывода добавить файловую (текстовую) переменную, если хоть где-нибудь забыли, то… Будьте внимательны!!!

 

  1. Работа с текстовыми файлами с перенаправлением ввода-вывода.

Второй способ работы с файлами основан на перенаправлении ввода (зарезервированное слово input) с клавиатуры на текстовый файл и вывода (output) с экрана в файл.

В остальном все очень похоже на работу с файловыми переменными, но переменную объявлять не надо. Рассмотрим тот же пример:

Вычислить среднее арифметическое N целых чисел (N<=1000, числа <=50000). Исходный файл text.in, в котором в первой строке указано N, а затем в столбик записано соответствующее количество чисел. Результат записать в файл text.out. Ответ округлить до сотых.

program prim;var n,i:integer; t:longint; s:real;begin assign(input,'text.in'); {перенаправить ввод с клавиатуры на файл на диске} reset(input);           {открыть файл для чтения} readln(n);              {прочитать значение переменной n из файла} s:=0; for i:=1 to n do begin  readln(t);         {прочитать значение переменной t из файла}  s:=s+t; end; close(input);           {закрыть файл} s:=s/n; assign(output,'text.out'); {перенаправить вывод с экрана в файл на диске}  rewrite(output);        {открыть файл для записи} writeln(s:0:2);         {записать в файл результат} close(output);     {закрыть файл}end.

Обратите внимание, что в данном случае формат операторов read, readln, write, writeln полностью совпадает с теми же операторами при отсутствии необходимости работы с файлами.

Этот способ позволяет легко перестроить программу от работы с файлами к обычному вводу-выводу и обратно. Но использование совместного ввода-вывода с файлами и с клавиатурой и экраном затруднено.

 

  1. Решение задач.

Заядлый рыбак

1. В деревне Гадюкино живет Василий Иванович. Он заядлый рыбак. Встретил как то раз Василий Иванович своего соседа и стали они обсуждать количество пойманной ими рыбы. Зная что сосед любит приврать, Василий Иванович вывел закономерность. Сосед всегда накидывает 3 кг к своему улову. Помогите рассчитать количество пойманной соседом рыбы.



<== предыдущая лекция | следующая лекция ==>
Уникальное торговое предложение: от теории к действию. | Магистратуры Института иностранных языков
Поделиться с друзьями:


Дата добавления: 2018-10-17; Мы поможем в написании ваших работ!; просмотров: 206 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Победа - это еще не все, все - это постоянное желание побеждать. © Винс Ломбарди
==> читать все изречения...

2268 - | 2092 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.011 с.