|
Составление программ для решения задач на языке программирования Turbo Pascal |
i>SEEK (<программный файл>, № компоненты);5. Закрытие файла:CLOSE (<программный файл>);Если файл не закрыт и по какой-то причине программа завершилась аварийно, то все изменения внесенные в файл будут утеряны. Поэтому рекомендуется закрывать файл по завершении работы с ним.6. Некоторые дополнительные операции над файлами могут очень полезны:определяет закончился ли файл:EOF (<программный файл>)определяет размер файла в компонентах:FILESIZE (<программный файл>)определяет номер текущей компоненты:FILE POS (<программный файл>)Последовательность работы с файлами записей:При использовании файлов записей - файлов компонентами, которых являются записи (данные комбинированного типа) нужно придерживаться следующей последовательности написания программы:Объявить тип запись.Объявить программный файл, компоненты которого имеют тип запись.Объявить переменную, того же типа что и компонента файла, для обмена информацией между ОП и программными файлами.Открыть файл существующий или создаваемый.Для обмена информации использовать операторы ввода или вывода.Выполнить закрытие файла.Особенности работы с текстовыми файламиТекстовые файлы - это файлы компонентами которых являются символьные строки. Среди текстовых файлов следует выделить стандартные текстовые файлы. Существуют особенности обработки текстовых файлов:Стандартные текстовые файлы:INPUT - стандартный файл ввода;OUTPUT - стандартный файл вывода.2. Стандартные файлы можно связать с дисковым файлом:ASSIGN (OUTPUT, `дисковый файл`);3. Открытие текстового файла:для чтения: RESET (<программный файл>);для создания: REWRITE (<программный файл>);для дополнения: APPEND (<программный файл>);4. Обмен информацией с текстовым файлом:чтение: READLN (<программный файл>, переменная);запись: WRITEL] (<программный файл>, переменная);где <переменная> должна быть объявлена как строка символов.Работа с файлами без типачтение блока данных:BLOCKREAD (<программный файл>, переменная, n [, m]);запись блока данных:BLOCKWRITE (<программный файл>, переменная n [, m]);где переменная - переменная любого типаn - размер блока,m - необязательный параметр, определяющий размер блока в записях.При чтении блока данных формируется значение m.1. Условие и постановка задачиСоставить алгоритм и программу создания файла записей. Составить алгоритм и программу дополнения файла записями. Составить алгоритм и программу поиска информации по критерию в файле записей.Структура записи:Фамилия, Имя, ОтчествоДата рожденияГородУлицаДомКвартира№ паспорта2) Внести 5-10 записей3) Изменение записей в справочнике4) Дополнение записей в справочнике5) Поиск по фамилии в справочнике1.1 Входная информацияВходная информация - информация, известная до решения задачи, её необходимо запросить у пользователя и ввести в оперативную память с клавиатуры из файла.Фамилия, Имя, ОтчествоДата рожденияГородУлицаДомКвартира№ паспортаТеперь покажем, как описывается входная программа, так как в последствии мы увидим её в тексте программы.Для упрощения пользования ввели отдельный тип переменной - запись, она включает в себя сведения о физическом лице.Ниже находится таблица индификаторов, в ней описана запись и соответствующие поля, которые представлены в программе.|
Название переменной | Тип переменной | Назначение | | RecBook | Запись (record) | для упрощения решения задачи | | Поля записи | | StFIO | string [20] | хранение ФИО физического лица | | StData | string [8] | хранение даты рождения | | StGorod | string [15] | хранение города, где проживает физическое лицо | | StUlica | string [16] | хранение улицы | | StDom | string [8] | хранение № дома | | StKvartira | string [10] | хранение № квартиры | | StNomer_Pasporta | string [15] | хранение № паспорта | | | 1.2 Выходная информацияВыходная информация - искомый в задаче результат. Его нужно определить из входной информации и вывести пользователю на экран, печать или файл. Выходной информацией в курсовой работе являются файлы, хранящие записи с полями ФИО, дата рождения, город, улица, дом, квартира, № паспорта. Выходная информация будет заключаться в выходной информации по названию улицы. Ниже находится таблица, в которой описана выходная информация.|
Название переменной | Тип переменной | Назначение | | BookFile | файл типа RecBook | хранение данных | | | 1.3 Промежуточная информацияПромежуточная информация - промежуточные итоги решения задачи, без которых невозможно определить конечный результат.В курсовой работе промежуточная информация служит для организации работы: для работы циклов, для считывания данных из файла и с клавиатуры.|
Название переменной | Тип переменной | Назначение | | Work | RecBook | для доступа к полям записи | | VID | byte | для выбора вызова различных процедур | | End_Menu | boolean | для выхода из меню | | Name | string [12] | хранение имени файла | | Rez_Find | boolean | результат поиска | | NumRec | longint | локальная переменная принимает значение номера изменяемой записи | | Count | integer | количество записей | | | 2. Формализация задачиФормализация задачи - это описание задачи формальными средствами (математическими, логическими). В данной работе математические средства не использовались.Задача может выполнять следующие действия:создания файла записейпросмотр списка справочникаизменение записи справочникадополнение записи в справочникпоиск физического лица по названию улицы3. Алгоритм решения задачи3.1 Словесный алгоритмАлгоритм - последовательность действий, необходимых для решения задачи.Разработка алгоритмов и программ начинается с постановки задач. На этом этапе из условия задачи определяют входную, выходную и промежуточную информацию.На первой стадии разработки программы были описаны все переменные и их типы.Следующим шагом стала разработка блока (процедуры) ввода исходных данных. Ввод исходных данных включает в себя создание файла для хранения данных и его заполнения. Пользователю предлагается ввести ФИО, дату рождения, город, улицу, дом, квартиру, номер паспорта. Программа может выполнять следующие действия:Создание нового файла: пользователю предлагается ввести имя файла, при повторном введении старого имени - предыдущий файл заменяется новым или просто создается новый файл. Появляется приглашение к созданию нового файла, предлагается ввести число записей по всем полям записи. По завершению программа сообщает об успешном выполнении необходимого числа записей и возвращается в главное меню.Просмотр списка ведомости: при выборе данного режима программа просит ввести имя файла, после чего на экран выводятся все записи данного файла.Изменение записи ведомости: этот режим предназначен для редактирования некоторой записи. Сначала пользователь должен ввести имя файла и указать номер изменяемой записи. В результате на экран выводится значение полей старой записи и предлагается заполнить поля новой.Дополнение ведомости: пользователь выбирает имя файла, в который необходимо внести новую запись, а затем добавляет новую запись.Поиск физического лица по названию улицы: пользователь выбирает имя файла, вводит название улицы для поиска, затем на экран выводится список данных для выбранной улицы, в конце списка указывается число физических лиц с такой улицей.Таки образом, пользователь каждый раз имеет возможность ввести необходимое имя файла. Эта особенность позволяет использовать программу при работе с множествами файлов.Для того, чтобы создать файл, нужно ввести имя файла. С этой целью используется процедура (Name_File).Для добавления записей в файл используется процедура AddRec. Для обращения к полям записи используется переменная work. Пользователю предлагается ввести данные из условия задачи. Значения переменной work записываются в файл.Для создания нового файла данных применяется процедура (Create_Book) для работы этой процедуры переменные Ind, Count. Переменная Count содержит число записей в ведомости, а переменная Ind изменяется от 1 до значения Count. Для создания нового файла данных сначала нужно ввести имя создаваемого файла. Затем открываем новый файл для записи, используя операцию Assign, которая связывает BookFile (переменную для файла с записями) и Name (имя создаваемого файла). После этого пользователю нужно ввести количество записей в справочник. Как только создание файла данных завершится на экране появится сообщение об окончании создания файла данных. Созданный файл можно закрыть, используя операцию Close.В программе можно вывести текущую запись на экран. Для этого применяется процедура OutputRec. При использовании этой процедуры на экране появляется таблица заполненных значений текущей записи.Все записи можно вывести для просмотра на экран с помощью процедуры OutputAllRec. Для этого нужно открыть файл, используя операцию Reset, так как открываемый файл уже существует. Чтобы файловые операции выполнялись без ошибок применим функцию IOresult. Эта функция не имеет параметров и возвращает результат целого типа. Она работает при отключении стандартной обработки ошибок. Чтобы установить указатель на начало нужной компоненты, применим операцию Seek. Эта операция служит для того, чтобы обеспечить прямой доступ к компонентам файла. Вывод данных будет продолжаться до тех пор, пока указатель не дойдет до конца файла и не выведет все данные. Если указанного имени файла нет на диске, на экране появится надпись: "Файла с именем … на диске нет".В созданный файл данных можно не только вносить новые записи, но и изменять их и дополнять.Данные в файле можно изменить с помощью процедуры UpdateRec. Номер изменяемой строки обозначим через переменную NumRec. Введем значение этой переменной и установим указатель на позицию по указанному номеру записи. Введем старое значение записи (NumRec). Затем выведем запись и перейдем на следующую позицию, потом вернемся на прежнюю позицию. Зададим новое значение записи. Используя процедуру AddRec изменим запись и закроем файл.Добавление записи осуществляется с помощью процедуры AddRecToEnd. Для этого установим текущую позицию в конец файла (Seek), введем данные в файл. На экране появится надпись: "Изменяемый файл данных имеет … записей" (FileSize). Закрываем измененный файл.С помощью разработанной программы можно произвести поиск по названию улицы. В этой процедуре (FindFIO) используются переменные: Maska - переменная, принимающая значения заданное название улицы, Rez_Find - переменная результата, принимает значения "False" и "True" в тех случаях, когда заданное название улицы не найдено (False) процедура будет выполняться до тех пор, пока введенное название не будет найдено (т.е. до конца записей файла). Если название улицы не найдено, на экране появится: " нет данной записи". Если улица будет найдена, на экран выведется таблица с полями записей и их значениями, внизу этой таблицы в строке будет записано количество записей для заданного пользователем улицы. Закрываем файл.3.2 Блок-схемаБлок-схема основной программы:Блок-схема задания имени создаваемому файлу (Name_File):Блок-схема добавления записей в файл (Addrec):Блок-схема процедуры создания файла (Create_Book):Блок-схема просмотра списка справочника (OutputAllRec): Нет ДаБлок-схема изменения записи (UpdateRec): Нет ДаБлок-схема дополнения справочника (AddRecToEnd): Нет ДаБлок-схема поиска физического лица по названию улицы (FindFIO):Нет ДаНет Да3.3 Описание блок-схемыБлок - схемы показали нам, что для решения задачи необходимы знания циклов с различными условиями (цикл с постусловием, цикл с предусловием, цикл со счетчиком). Для построения блок-схем использовались разветвляющие алгоритмы (т.е. алгоритмы, при выполнении которых порядок следования команд определяется в зависимости от результатов проверки некоторых условий).4. Составление программыProgram kursach; uses crt;TypeStFIO=string [20] ;StData=string [8] ;StGorod=string [15] ;StUlica=string [16] ;StDom=string [8] ;StKvartira=string [10] ;StNomer_Pasporta=string [15] ;RecBook=record {запись данных о физическом лице}FIO: StFIO; {фамилия, имя, отчество}Data: StData; {дата рождения}Gorod: StGorod; {город}Ulica: StUlica; {улица}Dom: StDom; {дом}Kvartira: StKvartira; {квартира}Nomer_Pasporta: StNomer_Pasporta; {номер паспорта}end;VarBookFile: file of RecBook; {переменная для файла с записями RecBook}Work: RecBook; {переменная для доступа к полям записи}VID: byte; {переменная для выбора вызова различных процедур}End_Menu: boolean; {переменная для выхода из меню}Name: string [12] ;Procedure Name_File; {процедура для задания имени файла}beginWrite ('Vvedite imya faila dannyh fizicheskogo lica: ');Readln (Name);end;Procedure Addrec; {процедура для добавления записи в файл}beginWriteln ('Nomer fizicheskoi zapisi: ', FilePos (BookFile) +1);with work do {переменная для обращения к полям записи}beginWrite ('Vvedite familiu, imia, otchestvo: ');Readln (FIO);Write ('Vvedite Datu rogdenia: ');Readln (Data);Write ('Vvedite Gorod: ');Readln (Gorod);Write ('Vvedite Ulicu: ');Readln (Ulica);Write ('Vvedite Dom: ');Readln (Dom);Write ('Vvedite Kvartiru: ');Readln (Kvartira);Write ('Vvedite nomer pasporta: ');Readln (Nomer_Pasporta);Write (BookFile, work); {записать в файл значение переменной work}end;end;Procedure Create_Book; {процедура для создания нового файла данных}VarInd, Count: integer;beginName_File;Assign (BookFile, Name); {открыть файл для записи}Rewrite (BookFile);Writeln ('Sozdanie zapisei faila: `Name);Write ('Vvedite chislo zapisei v spravochnike: ');Readln (Count);For Ind: =1 to count doAddRec;Writeln ('Sozdanie faila dannyh fizicheskogo lica zaversheno');Writeln ('Fail dannyh imeet ', FileSize (BookFile),' zapisei');Close (BookFile);end;Procedure OutputRec; {процедура вывода текущей записи на экран}beginRead (BookFile, work);with work dobeginWriteln ('------------------------------------------------------------------------------');Write ('| ', FilePos (BookFile),' | ', FIO,' | ', Data,' | `, Gorod,' | ', Ulica,' | ', Dom,' | ');Writeln (Kvartira,' | ', Nomer_Pasporta,' |');Writeln ('------------------------------------------------------------------------------');end;end;Procedure OutputAllRec; {процедура вывода всех записей файла на экран}beginName_File;Assign (BookFile, Name);{$I-} {отключение стандартной обработки ошибок}Reset (BookFile); {поиск открытого файла}{$I+} { включение стандартной обработки ошибок}If IOresult=0 thenbeginSeek (BookFile, 0); {установка на первую запись}Writeln ('***Vyvod dannih fizicheskogo lica iz faila ', Name,' ***');Writeln ('------------------------------------------------------------------------------');Writeln ('| N | FIO | Data rogdenia | Gorod | Ulica | Dom | Kvartira | Nomer Pasporta |');Writeln ('------------------------------------------------------------------------------');While (not Eof (BookFile)) do OutputRec; {условие окончания цикла}EndElse Writeln ('Faila s imenem ', Name,' na diske net');end;Procedure UpdateRec; {изменение записи файла}VarNumRec: longint; { локальная переменная принимает значение номера изменяемой записи}beginName_File;Assign (BookFile, Name);{$I-}Reset (BookFile);{$I+}If IOresult=0 thenbeginWrite ('Ukazat nomer izmenayemoi zapisi: ');Readln (NumRec);Seek (BookFile, NumRec-1); {установка файловой позиции по указанному номеру записи}Writeln ('staroe znachenie zapisi: ` NumRec);OutputRec;Seek (BookFile, NumRec-1); {возврат на прежнюю позицию}Writeln ('Zadaem novoe znachenie ', NumRec,' zapisi');AddRec;Close (BookFile);endElse Writeln ('Faila s imenem ', Name,' na diske net');end;Procedure AddRecToEnd; { процедура дополнения записи в конец файла}beginName_File;Assign (BookFile, Name);{$I-}Reset (BookFile);{$I+}If IOresult=0 thenbeginSeek (BookFile, FileSize (BookFile)); {установка текущей позиции в конец файла}AddRec;Writeln ('Izmenennyi fail dannyh imeet ', FileSize (BookFile),' zapisei');Close (BookFile);endElse Writeln ('Faila s imenem ', Name,' na diske net');end;Procedure FindFIO; {процедура поиска названия улицы физического лица}VarMaska: StUlica; {хранит название улицы искомого лица}Rez_Find: boolean; {результат поиска}CountRec: integer; {переменная, значение которой равно числу записей с такой улицей}beginName_File;Assign (BookFile, Name);{$I-}Reset (BookFile);{$I+}If IOresult=0 thenbeginWrite ('Vvedite ulicu dla poiska: ');Readln (Maska);Rez_Find: =False; {улица не найдена}CountRec: =0;Writeln ('------------------------------------------------------------------------------');Writeln ('| N | FIO | Data rogdenia | Gorod | Ulica | Dom | Kvartira | Nomer pasporta |');Writeln ('------------------------------------------------------------------------------');While (not Eof (BookFile)) do {просмотреть все записи до конца файлов}beginRead (BookFile,work);with work doIf Pos (Maska,Ulica) <>0 then {найдена запись физического лица}BeginRez_Find: =True;Inc (CountRec);Writeln ('------------------------------------------------------------------------------');Write ('| ',FilePos (BookFile),' | ',FIO,' | ',Data,' | ',Gorod,' | ',Ulica,' | ',Dom,' | ');Writeln (Kvartira,' | ',Nomer_Pasporta,' |');Writeln ('------------------------------------------------------------------------------');end;end;If Rez_Find thenWriteln ('Chislo zapisei dlya ulic ',Maska,' = ',CountRec)Else Writeln ('V spravochnike net takoi ulici ',Maska);Close (BookFile);endElse Writeln ('Faila s imenem ',Name,' na diske net');end;beginclrscr;End_Menu: =False;RepeatWriteln ('***Spravochnic dannih fizicheskih lic***');Writeln ('Vyberite vid raboty');Writeln ('1 - sozdanie novogo faila');Writeln ('2 - prosmotr spiska spravochnika');Writeln ('3 - izmenenie zapisi');Writeln ('4 - dopolnenie spravochnika');Writeln ('5 - poisk po familii');Writeln ('0 - zavershenie raboty');Write ('Vash bybor: ');Readln (VID);case VID of {вызов разных процедур в зависимости от видов работы}1: Create_Book;2: OutputAllRec;3: UpdateRec;4: AddRecToEnd;5: FindFIO;0: End_menu: =True;end;Writeln ('Dlya prodolzheniya nazhmite Enter');Readln;clrscr;Until End_Menu;end.5. Контрольный примерНаберем данную программу на языке Паскаль. Откомпилируем ее. На экране появится меню задач для файла:При выборе "1" создадим новый файл под именем "***Spravochnik dannih fizicheskih lic***":При выборе "2" можно просмотреть весь созданный список:При выборе "3" изменим одну из записей файла:При выборе "4" дополним справочник еще одной записью:При выборе "5" пользователю будет предложено ввести название улицы, введем название (Ленина) и получим данные о физических лиц с такой улицей:В случае, если заданной улицы нет нет, то на экране появится:При выборе "0" программа закончит свою работу:ЗаключениеЗадача, которая поставлена в курсовой работе была выполнена. Мы показали, что задача может выполнять несколько действий:Создание файлаЗаполнение файла данными, содержащие поля:Фамилия, имя, отчествоДата рожденияГородУлицаДомКвартираНомер паспортаПросмотр всех записей файла или текущей записиИзменение записи, созданной в файлеДополнение записи в файлПоиск записи по названию улицы.Все эти действия были выполнены с помощью процедур.Процедура - это часть программы, в которой выполняется специфическое действие. Процедуры в Турбо Паскале могут быть внутренними и внешними.Внутренние процедуры описываются в разделе описания процедур основной программы. Внешние процедуры оформляются в виде автономно компилируемых модулей.Формат описания процедур:PROCEDURE <имя проц> (список форм. Парам);Разделы описанияBEGINРаздел операторовEND.Имя проц. - имя процедуры, любое имя задаваемой программистом, обычно соответствующим назначению процедуры, состоящее из латинских букв и цифр 0-9.Список литературы1. Грачева Л.Н. - Программирование в среде Turbo-Pascal 7.0: Лабораторный практикум по дисциплине: "Программирование и основы алгоритмизации". - Уфа: РИО РУНМЦ МО РБ, 2008. 2. Молодцов В.А. - Репетитор по информатике для подготовки к экзаменам. - Ростов н/Д: Феникс, 2007. 3. Острейковский В.А. - Информатика: Учеб. для вузов. - М.: Высш. шк., 1999. 4. Попов В.Б. - Паскаль и Дельфи. Учебный курс. - СПб.: Питер, 2005.
Страницы: 1, 2
|
|
|
© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент. |
|
|