Пример.
Префикс – обязательная предшествующая часть составного идентификатора для имен полей в структуре типа запись Паскаля. Очень часто у программиста возникает желание не указывать префикс в имени полей, например, когда идет постоянное использование одних и тех же записей. В языке Паскаль предусмотрена такая возможность, реализуемая при помощи оператора присоединения, который в общем виде выглядит так:
with <имя_записи> do <действие с полем записи>;
Следует обратить внимание на то, что после служебного слова do может стоять только один оператор, но он может быть составным (любая последовательность операторов, заключенная в операторные скобки begin end). Например, фрагмент из предыдущей программы с использованием оператора присоединения будет выглядеть так: Пример фрагмента программы c записью и префиксом Паскаля for I:=1 to 100 do with student[I] do begin writeln (‘введите сведения о’, I, ‘-м студенте’); writeln (‘введите фамилию, имя и отчество’); readln (fio); writeln (‘введите дату рождения’); readln (dat_r); writeln (‘введите адрес’); readln(adres); writeln (‘введите курс’); readln(curs); writeln (‘введите группу’); readln (grupp); end; Контрольные вопросы
1. Чем отличается тип "запись" от других структурированных типов? 2. Могут ли поля записи быть одного и того же типа? 3. Как обратиться к отдельному полю записи? 4. Что такое "оператор присоединения"? В каких целях он используется? 5. Как заполнить массив записей? Пример. Создать электронную картотеку публикаций, позволяющую после запроса о виде публикации произвести ввод параметров указанной публикации. В картотеке хранятся сведения о публикациях трёх видов: книги, статьи и рефераты. Рассмотрим структуру каждого вида публикаций: ü Книга (book) Автор (author) Название (title) Год (year) Издательство (publishinghouse) Страницы (pages) ü Статья (article) Автор (author) Название (title) Год (year) Журнал (journal) Номер журнала (numberofjournal) Начальная страница (begpagej) Конечная страница (endpagej) ü Реферат Автор (author) Название (title) Год (year) Номер реферативного журнала (numberofpaper) Начальная страница (begpagerj) Конечная страница (endpagerj)
В предложенной структуре три параметра: автор, заголовок и год повторяются для каждого вида публикаций, поэтому их можно вынести в фиксированную часть записи, остальные – в вариантную часть.
program publications; uses crt; const N=25; type kind=(book,article,paper); publication = record {фиксированная часть записи} author,title: string; year:word; {вариантная часть записи} case kindp:kind of book: (publishinghouse:string; pages: word); article: (journal:string; numberofjournal:byte; begpagej, endpagej:word); paper:(numberofpaper:byte; begpagerj, endpagerj:word); end; var pub: publication; j:word; begin clrscr; writeln('Vihod - nedopustimiy vid publicacii'); repeat writeln('Vid publicacii (0..2)= '); readln(j); if j in [0..2] then with pub do begin kindp:=kind(j); write('author: '); readln(author); write('nazvanie: '); readln(title); write('god: '); readln(year); case kindp of book: begin write('izdatelstvo: '); readln(publishinghouse); write('Obem, ctr: '); readln(pages); end; article: begin write('nazvanie gurnala: '); readln(journal); write('nomer gurnala: '); readln(numberofjournal); write('stranici: '); readln(begpagej,endpagej); end; paper: begin write('nomer ref.gurnala: '); readln(numberofpaper); write('stranici: '); readln(begpagerj,endpagerj); end; end; end; until not(j in [0..2]); {повторять до недопустимого вида публикации} readkey end.
Постановка задачи:
Содержание отчёта:
Варианты заданий
Ввод с клавиатуры данных в массив, состоящий из семи элементов типа AEROFLOT; вывод на экран номеров рейсов и типов самолётов, вылетающих в пункт назначения, название которого совпало с введённым с клавиатуры. Упорядочить структуры по возрастанию номеров рейсов.
Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TRAIN, вывод на экран информации о поездах, отправляющихся после введённого с клавиатуры времени. Упорядочить структуры по алфавиту (название пункта назначения).
Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE, вывод на экран информации о человеке, чья фамилия введена с клавиатуры. Упорядочить структуры по алфавиту (фамилии).
Ввод с клавиатуры данных в массив, состоящий из десяти структур типа PRICE, вывод на экран информации о товаре, название которого введено с клавиатуры, если таких товаров нет, выдать соответствующее сообщение. Упорядочить структуры по алфавиту (название товара).
Ввод с клавиатуры данных в массив, состоящий из восьми структур типа ORDER, вывод на экран информации о сумме, снятой с расчётного счёта плательщика, введённого с клавиатуры. Упорядочить структуры по возрастанию перечисляемых сумм.
Ввод с клавиатуры данных в массив, состоящий из восьми структур типа ZNAK, вывод на экран информации о человеке, чья фамилия введена с клавиатуры. Упорядочить структуры по алфавиту (фамилии).
Ввод с клавиатуры данных в массив, состоящий из десяти структур типа WORKER, вывод на экран фамилий работников, чей стаж работы в организации превышает значение, введённое с клавиатуры. Упорядочить структуры по убыванию стажа работы.
Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа MARSH, вывод на экран информации о маршрутах, которые начинаются или кончаются в пункте, название которого введено с клавиатуры. Упорядочить структуры по возрастанию номера маршрута.
Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа BAZA, вывод на экран информации о человеке, чья фамилия введена с клавиатуры. Упорядочить структуры по возрасту (по убыванию).
Ввод с клавиатуры данных в массив, состоящий из десяти структур типа PRODUCT, вывод на экран информации о продукте, название которого введено с клавиатуры, если таких продуктов нет, выдать соответствующее сообщение. Вывести общую сумму на все ввезённые на склад продукты. Упорядочить структуры по количеству продуктов, имеющихся в наличии.
Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа TUR, вывод на экран информации о турах в страну, название которой введено с клавиатуры. Упорядочить структуры по возрастанию стоимости тура.
Ввод с клавиатуры данных в массив, состоящий из десяти структур типа HOSPITAL, вывод на экран фамилий больных, проживающих на участке, номер которого введён с клавиатуры. Упорядочить структуры, расположив фамилии в алфавитном порядке.
Ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT, вывод на экран фамилий и номеров групп для всех студентов, имеющих оценки 4 и 5. Упорядочить структуры по убыванию суммы набранных баллов.
Ввод с клавиатуры данных в массив, состоящий из десяти структур типа STUDENT, вывод на экран фамилий и номеров групп для всех студентов, имеющих хотя бы одну оценку 2. Упорядочить структуры по алфавиту (фамилии).
Ввод с клавиатуры данных в массив, состоящий из восьми элементов типа NOTE, вывод на экран информации о человеке, чьи дни рождения приходятся на месяц, значение которого введено с клавиатуры. Упорядочить структуры по алфавиту (фамилии).
|