2011-2012 учебный год
К сегодняшнему занятию Вами изучены следующие элементы управления
Edit
Label
Button
RadioButton
CheckBox
SpinEdit (на вкладке Misc)
FloatSpinEdit (на вкладке Misc)
ListBox (на вкладке Standard)
Memo (на вкладке Standard)
GroupRadioButton (на вкладке Standard)
ShowMessage, MessageBox
StringGrid (на вкладке Additional)
Image (на вкладке Additional)
TTabControl (на вкладке Common Controls)
Об отметках
Основные упражнения не отмечены никакими специальными знаками, их выполнения достаточно для удовлетворительной оценки. Дополнительные упражнения отмечены "звездочками", их выполнение необходимо для получения повышенной оценки.
"5" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной и двумя "звездочками".
"4" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной "звездочкой".
"3" - в отчете выполнены все основные упражнения.
Упражнения
Динамическая переменная. В программе по нажатию кнопки должна создаваться динамическая перемнная, определяться ее размер и адрес. Если переменная существует, то вывести сообщение об этом. Аналогичные действия должна выполнять программа при удалении.
Требования к выполнению. Использовать указатели и тип запись.
Пример интерфейса
Пример программы
// Глобальные константы. const IS_EXIST = 'Переменная уже существует!'; NO_EXIST = 'Переменная НЕ существует!'; MY_DATA = 333; INFOSIZE = ' байт'; // Глобальные типы. type p_node = ^t_node; t_node = record next : p_node; data : Integer; end; // Глобальные переменные. var p : p_node; procedure TForm1.Button1Click(Sender: TObject); begin if p = nil then begin New(p); p^.next := nil; p^.data := MY_DATA; Label2.Caption := IntToHex(Integer(Addr(p)), 8); end else ShowMessage(IS_EXIST); end; procedure TForm1.Button2Click(Sender: TObject); begin if p <> nil then begin Dispose(p); p := nil; Label6.Caption := IntToHex(Integer(Addr(p)), 8); Label8.Caption := IntToStr(SizeOf(p^)) + INFOSIZE; end else ShowMessage(NO_EXIST); end; procedure TForm1.Button3Click(Sender: TObject); begin if p <> nil then begin Label4.Caption := IntToStr(SizeOf(p^)) + INFOSIZE; end else ShowMessage(NO_EXIST); end;
Список двух. Аналогично предыдущей задаче создать две связанные динамические переменные.
Требования к выполнению. Использовать указатели и тип запись. Для визуализации процесса добавления использовать компоненты TShape.
Пример интерфейса
Пример программы
// Глобальные константы. const IS_EXIST = 'Переменная уже существует!'; NO_EXIST = 'Переменная НЕ существует!'; MY_DATA = 333; INFOSIZE = ' байт'; // Глобальные типы. type p_node = ^t_node; t_node = record next : p_node; data : Integer; end; // Глобальные переменные. var p : p_node; procedure TForm1.Button1Click(Sender: TObject); begin if p = nil then begin New(p); p^.next := nil; p^.data := MY_DATA; Label2.Caption := IntToHex(Integer(Addr(p)), 8); end else ShowMessage(IS_EXIST); end; procedure TForm1.Button2Click(Sender: TObject); begin if p <> nil then begin Dispose(p); p := nil; Label6.Caption := IntToHex(Integer(Addr(p)), 8); Label8.Caption := IntToStr(SizeOf(p^)) + INFOSIZE; end else ShowMessage(NO_EXIST); end; procedure TForm1.Button3Click(Sender: TObject); begin if p <> nil then begin Label4.Caption := IntToStr(SizeOf(p^)) + INFOSIZE; end else ShowMessage(NO_EXIST); end; procedure TForm1.Button4Click(Sender: TObject); begin if p = nil then begin New(p); p^.next := nil; p^.data := MY_DATA; Label2.Caption := IntToHex(Integer(Addr(p)), 8); end else ShowMessage(IS_EXIST); end;
Динамический список. По нажатию кнопки в динамический список должен добавляться новый элемент.
Требования к выполнению. Для визуализации процессов извлечения и добавления использовать компоненты TShape.
Пример интерфейса
Пример программы
// Глобальные константы. type p_my_list = ^t_my_list; t_my_list = record next : p_my_list; s : string; end; // Глобальные переменные. var p_head : p_my_list; p_current : p_my_list; p : p_my_list; // Глобальные константы. const N_MAX = 7; RANGE : array [1..N_MAX] of string = ('Каждый', 'Охотник', 'Желает', 'Знать', 'Где', 'Сидит', 'Фазан'); // Глобальные переменные. var n : 1..N_MAX; procedure TForm1.FormCreate(Sender: TObject); begin n := 0; p_head := nil; p_current := 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_list; prev : p_my_list; find : Boolean; begin if p_head <> nil then p := p_head; find := false; end; procedure TForm1.Button1Click(Sender: TObject); begin if n < N_MAX then Inc(n); New(p); p^.s := RANGE[n]; ListBox1.Items.Add(IntTOStr(n) + '. ' + p^.s); if p_head = nil then begin p^.next := nil; p_head := p; end else begin p^.next := p_current^.next; p_current^.next := p; end; p_current := p; 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;
Домашнее задание
Домашний список. В задаче "Динамический список" добавить элемент после заданного элемента.
Требования к выполнению. Для визуализации процессов извлечения и добавления использовать компоненты TShape.