Ограничение времени
1 секунда
ограничение памяти
64mb
ввод
стандартный ввод или input.txt
вывод
стандартный вывод или output.txt
ваш знакомый — владелец сети кинотеатров. в каждом принадлежащем ему кинотеатре есть несколько кинозалов, причем в каждом зале кресла могут быть расположены по-разному. кроме того, различные залы имеют разное расписание сеансов. чтобы не запутаться во всём этом, знакомый попросил вас написать для него программу, моделирующую работу кинотеатров. такую программу называют «билетной системой». программа должна предоставлять пользователю возможность вносить «в систему» всю необходимую справочную информацию: добавлять кинотеатр, добавлять зал в кинотеатр, задавать конфигурацию кресел, создавать сеанс определённого фильма (с определённой длительностью и в определённое время). ну и самое главное: «система» должна уметь «продавать» билеты, отвечать на запросы о том, когда и где (в каком кинотеатре и зале) будет ближайший сеанс (на который есть свободные места) выбранного фильма, печатать для сеанса план зала с указанием занятых и свободных мест.
не лишними будут также и более специфичные возможности. например, отвечать, на какой ближайший сеанс в данном кинотеатре есть 3 свободных места рядом.
const
nn=100; // предельное кол-во элементов в массиве
type
mas=array[1..nn] of integer;
procedure RandomArray(var a:mas;n,p,q:integer);
// Заполняет первые n элементов массива a
// случайными числами из интервала [p;q]
var
i:integer;
begin
for i:=1 to n do a[i]:=Random(q-p+1)+p
end;
procedure PrintArray(a:mas;n:integer);
// Выводит на экран первые n элементов массива a
var
i:integer;
begin
for i:=1 to n do Write(a[i],' ');
Writeln
end;
procedure SortByDescending(var a:mas;n:integer);
// Сортирует по невозрастанию первые n элементов массива a.
// Элементарная обменная сортировка
var
i,j,t:integer;
begin
for i:=1 to n-1 do
for j:=1 to n-1 do
if a[j]<a[j+1] then
begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t end
end;
// Основная программа
var
i,n1,n2,n3,x,y:integer;
a,b,c:mas;
begin
Randomize;
Write('Кол-во элементов в массиве и границы интервала из значений: ');
Read(n1,x,y);
RandomArray(a,n1,x,y);
Write('Кол-во элементов в массиве и границы интервала из значений: ');
Read(n2,x,y);
RandomArray(b,n2,x,y);
Write('Первый массив: '); PrintArray(a,n1);
Write('Второй массив: '); PrintArray(b,n2);
Writeln('Объединенный массив, отсортированный по невозрастанию');
n3:=n1+n2;
for i:=1 to n1 do c[i]:=a[i];
for i:=1 to n2 do c[i+n1]:=b[i];
SortByDescending(c,n3);
PrintArray(c,n3)
end.
Тестовое решение
Кол-во элементов в массиве и границы интервала из значений: 8 10 60
Кол-во элементов в массиве и границы интервала из значений: 6 30 90
Первый массив: 41 56 14 57 52 51 30 54
Второй массив: 76 36 44 39 68 38
Объединенный массив, отсортированный по невозрастанию
76 68 57 56 54 52 51 44 41 39 38 36 30 14
2. На самом деле эту же задачу можно написать гораздо короче
// PascalABC.NET 3.1, сборка 1246 от 23.05.2016
begin
var n1,n2,x,y:integer;
Write('Кол-во элементов в массиве и границы интервала из значений: ');
Read(n1,x,y);
var a:=ArrRandom(n1,x,y);
Write('Кол-во элементов в массиве и границы интервала из значений: ');
Read(n2,x,y);
var b:=ArrRandom(n2,x,y);
Write('Первый массив: '); a.Println;
Write('Второй массив: '); b.Println;
Writeln('Объединенный массив, отсортированный по невозрастанию');
var c:=(a+b).SortedDescending; c.Println
end.