Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпоры ОАиП(теория).docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
151.01 Кб
Скачать

22.Стандартные процедуры и функции Unit Graph.

Procedure Arc(X, Y : Integer; StAngle, EndAngle, Radius : Word);

Рисует дугу окружности.

Procedure Bar(X1, Y1, X2, Y2 : Integer);

Рисует закрашенный прямоугольник, используя текущие стиль и цвет закраски.

Procedure Bar3D(X1, Y1, X2, Y2 : Integer; Depth : Word; Top : Boolean);

Рисует параллелепипед, используя текущий стиль

и цвет закраски.

Procedure Circle(X, Y : Integer; Radius : Word);

Рисует окружность текущим цветом, используя точку (X, Y) как центр.

Procedure ClearDevice;

Очищает текущее устройство вывода и устанавливает текущий указатель в точку (0, 0).

Procedure CloseGraph;

Закрывает графическую систему.

Procedure DrawPoly(NumPoints : Word; Var PolyPoints);

Рисует контур многоугольника, используя текущий цвет и тип линии.

Procedure Ellipse(X, Y : Integer; StAngle, EndAngle : Word; XRadius, YRadius : Word);

Рисует дугу эллипса.

Procedure FillEllipse(X, Y : Integer; XRadius, YRadius : Word)

Рисует закрашенный эллипс.

Procedure FillPoly(NumPoints : Word; Var PolyPoints);

Рисует закрашенный многоугольник, используя преобразователь сканирования.

Procedure FloodFill(X, Y : Integer; Border : Word);

Закрашивает замкнутую область, используя текущие стиль и цвет закраски.

Procedure GetFillSettings(Var FillInfo : FillSettingsType);

Возвращает текущий цвет и шаблон закраски, установленные обращениями к процедурам SetFillPattern и SetFillStyle.

Procedure GetLineSettings(Var LineInfo : LineSettingsType);

Возвращает текущий тип, шаблон и толщину линии, установленные с помощью процедуры SetLineStyle.

Procedure InitGraph (Var GraphDriver : Integer; Var GraphMode : Integer; PathToDriver : String);

Инициализирует графическую систему и переводит видеокарту в графический режим.

Procedure Line(X1, Y1, X2, Y2 : Integer);

Рисует линию из точки с координатами (X1, Y1) в точку с координатами (X2, Y2).

Procedure OutText(TextString : String);

Посылает строку на устройство вывода в позиции текущего указателя.

Procedure PieSlice(X, Y : Integer; StAngle, EndAngle, Radius : Word);

Рисует и закрашивает сектор окружности.

Procedure PutPixel(X, Y : Integer; Color : Word);

Ставит точку в позиции (X, Y).

Procedure Rectangle(X1, Y1, X2, Y2 : Integer);

Рисует прямоугольник, используя текущий тип и цвет линии.

Procedure SetBkColor(ColorNum : Word);

Устанавливает текущий цвет фона, используя палитру.

Procedure SetColor(Color : Word);

Устанавливает текущий цвет, используя палитру.

Procedure SetFillPattern(Pattern : FillPatternType; Color : Word);

Устанавливает определяемый пользователем шаблон закраски.

35.Генерирование перестановок с минимальным числом транспозиций соседних элементов

var p,pc:array[1..100] of integer;

pr:array[1..100] of boolean;

n:integer;

procedure perm;

var i,x,k,d:integer;

begin

for i:=1 to n do begin p[i]:=i;pc[i]:=1;pr[i]:=true end;

pc[n]:=0;i:=1;

act;

while i < n do begin

i:=1;x:=0;

while pc[i]=n-i+1 do begin

pr[i]:=not pr[i];pc[i]:=1;

if pr[i] then inc(x);inc(i)

end;

if i < n then begin

if pr[i] then k:=pc[i]+x

else k:=n-i+1-pc[i]+x;

d:=p[k];p[k]:=p[k+1];p[k+1]:=d;

act;

inc(pc[i])

end;

end;

end;

25,26. Разработка алгоритмов и программ с использованием динамических массивов

Динамический массив — это массив, в котором при объявлении указывается только тип его элементов. Размеры динамических массивов изменяются в ходе выполнения программы.

Динамический массив задается с помощью нижеприведенной конструкции:

array of baseType;

Язык Object Pascal поддерживает многомерные массивы. Самым простым является одномерный массив.

Динамический одномерный массив:

var MyFlexibleArray: array of Real;

Данное объявление не занимает память под будущий массив. Для того чтобы это сделать, можно воспользоваться вызовом процедуры SetLength. Например, команда

SetLength(MyFlexibleArray, 20);

отводит в памяти массив на 20 вещественных чисел с индексами от 0 до 19.

Примечание

Индексами динамических массивов всегда являются целые числа. Стартовый индекс — всегда 0.

Доступ к элементам динамического массива аналогичен доступу к элементам статического массива.

Для задания многомерного динамического массива можно использовать конструкцию языка:

array of array of baseType;

Например, создать двумерный динамический массив можно следующим образом:

var MyArray: array of array of integer;

Для того чтобы установить длину многомерного динамического массива с помощью процедуры setLength, нужно выполнить ее для всех индексов массива. Например,

SetLength(MyArray, 10,20);

{Иллюстрация использования динамических массивов: программа выводит на экран содержимое двух одномерных массивов разной длины с помощью одной процедуры ArrayPrint}

Program rr2;

Uses wincrt;

const

A:array [-1..2] of Integer = (0,1,2,3);

B: array [5..7] of Integer = (4,5,6);

Procedure ArrayPrint(aArray: array of Integer);

var

k: Integer;

begin

for k := 0 to High(aArray) do

Writeln(aArray[k]:8);

end;

begin

ArrayPrint(A);

ArrayPrint(B)

end.

Как видно из этого примера, фактические границы массивов А и В, передаваемых в качестве параметров вызова процедуре ArrayPrint, не имеют значения. Однако размерность открытых массивов (количество индексов) всегда равна 1 - за этим следит компилятор. Если бы, например, мы добавили в программу двумерный массив С

var

С: array [1..3,1..5] of Integer;

то обращение

ArrayPrint(С)

вызывало бы сообщение об ошибке

Error26: Type mismatch.

(Ошибка 26: Несоответствие типов.)