h1

Сортировка массива слиянием

Декабрь 2, 2009

Программа, сортирующая два массива способом простого слияния. Лабораторная №3 по САКОДу.

Ссылка на программу и файлы проекта

Исходный код:

unit Unit1;

interface

uses
ShellAPI, Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, XPMan, ComCtrls, ExtCtrls;

type
TForm1 = class(TForm)
GroupBox1: TGroupBox;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
XPManifest1: TXPManifest;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Button1: TButton;
Memo1: TMemo;
GroupBox2: TGroupBox;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Button2: TButton;
Memo2: TMemo;
StatusBar1: TStatusBar;
Panel1: TPanel;
Button3: TButton;
Memo3: TMemo;
Panel2: TPanel;
Button4: TButton;
Button5: TButton;
Label7: TLabel;
Label8: TLabel;
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Label7Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
mas1, mas2: array[1..99] of real;
mas: array[1..198] of real;
razm1, razm2: byte;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var per, shag: real;
i: byte;
s: string;
begin
if (edit1.Text=») or (edit2.Text=») or (edit3.Text=») then
begin
MessageBox(Handle,PChar(‘Введите данные.’),PChar(‘Ошибка!’),
MB_ICONINFORMATION);
exit;
end;
razm1:=StrToInt(edit1.Text);
per:=StrToFloat(edit2.Text);
shag:=StrToFloat(edit3.Text);
if razm1>99 then
begin
MessageBox(Handle,PChar(‘Размерность не должна быть более 99.’),PChar(‘Ошибка!’),
MB_ICONINFORMATION);
exit;
end;
mas1[1]:=per;
s:=(FloatToStr(mas1[1])+’ ‘);
for i:=2 to razm1 do
begin
mas1[i]:=mas1[i-1]+shag;
s:=s+(FloatToStr(mas1[i])+’ ‘);
end;
memo1.Lines[0]:=s;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const Digit: Set of Char=[‘0’ .. ‘9’, #8];
begin
if not (Key in Digit) then
Key:=#0;
end;

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
const Digit: Set of Char=[‘0’ .. ‘9’, #8, ‘,’];
begin
if not (Key in Digit) then
Key:=#0;
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
const Digit: Set of Char=[‘0’ .. ‘9’, #8, ‘,’];
begin
if not (Key in Digit) then
Key:=#0;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
const Digit: Set of Char=[‘0’ .. ‘9’, #8];
begin
if not (Key in Digit) then
Key:=#0;
end;

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
const Digit: Set of Char=[‘0’ .. ‘9’, #8, ‘,’];
begin
if not (Key in Digit) then
Key:=#0;
end;

procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
const Digit: Set of Char=[‘0’ .. ‘9’, #8, ‘,’];
begin
if not (Key in Digit) then
Key:=#0;
end;

procedure TForm1.Button2Click(Sender: TObject);
var per, shag: real;
i: byte;
s: string;
begin
if (edit4.Text=») or (edit5.Text=») or (edit6.Text=») then
begin
MessageBox(Handle,PChar(‘Введите данные.’),PChar(‘Ошибка!’),
MB_ICONINFORMATION);
exit;
end;
razm2:=StrToInt(edit4.Text);
per:=StrToFloat(edit5.Text);
shag:=StrToFloat(edit6.Text);
if razm2>99 then
begin
MessageBox(Handle,PChar(‘Размерность не должна быть более 99.’),PChar(‘Ошибка!’),
MB_ICONINFORMATION);
exit;
end;
mas2[1]:=per;

s:=(FloatToStr(mas2[1])+’ ‘);
for i:=2 to razm2 do
begin
mas2[i]:=mas2[i-1]+shag;
s:=s+(FloatToStr(mas2[i])+’ ‘);
end;
memo2.Lines[0]:=s;

end;

procedure TForm1.Button3Click(Sender: TObject);
var i,i1,i2: byte;
s: string;
begin
i1 := 1;
i2 := 1;
for i := 1 to razm1+razm2 do
if i1>razm1
then
begin
mas1[i] := mas2[i2];
i2 := i2+1;
end
else
if i2>razm2
then
begin
mas[i] := mas1[i1];
i1 := i1+1;
end
else
if mas1[i1]<=mas2[i2]
then
begin
mas[i] := mas1[i1];
i1 := i1+1;
end
else
begin
mas[i] := mas2[i2];
i2 := i2+1;
end;

s:=FloatToStr(mas[1])+’ ‘;
for i:=2 to razm1+razm2 do
begin
s:=s+FloatToStr(mas[i])+’ ‘;
end;
Memo3.Lines[0]:=s;
end;

procedure TForm1.Button4Click(Sender: TObject);
var i: byte;
per, shag: real;
s: string;
begin
randomize;
per:=random(99); razm1:=random(99);
shag:=random(99); mas1[1]:=per;
for i:=2 to razm1 do
begin
mas1[i]:=mas1[i-1]+shag;
end;
edit1.Text:=IntToStr(razm1);
edit2.Text:=FloatToStr(per);
edit3.Text:=FloatToStr(shag);
button1.Click;

per:=random(99); razm2:=random(99);
shag:=random(99); mas2[1]:=per;
for i:=2 to razm2 do
begin
mas2[i]:=mas2[i-1]+shag;
end;
edit4.Text:=IntToStr(razm2);
edit5.Text:=FloatToStr(per);
edit6.Text:=FloatToStr(shag);
button2.Click;
button3.Click;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin
edit1.Text:=»;
edit2.Text:=»;
edit3.Text:=»;
edit4.Text:=»;
edit5.Text:=»;
edit6.Text:=»;
memo1.Clear;
memo2.Clear;
memo3.Clear;
end;

procedure TForm1.Label7Click(Sender: TObject);
begin
ShellExecute (Form1.Handle, nil, ‘https://ardatov.wordpress.com/sort_sliyaniem&#8217;, nil, nil, SW_RESTORE);
end;

end.

Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: