Весной и летом всех желающих школьников пригласили принять участие в загородной археологической экспедиции. желающие принять участие в экспедиции могут самостоятельно приехать в экспедиционный лагерь в любой день на какое-то удобное количество дней. разумеется, каждому школьнику организаторы экспедиции обещали предоставить спальный мешок и место в туристической палатке. желающих принять участие в экспедиции оказалось так много, что пришлось составить график. в графике указано n дней экспедиции (включая первый и последний ее день). служба материально-технического обеспечения экспедиции записала в графике данные о том, сколько человек уедет из лагеря, и сколько приедет в лагерь в каждый из дней. напишите программу, которая по этим данным определит, какое максимальное количество человек одновременно будет проживать в экспедиционном лагере, чтобы служба материально-технического обеспечения могла заранее подготовить необходимое количество спальных мешков и мест в туристических палатках. формат ввода во входном файле записано сначала число n (2 ≤ n ≤ 100) — количество дней в экспедиции. далее задается количество человек, которые приедут в экспедиционный лагерь в первый день. далее идет (n-2) пары чисел, для последующих дней количество уезжающих и приезжающих школьников. наконец, идет число, количество уехавших из лагеря в последний день. количество приезжающих школьников в каждый из дней не превышает 100. данные корректны, в частности, суммарное количество приехавших в лагерь в течение всех дней школьников всегда равно суммарному количеству уехавших из лагеря. формат вывода в выходной файл выведите одно целое число — максимальное количество человек, которые в какой-то момент одновременно проживали в лагере.
примечания
первый пример: в первый день в лагерь приедет 10 человек. далее 3 человека уедут и 1 приедет. в лагере будет 8 школьников. на следующий день уедет 5 и приедет 10. станет 13 человек. в предпоследний день никто не уедет, а приедет 2 человека. в последний день уедет 15 человек. итого максимальное количество — 15.
36 25 24 13 12 1
35 26 23 14 11 2
34 27 22 15 10 3
33 28 21 16 9 4
32 29 20 17 8 5
31 30 19 18 7 6
Объяснение:
1)
const n=6;
var a:array[1..n,1..n] of integer;
i,j:integer;
begin
for i:=1 to n do
if i mod 2=1
then for j:=1 to n do a[i,j]:=n*i-j+1
else for j:=1 to n do a[i,j]:=n*(i-1)+j;
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:3);
writeln;
end;
end.
Результат:
6 5 4 3 2 1
7 8 9 10 11 12
18 17 16 15 14 13
19 20 21 22 23 24
30 29 28 27 26 25
31 32 33 34 35 36
2)
const n=6;
var a:array[1..n,1..n] of integer;
i,j:integer;
begin
for j:=n downto 1 do
if (n+j) mod 2=0
then for i:=1 to n do a[i,j]:=n*(n-j)+i
else for i:=1 to n do a[i,j]:=n*(n-j+1)-i+1;
for i:=1 to n do
begin
for j:=1 to n do write(a[i,j]:3);
writeln;
end;
end.
Результат:
36 25 24 13 12 1
35 26 23 14 11 2
34 27 22 15 10 3
33 28 21 16 9 4
32 29 20 17 8 5
31 30 19 18 7 6
Лабораторная работа № 8. Работа с массивами
Теоретические сведения
Массив – это упорядоченный набор данных одного типа, снабженных индексами.
Индексы предназначены для нахождения определенного элемента массива, т.е. положение каждого элемента в массиве определяется его индексом. В этом и заключается упорядоченность. Тип компонент называется базовым типом массива.
В VBA массив рассматривается как переменная структурированного типа. Массиву присваивается имя, посредством которого можно ссылаться на него, как на единое целое, так и на любую из его компонент. Переменная с индексом — идентификатор компоненты массива. Формат записи:
<имя массива> (<индекс>), где индекс может быть выражением порядкового типа.
Видим, что индексы принято указывать в круглых скобках после имени массива. По умолчанию нумерация элементов массива начинается с 0. Говорят, что 0 – базовый индекс.
Например, если А – массив из пяти чисел: 2, 3, 7, 9, 6, то А (0) = 2 – первый элемент массива, А (4) = 6 – последний.
Описание массива определяет имя, размер массива, базовый тип и производится в разделе переменных. В VBA имеются следующие описания массивов:
1. <имя массива> (<номер последнего элемента>) [As <тип>]
2. <имя массива> (<начальный индекс> To <конечный индекс>) [As <тип>]
Отметим, что второй позволяет изменить базовый индекс. Другим изменения базового индекса является использование оператора Option Base, который имеет следующий синтаксис:
Option Base <базовый индекс>
<базовый индекс> – единица или ноль.
Этот оператор применяется перед процедурой, аналогично оператору Option Explicit.
Например, для изменения базового индекса с 0 на 1 используется оператор Option Base 1.
Массив A, который был рассмотрен, требует одного индекса для указания любого элемента. Такой массив называется одномерным (или линейным) В одномерных массивах хранятся значения линейных таблиц. Примеры описания одномерных массивов:
1. Dim A (12) As Byte
2. Dim A (1 To 12) As Byte
3. Dim Bin (5) As Integer
4. Dim Str_mass (4) As String
5. Dim K (7)
6. Dim L (0 To 3)
Заполнение массива в программе производится поэлементно. Чаще всего для этого используется цикл с параметром, где в качестве параметра применяется индексная переменная. Возможно заполнение массива путем простого присвоения значения элементам:
Dim B (1 To 3) As Integer
B (1) = 2
B (2) = 18
B (3) = 6
Удобным определения одномерных массивов является функция Array, преобразующая список элементов, разделенных запятыми, в вектор из этих значений, и присваивающая их переменной типа Variant.
Dim A As Variant
A = Array (10, 20, 35, 70)
Иногда в процессе выполнения программы требуется изменять размер массива. В этом случае первоначально массив объявляют как динамический. Для этого при объявлении массива не указывают его размерность. Например,
Dim R () As Single
В программе следует вычислить необходимый размер массива и связать его с некоторой переменной, например, n; затем изменить размер динамического массива с оператора ReDim:
ReDim [Preserve] Имя (<номер последнего элемента>) [As <тип>]
ReDim [Preserve] Имя (<начальный индекс> To <конечный индекс>) [As <тип>]
Preserve – ключевое слово, используемое для сохранения данных в существующем массиве при изменении значения последней размерности.