- •Часть 2
- •Лабораторная работа № 6. Программирование циклических вычислительных процессов. Итерационные циклы
- •Отладка модулей проекта
- •Отладка синтаксических ошибок
- •Отладка логических ошибок
- •Итерационные циклы
- •Текст модуля UnIterate
- •Пример создания приложения
- •Сохранение проекта
- •Размещение компонентов на Форме
- •6.4. Выполнение индивидуального задания
- •Лабораторная работа № 7. Программирование с использованием строк
- •Краткие теоретические сведения
- •7.1.1. Символьные типы
- •7.1.2. Строковые типы
- •7.1.3. Процедуры и функции для работы со строками
- •Применение компонентов ListBox и ComboBox для работы со строками
- •7.3. Пример создания приложения
- •7.3.1. Сохранение проекта
- •7.3.2. Размещение компонентов на Форме
- •7.3.3. Создание процедуры-обработчика события активизации Формы FormActivate.
- •7.3.4. Создание процедуры-обработчики события ComboBox1KeyPress
- •7.3.5. Создание процедуры-обработчики события нажатия клавиши «мыши» ComboBox1Click
- •7.3.6. Работа с приложением
- •7.4. Текст модуля UnStr
- •7.5. Выполнение индивидуального задания
- •С использованием записей
- •8.1. Краткие теоретические сведения
- •8.2. Пример создания приложения
- •8.2.1. Указания по созданию приложения
- •8.2.2. Размещение компонентов по Форме
- •8.2.3.Создание процедур обработки событий FormCreate и ButtonClick
- •8.2.4. Работа с приложением
- •8.2.5. Текст модуля UnZap
- •8.3. Выполнение индивидуального задания
- •Лабораторная работа № 9. Програмирование с использованием файлов
- •9.1. Краткие теоретические сведения
- •9.2. Пример создания приложения
- •9.2.1. Указания по созданию приложения
- •9.2.2.Размещение компонентов по Форме.
- •9.2.3.Создание процедур обработки событий
- •9.2.4. Текст модуля UnFile
- •9.2.5. Работа с приложением
- •9.3. Выполнение индивидуального задания
- •Лабораторная работа № 10. Программирование с использованием функций и процедур. Процедурные типы. Создание модулей
- •10.1. Краткие теоретические сведения
- •10.1.1. Объявление и описание функций и процедур
- •10.1.2. Различные варианты передачи параметров в функции и процедуры
- •10.1.3. Процедурные типы
- •Текст модуля UnFancProc
- •Текст модуля UnModul
- •Выполнение индивидуального задания
- •Лабораторная работа № 11. Программирование с использованием динамических структур данных
- •11.1. Краткие теоретические сведения
- •11.1.1. Указатели
- •11.2. Использование динамических переменных
- •Пример создания приложения
- •11.3.1. Сохранение проекта
- •Размещение компонентов на Форме
- •11.3.3. Создание процедуры обработки событий FormCreate
- •Текст модуля UnDinMas
- •11.5. Выполнение индивидуального задания
- •Лабораторная работа № 12. Программирование с использованием средств для построения и отображения графиков
- •12.1. Методика построения графиков с помощью компонента tChart
- •12.2. Пример написания программы
- •12.2.1. Настройка формы
- •12.2.2. Работа с компонентом tChart
- •12.2.3. Написание программы обработчика события создания формы
- •12.2.4. Написание программ обработчика событий нажатия на кнопки
- •12.3. Модуль программы построения и отображения графиков
- •12.4. Выполнение индивидуального задания
- •Приложение 1 п1. Свойства и методы компонентов п1.1. Общие свойства компонентов
- •2. Компоненты страницы standard
- •3. Компоненты страницы additional
- •4. Компоненты страницы dialogs
- •П2. Простые типы данных языка object pascal
- •П3. Процедуры и функции для работы со строками
- •Литература
11.3.3. Создание процедуры обработки событий FormCreate
и BitBtn1Click
Двойным нажатием клавиши «мыши» на Форме и кнопке BitBtn создайте соответствующие процедуры обработки событий. Пользуясь текстом модуля UnDinMas, наберите операторы этих процедур.
Создать процедуру, которая будет выделять заданным цветом границы ячеек с наименьшим и наибольшим значениями в компоненте StringGrid. Для создания такой процедуры сделайте активным компонент StringGrid и на странице Events (события) Инспектора Объектов дважды щелкните «мышью» в правой части события OnDrawCell. В ответ Delphi создаст обработчик этого события – процедуру procedure TForm1.StringGrid1DrawCell и установит курсор между операторами begin и end этой процедуры. Используя текст модуля UnDinMas, наберите операторы процедуры TForm1.StringGrid1DrawCell.
Текст модуля UnDinMas
unit UnDinMas;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Spin, Buttons, Grids;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
StringGrid1: TStringGrid;
BitBtn1: TBitBtn;
SpinEdit1: TSpinEdit;
SpinEdit2: TSpinEdit;
BitBtn2: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure SpinEdit1Change(Sender: TObject);
procedure SpinEdit2Change(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
Mas = array [1..1] of integer;
pMas = array [1..1] of ^mas;
var
pA: ^pMas;
m,n,max,min: integer;
procedure TForm1.FormCreate(Sender: TObject);
begin
SpinEdit1.Text:='6'; // начальное значение m
SpinEdit2.Text:='8'; // начальное значение n
m:=6;
n:=8;
StringGrid1.RowCount:=m; // количество строк
StringGrid1.ColCount:=n; // количество столбцов
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
begin
m:=StrToInt(SpinEdit1.Text);
StringGrid1.RowCount:=m;
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
begin
n:=StrToInt(SpinEdit2.Text);
StringGrid1.ColCount:=n;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
label 1;
var
i,j,k,l,r,p: integer;
begin
Randomize; // инициализация датчика случайных чисел
GetMem(pA,4*m);
for i:=1 to m do
begin // формирование i-й строки массива
GetMem(pA^[i],SizeOf(integer)*n);
for j:=1 to n do
begin
1: r:=Random(1000); // генерирование случайного числа
for k:=1 to i do
begin
if k=i then p:=j-1 else p:=n;
for l:=1 to p do
if r=pA^[k]^[l] then goto 1; //если число есть в массиве,
//тогда сгенерировать новое число
end;
pA^[i]^[j]:=r; // случайное число занести в массив
end;
end;
for i:=1 to m do
for j:=1 to n do
StringGrid1.Cells[j-1,i-1]:=IntToStr(pA^[i]^[j]);
max:=pA^[1]^[1];
min:=max;
for i:=1 to m do
for j:=1 to n do
if max<pA^[i]^[j] then max:=pA^[i]^[j]
else if min>pA^[i]^[j] then min:=pA^[i]^[j];
Label8.Caption:=IntToStr(min);
Label9.Caption:=IntToStr(max);
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
begin
with StringGrid1.Canvas do
if StringGrid1.Cells[ACol,ARow]=IntToStr(min) then
begin
Brush.Color:=clGreen;
FrameRect(Rect);
end
else if StringGrid1.Cells[ACol,ARow]=IntToStr(max) then
begin
Brush.Color:=clRed;
FrameRect(Rect)
end
end;
end.
Пример создания приложения
Использование динамических списков
Задание. Создать приложение для формирования стека, который заполняется путем ввода целых положительных чисел с клавиатуры. Как только будет введено первое отрицательное число, содержимое стека выводится на панель интерфейса, а память, занимаемая его элементами, освобождается.
11.4.1. Сохранение проекта
Для нового проекта создайте новую папку, например, X: \ 35эи \ LAB11_S.
Сохраните проект File | Save Project As…Сначала сохраните модуль под именем UnStek, затем файл проекта под именем Pr_Stek.
11.4.2. Размещение компонентов на Форме
Один из возможных вариантов панели интерфейса создаваемого приложения показан на рисунке 11.2.
Разместим на форме компоненты Label, Edit, Button, BitBtn, Memo.
Label
Edit
Button
BitBtn
Memo
Рис.11.2. Размещение компонентов на форме
11.4.3. Создание процедуры обработки событий FormCreate и BitBtn1Click
Двойным нажатием клавиши «мыши» на Форме и кнопке Button создайте соответствующие процедуры обработки событий. Пользуясь текстом модуля UnStek, наберите операторы этих процедур.
Текст модуля UnStek
unit UnStek;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons;
type
TForm1 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Edit1: TEdit;
Button1: TButton;
BitBtn1: TBitBtn;
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
type
pSt=^zap;
zap=record
inf: integer;
adr: pSt
end;
var // объявление глобальных переменных
pVer, // указатель вершины стека
pTek: pSt; // текуший указатель
elSt: integer; // элемент стека
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Clear;
Edit1.Text:='';
pVer:=nil; // инициализировать указатель вершины
elSt:=0; // инициализировать элемент стека
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
New(pTek); // выделить память
elSt:=StrToInt(Edit1.Text);
pTek^.inf:=elSt; // в информационную часть стека занести elSt
pTek^.adr:=pVer; // в адресную часть занести указатель на вершину
pVer:=pTek; // указатель вершины должен указывать на
// последний элемент
if elSt>=0 then // если элемент стека неотрицательный, тогда …
begin
Edit1.Text:=''; // очистить окно редактора Edit1
Edit1.SetFocus; // передать фокус ввода редактору Edit1
end
else
begin
Memo1.Lines.Add('Элементы стека:'); // вывод заголовка
repeat
Memo1.Lines.Add(#9+IntToStr(pTek^.inf)); // вывод элементов
pVer:=pTek^.adr;
Dispose(pTek); // освободить память
pTek:=pVer;
until pTek=nil;
end;
end;
end.
