56
ляции), однako «взлететь» с неполным набором «пассажиров» еще не может.
В некоторых языках программирования (алгор, ПЛ/1, например) есть возможность отводить нужное количество памяти диинамических сначала вычисляем N, затем выполняем инструкцию «отвести N элементов памяти».
Но в любом языке, по-видимому, самый быстрый способ dynamического настроки программы (то есть настроки в процессе выполнения) на необходимые размеры массивов является прием, который можно назвать работа с неполным массивом.
При работе с неполным массивом все массивы описываются с запасом, а используется только необходимая часть массива.
Описание и ввод в этом случае выглядят следующим образом (остальная часть программы опущена):
const k: = 100; m: = 100 {k — максимальное элемент}
var a: array [1..k] of real;
i, n: integer; s: real;
begin readln(n);
for i: = 1 to n do read(a[i]);
или
begin n:=0; while NOT (eof(input)) do
begin n:=n+1; read(a[n]) end;
В первом варианте программы перед началом массива исходных данных подкладавает перфокарту с количеством нужных ему в этот раз элементов, во втором — после массива подкладавает перфокарту «конец файла».
Оставшаяся часть программы не изменяется:
Все циклы выполняются с изменением параметра от 1 до n.
Какой брать запас? В каждой конкретной задаче это обычно известно: пассажиров в ТУ-134 не более 72, студентов в группе — не более 30 и т. д. Если нужны многомерные массивы, то поступаем аналогично: описываем, скажем, двумерную матрицу с запасом по каждому изменению и использует ее «северозападный» угол.
Наконец, если запаса не хватает, то применяем статическую настройку. Это напоминает общий радиоприемник: в пределах диапазона подстраиваем поворотом ручки, для смены диапазонов использует переключатель.
Контрольное задание*)
6.1. Ввести и распечать значения элементов «неполной» матрицы A размера n×m, считая, что ее элементы занимают левый верхний угол данной матрицы A’ размера n’×m’, где n’>n, m’>m. Размеры n и m вводятся перед вводом матрицы A. Значения каждой строки матрицы должны, во-первых, вводиться с новой строки и, во-вторых, печататься с новой строки.
Л. Ф. Штернберг
*) Это последнее задание цикла «Стандартиные приемы программирования».
КВАНТ УАБИАЕТСЯ
«Летать быстрое и дальше»
«Извлечение корня»
Рисунки А. А. Орехова