Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Указатели.doc
Скачиваний:
6
Добавлен:
22.04.2019
Размер:
245.25 Кб
Скачать

Пример построения и работы со списком

Пример построения списка, содержащего квадраты натурального ряда чисел, включения нового элемента и исключения заданного элемента.

procedure TForm1.Button1Click(Sender: TObject);

type pn=^dp;

dp=record

i :integer;

p:pn

end;

var j,n,k,m:integer;

r,q,s:pn;st:string;

//формирование списка

procedure sn;

begin new(q); q^.i:=k*k;

q^.p:=r; r:=q;

end;

//вывод элементов списка

procedure scr;

var w:pn;

begin st:='';w:=q;

while w<>nil do

begin st:=st+IntToStr(w^.i)+' ';w:=w^.p;

end;

end;

//вставка элемента

procedure inn;

begin new(s); s^.i:=j; s^.p:=q^.p; q^.p:=s

end;

//удаление элемента

procedure del;

begin s:=q^.p; q^.p:=q^.p^.p; s^.p:=nil

end;

begin Memo1.Clear; Memo1.Font.Size:=12;

r:=nil; n:=6; j:=17; m:=3;

for k :=1 to n do sn;

scr; Memo1.Lines.Add(‘ Исходный список: ’+st);

for k:=1 to m-1 do q:=q^.p;

inn;

q:=r; scr; Memo1.Lines.Add(‘После вставки элемента:’+st);

m:=4;

q:=r; for k:=1 to m-1 do q:=q^.p; del;

q:=r; scr; Memo1.Lines.Add(‘После удаления элемента:’st);

end;

В программе: sn – процедура создания списка, scr – процедура вывода на экран значения элемента списка, inn - процедура включения в список нового элемента, del – процедура исключения элемента из списка, j – значение элемента, m – номер элемента списка, после которого вводится или выводится заданный элемент, n – количество элементов в исходном списке.

Результаты

Пример обработки файла данных

На дисковом файле записано нечетное количество целых чисел. Необходимо составить программу определения числа, занимающего в данной последовательности центральную позицию. Неопределенность длины последовательности усложняет использование массивов. Применение динамической памяти снимает эти проблемы.

Текст программы

procedure TForm1.Button1Click(Sender: TObject);

type pn=^dp;

dp=record

i:integer;

p:pn

end;

var j,n,k,m:integer;

r,q,s:pn;f:TextFile;

begin

AssignFile(f,'data.pas');

Reset(f);r:=nil;j:=0;

repeat j:=j+1; new(q); read(f,q^.i);q^.p:=r; r:=q

until eof(f); CloseFile(f);

for k:=1 to j div 2 do q:=q^.p;

Edit1.Text:=IntToStr(q^.i);

end;

Пример сортировки целых чисел

На дисковом файле записана последовательность целых чисел. Необходимо определить количество этих чисел и вывести их на экран в порядке возрастания. Для сортировки удобно использовать метод вставки. Из первого прочитанного элемента файла создается список из одного элемента. Очевидно, что этот список является упорядоченным. Затем следует повторение операций:

- чтение из файла одного очередного элемента;

- просмотр упорядоченного списка и сравнение элементов списка с очередным прочитанным элементом;

- включение прочитанного элемента в список перед первым же элементом списка, оказавшимся больше прочитанного.

Текст программы

procedure TForm1.Button1Click(Sender: TObject);

type pn=^dp;

dp=record

i:integer;

p:pn

end;

var t,r,q,s:pn; f:TextFile;

begin

AssignFile(f,'data.txt'); Reset(f);

new(r); read(f,r^.i); r^.p:=nil;

new(t); t^.p:=r; t^.i:=1;

repeat r:=t;

q:=r;

new(s); read(f,s^.i);

t^.i:=t^.i+1;

repeat

if r^.p^.i<s^.i then q:=q^.p;

r:=r^.p

until r^.p=nil;

s^.p:=q^.p; q^.p:=s

until eof(f);

CloseFile(f);

Memo1.Lines.Add('n='+IntToStr(t^.i));r:=t;

repeat r:=r^.p;

Memo1.Lines.Add(IntToStr(r^.i));

until r^.p=nil;

end;