Пример программы работы с записями
Пусть необходимо составить программу, которая создает каталог изданий в библиотеке, обеспечивает ввод данных о литературе, поиск и подсчет количества книг данного издания. Литературу в библиотеке можно разделить на три типа изданий: книги, журналы, газеты. Для описания сведений о типе изданий в разделе типов введем перечисляемый тип: Type_Publ=(Book,Journal,Newspaper); Для описания сведений о литературе в разделе типов ведем тип Liter. Для разного типа изданий в каталоге требуется хранить разную информацию, например: если для поиска книги нужно знать год издания, то для журнала помимо года издания, нужно знать его номер, а для газеты не только год, номер, но и день выпуска. В связи с необходимостью хранения разной информации в структуре записи Liter наряду с неизменной частью - полями Title и Author, в которых отображается название публикации и фамилия автора будет вариантная часть, отражающая дату издания по-разному в зависимости от типа издания. Запись Liter будет иметь следующую структуру: Liter=Record Title:String[50]; Author:String[50]; Case V: Type_Publ of Book: (YearB:Integer); Journal: (Num:1..12; YearJ:1900..2001); Newspaper: (Day:1..31; Month:1..12; YearN:Integer); End; где V - признак выбора вариантов, который может принимать значение Book, Journal, Newspaper. Для типа Book предусмотрено хранение года издания (поле YearB), для издания типа Journal- номера(Num) и год издания (поле YearJ), для издания типа Newspaper –дня (поле Day), месяца (поле Month) и года выпуска (поле YearN). В разделе описания констант зададим значение максимального числа записей в каталоге Count=10. Текст программы: Program Kat_Library; Type Type_Publ=(Book,Journal,Newspaper); Liter=Record Title:string[50]; Author:String[50]; case V:Type_Publ of Book:(YearB:Integer); Journal:(Num:1..12; YearJ:1900..2000); Newspaper:(Day:1..31; Month:1..12; YearN:Integer); end; Const Count=10;
Var Katalog:Array[1..Count] of Liter; Num_Array:1..Count; Yes_Liter:Boolean; Vybor:Byte; Edition:Type_Publ; Count_Find:Integer; Procedure Input_Data; Begin Writeln('Введите данные о литературе ',Num_Array,':'); Write('Введите число, указывающее вид издания:'); Write('1-книга, 2-журнал, 3-газета: '); Readln(Vybor); Case Vybor of 1:Katalog[Num_Array].V:=Book; 2:Katalog[Num_Array].V:=Journal; 3:Katalog[Num_Array].V:=Newspaper; end; With Katalog[Num_Array] do begin Write('Фамилия автора: '); Readln(Author); Write('Название:'); Readln(Title); Case V of Book:begin Write('Год издания: '); Readln(YearB); end; Journal:begin Write('Номер: '); Readln(Num); Write('Год издания: '); Readln(YearJ); end; Newspaper:begin Write('Дата издания: День '); Readln(Day); Write('Месяц: '); Readln(Month); Write('Год: '); Readln(YearN); end; end; end; end; Procedure Write_Data; begin Writeln; Writeln('Литература № ',Num_Array); With Katalog[Num_Array] do begin Writeln('Название:',Title); Writeln('Фамилия автора:',Author); Case V of Book:begin Writeln('Год издания:',YearB); end; Journal:begin Write('Номер: ',Num); Writeln('Год издания: ',YearJ); end; Newspaper:begin Writeln('Дата издания: День:',Day,'Месяц:',Month,'Год:',YearN); end; end; end; end; procedure Find_Liter; begin Writeln('Поиск литературы по типу издания: '); Writeln; Write('Введите число, указывающее вид издания: '); Write('1-книга, 2-журнал, 3-газета'); Readln(Vybor); case Vybor of 1:Edition:=Book; 2:Edition:=Journal; 3:Edition:=Newspaper; end; Yes_Liter:=False; Count_Find:=0; for Num_Array:=1 to Count do If Katalog[Num_Array].V=Edition then begin Count_Find:=Count_Find+1; Write_Data; Yes_Liter:=True; end; if not Yes_Liter then Writeln('В библиотеке нет такой литературы ') else Writeln('Всего в библиотеке',Count_Find,' таких изданий'); end; begin for Num_Array:=1 to Count do Input_Data; Writeln; Find_Liter; end.
Читайте также: b) Пример классического. Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|