![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Записи, описанi вище, мають строго визначену структуру. В деяких випадках це обмежує їх використання. В Паскалі є можливість задати тип запису, що містить довільне число варіантів структури. Такі записи називаються записами з варіантами. Вони складаються з необов'язкової фіксованої частини та варіантної частини. Варіантна частина описується з допомогою оператора CASE. Він задає особливе поле ознаки, яке визначає, який з варіантів в даний момент активізувати:
TYPE Zap = RECORD
CASE <поле ознаки>: < тип > OF
<константа вибору 1>: (<поле>,...: <тип>);
....................
<константа вибору n>: (<поле>,...: <тип>)
END;
Компоненти кожного варіанту даються в круглих дужках. В частині CASE немає окремого end.
Приклад:
Type Forma = Record
Name: String;
Case Flag: Boolеan of
True: (BirthPlace: String[40]);
False: (Country: String[20];
EntryPort: String[20];
EntryDate: 1..31;
ExitDate: 1..31)
end;
В цьому прикладі тип Forma визначає запис з одним фіксованим полем Name і варіантною частиною, яка задається конструкцією Case.. of. Варіантна частина складається з двох частин, які визначаються константами вибору True та False. Після констант вибору слідує двукрапка і список полів в круглих дужках. Запис може мати лише одну варіантну частину, і, якщо вона є, то повинна розміщуватися за всіми фіксованими полями.
Важливою особливістю варіантної частини є та обставина, що всі задані в ній варіанти “накладаються” один на другого, тобто кожному з них виділена одна і та ж область пам’яті. Це надає додаткові можливості перетворення типів.
Приклад:
Var
X: Word;
Xb: Byte;
Xl: LongInt;
Mem4: Record
Case Byte of
0: (by: array[0..3] of Byte);
1: (wo: array[0..1] of Word);
2: (lo: LongInt);
End;
Begin
....
With Mem4 do begin
Lo:=Trunc(2*pi*x);
If wo[1] = 0 then
If by[1] = 0 then Xb:=0
Else X:=wo[0]
Else Xl:=lo
End;
End.
Конструкція Case.. of, яка відкриває варіантну частину, зовні подібна на відповідний оператор вибору, але насправді грає роль лише службового слова, яке означає початок варіантної частини. Ключ вибору в конструкції Case.. of фактично ігнорується компілятором: єдиною вимогою, яка до нього є приналежність до перелічуваного типу.
Записи дозволяють об’єднати під одним іменем дані різних типів. Це зручно для розв’язування різноманітних задач. Спочатку треба описати тип запис за допомогою службового слова RECORD
Type complex = Record
Re, Im: Real;
end;
Запис складається з окремих полів, кожне поле має свій тип. Кількість полів обмежена, порядок їх походження будь-який. Поле, в свою чергу, може бути записом.
Використання типу RECORD можна проілюструвати в такому прикладі.
Приклад:
Програма, яка обчислює суму двох комплексних чисел.
Program Summa;
Type
Complex = Record
Re,Im:real;
end;
Var
C1, C2, C3: Complex;
R, I: Real;
Procedure IntC(var C: Complex; R, I: Real);
begin
with C do begin
Re:=R;Im:=I;
end;
end;
Procedure SumC(C1,C2: Complex; var C3: Complex);
begin
with C3 do begin
Re:=C1.Re+C2.Re;
Im:=C1.Im+C2.Im;
end;
end;
Procedure WriteC(C: Complex);
begin
with C do begin
write(Re);
if Im=0 then Exit;
if Im>0 then Write('+');
Write(Im);Write('i');
end;
end;
Begin
Writeln('побудувати число С1');
Readln(R,I); IntC(C1,R,I);
Writeln('побудувати число С2');
Readln(R,I);IntC(C2,R,I);
SumC(C1,C2,C3);
WriteC(C);
End.
Приклад:
Сформувати масив записів про: прізвище студента, ім’я; оцінки з фізики, математики, інформатики.
Обчислити кількість студентів, середній бал яких більший, або рівний “4”.
Текст програми
program Zap;
const n=2;
type TMarks=record
f:integer;
m:integer;
inf:integer;
end;
Tst=record
surname:string[15];
name:string[10];
marks: TMarks;
ser:real;
end;
Tgr=array[1..n] of Tst;
var gr:Tgr; k,i:integer;
begin
for i:=1 to n do
with gr[i],marks do begin
readln(surname);
readln(name);
readln(f);
readln(m);
readln(inf);end; K:=0;
for i:=1 to n do
with gr[i],Marks do begin
ser:=(f+m+inf)/3;
if gr[i].ser>=4 then
k:=k+1;writeln('ser',i,'=',ser:2:1); end;
writeln('k=',k);
end.
Результат виконання програми
Kas
Oleh
Top
Olena
ser1=4.7
ser2=3.3
k=1
Дата публикования: 2014-11-04; Прочитано: 440 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!