- •Технология программирования (pascal)
- •V. Структуры и организация данных
- •1. Статические структуры данных
- •1.1. Массив как статическая структура данных.
- •1.2. Линейный поиск в массивах данных.
- •1.3. Способы сортировки в массивах данных.
- •Признаки порядка
- •1.4. Некоторые рекомендации при работе со статическим массивом.
- •1.5. Пример задачи выполнения операций над одномерными массивами.
- •1.6. Пример задачи выполнения операций над двумерным массивом.
- •1.7. Запись как статическая структура данных.
- •1.7.1. Вложенные поля записи.
- •1.7.2. Массив записей.
- •1.7.4. Записи с вариантами.
- •1.8. Статическая структура – множество.
- •Операции над множествами
- •3. Разность множеств: -
1.5. Пример задачи выполнения операций над одномерными массивами.
1. Постановка задачи: реализовать на массивах выполнение строевых команд ряды сдвой и сомкнитесь, т. е. из массива A(2n) элементы с четными индексами нужно перенести в начало массива B(n), а оставшиеся – сдвинуть к началу массива A.
2. Математическая модель — самостоятельно!
3.Блок-схема алгоритма — самостоятельно!
1.6. Пример задачи выполнения операций над двумерным массивом.
1. Постановка задачи: требуется каждый элемент заданной матрицы заменить минимальным элементом, выбираемым среди элементов, стоящих не ниже и не правее этого элемента, включая его значение.
2. Математическая модель — самостоятельно!
3. Блок-схемы алгоритма — самостоятельно!
1.7. Запись как статическая структура данных.
Комбинированные типы данных являются наиболее гибким механизмом построения структур данных. Любой комбинированный тип задает некоторый образ объектов, каждая часть которых может иметь различные характеристики. PASCAL позволяет определять несколько вариантов структуры объектов, что означает: разные переменные, относящиеся к одному комбинированному типу, могут иметь отличающиеся друг от друга структуры.
Комбинированный тип характеризует объект, называемый запись, которая является сложной переменной с несколькими компонентами.
В отличие от массивов компоненты записи (поля) могут иметь разные типы, и доступ к ним осуществляется не по индексу, а по имени поля. При объявлении комбинированного типа задаются имя и тип каждого поля.
Структура объявления типа:
TYPE
<имя_типа> = RECORD
<список_полей>;
END;
Структура объявления переменной:
VAR
<имя_переменной>:RECORD
<список_полей>;
END;
Например,
Type
person = record
Name: string[15];
Address: string[20];
Index: longint;
end;
Запись можно использовать в качестве отдельной переменной, для чего соответствующая переменная должна иметь тип, который присвоен описанию записи. После следующего описания (объявления)
VAR
A, B: PERSON;
переменные A, B будут содержать записи типа PERSON.
При обращении к отдельным полям записи указывается имя всей записи и имя отдельного поля, которые разделяются точкой:
A.NAME:=’ИВАНОВ И.И.’;
B.NAME:=’МИРОНОВ А.В.’;
1.7.1. Вложенные поля записи.
Можно использовать вложенные поля записи, для этого необходимо продолжить уточнение:
TYPE
BIRTHDAY=RECORD;
DAY, MONTH: BYTE;
YEAR: STRING[4];
END;
VAR
REC: RECORD
NAME: STRING[15];
BIRTH: BIRTHDAY;
END;
BEGIN
…
IF REC.BIRTH.YEAR=’1982’ THEN
…
END.
1.7.2. Массив записей.
Записи можно объединить в массив.
Например, чтобы использовать данные типа
Type
person = record
Name: string[15];
Address: string[20];
Index: longint;
end;
необходимо объявить сами данные. Одним из вариантов использования отдельных записей является объединение их в массив.
Var
Persons : array[1..30] of person;
Эти два объявления можно объединить в виде объявления массива записей следующим образом:
Var
Persons : array[1..30] of record
Name: string[15];
Address: string[20];
Index: longint;
end;
Доступ к полям отдельной записи осуществляется через имя переменной и имя поля:
Persons[1] . Name:=’Иванов’;
Persons[2] . Adress:='город Москва …’;
1.7.3. Оператор присоединения WITH … DO используется для упрощения доступа к полям записи.
Структура оператора:
WITH <переменная_типа_запись> DO
<оператор>;
Например,
TYPE
BIRTHDAY=RECORD;
DAY, MONTH: BYTE;
YEAR: STRING[4];
END;
VAR
REC: RECORD
NAME: STRING[15];
BIRTH: BIRTHDAY;
END;
BEGIN
…
WITH REC.BIRTH DO
MONTH:=10;
…
END.
Следующие записи оператора присоединения будут эквивалентны:
WITH REC.BIRTH DO
MONTH:=10;
или
WITH REC DO
WITH BIRTH DO
MONTH:=10;
или
REC.BIRTH.MONTH:=10;