русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Записи

Запись - структура данных, содержащая конечное число компонент различного типа. Компоненты называются полями. Как любой тип, определяемый программистом, тип "запись" должен быть объявлен в разделе TYPE. При описание типа запись указывает тип каждого поля и идентификатор, который именует поле. Тип данных RECORD предоставляет возможность объединить в одну связанную структуру различные по типу и смыслу поля, причем элементами записи могут быть и структурированные типы данных, например массивы и другие (подчиненные) записи. Для обработки доступна как вся запись целиком, так и отдельные поля.

Описатель записей:

RECORD <фиксированная часть> <вариантная часть> END

Здесь фиксированная часть записи состоит из списка имен полей с указанием типа данных, к которым эти поля относятся. В описании записи хотя бы одна из необязательных частей (фиксированная или вариантная) должна присутствовать.

Примеры записей, содержащих только фиксированную часть:

TYPE

REC = RECORD

A, B : INTEGER;

C : CHAR

END;

DATE = RECORD

DAY : 1..31;

MONTH : 1..12;

YEAR: 1900..2100

END;

Если VAR X:REC; Y, Z:DATE; то к полям записей X, Y и Z имеется доступ по имени поля. Например, X.A - поле A записи X, элемент типа INTEGER.

Инициализация записи - инициализация всех полей записи Y.DAY := 17; Y.MONTH := 3; Y.YEAR := 1992;

Если запись Y инициализирована, то можно ее использовать в правой части оператора присваивания Z := Y ; Z и Y совместимы по присваиванию, поскольку относятся к одному и тому же типу данных.

Посмотрите, как используется запись в программе Datas лекции 5.

Вариантная часть всегда следует за фиксированной, если она есть.

CASE <тег:> тип of <список описаний вариантов>

Описание варианта - это константное значение или диапазон константных значений, относящихся к типу «тип» описания вариантной части. Далее ставится двоеточие, и в скобках - описание полей варианта. Описание полей варианта осуществляется по тем же правилам, что и полей фиксированной части. Имена всех полей должны быть уникальными идентификаторами внутри записи.

Следующий пример показывают способ задания поля тега.

TYPE SHAPE = (TRIANGLE, RECTANGLE, SQUARE, CIRCLE);

COORDINATES = RECORD { фиксированная часть }

X, Y, AREA : REAL;

CASE S : SHAPE OF { вариантная часть }

TRIANGLE : (SIDE : REAL; BASE : REAL);

RECTANGLE: (SIDEA, SIDEB : REAL);

SQUARE : (EDGE : REAL);

CIRCLE : (RADIUS : REAL)

END;

В памяти поля разместятся как показано на рисунке

фиксированная часть вариантная часть
X Y AREA S SIDE BASE
X Y AREA S SIDEA SIDEB
X Y AREA S EDGE -
X Y AREA S RADIUS -

Если S = RECTANGLE, то доступны поля SIDEA и SIDEB. Например, при инициализации записи:

X : COORDINATES;

X.S := RECTANGLE;

X.SIDEA := 17.5;

X.SIDEB := 20.4;

В стандартном языке Pascal (и в TP) можно вообще не указывать поле тега:

COORDINATES RECORD

X, Y : REAL; { фиксированная часть }

AREA : REAL;

CASE SHAPE OF { вариантная часть }

END

В этом случае можно обращаться к любым полям вариантной части по имени, однако ответственность за правильность трактовки данных возложена на программиста.

Проанализируйте самостоятельно следующий пример:

program record_;

type

T_education=(begining,medium,higher);

T_profession=(teacher,driver,woker);

T_category=(A,B,C,D);

T_anketa=

record

name :string[20];

case profession:T_profession of

teacher:(education:T_education;

pedagogical_length_of_service:byte);

driver :(licence:record

case drivers_licence:boolean of

true :(category:T_category;

drivers_length_of_servie:byte);

false:(drivers_school:string[20])

end);

woker :(specialization:string[20];

class:string[20])

end;

var a1,a2,a3:T_anketa;

begin

writeln(sizeof(T_profession)); {1}

writeln(sizeof(T_anketa)); {64}

a1.name:='Ivan';

a1.profession:=teacher;

a1.education:=higher;

a1.pedagogical_length_of_service:=1;

a2.name:='Vlad';

a2.profession:=driver;

a2.licence.drivers_licence:=true;

a2.licence.category:=B;

a3.name:='Mike';

a3.profession:=woker;

a3.specialization:='shoe-maker';

a3.class:='master';

end.

Оператор присоединения WITH позволяет один раз указать имя записи и обращаться непосредственно к полям записи. Синтаксис оператора WITH:

WITH <список переменных> DO <оператор>,

где в списке «список переменных» указываются имена записей.

Например, если Y запись типа DATE (см. пример выше), то значения полям этой записи можно присвоить так:

WITH Y DO BEGIN

DAY :=17; MONTH := 3; YER := 1992

END;

Оператор WITH V1, V2,...,Vn DO S;

эквивалентен последовательности операторов присоединения

WITH V1 DO WITH V2 DO ... WITH Vn DO S;

Вот как массив строк может помочь распечатать (выдать на экран) данное перечислимого типа (день недели 1 января 1901 года):

program datas;

type

week_day=(Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday);

dat=1..31;

month=(January,Fabruary,March,April,May,June,July,

August,September,October,November,December);

year=1900..2100;

attr_of_day=record

w_d:week_day;

d:dat;

m:month;

y:year

end;

var

today:attr_of_day;

kol:integer;

prn_week_day:array[week_day] of string[9]

function pred_week_day(w:week_day):week_day;

begin

if w=Monday then pred_week_day:=Sunday else pred_week_day:=pred(w)

end;

function pred_month(m:month):month;

begin

if m=January then pred_month:=December else pred_month:=pred(m)

end;

procedure pred_dat(var t:attr_of_day);

begin

if t.d=1 then

begin

t.m:=pred_month(t.m);

if t.m=December then t.y:=t.y-1;

case t.m of

January,March,May,July,August,October,December:t.d:=31;

Fabruary:if (t.y mod 4)=0 then t.d:=29 else t.d:=28;

April,June,September,November:t.d:=30

end

end else t.d:=t.d-1;

t.w_d:=pred_week_day(today.w_d);

end;

begin

prn_week_day[Monday]:=’Monday’

prn_week_day[Tuesday]:=‘Tuesday’

prn_week_day[Wednesday]:=‘Wednesday’

prn_week_day[Thursday]:=‘Thursday’

prn_week_day[Friday]:=‘Friday’

prn_week_day[Saturday]:=‘Saturday’

prn_week_day[Sunday]:=‘Sunday’

today.w_d:=Monday;

today.d:=2;

today.m:=October;

today.y:=2006;

repeat

pred_dat(today);

if (today.y<=2000) and (today.w_d=Monday) and (today.d=13)

then kol:=kol+1;

until (today.y=1901) and (today.m=January) and (today.d=1);

writeln('Kol= ',kol:4);

writeln(prn_week_day[today.w_d])

end.

Просмотров: 420


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Полезен материал? Поделись:

Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.