Основы программирования (947332), страница 32
Текст из файла (страница 32)
lOOJ of integer;Varpole:p;km: integer;{функция проверки перспективности комбинации}Function new_r(n:integer;poIe:p):boolean;Varj:integer;Beginnewjr:-false;for j:-l to n-1 doif (pole lj]'='pole[n])or(abs(pole[j]-pole[n])=n-j) then exit;newJ*:-true;End;{рекурсивная функция генерации комбинации}Procedure ferz(n,m:integer; varpole:p);Var i: integer;185Часть 1. Основы алгоритмизации и процедурное программированиеC(/Начало jВводnewr "\(n,pole) JV(n,m,pole)ynew r=trueУL—JZ—Jferz(l,m,poIe)Г КонецjРис.
5.21. Алгоритмы основной программы {а),функции проверки перспективности полученной комбинации (б)и рекурсивной процедуры добавления ферзя {в)Beginifn=m+I then {если установлено m ферзей, то вывести решение}beginfor i:=J to m do Write (pole[ij: 2);WriteLn;endelse{иначе - пытаемся установить следующего ферзя}for i:=I to m do {m способами}beginpole[nJ:=i; {установка п-го ферзя}if new_r(n,pole){проверка перспективности комбинации}thenferz(n'^l,m,pole); {рекурсивный вызов установкиследующего ферзя}end;End;{основная программа}BeginWriteLn('Beedume размер доски: *);ReadLn(m);1865. Модульное программированиеТ а б л и ц а 5.1Размер доскиКоличество вариантов, Количество вариантов,которое проверяетсярассмотренных припри полном переборе ограниченном перебореКоличествополученныхрешений4x444 = 2561725x555 = 312554106x666 = 4665615347x7V = 823543552408x888=16777216205792к:=0;ferz(hmypole);End,Процедуру new_r используют для проверки уже сгенерированной комбинации (уровень п соответствует попытке установить п-го ферзя).
Процедура ferz рекурсивна. На каждом уровне она может породить до m рекурсивныхвызовов (в соответствии с деревом генерации вариантов). Однако общее количество рассматриваемых вариантов резко уменьшается, так как неперспективные комбинации отсекаются, что наглядно представлено в табл. 5.1.Задания для самопроверкиЗадание I. Разработайте рекурсивную подпрофамму, осуществляющую поисккомбинации для отпирания кодового замка по методу перебора с отсечением неперспективных комбинаций. Замок представляет собой набор из п переключателей, каждый из которых может находиться в положении «включено» или «выключено».
Замок открывается при одном положении переключателей, причем в положении«включено» может находиться не более половины переключателей.Задание 2. Разработайте рекурсивную подпрограмму, которая формирует из заданного списка предметов определенной стоимости и веса набор, вес которого непревышает заданного, а стоимость максимальна.1876. ФАЙЛОВАЯ СИСТЕМА, ФАЙЛЫФайлам называют именованную последовательность элементов данных (компонент файла), расположенных, как правило, во внешней памяти: на дискетах, винчестере,CD или других устройствах хранения информации, также устройствах ввода-вывода. Вфайле может храниться текст, программа, числовые данные, фафическое изображение ит.д. Для организации работы с файлами профамма на Borland Pascal взаимодействует соперационной системой MS DOS.6.1. Файловая система MS DOSКак сказано выше, каждый файл обязательно имеет имя.
Имена файловв MS DOS подчиняются определенным правилам:• имя файла должно содержать не менее одного и не более восьми символов;• имя файла может иметь расширение, которое отделяется от имени точкой и содержит не более трех символов;• для записи имен и расширений могут использоваться строчные и прописные буквы латинского алфавита a-z, A-Z, арабские цифры и некоторыеспециальные символы, например, символ подчеркивания «_» или знак доллара «$»;• в качестве имен запрещается использовать некоторые буквенные сочетания, которые зарезервированы операционной системой для обозначенияустройств, например: PRN, CON, NUL, COMI, COM2, AUX, LPT1, LPT2,LPT3.В операционных системах типа Windows некоторые из этих правил отменяются, например, имя файла может содержать больше восьми символови включать символы русского алфавита.
Однако при работе с файлами изBorland Pascal лучше придерживаться правил MS DOS.Независимо от используемой операционной системы имена обычно составляют так, чтобы они указывали на содержимое файла. Расширение обычно определяет тип хранящихся данных.1886. Файловая система. ФайлыСуществуют стандартные расширения, используемые операционной системой, например:СОМ, ЕХЕ ~ исполняемые файлы (загрузочные файлы программ);PAS, BAS, СРР - файлы исходных текстов программ на алгоритмических языках ПАСКАЛЬ, БЭЙСИК и C++ соответственно.Для удобства работы с группами файлов применяют групповые именафайлов с использованием символов «*» и «?», где «*» соответствует любойпоследовательности символов, а «?» - одному любому символу, например:*• ЕХЕ - все файлы с расширением ЕХЕ;А*. СОМ - все файлы типа СОМ с именами на букву «А»;??В. PAS - все файлы типа PAS, имена которых содержат три символа,последний из которых «В»;PRG1.* - файлы любых типов с именем PRG1;*.* - все файлы.Для того чтобы MS DOS могла размещать файлы на дисках, последниедолжны быть специальным образом размечены (форматированы).
Разметкаосуществляется средствами используемой операционной системы. Еслиформатируется диск, бывший в употреблении, то вся хранившаяся на нем информация уничтожается и восстановлению не подлежит.Как правило, диски хранят большое количество файлов (количество ихна жестких дисках обычно исчисляется тысячами). Для удобства и ускоренияработы с таким количеством файлов применяется древовидная структура каталогов, аналогичная библиотечной.Главным является корневой каталог, не имеющий имени и создаваемыйв процессе форматизации диска системой.
Файл корневого каталога состоитиз записей, содержащих информацию о файлах, хранящихся на диске. В качестве файлов главного каталога могут фигурировать пользовательские каталоги, т.е. каталоги второго уровня (подкаталоги), каждый из которых может содержать подкаталоги следующего уровня. Таким образом, получаетсядерево каталогов (рис. 6.1). Подкаталоги создаются и уничтожаются пользователем с помощью специальных команд. Все каталоги, кроме корневого,имеют имена, образованные по общим правилам операционной системы.Чтобы найти файл, системе требуется просмотреть всю цепочку каталогов на пути от корневого каталога до подкаталога, хранящего сведения о требуемом файле.
Таким образом, чтобы сослаться на файл, нужно указать нетолько его имя, но и перечислить все предшествующие каталоги. Переченьимен каталогов на пути к файлу называется маршрутом или путем.Перечисляемые в маршруте каталоги разделяются символом «\», причемперечень начинается с символа «\», так как корневой каталог не имеет имени.
Например:189Часть L Основы алгоритмизации и процедурное программированиеРис. 6.1. Пример дерева каталогов\katl\kat3\Полное имя файла содержит также имя диска, на котором расположенфайл. Например:c:\katl\ kat3\file5.datТакая организация позволяет в разных подкаталогах создавать файлы содинаковыми именами. Подкаталоги тоже могут иметь одинаковые имена,если они подчинены разным подкаталогам более высокого уровня.6.2.
Файлы Borland PascalВ Borland Pascal файл определяется как последовательность компонентов, относящихся к одному типу: файл записей, файл целых чисел, файлстрок и т. п. Особенностью файлов по сравнению с другими структурнымитипами данных является то, что в любой момент доступен только один компонент. Количество компонентов файла заранее не определяется. Максимальный размер файла, размещенного во внешней памяти, ограничиваетсялишь техническими возможностями вычислительной системы.Различают дисковые файлы и логические устройства.Дисковый файл представляет собой поименованную область внешнейпамяти на устройстве хранения информации, например, дискете или винчестере.
Физически операции ввода-вывода с файлами выполняются с использованием специального буфера. Так, выводимые записи вначале помещают1906. Файловая система. Файлыся в буфер, откуда переписываются в файл по мере заполнения буфера, а вводимые читаются из буфера, куда они были предварительно помещены. Использование буферов позволяет существенно повысить скорость выполненияопераций ввода-вывода с файлом, так как на одну операцию ввода-вывода сдисководом, которая выполняется сравнительно медленно, обычно приходятся десятки операций чтения из буфера.
Для дисковых файлов принципиально возможен не только последовательный, но и произвольный доступ,при котором чтение информации осуществляется из указанного места.Логические устройства используют для организации обмена информацией с основными устройствами ввода-вывода, такими как дисплей, клавиатура и т. п. Логические устройства имеют стандартные имена, например:CON - консоль: при выводе данных соответствует экрану, при вводе клавиатуре;Р1Ш - принтер;NUL - «пустое устройство», обычно заменяет устройство вывода отладочной информации после завершения отладки программы.В отличие от дисковых файлов с логическими устройствами операцииввода-вывода осуществляют только последовательно, так как при выполнении операций вывода данные передаются на устройство покомпонентно, апри выполнении операций ввода - покомпонентно запрашиваются с него.Доступ к компоненту файла осуществляется через указатель файла.При выполнении операции чтения или записи указатель автоматически перемещается на следующий компонент (рис.
6.2).Для идентификации файлов в Borland Pascal используют фашовые переменные, В зависимости от способа представления информации различаюттри типа файлов, соответственно различаются и способы описания файловых переменных (рис. 6.3).Типизированные файлы. Файловая переменная типизированного файлаописывается какТуре <идентификатор файловой переменной> =Jile о/<тип компонента>;...где <тип компонента> - любой тип данных, кроме файлового.Указатель файлаМаркер конца [тйлаРис. 6.2. Организация файла191Часть I.
Основы алгоритмизации и процедурное программированиеr&iТипкомпонента~р*/^Г|1еЛtextРис. 6.3. Синтаксическая диаграмма<Файловый тип>Типизированные файлы используют, когда обрабатывают хранящуюся вфайле или передаваемую с устройства/на устройство последовательностькомпонентов одинаковой длины (чисел, записей и т.п.).Текстовые файлм - тип файловой переменной описывается так:Туре <идентификатор файловой переменной> = text;...Текстовые файлы используют для работы с текстами, представленнымив виде строк переменной длины.Нетипшироваииые файлы:Туре <идентификатор файловой переменной>=/ile;...Нетипизированные файлы применяют для организации скоростного обмена между внешней и оперативной памятью физическими записями указанной длины без преобразования и обработки.Как и любая переменная языка Borland Pascal, файловая переменная может быть описана в инструкции объявления переменных, например:VarF1: file of real;F2:file:F3: text;...или с предварительным объявлением типа:Туре FF =file of integer;VarFLFF;.,.При необходимости файловую переменную допускается передавать вподпрограмму через параметры.