procedure MatrixInit(var a:Mas;m,n,p,q:integer); { Заполнение массива размером m*n целыми случайными числами из интервала [p;q] } var i,j,k:integer; begin k:=q-p+1; for i:=1 to m do for j:=1 to n do a[i,j]:=Random(k)-p end;
procedure MatrixOutput(var a:Mas;m,n,k:integer); { вывод элементов матрицы размера m*n в k позициях } var i,j:integer; begin for i:=1 to m do begin for j:=1 to n do Write(a[i,j]:k); Writeln end end;
function IsFits(var a:Mas;m,col:integer):boolean; { функция возвращает true, если колонка col явдяется "подходящей" } var i,max:integer; mv:real; begin max:=a[1,col]; mv:=max; for i:=2 to m do begin mv:=mv+a[i,col]; if max<a[i,col] then max:=a[i,col] end; mv:=mv/m; IsFits:=(max-mv>a[1,col]) end;
procedure ColumnReplace(var a:Mas;m,col:integer); { Замена элементов столбца col единицами } var i:integer; begin for i:=1 to m do a[i,col]:=1 end;
var P: Mas; a,b,m,n,j,k:integer; flag:boolean; begin Randomize; Write('Введите количество строк и столбцов матрицы: '); Read(m,n); Write('Укажите минимальное и максимальной значение элементов: '); Read(a,b); Write('Укажите количество позиций для вывода значения элемента: '); Read(k); MatrixInit(P,m,n,a,b); Writeln('Исходный массив'); MatrixOutput(P,m,n,k); j:=1; repeat flag:=IsFits(P,m,j); if flag then begin ColumnReplace(P,m,j); Writeln('Результирующий массив'); MatrixOutput(P,m,n,k) end else Inc(j) until flag or (j>n); if not flag then Writeln('') end.
Цель работы: изучить меню, команды, процедуры при использовании в процессе верстки графических изображений.
Для ознакомления с особенностями обработки графики при верстке в программе InDesign рассмотрим порядок выполнения следующих процедур, необходимых при изготовлении полос текста в соответствии с оригиналом, представленным на следующих страницах
пособия:
• приведение текста к виду, удобному для верстки;
• формирование двухколонного набора;
• образование фреймов произвольной формы с использованием
инструментов группы Реn;
• использование градиентного закрашивания (Gradient);
• размещение символов строки вдоль произвольной траектории;
• задание степени непрозрачности объекта (Opacity);
• задание размытости края изображения (Feather);
• создание контура обтравки (Clipping) непосредственно в программе InDesign;
• использование клавиатурных сокращений для точного масштабирования изображений:
—Ctrl, точка и Ctrl, запятая — соответственно увеличение
и уменьшение на 1%;
—Ctrl, Shift, точка и Ctrl, Shift, запятая — соответственно
увеличение и уменьшение на 5%;
• использование специальных механизмов для реализации технических требований к набору и верстке изданий.
Описание работы
Перечень изучаемых действий:
• создание нового файла с основными параметрами:
а) формат виртуального листа бумаги (блока после обрезки) —
200×287мм, выбранный в соответствии с ГОСТ 5773–90 для
журнальных изданий при размере листа бумаги 60×84/8;
б) число колонок (Columns\Number) = 2;
в) межколонное расстояние (Gutter) = 4,512 мм;
nm = 50;
nn = 50;
type
Mas=array[1..nm,1..nn] of integer;
procedure MatrixInit(var a:Mas;m,n,p,q:integer);
{ Заполнение массива размером m*n
целыми случайными числами из интервала [p;q] }
var
i,j,k:integer;
begin
k:=q-p+1;
for i:=1 to m do
for j:=1 to n do a[i,j]:=Random(k)-p
end;
procedure MatrixOutput(var a:Mas;m,n,k:integer);
{ вывод элементов матрицы размера m*n в k позициях }
var
i,j:integer;
begin
for i:=1 to m do
begin for j:=1 to n do Write(a[i,j]:k); Writeln end
end;
function IsFits(var a:Mas;m,col:integer):boolean;
{ функция возвращает true, если колонка col явдяется "подходящей" }
var
i,max:integer;
mv:real;
begin
max:=a[1,col]; mv:=max;
for i:=2 to m do
begin
mv:=mv+a[i,col];
if max<a[i,col] then max:=a[i,col]
end;
mv:=mv/m;
IsFits:=(max-mv>a[1,col])
end;
procedure ColumnReplace(var a:Mas;m,col:integer);
{ Замена элементов столбца col единицами }
var
i:integer;
begin
for i:=1 to m do a[i,col]:=1
end;
var
P: Mas;
a,b,m,n,j,k:integer;
flag:boolean;
begin
Randomize;
Write('Введите количество строк и столбцов матрицы: ');
Read(m,n);
Write('Укажите минимальное и максимальной значение элементов: ');
Read(a,b);
Write('Укажите количество позиций для вывода значения элемента: ');
Read(k);
MatrixInit(P,m,n,a,b);
Writeln('Исходный массив');
MatrixOutput(P,m,n,k);
j:=1;
repeat
flag:=IsFits(P,m,j);
if flag then
begin
ColumnReplace(P,m,j);
Writeln('Результирующий массив');
MatrixOutput(P,m,n,k)
end
else Inc(j)
until flag or (j>n);
if not flag then
Writeln('')
end.
Тестовое решение:
Введите количество строк и столбцов матрицы: 5 8
Укажите минимальное и максимальной значение элементов: 0 20
Укажите количество позиций для вывода значения элемента: 3
Исходный массив
19 7 2 15 2 11 2 15
12 16 8 14 6 8 1 17
12 14 10 8 7 19 7 1
0 9 0 7 18 10 2 5
18 8 4 9 16 10 14 10
Результирующий массив
19 7 1 15 2 11 2 15
12 16 1 14 6 8 1 17
12 14 1 8 7 19 7 1
0 9 1 7 18 10 2 5
18 8 1 9 16 10 14 10