|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Где создавать файлы?С использованием файловых переменных текстового типа. С перенаправлением ввода-вывода. Оба метода в принципе очень похожи, но у каждого из них есть свои преимущества и недостатки, которые особенно важно помнить при решении задач именно на олимпиадах (когда один неправильно поставленный символ может лишить участника большого количества баллов).
Перед тем, как работать с файлами, надо знать, как и в какой папке создавать исходные файлы, и где будут создаваться выходные файлы. Создание исходных текстовых файлов. Текстовые файлы можно создавать в Проводнике (правая кнопка мыши, Создать, Текстовый документ) – в этом случае обязательно просмотрите свойства файла (правая кнопка мыши, Свойства). Одна из наиболее частых ошибок: набирается имя файла с расширением 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 файл участника копируется в папку с текстовым файлом с исходными данными, после его запуска в той же папке (при корректной работы программы) создается выходной файл, который сравнивается с эталонным. Внимание! Запустите программу несколько раз, если при повторном запуске программы возникли ошибки, проверьте текстовый файл с исходными данными (может быть, Вы при копировании забыли изменить имя, и Ваша программа вывела результаты в тот же файл, уничтожив исходные данные)! И, наконец, принцип работы с файлами:
Прежде всего в разделе описания переменных необходимо указать переменную текстового типа (текстовый файл): 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.Вывод: Работа с текстовыми файлами с использованием файловых переменных текстового типа удобна тем, что легко можно организовать параллельный ввод из файла и с клавиатуры и вывод в файл и на экран. Способ более надежен и универсален, но… Если при отладке программы на олимпиаде использовался клавиатурный ввод и экранный вывод (что зачастую удобнее), то перед «сдачей» программы необходимо во все операторы ввода-вывода добавить файловую (текстовую) переменную, если хоть где-нибудь забыли, то… Будьте внимательны!!!
Второй способ работы с файлами основан на перенаправлении ввода (зарезервированное слово 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 полностью совпадает с теми же операторами при отсутствии необходимости работы с файлами. Этот способ позволяет легко перестроить программу от работы с файлами к обычному вводу-выводу и обратно. Но использование совместного ввода-вывода с файлами и с клавиатурой и экраном затруднено.
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.005 сек.) |