unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;

type
TForm1 = class(TForm)
ListBox1: TListBox;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
ListBox2: TListBox;
BitBtn3: TBitBtn;
ListBox3: TListBox;
Label1: TLabel;
ListBox4: TListBox;
BitBtn4: TBitBtn;
Label2: TLabel;
ListBox5: TListBox;
BitBtn5: TBitBtn;
BitBtn6: TBitBtn;
ListBox6: TListBox;
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn5Click(Sender: TObject);
procedure BitBtn6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type Tps = ^Ts;
Ts = record
chisla : integer;// информациоонная часть стека
pred : Tps; // указатель на предыдущий элемент
end;
type Tps2 = ^Ts2;
Ts2 = record
chisla2 : integer;
pred2 : Tps2;
end;
type Tps3 = ^Ts3;
Ts3 = record
chisla3 : integer;
pred3 : Tps3;
end;

const n = 10 ;

type mas = array [1..n] of integer;
var ver : Tps;
ver2 : Tps2;
ver3 : Tps3;

var
Form1: TForm1;
z : extended;
f : extended;
a : mas;
implementation

{$R *.dfm}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////
// // ////
// ПРОЦЕДУРА ДОБАВЛЕНИЯ ЭЛЕМЕНТА В СТЕК ////
procedure AddStack(var ver : Tps; var n : integer); // где n - это передаваемое число каждый раз меняющееся ////
var tek : Tps; ////
begin /////
new(tek);// выделение памяти под текущий элемента стека /// //
tek.chisla := n;// записываем в текущий элемент стека в его информационную часть число /////
tek.pred := ver; // запоминаем указатель на предыдущий элемент стека // /// ////
ver := tek; // верщине присваиваем значение текущего элемента у которого в информационной части записано число уже находящееся в стеке , а указатель уже переведен на следующий по очереди элемент стека ///
end; //
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////
// // ////
// ПРОЦЕДУРА ДОБАВЛЕНИЯ ЭЛЕМЕНТА В СТЕК2 ////
procedure AddStack2(var ver2 : Tps2; var n : integer); // где n - это передаваемое число каждый раз меняющееся ////
var tek2 : Tps2; ////
begin /////
new(tek2);// выделение памяти под текущий элемента стека /// //
tek2.chisla2 := n;// записываем в текущий элемент стека в его информационную часть число /////
tek2.pred2 := ver2; // запоминаем указатель на предыдущий элемент стека // /// ////
ver2 := tek2; // верщине присваиваем значение текущего элемента у которого в информационной части записано число уже находящееся в стеке , а указатель уже переведен на следующий по очереди элемент стека ///
end; //
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////
// // ////
// ПРОЦЕДУРА ДОБАВЛЕНИЯ ЭЛЕМЕНТА В СТЕК3 ////
procedure AddStack3(var ver3 : Tps3; var n : integer); // где n - это передаваемое число каждый раз меняющееся ////
var tek3 : Tps3; ////
begin /////
new(tek3);// выделение памяти под текущий элемента стека /// //
tek3.chisla3 := n;// записываем в текущий элемент стека в его информационную часть число /////
tek3.pred3 := ver3; // запоминаем указатель на предыдущий элемент стека // /// ////
ver3 := tek3; // верщине присваиваем значение текущего элемента у которого в информационной части записано число уже находящееся в стеке , а указатель уже переведен на следующий по очереди элемент стека ///
end; //
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// ПРОЦЕДУРА ИЗВЛЕЧЕНИЯ ЭЛЕМЕНТА ИЗ СТЕКА С ОСВОБОЖДЕНИЕ ПАМЯТИ //
procedure FromStack(var ver : Tps; var n : integer); //
var tek : Tps; //
begin //
if ver <> nil then // тоесть пока вершиной стека не станет последний самый глубокий элемент будет выполняться эта процедура //
begin //
tek := ver; // запоминаем в текущем указателе стерое значение вершины стека //
n := ver.chisla;// извлекаем число из текущего элемента стека //
ver := ver.pred; // переходим на предыщущий элемент //
dispose(tek); // освобождаем память элемента который мы извлекли из стека //
end //
else n := 0;// ??????????????????????????????????? //
end; // // //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// ПРОЦЕДУРА ИЗВЛЕЧЕНИЯ ЭЛЕМЕНТА ИЗ СТЕКА2 С ОСВОБОЖДЕНИЕ ПАМЯТИ //
procedure FromStack2(var ver2 : Tps2; var n : integer); //
var tek2 : Tps2; //
begin //
if ver2 <> nil then // тоесть пока вершиной стека не станет последний самый глубокий элемент будет выполняться эта процедура //
begin //
tek2 := ver2; // запоминаем в текущем указателе стерое значение вершины стека //
n := ver2.chisla2;// извлекаем число из текущего элемента стека //
ver2 := ver2.pred2; // переходим на предыщущий элемент //
dispose(tek2); // освобождаем память элемента который мы извлекли из стека //
end //
else n := 0;// ??????????????????????????????????? //
end; // // //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
// ПРОЦЕДУРА ИЗВЛЕЧЕНИЯ ЭЛЕМЕНТА ИЗ СТЕКА3 С ОСВОБОЖДЕНИЕ ПАМЯТИ //
procedure FromStack3(var ver3 : Tps3; var n : integer); //
var tek3 : Tps3; //
begin //
if ver3 <> nil then // тоесть пока вершиной стека не станет последний самый глубокий элемент будет выполняться эта процедура //
begin //
tek3 := ver3; // запоминаем в текущем указателе стерое значение вершины стека //
n := ver3.chisla3;// извлекаем число из текущего элемента стека //
ver3 := ver3.pred3; // переходим на предыщущий элемент //
dispose(tek3); // освобождаем память элемента который мы извлекли из стека //
end //
else n := 0;// ??????????????????????????????????? //
end; // // //
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
//
//
// ПРОЦЕДУРА ПРОХОДА ПО СТЕКУ И ЕГО СОРТИРОВКИ //
procedure exchange (var ver : Tps; var n : integer); //
var x : integer;// для пузырька //
begin //
if ver.pred <> nil then //
begin //
if ver.chisla > ver.pred.chisla then //
begin //
x := ver.chisla; //
ver.chisla := ver.pred.chisla; //
ver.pred.chisla := x; //
inc(n); // увеличиваем число n //
end; //
exchange(ver.pred,n); //
end; //
end; //
//
//
/////////////////////////////////////////////////////////

///////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
//
//
// ПРОЦЕДУРА ПРОХОДА ПО СТЕКУ И НАХОЖДЕНИЕ ПОЛОЖИТЕЛЬНЫХ //
procedure exchange2 (var ver : Tps; var n : integer); //
var k : integer; //
begin //
if ver <> nil then //
begin //
if ver.chisla > 0 then //
begin
k := ver.chisla; //
AddStack2(ver2,k); //
inc(n); // увеличиваем число n //
end; //
exchange2(ver.pred,n); //
end; //
end; //
//
//
/////////////////////////////////////////////////////////


///////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
//
//
// ПРОЦЕДУРА ПРОХОДА ПО СТЕКУ И НАХОЖДЕНИЕ ОТРИЦАТЕЛЬНЫХ //
procedure exchange3 (var ver : Tps; var n : integer); //
var x : integer;// для пузырька //
begin //
if ver <> nil then //
begin //
if ver.chisla < 0 then //
begin //
x := ver.chisla;
AddStack3(ver3,x);
inc(n); //
end; //
exchange3(ver.pred,n); //
end; //
end; //
//
//
/////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////
procedure SortStack (var ver : Tps); //
var k : integer; //
begin //
repeat //
k := 0; //
exchange(ver,k); //
until k = 0; //
end; //
/////////////////////////////////////////////////////////////


/////////////////////////////////////////////////////////////
procedure SortStack2 (var ver2 : Tps2); //
var k : integer; //
begin //
repeat //
k := 0; //
exchange2(ver,k); //
until k >= 0; //
end; //
/////////////////////////////////////////////////////////////



/////////////////////////////////////////////////////////////
procedure SortStack3 (var ver3 : Tps3); //
var k : integer; //
begin //
repeat //
k := 0; //
exchange3(ver,k); //
until k >= 0; //
end; //
/////////////////////////////////////////////////////////////

/////////////////////////////////////////////////
procedure TForm1.FormCreate(Sender: TObject); //
begin //
z := 0; //
f := 0; //
BitBtn2.Enabled := false; //
end; //
/////////////////////////////////////////////////



///////////////////////////////////////////////////
//
// создание стека //
procedure TForm1.BitBtn1Click(Sender: TObject); //
var i , j : integer; //
begin //
z := 0; //
f := 0; //
randomize(); //
ListBox1.Clear(); //
ver := nil ; //
for i := 1 to n do //
begin //
j := random(100) - 50; //
AddStack(ver,j); //
ListBox1.Items.Add(inttostr(j)); //
z := z + j; //
a[i] := j; //
end; //
z := z / n;//нахождение среднегоарифметического//
for i := 1 to n do //
f := f + sqr(z - a[i]); //
f := sqrt(f);
ListBox5.Clear();
ListBox6.Clear();
ListBox2.Clear();
ListBox3.Clear();
ListBox4.Clear(); //
BitBtn2.Enabled := true;
BitBtn5.Enabled := true;
BitBtn6.Enabled := true; //
end; //
///////////////////////////////////////////////////




//////////////////////////////////////////////////////////////////
//
// сортировка //
procedure TForm1.BitBtn2Click(Sender: TObject); //
var k : integer; //
begin //
ListBox2.Clear(); //
SortStack(ver);// сортировка стека //
while ver <> nil do //
begin //
FromStack(ver,k); //
ListBox2.Items.Add(inttostr(k)); //
end; //
BitBtn2.Enabled := false;
BitBtn5.Enabled := false;
BitBtn6.Enabled := false; //
end; //
//
//////////////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////////////
//
// среднее арифметическое //
procedure TForm1.BitBtn3Click(Sender: TObject); //
begin //
ListBox3.Clear(); //
ListBox3.Items.Add(floattostr(z)); //
end; //
///////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////// //
//
// средне квадратичный разброс //
procedure TForm1.BitBtn4Click(Sender: TObject); //
begin //
ListBox4.Clear(); //
ListBox4.Items.Add(floattostrf(f,fffixed,4,2)); //
end; //
///////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////
//
procedure TForm1.BitBtn5Click(Sender: TObject); //
var k : integer; //
begin //
ListBox5.Clear(); //
SortStack2 (ver2); //
while ver2 <> nil do //
begin //
FromStack2(ver2,k); //
ListBox5.Items.Add(inttostr(k)); //
end; //
end; //
////////////////////////////////////////////////////////
procedure TForm1.BitBtn6Click(Sender: TObject); //
var k : integer; //
begin //
ListBox6.Clear(); //
SortStack3(ver3); //
while ver3 <> nil do //
begin //
FromStack3(ver3,k); //
ListBox6.Items.Add(inttostr(k)); //
end; //
end; //
////////////////////////////////////////////////////////
end.
Соседние файлы в папке положительное, отрицательное, ср ар-ое, квадрат