2011-2012 учебный год
К сегодняшнему занятию Вами изучены следующие элементы управления
Edit
Label
Button
RadioButton
CheckBox
SpinEdit (на вкладке Misc)
FloatSpinEdit (на вкладке Misc)
ListBox (на вкладке Standard)
Memo (на вкладке Standard)
GroupRadioButton (на вкладке Standard)
ShowMessage, MessageBox
StringGrid (на вкладке Additional)
Image (на вкладке Additional)
Shape (на вкладке Additional)
TTabControl (на вкладке Common Controls)
Об отметках
Основные упражнения не отмечены никакими специальными знаками, их выполнения достаточно для удовлетворительной оценки. Дополнительные упражнения отмечены "звездочками", их выполнение необходимо для получения повышенной оценки.
"5" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной и двумя "звездочками".
"4" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной "звездочкой".
"3" - в отчете выполнены все основные упражнения.
Упражнения
Стек. В программе по нажатию кнопки должен добавляться элемент в стек, а по нажатию другой кнопки - извлекаться из стека.
Требования к выполнению. Для визуализации процессов извлечения и добавления использовать компоненты TShape.
Пример интерфейса
Пример программы
// Глобальные константы.
const
NO_EXIST = 'Элемент не существует!';
DEEP_STACK = 'Глубина стека ограничена: ';
N_MAX = 7;
RANGE : array [1..N_MAX] of string = ('Каждый',
'Охотник',
'Желает',
'Знать',
'Где',
'Сидит',
'Фазан');
// Глобальные типы.
type
p_my_stack = ^t_my_stack;
t_my_stack = record
next : p_my_stack;
s : string;
end;
// Глобальные переменные.
var
p_head : p_my_stack;
p : p_my_stack;
n : 1..N_MAX;
procedure TForm1.FormCreate(Sender: TObject);
begin
n := 0;
p_head := nil;
Shape1.Visible := False;
Shape2.Visible := False;
Shape3.Visible := False;
Shape4.Visible := False;
Shape5.Visible := False;
Shape6.Visible := False;
Shape7.Visible := False;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
p : p_my_stack;
begin
if p_head <> nil then
p := p_head;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if n < N_MAX then begin
Inc(n);
Label3.Caption := IntToStr(n);
New(p);
p^.next := p_head; // новый указывает на "бывшую" верхушку стека
p^.s := RANGE[n];
p_head := p; // вершиной стека становится новый элемент
ListBox1.Items.Add(IntTOStr(n) + '. ' + p^.s);
case n of
1 : begin
Shape1.Visible := True;
end;
2 : begin
Shape2.Visible := True;
end;
3 : begin
Shape3.Visible := True;
end;
4 : begin
Shape4.Visible := True;
end;
5 : begin
Shape5.Visible := True;
end;
6 : begin
Shape6.Visible := True;
end;
7 : begin
Shape7.Visible := True;
end;
end;
end
else ShowMessage(DEEP_STACK + IntToStr(N_MAX));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
case n of
1 : begin
Shape1.Visible := False;
end;
2 : begin
Shape2.Visible := False;
end;
3 : begin
Shape3.Visible := False;
end;
4 : begin
Shape4.Visible := False;
end;
5 : begin
Shape5.Visible := False;
end;
6 : begin
Shape6.Visible := False;
end;
7 : begin
Shape7.Visible := False;
end;
end;
if p_head <> nil then begin
Dec(n);
p := p_head;
p_head := p_head^.next;
end
else ShowMessage(NO_EXIST);
Label3.Caption := IntToStr(n);
end;
Очередь. В программе по нажатию кнопки должен добавляться элемент в очередь, а по нажатию другой кнопки - извлекаться из очереди.
Требования к выполнению. Для визуализации процессов извлечения и добавления использовать компоненты TShape.
Пример интерфейса
Пример программы
// Глобальные константы.
const
NO_EXIST = 'Элемент не существует!';
LEN_CHAIN = 'Длина очереди ограничена: ';
N_MAX = 7;
RANGE : array [1..N_MAX] of string = ('Как',
'Однажды',
'Жак',
'Звонарь',
'Городской',
'Сломал',
'Фонарь');
// Глобальные типы.
type
p_my_chain = ^t_my_chain;
t_my_chain = record
next : p_my_chain;
s : string;
end;
// Глобальные переменные.
var
p_head : p_my_chain;
p : p_my_chain;
p_last : p_my_chain;
n : 0..N_MAX;
procedure TForm1.FormCreate(Sender: TObject);
begin
n := 0;
p_head := nil;
p := nil;
p_last := nil;
Shape1.Visible := False;
Shape2.Visible := False;
Shape3.Visible := False;
Shape4.Visible := False;
Shape5.Visible := False;
Shape6.Visible := False;
Shape7.Visible := False;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
p : p_my_chain;
prev : p_my_chain;
begin
if p_head <> nil then
p := p_head;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if n < N_MAX then begin
Inc(n);
Label3.Caption := IntToStr(n);
if p_last = nil then begin // если очередь пуста
New(p);
p_last := p;
p_head := p_last;
p^.next := nil; // за новым очередником никто не стоит
// - Кто крайний? - P - крайний!
end
else begin
New(p);
p^.next := nil; // за новым крайним никого нет
p_last^.next := p; // "бывший" крайний указывает на нового крайнего
p_last := p; // указатель на крайнего смещается к новому
end;
p^.s := RANGE[n];
ListBox1.Items.Add(IntTOStr(n) + '. ' + p^.s);
case n of
1 : begin
Shape1.Visible := True;
end;
2 : begin
Shape2.Visible := True;
end;
3 : begin
Shape3.Visible := True;
end;
4 : begin
Shape4.Visible := True;
end;
5 : begin
Shape5.Visible := True;
end;
6 : begin
Shape6.Visible := True;
end;
7 : begin
Shape7.Visible := True;
end;
end;
end
else ShowMessage(LEN_CHAIN + IntToStr(N_MAX));
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if n > 0 then Dec(n);
case (N_MAX - n) of
1 : begin
Shape1.Visible := False;
end;
2 : begin
Shape2.Visible := False;
end;
3 : begin
Shape3.Visible := False;
end;
4 : begin
Shape4.Visible := False;
end;
5 : begin
Shape5.Visible := False;
end;
6 : begin
Shape6.Visible := False;
end;
7 : begin
Shape7.Visible := False;
end;
end;
if p_head <> nil then begin
// Dec(n);
p := p_head;
p_head := p_head^.next;
Dispose(p);
end
else ShowMessage(NO_EXIST);
Label3.Caption := IntToStr(n);
end;
Дерево. Создать программу визуализирующую добавление элементов в динамическую структуру данных - дерево - с помощью компонента TShape. Доработать пример программы до второго уровня дерева с учетом того, что корень, root - нулевой уровень.
Требования к выполнению. Для визуализации построения дерева использовать компоненты TShape.
Пример интерфейса
Пример программы
// Глобальные типы.
type
p_my_tree = ^t_my_tree;
t_my_tree = record
left : p_my_tree;
right : p_my_tree;
s : string;
end;
// Глобальные константы.
const
NO_EXIST = 'Элемент не существует!';
NUM_NODES = 'Узлы дерева ограничены: ';
N_MAX = 7;
RANGE : array [1..N_MAX] of string = ('Как',
'Однажды',
'Жак',
'Звонарь',
'Городской',
'Сломал',
'Фонарь');
// Глобальные переменные.
var
p_left : p_my_tree;
p_root : p_my_tree;
p_right : p_my_tree;
p : p_my_tree;
n : 0..N_MAX;
implementation
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
n := 0;
p_left := nil;
p_root := nil;
p_right := nil;
Shape1.Visible := False;
Shape2.Visible := False;
Shape3.Visible := False;
Shape4.Visible := False;
Shape5.Visible := False;
Shape6.Visible := False;
Shape7.Visible := False;
end;
procedure TForm1.FormDestroy(Sender: TObject);
var
p : p_my_tree;
begin
if p_root <> nil then
p := p_root;
end;
// Добавить слева.
procedure TForm1.Button1Click(Sender: TObject);
begin
if n < N_MAX then begin
Inc(n, 2);
if p_root = nil then begin
New(p);
p_root := p;
p^.left := nil;
p^.right := nil;
n := 1;
p^.s := RANGE[n];
Shape1.Visible := True;
end
else begin
New(p);
if p_root^.left = nil then n := 2;
p_root^.left := p;
p^.left := nil;
p^.right := nil;
p^.s := RANGE[n];
end;
case n of
1 : begin
Shape1.Visible := True;
end;
2 : begin
Shape2.Visible := True;
end;
4 : begin
Shape4.Visible := True;
end;
6 : begin
Shape6.Visible := True;
end;
end;
ListBox1.Items.Add(IntTOStr(n) + '. ' + p^.s);
end
else ShowMessage(NUM_NODES + IntToStr(N_MAX));
end;
// Добавить справа.
procedure TForm1.Button2Click(Sender: TObject);
begin
if n < N_MAX then begin
Inc(n, 2);
if p_root = nil then begin
New(p);
p_root := p;
p^.left := nil;
p^.right := nil;
n := 1;
p^.s := RANGE[n];
Shape1.Visible := True;
end
else begin
New(p);
if p_root^.right = nil then n := 3;
p_root^.right := p;
p^.left := nil;
p^.right := nil;
p^.s := RANGE[n];
p^.s := RANGE[n];
end;
case n of
1 : begin
Shape1.Visible := True;
end;
3 : begin
Shape3.Visible := True;
end;
5 : begin
Shape5.Visible := True;
end;
7 : begin
Shape7.Visible := True;
end;
end;
ListBox1.Items.Add(IntTOStr(n) + '. ' + p^.s);
end
else ShowMessage(NUM_NODES + IntToStr(N_MAX));
end;
Домашнее задание
Домашний стек. В задаче "Стек" выводить адреса элементов в компонент TMemo.
Требования к выполнению. Для визуализации процессов извлечения и добавления использовать компоненты TShape.
Домашнее дерево. В задаче "Дерево" выводить адреса элементов в компонент TMemo.
Требования к выполнению. Для визуализации построения дерева использовать компоненты TDrawGrid.