Доброго времени суток, уважаемые подписчики!!!
Тема нашего сегодняшнего выпуска - работа с файлами в Turbo Pascal. Итак, начнём. В Паскале выделяют 3 типа файлов: текстовые, типизированные и нетипизированные. У каждого из этих типов есть свои особенности.
Текстовые файлы используются наиболее часто, да и работать с ними наиболее просто. Чтобы работать с файлами любого из типов необходимо завести какую-нибудь файловую переменную и описать её в разделе var Для текстового файла это будет выглядеть примерно так:
f: text;
Работа с файлом происходит как раз через эту переменную. Для того, чтобы связать переменную с файлом необходимо воспользоваться стандартой процедурой assign:
assign (f,path);
Тут f - файловая переменная, описанная в разделе описания переменных, path - переменная или константа строкового типа, содеражащая имя файла, с которым связывается переменная f.
На этом этапе мы всего лишь связали переменную с файлом, но рабоатать с файлом мы ещё не можем, т. к. он не открыт. Файловые переменные типа text характерны тем, что нельзя одновременно считывать и записывать информацию в файлы, связанные с ними. Перед тем, как открыть файл мы должны определиться, что мы хотим делать с файлом: читать или записывать.
Для чтения информации из файла мы можем воспользоваться стандартной процедурой
reset (f);
Здесь f - переменная типа text, связанная с файлом. При открытии файла этой процедурой "курсор" становится в начало файла и чтобы считать например, третий элемент, нам необходимо будет считать первые два. Чтобы считать значение какой-либо переменной из файла можно воспользоваться уже известными нам процедурами read и readln с одним лишь новым добавлением: перед указанием имени считываемой (ых) переменной (ых), необходимо указать имя файловой переменной, иначе программа будет ждать ввода значений этих переменных с клавиатуры. Например:
read (f,ch,ch1);
Из файла f считываются переменные ch и ch1, курсор остаётся на той же строке. Работа с файлом типа text очень похожа на обычный ввод/вывод с экрана/на экран. Для добавления информации в файл существуют другие 2 стандартных процедуры: rewrite, append. При использовании первой из них, весь файл очистится и информация будет записываться в чистый файл. При использовании же процедуры append информация будет добавляться в конец файла. Синтаксис:
rewrite (f); append (f);
После работы с любым из файлом обязательно нужно закрывать файл:
close (f);
Это особенно важно, если Вы записывали информацию в файл. Если файл не закрыть, то информация не сохранится!!!
Мне кажется, что раньше я зря выдавал очень много теории в одном выпуске.
Теперь, когда Вы уже знаете достаточно, я буду давать поминимуму теорию, делая упор на практику. Итак, домашняя задача. (теперь ввод, вывод информации должен осуществляться из/в файл): На круговую нитку нанизаны бусы. Таблица B содержит веса бусинок b1,b2, ..., bn, причем первым указан вес самой тяжелой бусинки, веса остальных бусинок указываются в соответствии с расположением их на нитке при обходе ее по часовой стрелке. Построить таблицу B так, чтобы обход нитки по часовой стрелке начинался с бусинки с минимальным весом. Нить не разрывается. Елси решение не единственное, то найти любое. (1<=n<=100, 1<=bi<=1000). Входные данные берутся из текстового файла input.txt, в первой строке которого содержится число n, во второй - последовательность весов. Выходные данные выводятся в текстовый файл output.txt. Пример Входные данные 10 25 7 3
8 6 5 2 12 6 9 Выходные данные 2 12 6 9 25 7 3 8 6 5
Ну а напоследок, довожу до Вашего сведения, что правила проведения турнира отныне несколько изменяются: теперь при посылании неправильного решения, решения, в котором некоторые из моих тестов не пройдут, со счёта участника турнира будут сниматься 2 балла. Так что ХОРОШО проверяйте решения перед тем, как отправлять их на проверку. Придумывайте сами несколько своих тестов.
Ну и совсем напоследок - лидеры нашей турнирной таблицы: 1 место - Story - 20 баллов
2 место - Pavel Strapko - 15 баллов
Третьего места нет, т. к. все остальные, кто присылал свои решения имеют на своем счету 10 баллов.
Поздравляю!!!
На сегодня это всё. Пожелания и предложения пишите мне на e-mail: qsman1987@mail.ru