Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по курсу.docx
Скачиваний:
107
Добавлен:
24.02.2016
Размер:
2.8 Mб
Скачать

17.4. Пример программы

Ниже приведен пример программы создания списка на основе динами­ческого массива. При нажатии кнопки Buttonl в список добавляется новый элемент со случайным значением в интервале min-max (компоненты Editl, Edit2) на позицию, не нарушающую сортировки. Таким образом, последовательно нажимая кнопку Buttonl, формируем отсортированный список. При нажатии кнопки Button2 из списка удаляется элемент с номе­ром, задаваемым в компоненте Edit3.

unit Unit1; Листинг 17.1

interface

uses Windows,Messages,SysUtils,Variants,Classes,

TForm1 Edit1 Edit2

Edit3 Label1: Label2:

Button1

Graphics,Controls,Forms,Dialogs,Buttons,StdCtrls; type

class(TForm) TEdit; TEdit; TEdit; TLabel; TLabel; TButton;

Button2: TButton;

Memo1: TMemo;

BitBtn1: TBitBtn;

TObject);

TObject); TObject) TObject)

procedure procedure procedure procedure procedure procedure private

{ Private

procedure Button1Click(Sender: TObject) FormCreate(Sender: TObject); Edit1Change(Sender: TObject); Edit2Change(Sender: Edit3Change(Sender: Button2Click(Sender BitBtn1Click(Sender

declarations }

public

{ Public declarations } end;

type Tspis=integer; //Описание типа динам. массива var

Forml: TForml;

a:array of Tspis; //Указатель на динам. массив k:integer;

implementation

{$R *.dfm}

procedure addvec(avs:Tspis; nvs:integer);

begin // Вставка avs на nvs-ю позицию

setlength(a,high(a)+2);// Новая длина массива for k:=high(a)-l downto nvs do a[k+l]:=a[k]; a[nvs]:=avs;

end;

procedure delvec(nyd:integer);

begin // Удаление элемента с nyd-ой позиции

for k:=nyd+l to high(a) do a[k-l]:=a[k];

setlength(a,high(a));// Новая длина массива end;

procedure TForml.FormCreate(Sender: TObject); begin

if (editl.text='') or (edit2.text='') then

buttonl.enabled:=false; if edit3.text='' then button2.enabled:=false; end;

procedure TForml.EditlChange(Sender: TObject); begin

if (editl.texto11) and (edit2.text<>'') then buttonl.enabled:=true;

end;

procedure TForml.Edit2Change(Sender: TObject); begin

if (editl.texto11) and (edit2.text<>'') then buttonl.enabled:=true;

procedure TForm1.Edit3Change(Sender: TObject); begin

if edit3.text<>'' then button2.enabled:=true; end;

procedure TForm1.Button1Click(Sender: TObject); var min,max,n:integer; // Добавить w:Tspis;

begin

min:=strtoint(edit1.text); max:=strtoint(edit2.text); randomize;

w:=min+random(max-min+1); // Новый элемент if high(a)=-1 then

begin setlength(a,1); a[0]:=w; end;//если список

пуст

else

begin

n:=high(a)+1;

for k:=0 to high(a) do//Находим позицию вставки if w<a[k] then begin n:=k; break; end;

addvec(w,n); // Вставка нового элемента

end; memo1.clear; for k:=0 to high(a) do

memo1.Lines.Add(inttostr(k+1)+'.'+inttostr(a[k])); end;

procedure TForm1.Button2Click(Sender: TObject);

var n:integer; // Удалить begin

n:=strtoint(edit3.Text)-1;

if n>high(a) then begin

edit3.Clear; button2.enabled:=false; exit; end;

delvec(n); // Удаление n-го элемента

memo1.clear;

for k:=0 to high(a) do

memo1.Lines.Add(inttostr(k+1)+'.'+inttostr(a[k])); end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

a:=nil; // Освобождение памяти end;

end.