1.3.2 Приложение на Delphi, в котором представлена работа некоторых методов сортировки и поиска
Графический интерфейс представлен на рисунке 1.14.
Рисунок 1.14 – Форма
uses wseme1;
procedure TForm1. Button16Click (Sender: TObject);
begin
close;
end;
procedure TForm1. Button1Click (Sender: TObject);
var i:integer;
begin
// генерируем множество, состоящее из случайных чисел
Randomize;
for i:=0 to StringGrid1. RowCount do
StringGrid1. Cells [0, i]:=IntToStr (Random(10000)+1);
end;
procedure TForm1. FormCreate (Sender: TObject);
begin
Button1. Click();
end;
procedure TForm1. Edit1Exit (Sender: TObject);
begin
// проверяем заполнено ли поле
if edit1. Text='' then begin
MessageDlg ('Введите число не больше 15', mtError, [mbOk, mbCancel], 0);
exit; end else
StringGrid1. RowCount:=strtoint (edit1. Text);
StringGrid2. RowCount:=strtoint (edit1. Text);
end;
procedure TForm1. Button3Click (Sender: TObject);
var
n, minimum, j, i, obmen:integer;
a:array [1..15] of integer;
begin
n:=strtoint (edit1. Text);
// задание массива
for j:=1 to n do
a[j]:=StrToInt (StringGrid1. Cells [0, j‑1]);
for j:=1 to n do begin
// номер минимального элемента
minimum:=j;
for i:=j+1 to n do if a[i] < a [minimum] then minimum:=i;
// запоминание минимального элемента
obmen:=a[j];
a[j]:=a[minimum];
a[minimum]:=obmen;
// вывод отсортированного массива
for i:=0 to n do
stringgrid2. Cells [0, j‑1]:=inttostr (a[j]);
end;
end;
procedure TForm1. Button4Click (Sender: TObject);
var
n, obmen, i, j:integer;
a:array [1..15] of integer;
colicobmen:boolean;
begin
n:=strtoint (edit1. Text);
// задание массива
for i:=1 to n do
a[i]:= StrToInt (StringGrid1. Cells [0, i‑1]);
// сортировка массива
repeat
colicobmen:=FALSE;
for j:=1 to n‑1 do
if a[j] > a [j+1] then
begin
obmen:=a[j];
a[j]:=a [j+1];
a [j+1]:=obmen;
colicobmen:=TRUE;
end;
// вывод массива
for i:=1 to n do
stringgrid2. Cells [0, i‑1]:=inttostr (a[i]);
until not colicobmen;
stringgrid2. Cells [0, i‑1]:=inttostr (a[i]);
end;
procedure TForm1. Button5Click (Sender: TObject);
var
a:array [1..15] of integer;
i, j, m, L, R, n, x:integer;
begin
n:=strtoint (edit1. Text);
// задание массива
for i:=1 to n do
a[i]:=StrToInt (StringGrid1. Cells [0, i‑1]);
// алгоритм сортировки двоичным включением
for i:=2 to n do
begin
x:=a[i];
L:=1;
R:=i;
while L<R do begin
m:=(L+R) div 2;
if a[m]<=x then L:=m+1 else R:=m;
end;
for j:=i downto R+1 do a[j]:=a [j‑1];
a[R]:=x;
end;
// вывод отсортированного массива
for i:=1 to n do
stringgrid2. Cells [0, i‑1]:=inttostr (a[i]);
end;
procedure TForm1. Button6Click (Sender: TObject);
const t=15;
var
n:integer;
a:array [1..15] of integer;
i, j, k, s:integer;
x:integer;
m:1..t;
h:array [1..t] of integer;
begin
n:=strtoint (edit1. Text);
// задание массива
for i:=1 to n do
a[i]:=StrToInt (StringGrid1. Cells [0, i‑1]);
// алгоритм Шелла
h[1]:=9;
h[2]:=5;
h[3]:=3;
h[4]:=1;
for m:=1 to t do
begin k:=h[m];
s:=-k;
// барьеры для каждого шага
for i:=k+1 to n do
begin x:=a[i];
j:=i-k;
if s=0 then s:=-k;
s:=s+1;
a[s]:=x;
while x<a[j] do begin a [j+k]:=a[j];
j:=j-k;
end;
a [j+k]:=x;
end;
end;
// вывод отсортированного массива
for i:=1 to n do
stringgrid2. Cells [0, i‑1]:=inttostr (a[i]);
end;
procedure TForm1. Button7Click (Sender: TObject);
var
n:integer;
a:array [1..15] of integer;
L, R, x, k:integer;
procedure sift (L, R:integer);
var
i, j:integer;
x, y:integer;
begin
i:=L;
j:=2*L;
x:=a[L];
if (j<R) and (a[j]<a [j+1]) then j:=j‑1;
while (j<=R) and (x<a[j]) do begin y:=a[i];
a[i]:=a[j];
a[j]:=y;
a[i]:=a[j];
i:=j;
j:=2*j;
if (j<R) and (a[j]<a [j+l]) then j:=j+l;
end;
end;
begin
n:=strtoint (edit1. Text);
// задание искомого массива
for k:=1 to n do
a[k]:=StrToInt (StringGrid1. Cells [0, k‑1]);
// алгоритм сортировки с помощью дерева
// построение пирамиды
L:=(n div 2)+1;
R:=n;
while L>1 do begin L:=L‑1;
SIFT (L, R);
end;
// сортировка
while R>1 do begin x:=a[l];
a[l]:=a[R];
a[R]:=x;
R:=R‑1;
SIFT (1, R);
end;
// вывод отсортированного массива
for k:=1 to n do
stringgrid2. Cells [0, k‑1]:=inttostr (a[k]);
end;
procedure TForm1. Button8Click (Sender: TObject);
var
n:integer;
a:array [1..15] of integer;
i, j, x:integer;
begin
n:=strtoint (edit1. Text);
// задание искомого массива
for i:=1 to n do
a[i]:=StrToInt (StringGrid1. Cells [0, i‑1]);
// алгоритм пузырьковой сортировки
for i:=2 to n do for j:=n downto i do begin
if a [j‑1]>a[j] then begin x:=a [j‑1];
a [j‑1]:=a[j];
a[j]:=x;
end;
end;
// вывод отсортированного массива
for i:=1 to n do
stringgrid2. Cells [0, i‑1]:=inttostr (a[i]);
end;
procedure TForm1. Button9Click (Sender: TObject);
var
n:integer;
a:array [1..15] of integer;
i, j, k, L, R, x: integer;
begin
n:=strtoint (edit1. Text);
// задание искомого массива
for i:=1 to n do
a[i]:=StrToInt (StringGrid1. Cells [0, i‑1]);
// алгоритм шейкерной сортировки
L:=2;
R:=-n;
k:=n;
repeat
for i:=2 to n do
for j:=-R downto L do begin
if a [j‑1]>a[j] then begin x:=a [j‑1];
a [j‑1]:=a[j];
a[j]:=x;
k:=j;
end;
end;
L:=k+1;
for i:=2 to n do
for j:=L to R do begin
if a [j‑1]>a[j] then begin x:=a [j‑1] end else
a [j‑1]:=a[j];
a[j]:=x;
k:=-j;
end;
R:=k‑1;
until L>R;
// вывод отсортированного массива
for i:=1 to n do
stringgrid2. Cells [0, i‑1]:=inttostr (a[i]);
end;
procedure TForm1. Button10Click (Sender: TObject);
var
n:integer;
a:array [1..15] of integer;
i:integer;
procedure sort (L, R: integer);
var
i, j:integer;
x, y:integer;
begin
i:=L;
j:=R;
x:=a[(L+R) div 2];
repeat
while a[i]<x do i:=i+l;
while x<a[j] do j:=j‑1;
if i<=j then begin y:=a[i];
a[i]:=a[j];
a[j]:=y;
i:=i+l;
j:=j-l;
end;
until i>j;
if L<j then SORT (L, j);
if i<R then SORT (i, R);
end;
begin
n:=strtoint (edit1. Text);
// задание искомого массива
for i:=1 to n do
a[i]:=StrToInt (StringGrid1. Cells [0, i‑1]);
// алгоритм быстрой сортировки
// рекурсивная процедура
SORT (1, n);
// вывод отсортированного массива
for i:=1 to n do
stringgrid2. Cells [0, i‑1]:=inttostr (a[i]);
end;
procedure TForm1. Button17Click (Sender: TObject);
begin
AboutBox.showmodal;
end;
end.
... Е и множество и мы рассматриваем все его подмножества, то множество Е называется униварсельным. Пример: Если за Е взять множество книг то его подмножества: художественные книги, книги по математике, физики, физики … Если универсальное множество состоит из n элементов, то число подмножеств = 2n. Если , состоящее из элементов E, не принадлежащих А, называется дополненным. Множество можно задать: ...
в и формальных систем является центральной в дисциплине. В настоящие время от нее возникли ответвления, например, разработка алгоритмических языков программирования.Одной из важнейших проблем в дискретной математики является проблема сложности вычислений.Теория сложности вычислений помогает оценить расход времени и памяти при решении задач на ЭВМ. Теория сложности позволяет выделить объективно ...
... которой были разработаны в последней четверти 19 века Георгом Кантором. Цель контрольной работы – ознакомится с основными понятиями и методами решения по дискретной математике, уметь применить полученные знания при решении практического задания. Задание 1 Представить с помощью кругов Эйлера множественное выражение . Используя законы и свойства алгебры множеств, упростить заданное ...
элементы теории нечетких множеств можно применять для решения экономических задач в условиях неопределённости. 1. применение Логических функций 1.1 Применение методов дискретной математики в экономике При исследовании, анализе и решении управленческих проблем, моделировании объектов исследования и анализа широко используются методы формализированного представления, являющегося предметом ...
0 комментариев