Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ПАСКАЛЕ.doc
Скачиваний:
12
Добавлен:
04.09.2019
Размер:
2.98 Mб
Скачать

Контрольные вопросы

  1. Как называются элементы, входящие в запись?

  2. Почему тип RECORD называют комбинированным типом данных?

  3. Почему две записи в одной программе могут иметь поля с одинаковыми именами?

  4. Пусть задано:

type DATE = record

DAY : 1..31;

MONTH : (JAN, FEB, MAR, APR, MAY, JUN, JUL,

AUG, SEP, OCT, NOV, DEC);

YEAR : integer;

end;

var BD: ARRAY [1..10] of DATE, HB:DATE.

Что означают BD[3].DAY, BD[5].YEAR, HB.MONTH ?

  1. Каково назначение оператора WITH?

  2. Могут ли поля записи быть, в свою очередь, записями?

  3. С помощью какого оператора образуются записи с вариантами?

  4. Сколько вариативных полей может иметь запись с вариантами?

  5. Как принято задавать значения вариативных полей?

Задания для самостоятельной работы

Пример. Для каждого из учеников класса имеются оценки по 5 предметам. Требуется вычислить среднюю оценку каждого ученика и выбрать того, кто имеет максимальный средний балл.

Решение. Следует сформировать (объявить) массив из записей, содержащей поля: фамилия, оценки и средний бал. Затем надо заполнить его фамилиями учащихся и их оценками. Затем вычислить средний бал каждого и выбрать из них максимальное значение.

Type uchenik = record

Fam : string[15];

b1, b2, b3, b4, b5 : 2..5;

sb : real;

end;

const n = 25;

var class: array [1..n] of uchenik; {Объявление массива учеников}

p: uchenik; i, k: integer; sbmax : real;

begin

for i:= 1 to n do {ввод исходных данных, заполнение массива записей}

with class[i] do

begin

writeln (‘Ведите фамилию и пять оценок’);

readln (fam, b1, b2, b3, b4, b5);

end;

{вычисление среднего балла каждого ученика}

For i := 1 to n do

with class[i] do sb := (b1+b2+b3+b4+b5) / 5;

{Поиск максимального среднего балла и номера ученика}

sbmax := 0;

for i := 1 to n do

if class [i].sb >= sbmax then

begin sbmax := class[i].sb; k := i end;

{Вывод фамилии лучшего ученика (при условии, что лучший балл – один) и его среднего балла}

Writeln ( class [k].fam: 20, class[k].sb:6:3);

Readln

End.

Замечание. В случае, если в классе имеется несколько учеников с максимальным числом среднего балла, то тогда вместо цикла

for i := 1 to n do

if class [i].sb >= sbmax then begin sbmax := class [i].sb; k := i end;

Writeln ( class [k].fam: 20, class[k].sb:6:3);

Следует написать:

for i := 1 to n do

if class [i].sb >= sbmax then sbmax := class[i].sb;

for i := 1 to n do

if class [i].sb >= sbmax then

with class [i].sb do writeln ( fam: 20, ‘ – ‘, sb:6:3);

Варианты заданий

Задание. Опишите заданный тип, осуществите ввод данных, произведите определенные операции и выведите на печать значение полей (где возможно). Во всех случаях используйте массив из записей.

    1. Данные о товаре на складе: наименование товара, сорт, стоимость, наличие, количество. Рассчитайте суммарную стоимость всего имеющегося в наличии товара.

    2. Данные о книге: автор, название, издательство, количество страниц, цена, тираж. Рассчитать стоимость одной страницы книги и стоимость всего тиража.

    3. Данные о поезде: тип (скорый, пассажирский), номер, количество вагонов (купейных, плацкартных, общих), стоимость билета (в купейном, плацкартном, общем). Рассчитать выручку одного рейса.

    4. Данные о государстве: название, площадь, численность населения, столица, число жителей в столице, наличие морской границы. Рассчитать плотность населения и отношение числа жителей в столице к общей численности населения.