Q&A

  • Count - 1이 마지막 데이터를 가리키는 이유?
다음은 제가 작성한 간단한 stack프로그램입니다.

입력순서중 마지막 입력데이트를 추출하는 프로그램인데...."count-1"이 왜 마지막데이터를 가르키게 되는지 그 원리가 궁금합니다.별거 아닌것 같기두 한데 모르니까 영 답답하네여....

소스중에 표시해놨습니다.

unit stack;



interface



uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls;



type

TForm1 = class(TForm)

Edit1: TEdit;

ListBox1: TListBox;

ListBox2: TListBox;

Button1: TButton;

Button2: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormDestroy(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;





Type

TStack = Class

top:1..100;

stk:array[1..100] of integer;

procedure push(i:integer);

function pop:integer;

constructor create;

end;

var

Form1: TForm1;

stack1:tstack;

implementation



{$R *.DFM}



constructor tstack.create;

begin

inherited create;

top:=1;

end;



procedure tstack.push(i:integer);

begin

if top < 100 then begin

stk[top]:=i;

inc(top);

end;

end;



function tstack.pop : integer ;

begin

if top >1 then begin

dec(top);

result:=stk[top];

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

stack1:=tstack.create;

edit1.text:='';

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

stack1.push(strtoint(edit1.text));

listbox1.items.add(edit1.text);

edit1.clear;

edit1.setfocus;

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

if listbox1.items.count < 1 then

exit;



=========>요녀석입니다. listbox1.items.delete(listbox1.items.count-1);

listbox2.items.add(inttostr(stack1.pop));

end;







procedure TForm1.FormDestroy(Sender: TObject);

begin

stack1.free;

end;



end.

제발 자세한 답변부탁드립니다.



2  COMMENTS
  • Profile
    최용일 2001.03.12 11:35
    안녕하세요. 최용일입니다.



    님이 만드신 스택배열은 인덱스가 1부터 시작하죠? 그런데 TListBox.Items배열은 0부터



    시작합니다. 그래서 1을 빼준것입니다...



    ^^ 항상 즐코하세요...



    김동수 wrote:

    > 다음은 제가 작성한 간단한 stack프로그램입니다.

    > 입력순서중 마지막 입력데이트를 추출하는 프로그램인데...."count-1"이 왜 마지막데이터를 가르키게 되는지 그 원리가 궁금합니다.별거 아닌것 같기두 한데 모르니까 영 답답하네여....

    > 소스중에 표시해놨습니다.

    > unit stack;

    >

    > interface

    >

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls;

    >

    > type

    > TForm1 = class(TForm)

    > Edit1: TEdit;

    > ListBox1: TListBox;

    > ListBox2: TListBox;

    > Button1: TButton;

    > Button2: TButton;

    > Label1: TLabel;

    > Label2: TLabel;

    > Label3: TLabel;

    > procedure FormCreate(Sender: TObject);

    > procedure Button1Click(Sender: TObject);

    > procedure Button2Click(Sender: TObject);

    > procedure FormDestroy(Sender: TObject);

    > private

    > { Private declarations }

    > public

    > { Public declarations }

    > end;

    >

    >

    > Type

    > TStack = Class

    > top:1..100;

    > stk:array[1..100] of integer;

    > procedure push(i:integer);

    > function pop:integer;

    > constructor create;

    > end;

    > var

    > Form1: TForm1;

    > stack1:tstack;

    > implementation

    >

    > {$R *.DFM}

    >

    > constructor tstack.create;

    > begin

    > inherited create;

    > top:=1;

    > end;

    >

    > procedure tstack.push(i:integer);

    > begin

    > if top < 100 then begin

    > stk[top]:=i;

    > inc(top);

    > end;

    > end;

    >

    > function tstack.pop : integer ;

    > begin

    > if top >1 then begin

    > dec(top);

    > result:=stk[top];

    > end;

    > end;

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    > stack1:=tstack.create;

    > edit1.text:='';

    > end;

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > stack1.push(strtoint(edit1.text));

    > listbox1.items.add(edit1.text);

    > edit1.clear;

    > edit1.setfocus;

    > end;

    >

    > procedure TForm1.Button2Click(Sender: TObject);

    > begin

    > if listbox1.items.count < 1 then

    > exit;

    >

    > =========>요녀석입니다. listbox1.items.delete(listbox1.items.count-1);

    > listbox2.items.add(inttostr(stack1.pop));

    > end;

    >

    >

    >

    > procedure TForm1.FormDestroy(Sender: TObject);

    > begin

    > stack1.free;

    > end;

    >

    > end.

    > 제발 자세한 답변부탁드립니다.

    >

  • Profile
    김동수 2001.03.10 20:57
    감사함다.

    저두 빨리 리플달아줄 실력이 되었음 좋겠네여...