Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 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 Ank do begin Write(Fam); ... end; Использование массива записей For i:=1 to N do With Mas[i] do begin Write(Fam); ... end;

Сравните, без использования оператора with:

Использование переменной типа запись Write(Ank.Fam); ...   Использование массива записей For i:=1 to N do begin Write(Mas[i].Fam); ... end;

 

Паскаль допускает вложение записей друг в друга (т.е. поле записи может быть в свою очередь тоже записью), соответственно оператор 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; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.076 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию