unit mmm;
interface
procedure str(var a:array of integer);
procedure sts(var a:array of integer);
procedure bub(var a:array of integer);
procedure qui(var a:array of integer);
implementation
procedure str;
var
x,i,j:integer;
n1,n:integer;
begin
n:=high(a);
n1:=low(a);
for i:=n1 to n do
begin
x:=a[i];
j:=i-1;
while (j>=n1) and (a[j]>x) do
begin
a[j+1]:=a[j];
j:=j-1;
end;
a[j+1]:=x;
end;
end;
procedure sts;
var
x,k,i,j:integer;
n1,n:integer;
begin
n:=high(a);
n1:=low(a);
for i:=n1 to n-1 do
begin
k:=i;
for j:=i+1 to n do
if a[k]>a[j] then k:=j;
if k<>i then
begin
x:=a[i];a[i]:=a[k];a[k]:=x;
end;
end;
end;
procedure bub;
var
x,i,j:integer;
n1,n:integer;
begin
n:=high(a);
n1:=low(a);
for i:=n1 to n-1 do
for j:=n downto i+1 do
if a[j-1]>a[j] then
begin
x:=a[j];a[j]:=a[j-1];
a[j-1]:=x;
end;
end;
procedure qui;
var n1,n:integer;
procedure sort(l,r:integer);
var
x,w,i,j:integer;
begin
i:=l;j:=r;
x:=a[(i+j) div 2];
repeat
while a[i]<x do i:=i+1;
while a[i]>x do j:=j-1;
if i<=j then
begin
w:=a[i];
a[i]:=a[j];
a[j]:=w;
i:=i+1;
j:=j-1;
end;
until i>j;
if i<r then sort(i,r);
if j>l then sort(l,j)
end;
begin
n:=high(a);
n1:=low(a);
sort(n1,n);
end;
end.
program test;
uses mmm;
const n=100;
var a:array[1..n] of integer;
i:integer;
begin randomize;
for i:=1 to n do
a[i]:=random(100);
writeln('неупорядкований масив:');
for i:=1 to n do
write(a[i]:4);
writeln;
sts(a);
writeln('упорядкований масив :');
for i:=1 to n do
write(a[i]:4);
writeln;
end.
Список рекомендованої літератури
1. Сердюченко В.Я. Розробка алгоритмів та програмування мовою Turbo Pascal,- Харків: Паритет, 1995. - 352 с.
2. Фаронов В. В. Турбо Паскаль 7.0. Начальный курс. - М.: Нолидж,1997. - 616 с.
3. Марченко А.И. Программирование в среде Borland Pascal v 7.0.-К.: Век, 1997. - 480 с.
4. Епанешников AM, Епанешников В.А. Программирование в среде Turbo Pascal 7.0. - М.: Диалог -МИФИ , 1993. - 228 с.
5. Бородин Ю.С, Вальвачев А.Н. и др. Паскаль для персональных компьютеров.- Минск: Высш. шк„ 1991. - 364 с.
6. Поляков Д.Б. , Круглов И.Ю. Программирование в среде Турбо-Паскаль. -М.: МАИ , 1992. - 576 с.
7. Довгаль С.И. и др. Персональные ЭВМ: Турбо-Паскаль v 6.0. Объектное программирование и локальные сети,- К.: Информсистема сервис, 1993. - 440 с.
8. Абрамов С.А. и др. Задачи по программированию.-М.: Наука, 1988. - 280 с.
Додаток 1 Процедури та функції модуля GRAPH
Ініціалізація графіки
|
Initgraph
| ініціалізація графічного режиму
| lnitGraph(var GraphDriverlnteger; var GraphMode: Integer; PathToDriver: string);
|
Graphresult
| помилки при ініціалізації графічного режиму
| function GraphResult: Integer;
|
Detectgraph
| перевірка параметрів Hardware
| DetectGraph(var GraphDriver, GraphMode: Integer);
|
Setgraphmode
| встановити графічний режим після текстового режиму
| SetGraphMode(Mode: Integer);
|
Restorecrtmode
| відновити текстовий режим
| restorecrtmode;
|
Closegraph
| закрити граф. режим
| closegraph;
|
Графічні примітиви
|
Arc
| дуга кола
| АРС(х,у,початковий кут, кінцевий кут, радіус)
|
bar (bar3d)
| заштрихован. прямокут.
| Ваг(х1, у1, х2, у2);
|
Circle
| коло
| Circle(X,Y: Integer; Radius: Word);
|
Drawpoly
| многокутник
| DrawPoly(NumPoints: Word; var PolyPoints);
|
Fillellipse
| еліпс
| FillEllipse(X, Y: Integer; XRadius, YRadius: Word)
|
Line
| лінія
| Line(X1,Y1, X2, Y2: Integer);
|
Lineto
| лінія до курсора
| LINETO(x,y)
|
Rectangle
| прямокутник
| Rectangle( XI, Y1, X2, Y2: Integer)
|
Putpixel
| точка
| PutPixel(X, Y: Integer; Pixel: Word);
|
Sector
| сектор
| Sector(x, y: Integer; StAngle,
|
|
| EndAngle, XRadius, YRadius: Word);
|
Setlinestyle
| стиль лінії
| SetlineStyle(LineStyle: Word; Pattern: Word; Thickness: Word);
|
Вікна перегляду
|
Setviewport
| встановити вікно перегляду
| SetViewPort(x1, у1, х2, у2: Integer; Clip: Boolean);
|
Clearviewport
| очистити вікно
| clearviewport;
|
Cleardevice
| очистити екран
| cleardevice;
|
Кольорове забарвлення
|
Getbkcolor
| видати колір фона
| function getbkcolor;
|
Getcolor
| видати колір ліній
| function getcolor;
|
Getmaxcolor
| видати максим.колір
| function getmaxcolor;
|
Floodfill
| заповнити фігуру кольором
| FloodFill(X, Y: Integer; Color: TColorRef);
|
Setbkcolor
| встановити колір фону
| SetBkColor(; Color: TColorRef);
|
Setcolor
| встановити колір ліній
| SetColor(; Color: TColorRef);
|
Setfillstyle
| встановити стиль заповнювача
| SetFillStyle( Pattern: Word; Color: Word);
|
Графічне зображення
|
Getimage
| розмістити в ОП зображення
| Getlmage(x1, у1, х2, yZ Integer; var BitMap);
|
Putimage
| видати зображення на екран
| Putlmage(X, Y: Integer; var BitMap; BitBIt: Word);
|
Imagesize
| визначити розмір зображення в оперативній пам'яті
| function lmageSize(x1, у1, х2, у2: Integer): Word;
|
Обробка тексту
|
Settextstyle
| встановити стиль тексту
| SetTextStyle(Font, Direction: Word; CharSize: Word);
|
settext justify
| вирівнювання тексту
| SetTextJustify(Horiz, Vert: Word);
|
Textheight
| висота тексту
| function TextHeight(TextString: string): Word;
|
Textwidth
| ширина текту
| function TextWidth(TextString: string): Word;
|
Outtext
| видати текст на екран
| OutText(TextString: string);
|
Outtextxy
| видати текст на екран в координатах
| OutTextXY(X,Y: Integer; TextString: string);
|
Визначення положення курсора, координат вікна, переміщення курсора
|
getx ,gety
| видати координати курсора
| function GetX: Integer; function GetY; Integer;
|
getmaxy getmaxx
| видати максимальні координати курсора
| function GetMaxX: Integer; function GetMaxY: Integer;
|
Moveto
| перемістити курсор
| MoveTo(X, Y: Integer);
|
| | | | |
План теми
5.1. Задача цілочислового програмування та її особливості.
5.2. Геометрична інтерпретація задачі цілочислового програмування.
5.3. Методи розв’язання цілочислових задач лінійного програмування.
5.3.1. Загальна характеристика методів розв’язання цілочислових задач лінійного програмування.
5.3.2. Методи відтинання. Метод Гоморі.
5.3.3. Комбінаторні методи. Метод гілок та меж.
5.4. Розв’язання задач цілочислового програмування на ПЕОМ.
задача цілочислового програмування та її особливості
Існує доволі широке коло задач математичного програмування, в економіко-математичних моделях яких одна або кілька змінних за своїм економічним змістом мають набувати тільки цілих значень. До таких задач відносяться, наприклад, задачі, у яких змінні означають кількість одиниць неподільної продукції (плити, шафи, столи і т.і.), кількість станків при оптимальному завантаженні обладнання для виконання деяких видів робіт, кількість тролейбусів при оптимальному розподілі їх за різними маршрутами, кількість стандартних листів фанери, яку потрібно розпиляти на деякі стандартні заготовки і багато інших подібних задач.
a Задача математичного програмування, змінні якої мають набувати тільки цілих значень, називається задачею цілочислового програмування. У тому разі, коли цілочислових значень мають набувати не всі, а одна чи кілька змінних, задача називається частково цілочисловою.
До цілочислового програмування належать також ті задачі математичного програмування, в яких змінні набувають лише двох значень: 0 або 1 – це так звані задачі цілочислового програмування з бінарними (або альтернативними) змінними.
Слід зазначити, що умова цілочисельності є по суті нелінійною і може зустрічатися в задачах, що містять як лінійні, так і нелінійні функції стосовно змінних задачі. В подальшому будемо розглядати тільки такі задачі математичного програмування, в яких крім умови цілочисельності всі обмеження та цільова функція є лінійними. Такі задачі мають назву цілочислових задач лінійного програмування.
Загальна цілочислова задача лінійного програмування записується наступним чином:
, ( 5.1 )
, ( 5.2 )
,
, ( 5.3 )
— цілі числа,
. ( 5.4 )
Слід зазначити, що у розглянутій у попередній темі класичній транспортній задачі та інших задачах транспортного типу з цілочисловими параметрами початкових умов забезпечується цілочисловий розв’язок без застосування спеціальних методів, однак у загальному випадку вимога цілочисельності змінних значно ускладнює розв’язування задач математичного програмування і вимагає застосування спеціальних методів для їх розв’язання.