КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Рекурсивное создание стека
unit Unitstack;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class(TForm) Output_stack: TButton; Button3: TButton; ListBox1: TListBox; ListBox2: TListBox; Create_data: TButton; Create_Less_stack: TButton; Label1: TLabel; Edit1: TEdit; ListBox3: TListBox; Del_element: TButton; Edit2: TEdit; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel;
procedure Create_dataClick(Sender: TObject); procedure Output_stackClick(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Create_Less_stackClick(Sender: TObject); procedure Del_elementClick(Sender: TObject); procedure Edit1Change(Sender: TObject); procedure Edit2Change(Sender: TObject);
private { Private declarations } public { Public declarations } end; Pst=^stack; stack=record date:integer; next:Pst; end; ff=file of integer; var Form1: TForm1; Tops,ps:Pst; f:ff; n,v:integer; implementation
{$R *.dfm} function Cr_st(k:integer):Pst; var x:integer; pt:pst; begin if k=0 then pt:=nil else begin read(f,x); new(pt); pt^.date:=x; pt^.next:=Cr_st(k-1); end; Cr_st:=pt; end; procedure TForm1.Create_Less_stackClick(Sender: TObject); var k:integer; begin reset(f); k:=Filesize(f); if v>k then begin Label5.Caption:='Число больше длины стека'; exit; end; tops:=Cr_st(v); closefile(f); ListBox3.clear; ps:=tops; while ps<>nil do begin ListBox3.Items.add(inttostr(ps^.date)); ps:=ps^.next; end;
end;
procedure TForm1.Output_stackClick(Sender: TObject); begin reset(f); tops:=Cr_st(n); closefile(f); ListBox2.clear; ps:=tops; while ps<>nil do begin ListBox2.Items.add(inttostr(ps^.date)); ps:=ps^.next; end; end; procedure TForm1.Button3Click(Sender: TObject); begin close; end; procedure TForm1.Create_dataClick(Sender: TObject); Var i,x:integer; begin assignfile(f,'stack_f.dat'); rewrite(f); Randomize; n:=random(20)+2; ListBox1.Clear; For i:=1 to n do begin ListBox1.Items.add(inttostr(Random(20)+1)); x:= strtoint(ListBox1.Items[i-1]); write(f,x); end; closefile(f); end;
procedure TForm1.Del_elementClick(Sender: TObject); var pp:pst; begin reset(f); pp:=nil; ps:=tops; While (ps=tops)and (ps^.date = v)do begin ps:=ps^.next; dispose(tops); tops:=ps; end; while (ps<>nil) and (ps^.date <> v)do begin pp:=ps; ps:=ps^.next; end; if ps<> nil then begin pp^.next:=ps^.next; dispose(ps); end else pp^.next:=nil; ListBox3.Clear; ps:=tops; while ps<>nil do begin ListBox3.Items.add(inttostr(ps^.date)); ps:=ps^.next; end; end;
procedure TForm1.Edit1Change(Sender: TObject); begin v:=Strtoint(Edit1.Text); Create_Less_stack.Enabled:=true;
end;
procedure TForm1.Edit2Change(Sender: TObject); begin v:=Strtoint(Edit2.Text); Del_element.Enabled:=true; end;
end.
Рис. 3
Дата добавления: 2014-01-07; Просмотров: 282; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |