Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Фиксированные записи
Запись – это структурированный тип данных, состоящий из фиксированного числа компонент разного типа. Определение типа записи начинается идентификатором record и заканчивается зарезервированным словом end. Между ними заключен список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля. Формат описания записи: Type имя _ типа = record идентификатор _ поля: тип _ компоненты; … идентификатор _ поля: тип _ компоненты end; Var идентификатор: имя _ типа;
Пример: Type Sved= record Fam: String [20]; God:Integer; Nom_gr: String [10]; Adres: String [50] end; Var Ank,S:Sved;
Обращение к полям записи осуществляется с помощью идентификатора переменной и идентификатора поля, разделенных точкой. Такая комбинация называется составным именем. Ank.Fam Все действия производятся над полями записи, только операцию присваивания можно выполнить над всей записью. S:=Ank; Массив записей описывается следующим образом: Var Mas: array [1..10] of Sved; Для более простого обращения к полям записей используется оператор присоединения with: With переменная_типа_запись do оператор; Один раз указав переменную типа запись в операторе with, можно работать с именами полей, как с обычными переменными, т.е. без указания перед идентификатором поля имени переменной, определяющей запись:
Сравните, без использования оператора with:
Паскаль допускает вложение записей друг в друга (т.е. поле записи может быть в свою очередь тоже записью), соответственно оператор with может быть вложенным. Уровень вложения не должен превышать 9. With rv1 do With rv2 do … With rvn do оператор; Вместо последней записи можно использовать более короткую: With rv1,rv2,…,rvn do оператор; Здесь rv1,rv2,…,rvn переменные типа запись.
Пример вложенных записей: Type Tfio= record Fam: String; Name: String; Otch: String end; Tdata= record Month:1..12; Year:1900..2005; Day:1..31; end; Sved= record Fio:Tfio; Data:Tdata; Adr: String end;
Записи можно описывать с помощью типизированных констант следующим образом: Const идентификатор: тип =(список_значений_полей); Список значений полей представляет собой список из последовательностей вида: имя_поля: константа Элементы списка отделяются друг от друга двоеточиями. Пример: Type point= record x,y:real end; vect= array [0..1] of point; month=(Jan, Feb, Mar, Apr, May, Jun, Jly, Aug, Sep, Oct, Nov, Dec); date= record d:1..31; m:month; y:1900..2005 end; Const Origon:point=(x:0; y:-1); Line:vector=((x:-3.1; y:1.5), (x:5.9; y:3.0)); SomeDay:date=(d:16; m:Mar; y:2005);
Пример. Описать массив записей, содержащих сведения о сдаче студентами сессии. Структура записи: фамилии студента, номер группы, результаты сдачи трех экзаменов. Распечатать список студентов, получающих стипендию. Условие получения стипендии – средний балл больше 5.
Program Zapisi; Uses Crt; Type Sved= record Fio: String [50]; {Фамилия} Nom: String [10]; {Номер группы} b1,b2,b3:0..10; {Результаты сдачи экзаменов} sb:Real; {Средний балл} end; Var Mas: array [1..10] of Sved; i,N:Byte; {формирование массива записей} Procedure Vvod; Begin Write ('Введите количество записей N='); ReadLn (N); For i:=1 to N do With Mas[i] do Begin Clrscr; Write ('ФИО -->'); ReadLn(Fio); Write ('Группа -->'); ReadLn(Nom); Write ('Оценки -->'); ReadLn(b1,b2,b3); sb:=(b1+b2+b3)/3; End end; {вывод исходного массива записей} Procedure Vivod; Begin clrscr; WriteLn ('Сведения о студентах:'); WriteLn ('Фамилия Группа Оценки Средний балл'); For i:=1 to N do With Mas[i] do WriteLn (Fio:10,Nom:10,b1:2,b2:2,b3:2,sb:5:1); Repeat Until KeyPressed; end; {вывод списка студентов, получающих стипендию} Procedure Obr; Begin Clrscr; WriteLn ('Студенты, получающие стипендию'); WriteLn ('Фамилия Группа Оценки Средний балл'); For i:=1 to N do With Mas[i] do If sb>5 then WriteLn (Fio:10,Nom:10,b1:2,b2:2,b3:2,sb:5:1); Repeat Until KeyPressed; end; Begin Vvod; Vivod; Obr; End. Записи с вариантами
Рассмотренные выше записи имеют строки определенную структуру. В языке Pascal имеется возможность задать тип записи, содержащий произвольное число вариантов структуры. Такие записи называются записями с вариантами. Записи с вариантами обеспечивают средства объединения записей, которые похожи, но не идентичны по форме. Они состоят из необязательной фиксированной и вариантной частей. Использование фиксированной части не отличается от описанного выше. Вариантная часть формируется с помощью оператора case. Он задает особое поле записи – поле признака, которое определяет, какой из вариантов в данный момент будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных далее констант. Константа, служащая признаком, задает вариант записи и называется константой выбора. Формат описания записи с вариантами: Type имя_типа = record {фиксированная часть} идентификатор _ поля: тип _ компоненты; … идентификатор _ поля: тип_компоненты; {вариантная часть} Case поле_признака: имя_типа of константа_выбора_1: (поле,…: тип); … константа_выбора_n: (поле,…: тип) end;
У части case нет отдельного end. Одно слово end заканчивает всю конструкцию записи с вариантами. Пример: Type tzap= record {фиксированная часть} Nomer:Byte; Article: String; {вариантная часть} Case flag: Boolean of True: (cena1:Integer); False: (cena2:Integer); end; Var zap:tzap;
При использовании записей с вариантами следует придерживаться следующих правил: · все имена полей должны отличаться друг от друга по крайней мере одним символом, даже если они встречаются в разных вариантах; · запись может иметь только одну вариантную часть, причем, она должна размещаться в конце записи; · если поле, соответствующее какой-либо метке, является пустым, то оно записывается следующим образом: метка: ();
Записи с вариантами также можно задавать с помощью типизированных констант. При задании такой записи указываются только один из возможных вариантов констант: Type Forma= record Case Boolean of True:(BirthPlace: String [40]); False:(Country: String [20]; EntryPort: String [20]; EntryDate: array [1..3] of Word; Count:Word) end; Const Person1:forma=(Country:’Норвегия’; EntryPort:’Мурманск’; EntryDate:(16, 3, 89); Count: 12); Person2:(BirthPlace:’Москва’);
Пример записей с вариантами. Ученики некоторого класса подразделяются на 3 группы: · занимающиеся в спортивном кружке, · занимающиеся в кружке туризма, · нигде не занимающиеся. В информации о школьниках первой группы нужно указать: · вид спорта (легкая атлетика, футбол, волейбол, баскетбол), · спортивный разряд (первый, второй, третий, кандидат в мастера спорта, мастер спорта); второй группы: · вид туризма (водный, пеший, горный), · категорию самого сложного похода (1-6); третьей группы: · причину неучастия (болен, не успевает). Описать массив записей с вариантами, имеющий указанную структуру. Организовать ввод и вывод массива. Program Sсhool; Uses Crt; Type Tzan=(Sport,Turizm,Bez); {вид занятий} Tvid=(L_a,Fut,Vol,Bas); {вид спорта} Trazr=(r1,r2,r3,kms,ms); {разряд} Tvidt=(Pe,Vo,Go); {вид туризма} Tbez=(Bol,Neus); {причина безделия} Data= record {дата рождения} D:1..31; {день} M:1..12; {месяц} Y:1900..2100 {год} end; Sc= record Fam: String [20]; {фамилия} Voz:Data; {возраст} Class:1..12; {класс} Case Zan:Tzan of Sport:(Vid:Tvid;Rasr:Trazr); Turizm:(Vidt:Tvidt;Kat:1..6); Bez:(Pr:Tbez) end; Var Mas: array [1..10] of Sc; i,p,k,N:Byte; {Ввод массива записей с вариантами} Procedure Vvod; Begin Write ('Количество учеников N='); ReadLn (N); For i:=1 to N do With Mas[i] do Begin Clrscr; Write ('Фамилия -->'); ReadLn (Fam); Write ('Дата рождения -->'); ReadLn (Voz.D,Voz.M,Voz.Y); Write ('Класс -->'); ReadLn (Class); WriteLn ('Вид занятий:'); WriteLn ('1 - спорт'); WriteLn ('2 - туризм'); WriteLn ('3 - бездельник'); Readln (k); Case k of 1: begin Zan:=Sport; Writeln ('Вид спорта:'); WriteLn ('1 - легкая атлетика'); WriteLn ('2 - футбол'); WriteLn ('3 - волейбол'); WriteLn ('4 - баскетбол'); Readln (p); Case p of 1:Vid:=L_a; 2:Vid:=Fut; 3:Vid:=Vol; 4:Vid:=Bas end; Writeln ('Разряд:'); Writeln ('1 - первый'); Writeln ('2 - второй'); Writeln ('3 - третий'); Writeln ('4 - кмс'); Writeln ('5 - мс'); ReadLn (p); Case p of 1:Rasr:=r1; 2:Rasr:=r2; 3:Rasr:=r3; 4:Rasr:=kms; 5:Rasr:=ms end; end; 2: begin Zan:=Turizm; Writeln ('Вид туризма:'); WriteLn ('1 - пеший'); WriteLn ('2 - водный'); WriteLn ('3 - горный'); Readln (p); Case p of 1:Vidt:=Pe; 2:Vidt:=Vo; 3:Vidt:=Go end; Write ('Категория 1..6 ->'); Readln (Kat); end; 3: begin Zan:=Bez; WriteLn ('Причина неучастия:'); WriteLn ('1 - болеет'); WriteLn ('2 - неуспевает'); Readln (p); Case p of 1:Pr:=Bol; 2:Pr:=Neus end; end; end; End end; {Вывод массива записей с вариантами} Procedure Vivod; Begin Clrscr; WriteLn ('Сведения о учениках:'); WriteLn ('Фамилия Дата рождения Класс Вид занятий'); For i:=1 to N do With Mas[i] do Begin Write (Fam:10); Write (Voz.D:3,Voz.M:4,Voz.Y:5); Write (Class:6); Case Zan of Sport: begin Write (' спорт:'); Case Vid of L_a:Write (' легкая атлетика '); Fut:Write (' футбол '); Vol:Write (' волейбол '); Bas:Write (' баскетбол ') end; Write (' Разряд:'); Case Rasr of r1:Write (' первый'); r2:Write (' второй'); r3:Write (' третий'); kms:Write (' кмс'); ms:Write (' мс') end; end; Turizm: begin Write (' Туризм: '); Case Vidt of Pe: Write (' пеший'); Vo: Write (' водный'); Go: Write (' горный') end; Write (' Категория ',Kat); end; Bez: begin Write (' Бездельник:'); Case Pr of Bol: Write (' болеет'); Neus: Write (' неуспевает') end; end; end; Writeln; end; end; {Основная программа} Begin Clrscr; Vvod; Vivod; Repeat Until KeyPressed; End.
ФАЙЛЫ Под файлом понимается либо поименованная область внешней памяти персонального компьютера (жесткого диска, гибкой дискеты), либо логическое устройство – потенциальный источник или приемник информации. Любой файл имеет три характерные особенности: 1. У файла есть имя, что дает возможность программе работать одновременно с несколькими файлами. 2. Файл содержит компоненты одного типа. Типом компонент может быть любой тип, кроме файлов. 3. Длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти. Файловый тип или переменную файлового типа можно задать одним из трех способов: имя_файлового_типа = File of тип_компонент; имя_файлового_типа = Text; имя_файлового_типа = File; которым соответствуют три вида файлов: · типизированный файл, · текстовый файл, · нетипизированный файл.
Date: 2015-10-19; view: 305; Нарушение авторских прав |