Next: 5.5.2
Упражнения
Up: 5.5
Программы обработки таблиц
Previous: 5.5
Программы обработки таблиц
5.5.1 Статистика
Задача. В библиотеке университета находятся журналы за последние
20 лет. Сведения о выдаче всякого экземпляра журнала содержат название
журнала (20 букв), год издания, номер выпуска (цифру от 1 до 6), номер
читательского билета (4 цифры) и дату выдачи (год, месяц, день). Даны название
журнала и набор из 1000 сведений о выдаче. Найти, сколько раз каждый из
выпусков журнала выдавался на руки. Ответ распечатать в порядке возрастания
годов издания и номеров выпусков. Решение. При решении (см.программу
СТАТИСТИКА) удобно использовать переменную 226#112 типа ТАБЛИЦА, в которой
элемент 227#113 хранит количество выдач журнала выпуска 228#114 за год .
Вычисление результата происходит путем последовательного выполнения следующих
действий: обнуление таблицы 226#112, ввод названия журнала, обработка набора
из 1000 сведений о выдачах с заполнением таблицы 226#112, печать результатов
из таблицы 226#112.
program СТАТИСТИКА; const M = 1000; ДЛИНА=20; НАЧ=1981;
КОН=2001; type ВЫПУСК = 1..6; ГОД = НАЧ..КОН; МЕСЯЦ=1..12; ДЕНЬ=1..31;
НОМЕРБУКВЫ=1..ДЛИНА; НОМЕР=1..35000; НОМЕРВЫДАЧИ = 1..М; ДАТА = record
Г:ГОД; М:МЕСЯЦ; Д:ДЕНЬ end; НАЗВАНИЕ = array [НОМЕРБУКВЫ]
of Char; ВЫДАЧА=record Н:НАЗВАНИЕ; Г:ГОД; В:ВЫПУСК; N:НОМЕР;
D:ДАТА end; ТАБЛИЦА = array [ГОД] of array[ВЫПУСК]
of Integer; var X:ТАБЛИЦА; Z:ВЫДАЧА; W:НАЗВАНИЕ; I:ГОД; J:ВЫПУСК;
ЭТОТ:Boolean; K:НОМЕРВЫДАЧИ; L:НОМЕРБУКВЫ; begin {Обнуление таблицы
} for I := НАЧ то КОН do for J := 1 to 6 do
X[I][J] := 0; { Ввод названия журнала } for L := 1 to
ДЛИНА do Read(W[L]); 229#115
for K := 1 to M do begin { Обработка сведений
о текущей выдаче } {Ввод этих сведений } for L := 1 to
ДЛИНА do Read(Z.H[L]); Read(Z.Г, Z.B, Z.N, Z.D.Г, Z.D.M, Z.D.Д);
{Проверка названия журнала } ЭТОТ := True; L := 1; while
ЭТОТ and (L 134#20 ДЛИНА) do begin ЭТОТ := Z.H[L]
= W[L]; L := L+1 end; if ЭТОТ then X[Z.Г] [Z.B] :=
X[Z.Г] [Z.B]+1 end; {Печать результатов поиска } for
I := НАЧ to КОН do begin WriteLn(I,'ГОД':4); for
J := 1 to 6 do WriteLn('Выпуск N':20,J:2, 'выдавался':10,X[I]
[J],'раз':5) end end.
© В.Н. Касьянов, 2001