Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Оператор WITH



Этот оператор используется для удобства работы с переменными типа RECORD (запись).

Общий вид:

WITH A DO ST;

Здесь А - имя переменной типа RECORD,ST - оператор.В операторе ST при ссылках на компоненты записи имя А можно опускать.

Пример. Для занесения даты рождения в предыдущем примере достаточно

выполнить операторы:

WITH BIRTHDAY[MOTHER] DOBEGIN MONTH:=5; DAY:=1; YEAR:=1950;END.;

Запись с вариантами

Общий вид:

TYPE V=RECORD A:TYPE1; B:TYPE2;................. CASE N:TYPEN OF C1: (T11:TYPE11; T12:TYPE12;,,,); C2: (T21:TYPE21; T22:TYPE22;,,,);............................... CK: (T1K:TYPE1K; T2K:TYPE2K;,,,);END;VAR Z:V;Здесь Z - переменная типа V; N - переменная, называемая переключателем; TYPEN - тип переменной N.Этому же типу должны принадлежать метки С1, С2,...,СК.Каждой метке соответствует набор полей Т11,Т12,.... Эти поля являются компонентами варианта.Переменную N называют также тэгом (тагом), ярлыком, признаком, дискриминантом.Если какой-либо метке CL вообще не соответствует поля, то пишут CL:();Замечания.Любая запись (record) может иметь только одну вариантную часть (CASE).Вариантная часть должна помещаться после постоянной части.Среди идентификаторов полей не должно быть одинаковых. Обращение к компоненте Z.Tij записи Z происходит так:Присваивается соответствующее значение (Ci) переключателю N. В зависимости от значения N переменная Z, помимо полей А,В,..., содержит те поля, которые соответствуют той метке Ci, с какой совпадает значение N.Выполняется операция с компонентой Z.Tij.

Пример записи с вариантами. Пусть необходимо собрать следующие

сведения о сотрудниках института: фамилию, дату рождения и, если есть семья, то фамилию и дату рождения супруги или супруга.

Эта информация моет быть описана, например, записью PERSON.

Пусть переменная KIND может иметь одно из значений (<женат>, <холост>).

KIND=(MARRIED, SINGLE); PERSON=RECORD NAME:STRING; DATEBIRTH:DATE; CASE YESNO:KIND OF MARRIED: (NAME1:STRING; DATE1:DATE); SINGLE: (); END;Здесь NAME - строка символов (например, 'ROGOV '); DATEBIRTH - запись, описанная выше, содержит дату рождения (например, 15.02.62); YESNO -переключатель типа KIND, который может принимать одно из двух значений: MARRIER либо SINGLE; NAME1 - строка символов, содержащая фамилию супруги (супруга) (например 'ROGOVA'); DATE1 - запись, содержащая дату рождения супруги (супруга). SINGLE - пустое поле.

Если ROGOV женат, то присутствует поле MARRIED, если холост - поле SINGLE, а поле MARRIED отсутствует. Паскаль допускает вложение

вариантов в типе RECORD.

Пример. Пусть необходимо, помимо информации предыдущего примера, иметь о сотрудниках следующие сведения: если сотрудник холост, но состоял в браке раньше, то указать, когда разведен.
Опишем тип KIND как (женат, холост, разведен, нет);

KIND=(MARRIED, SINGLE, DEVORCED, NO);Тогда PERSON=RECORD NAME:STRING; DATEBIRTH:DATE; CASE YESNO:KIND OF MARRIED: (NAME1:STRING; DATE1:DATE); SINGLE: (CASE YN:KIND OF DEVORCED: (DATEDV:DATE)); NO: (); END;Здесь для варианта SINGLE имеется вложенная запись с вариантами DEVORCED (разведен) и NO.

Если сотрудник состоит в браке, то в записях информации отсутствует

поле SINGLE; если разведен, то отсутствует MARRIED; если в браке не состоял, то запись содержит лишь поле NAME, DATEBIRTH и пустое поле

NO.
Замечание.

Перед засылкой информации в запись программист должен

присвоить переключателю соответствующее значение. В противном случае

информация (например, MARRIED) в поле заслана не будет, и система никакой

диагностики не выдаст.

Пример засылки информации о сотруднике РОГОВЕ, родившемся 1.12.32, женатом на РОГОВОЙ, родившейся 15.3.30.
PROGRAM LT3;

TYPE KIND=(MARRIED,SINGLE); DATE=RECORD DAY:1..31; MONTH:1..12; YEAR:INTEGER; END; PERSON=RECORD NAME:STRING; DATEBIRTH:DATE; CASE YESNO:KIND OF MARRIED: (NAME1:STRING; DATE1:DATE); SINGLE: (NAMESING:STRING); END;VAR P:PERSON;BEGIN WITH P DO YESNO:=MARRIED; NAME:='ROGOV'; WITH DATEBIRTH DO BEGIN DAY:=1; MONTH:=12; YEAR:=1932; END; CASE YESNO OF MARRIED: BEGIN NAME1:='ROGOVA'; WITH DATE1 DO BEGIN DAY:=15; MONTH:=3; YEAR:=1930; END; END; (*MARRIED*) SINGLE:NAMESING:='SINGLE'; END;(*CASE YESNO OF*) END;(*WITH P DO*) WITH P DO WRITE (' ',NAME); WITH P.DATEBIRTH DO WRITE (' ',DAY,'/',MONTH,'/',YEAR); WITH P DO WRITE (' ', NAME1); WITH P.DATE1 DO WRITELN (' ',DAY,'/',MONTH,'/',YEAR);END.

Лабораторная работа №13 (2 часа)

Тема: Компиляция и тестирование программы (См. лаб. раб. №12) с использованием записей.

Цель: Приобрести навыки проведения компиляции и тестирования программы.

Задание: Провести компиляцию и тестирование программы, разработанной в ходе выполнения лабораторной работы №12.

Практическая работа №9 (2 часа)

Тема: Использование стандартных процедур и функций для работы с файлами. Разработка алгоритмов заполнения и редактирования файлов данных.

Цель: Изучить стандартных процедур и функций для работы с файлами. Приобрести навыки разработки алгоритмов заполнения и редактирования файлов данных.

Задание: Разработатьалгоритм решения задачи согласно варианту, представить его в виде инструкции.

Вариант 1. В файл f записать целые числа в следующем порядке: десять положительных, десять отрицательных, десять положительных, и т.д. Переписать компоненты файла f в файл g в следующем порядке: пять положительных, пять отрицательных, пять положительных и т.д. (предполагается, что число компонент файл f делится на 20)

Вариант 2. В файл f записать целые числа в следующем порядке: десять положительных, десять отрицательных, десять положительных, и т.д. Переписать компоненты файла f в файл g в следующем порядке: двадцать положительных, двадцать отрицательных, двадцать положительных и т.д. (предполагается, что число компонент файл f делится на 40)

Вариант 3. Дан файл h компонентами которого массивы целых чисел a0, a1, …, a7, каждый по10 элементов. Записать в файл f последовательность массивов, получающихся преобразованием исходных массивов: a0a1, a1a2, …, a7a0.

Вариант 4. Дан файл h компонентами которого массивы целых чисел a0, a1, …, a7. Записать в файл f последовательность массивов, получающихся преобразованием исходных массивов: a0 + a1, a1 + a2, …, a6 + a7.

Вариант 5. Даны символьные файлы f и g. Определить, совпадают ли компоненты файла f с компонентами файла g. Если нет, то получить номер первой компоненты, в которой файлы f и g отличаются между собой.

Вариант 6. Дан файл h1, компонентами которого являются целочисленные массивы a1, …, a10, каждый по 5 элементов. Преобразовать каждый из массивов следующим образом: заменить отрицательные элементы на -1, положительные – на 1, а нулевые оставить без изменения. Записать полученные массивы в файл h2.

Вариант 7. Дан файл f, компонентами которого являются целочисленные массивы a0, a1, …, a8. Требуется преобразовать каждый из массивов, заменив элементы с наибольшем значением нулем. Полученные массивы должны быть записаны в тот же самый файл f. Разрешается использовать вспомогательный файл g.

Вариант 8. Разработать программу, которая формирует файл F1, содержащий целые числа, и переписывает этот файл в другой файл – F2, помещая в него из F1 только положительные числа.

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

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





Дата публикования: 2015-02-22; Прочитано: 253 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...