программирование. Сборник методических указаний по выполнению практических работ по учебной дисциплине основы алгоритмизации и программирования структурное программирование
Скачать 0.68 Mb.
|
Interface {Интерфейсная часть} Implementation {Раздел реализации} Begin {Раздел инициализации модуля} End. Примечания: Имя модуля должно совпадать с именем файла и не должно содержать более 8 символов В разделе Interface объявляются все ресурсы, которые будут в дальнейшем доступны программисту при подключении модуля. В разделе Implementation описываются все подпрограммы, которые были ранее объявлены. Раздел инициализации содержит операторы, которые должны быть выполнены сразу же после запуска программы, использующей модуль. Может быть пустым. При разработке модуля рекомендуется следующий порядок: 1. Спроектировать модуль, то есть определить основные и вспомогательные подпрограммы и другие ресурсы; 2. Описать компоненты модуля; 3. Отладить каждую программу отдельно, после чего «вклеить» в текст модуля 4. Откомпилировать модуль. Для этого в меню системы Паскаль выбрать Compile/Destination Disk, а затем – Compile/Build 5. Подключить разработанный модуль к программе, где планируется его использование. Для подключения модулей используется служебное слово Uses Пример 3. Разработать модуль, содержащий подпрограмму суммирования элементов массива. 65 Разбиваем текст программы на две части: подпрограмму размещаем в модуле, а тестирующую программу оставляем в качестве основной программы. Так как все структурные типы параметров должны быть предварительно объявлены, описываем тип массива в модуле. {Модуль должен размещаться в файле Summa.pas} Unit Summa; Interface {объявление внешних ресурсов} Туре mas=array[1..10] of integer; Function sum(b:mas; n:integer):integer; Implementation Function sum; {описание функции} Var s, i: integer; begin s:=0; for i:=1 to n do s:=s+b[i]; sum:=s; end; Begin end. Программа использует из модуля два ресурса: описание типа mas для объявления массива А и функцию Sum. Program Ex; Uses summa; {указание используемого модуля} Var a: mas; {используем ресурс mas} i, n: integer; s:real; Begin Writeln('Введите размерность массива:'); Readln(n); Writeln('Введите элементы массива:'); For I:=1 To n do read(a[i]); s:=sum(a,n); {используем ресурс sum из модуля Summa} Writeln('summa=',s:5:2); end. Программа использует из модуля два ресурса: описание типа mas для объявления массива А и функцию Sum. Задание. 1. Составить модуль по заданным подпрограммам (процедурам) для работы с телефонным справочником. Процедуры выполняют следующие действия: 66 1. Создание нового файла, который содержит данные: фамилию абонента, и его номер телефона; 2. Просмотр списка справочника; 3. Изменение записи справочника; 4. Поиск абонента по фамилии. Доработать телефонный справочник, добавить в модуль и основную программу процедуру для поиска абонента по номеру телефона. Составить блок-схемы для основной программы и для любой подпрограммы. 1. Procedure Create_Book_Phone – процедура формирования телефонного справочника Procedure Create_Book_Phone; Var Ind, Count: integer; Begin write('Введите имя файла телефонного справочника'); Readln(Name); Assign(BookFile, Name); Rewrite(BookFile); {Открыть новый файл для записи} Writeln('Создание записей файла',Name); Write ('Введите число записей в файле'); Readln(Count); for Ind:=1 to Count do begin writeln('Ввод записи №', FilePos(Bookfile)+1); with work do begin write('Введите фамилию: '); readln(FIO); {Ввод фамилии в файл} write(' Введите номер телефона: '); readln(Phone); {Ввод номера телефона в файл} Write(BookFile, Work); {Записать в файл фамилию и номер телефона} end; end; Writeln('Создание файла справочника завершено'); Writeln('Файл данных имеет ', FileSize(BookFile), 'записей'); Close(BookFile); end; Пояснение: Для сокращения записи при обращении к полям FIO и Phone переменной типа запись Work используем предложение with work do. В окончании процедуры организуем вывод сообщения о результатах создания файла. Для измерения размера файла в записях используем функцию FileSize. 2. Procedure OutputAllRec – процедура просмотра списка телефонного справочника Procedure OutputAllRec; begin Writeln('Введите имя файла'); Readln(Name); Assign(BookFile, Name); 67 Reset(BookFile); If IOResult = 0 then begin Seek(BookFile,0); Writeln('***Вывод телефонного справочника из файла ', Name, '***'); While (not Eof(Bookfile)) do begin Read(BookFile, work); With work do begin Write ('Zapis N', FilePos(BookFile), ':'); Writeln('Фамилия Имя Отчество:', FIO, 'Телефон: ', Phone); end; end; end; end; Пояснение: для вывода на экран всех записей файла сначала, используя функцию IOresult, выполним проверку наличия данного файла на диске. Если функция IOresult возвращает значение, отличное от 0, то на экран выводится сообщение о том, что требуемого файла нет на диске. В противном случае разместить указатель так, чтобы он указывал на первую запись: Seek(BookFile, 0), не забывая, что первый компонент имеет номер 0. Затем, используя оператор while, вызвать процедуру вывода на экран одной записи. Условием окончания цикла while будет выражение Eof(BookFile). Как только оно выполнится, цикл завершится. Данные всех записей файла выводятся на экран. Для вывода на экран номера записи применим функцию FilePos(BookFile). 3. Procedure UpDateRec – процедура изменения записи телефонного справочника Procedure UpDateRec; var NumRec:LongInt; begin Writeln('Введите имя файла'); Readln(Name); Assign(Bookfile, Name); Reset(BookFile); If IOResult = 0 then begin Write('Укажите номер изменяемой записи: '); Readln(NumRec); Seek(BookFile, NumRec-1); {Установка файловой позиции по указанному номеру} Writeln('—старое значение записи:'); {Вывод записи на экран и переход на следующую} Read(BookFile, work); With work do begin Write ('Запись №', FilePos(BookFile), ':'); Writeln('Фамилия Имя отчество:', FIO, ' Телефон: ', Phone); end; Seek(BookFile, NumRec-1); {Возврат на прежнюю позицию} 68 Writeln('Задаем новое значение', NumRec, 'записи'); begin writeln('Вводим запись №', FilePos(Bookfile)+1); with work do begin write('Введите фамилию: '); readln(FIO); write('Введите номер телефон: '); readln(Phone); Write(BookFile, Work); end; end; Close(BookFile); end; end; Пояснение: для изменения записи файла сначала, используя функцию IOResult, проверим, есть ли данный файл на диске. Дальше выводится запрос о номере изменяемой записи. После считывания номера записи переместим указатель к данной записи и выведем данные этой записи из файла на экран. Затем задаем новые значения полей этой записи. В разделе описания переменных опишем локальную переменную NumRec типа LongInt (длинное целое), которая будет принимать значение номера изменяемой записи. 4. Procedure FindFIO – процедура поиска абонента по фамилии Procedure FindFIO; var Bookfile: file of RecBook; Work: RecBook; Maska: StFIO; CountRec'>Rez_Find: boolean; CountRec: integer; Begin Writeln('Укажите имя файла'); Readln(name); Assign(BookFile, Name); Reset(BookFile); if IOresult = 0 then begin write('Введите фамилию для поиска:'); Readln(Maska); Rez_Find:=False; CountRec:=0; While (not Eof(BookFile)) do begin Read(BookFile, Work); With work do if Pos(Maska, FIO)<>0 then begin Rez_Find:=True; Inc(CountRec); Writeln('Фамилия:' , FIO, 'Телефон:', Phone); 69 end; end; if Rez_Find then Writeln('Число записей для ', Maska, ' = ', CountRec) else writeln('Нет абонентов с фамилией ', Maska); Close(BookFile); end; Пояснение: в процедуре поиска номера телефона опишем локальные переменные: Maska типа stFio, которая будет хранить фамилию искомого абонента; Rez_Find типа Boolean, которая будет принимать значения True (истина) и False (ложь) в зависимости от результата поиска; CountRec , значение которой будет равно числу записей с такой фамилией. После запроса имени файла данных телефонного справочника и проверки его наличия на диске сделаем запрос фамилии искомого абонента. Перед поиском присвоим переменным Rez_Find и CountRec значения false и 0 соответственно. Просмотр всех записей файла данных при поиске реализуем при помощи оператора цикла while. Условием завершения поиска является Eof(BookFile) – достяжение конца файла. Для сокращения обращения к именам полей записи используем предложение with Work do.При совпадении значения поля FIO очередной записи со значением переменной Maska переменной Rez_Find присваивается значение True (абонент с заданной фамилией найден), значение переменной CountRec увеличивается на 1 и выводится сообщение о фамилии и номере телефона найденного абонента. Описываем глобальные переменные, которые будут нужны в процессе работы процедур (Блок описания модуля) type StFio = string[20]; StPhone = string[10]; RecBook = record {запись сведений об абоненте} FIO: StFio; {поле фамилия} Phone: StPhone {поле номер телефона} end; var BookFile: file of RecBook; {Описание файловой переменной, компонентами, которой явл. запись} Work: RecBook; {Переменная для доступа к записям} Name: string; {переменная, которая содержит имя внешнего файла на диске} Основная программа, использующая ресурсы модуля telephon Program Tel_spravochnik; uses crt, telephon; var Vid:byte; {переменная, которая позволяет выбрать вид операции работы со справочником} End_Menu: boolean; Begin clrscr; End_Menu:=False; Repeat 70 writeln('***Телефонный справочник***'); Writeln('Выберите вид работ с телефонным справочником:'); Writeln('1 – создание нового файла'); Writeln('2 – просмотр списка справочника); Writeln('3 – изменение справочника'); Writeln('4 – поиск абонента по фамилии'); writeln('0 – завершение работы') ; Writeln('Ваш выбр:'); Readln(Vid); Case vid of 1: Create_Book_Phone; 2: OutputAllRec; 3: UpDateRec; 4: FindFIO; 0: End_Menu:=True; end; Writeln('Для продолжения Enter'); Readln; Clrscr; until End_Menu=true; end. ЗАДАНИЕ Реализовать в виде модуля набор подпрограмм для выполнения следующих операций: 1. перевод из кг в граммы 2. перевод из кг в тонны 3. перевод из кг в центнер 4. перевод из кг в миллиграммы Создать программу, в которой необходимо будет обратиться к ресурсам разработанного модуля. КОНТРОЛЬНЫЕ ВОПРОСЫ 1. Когда необходимо использовать модуль? 2. Чем модуль отличается от подпрограмм? 3. Из каких разделов состоит модуль? 4. Дайте характеристику разделов модуля? 71 ИНФОРМАЦИОННОЕ ОБЕСПЕЧЕНИЕ Основные источники: 1. Семакин И.Г. Основы программирования и баз данных : учебник для студ. учреждений сред. проф. образования / И.Г.Семакин М. : Издательский центр «Академия», 2014. 2. Семакин, И. Г. Основы алгоритмизации и программирования [Текст] : учебник для среднего профессионального образования/ И .Г. Семакин, А.П. Шестаков — 3-е изд., стер. — М. : Изд-во «Академия», 2012. Дополнительные источники: 1. Семакин И.Г. Основы алгоритмизации и программирования. Практикум: учеб. пособие для студ. учреждений сред. проф. Образования / И.Г. семакин, А.П. Шестаков. — М. Издательский центр «Академия», 2013. 2. Фаронов В.В. Delphi 2005. Разработка приложений для баз данных и Интернета. — СПб.: Питер, 2006 3. Немнюгин С.А. Turbo Pascal. Практикум. 2-е изд. / СПб.: Питер, 2007 4. Немнюгин С.А. Turbo Pascal. Программирование на языке высокого уровня: Учебник для вузов. 2-е изд. — СПб.: 2006 5. Попов, В. Б. Паскаль и Дельфи. Самоучитель [Текст] — СПб. : Питер, 2005. |