К сегодняшнему занятию Вами изучены следующие элементы управления
Edit
Label
Button
RadioButton
CheckBox
SpinEdit (на вкладке Misc)
ListBox (на вкладке Standard)
Memo (на вкладке Standard)
ShowMessage
Компонент TStringGrid - на вкладке компонентов Additional. Настройка таблицы StringGrid1
в окне Инспектор объектов
Убрать заголовки строк
FixedCols = 0
Убрать заголовки колонок
FixedRows = 0
Установить количество колонок
ColCount = 5
Установить количество строк
RowCount = 1
Установить ширину всех колонок
DefaultColWidth = 30
Установить высоту всех строк
DefaultRowHeight = 30
Разрешить редактирование ячеек
Options/goEditing = True
Об отметках
Основные упражнения не отмечены никакими специальными знаками, их выполнения достаточно для удовлетворительной оценки. Дополнительные упражнения отмечены "звездочками", их выполнение необходимо для получения повышенной оценки.
"5" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной и двумя "звездочками".
"4" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной "звездочкой".
"3" - в отчете выполнены все основные упражнения.
Упражнения
Рекурсия. Вычислить факториал заданного числа двумя способами: итерационным методом и рекурсивным методом. Число задается в компоненте SpinEdit1, способ выбирается с помощью RadioButton1 и RadioButton2.
Требования к выполнению. Использовать компоненты TLabel, TButton, TRadioButton, TSpinEdit.
Пример интерфейса
Пример программы
TForm1 = class(TForm)
//...
// Добавить эти 2 строки в описание класса TForm1.
function iter_f(a_n : Byte) : Integer;
function recur_f(a_n : Byte) : Integer;
private
{ private declarations }
public
{ public declarations }
end;
// В разделе implementation - 2 функции и процедура.
function TForm1.iter_f(a_n : Byte) : Integer;
var
x : Integer;
k : Byte;
begin
x := 1;
for k := 2 to a_n do begin
x := x * k;
end;
iter_f := x;
end;
function TForm1.recur_f(a_n : Byte) : Integer;
begin
if a_n = 0 then recur_f := 1
else recur_f := a_n * recur_f(a_n - 1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
n : Integer;
begin
n := SpinEdit1.Value;
Label2.Caption := IntToStr(n);
if RadioButton1.Checked then Label2.Caption := IntToStr(iter_f(n));;
if RadioButton2.Checked then Label2.Caption := IntToStr(recur_f(n));;
end;
Уникальные числа. Заполнить одномерный массив целыми случайными числами без повторений.
Требования к выполнению. Использовать компоненты TLabel, TButton, TSpinEdit, TListBox, TStringGrid.
Пример интерфейса
Пример программы
var
Form1: TForm1;
// Глобальные константы.
const
N_MAX = 15;
INDEX_COL = 0;
FIRST_COL = 1;
procedure TForm1.Button1Click(Sender: TObject);
var
a, b, t : ShortInt;
i : Byte;
z : array [1..N_MAX] of ShortInt;
set_array : set of Byte;
begin
ListBox1.Clear;
a := SpinEdit1.Value;
b := SpinEdit2.Value;
// проверка b - a > N_MAX
set_array := [];
i := 1;
while i <= N_MAX do begin
ListBox1.Items.Add('Поиск... => ' + IntToStr(i) + '-го');
repeat
t := Random(b - a + 1) + a;
ListBox1.Items.Add(IntToStr(t));
until not(t in set_array);
set_array := set_array + [t];
z[i] := t;
StringGrid1.Cells[INDEX_COL, i - 1] := IntToStr(i);
StringGrid1.Cells[FIRST_COL, i - 1] := IntToStr(z[i]);
Inc(i);
end;
end;
Сортировка методом "пузырька". Заполнить одномерный массив целыми числами с помощью компонента StringGrid1. Отсортировать элементы массива по возрастанию и вывести в компонент StringGrid2.
Рекомендация к выполнению. Настройка таблицы StringGrid1: в окне Инспектор объектов разрешить редактирование ячеек
Options/goEditing = True
Пример интерфейса
Пример программы
var
Form1: TForm1;
// Глобальные константы.
const
N_MAX = 5;
FIRST_ROW = 1;
INDEX_ROW = 0;
// Глобальные переменные.
var
z : array [0..N_MAX - 1] of Integer;
procedure TForm1.FormCreate(Sender: TObject);
var
i : 0..N_MAX - 1;
begin
for i := 0 to N_MAX - 1 do begin
StringGrid1.Cells[i, INDEX_ROW] := IntToStr(i);
StringGrid2.Cells[i, INDEX_ROW] := IntToStr(i);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, i_min : 0..N_MAX - 1;
min, x : Integer;
begin
for i := 0 to N_MAX - 1 do begin
z[i] := StrToInt(StringGrid1.Cells[i, FIRST_ROW]);
end;
for i := 0 to N_MAX - 2 do begin
min := z[i];
i_min := i;
for j := i + 1 to N_MAX - 1 do begin
if min > z[j] then begin
min := z[j];
i_min := j;
end;
end;
x := z[i];
z[i] := z[i_min];
z[i_min] := x;
end;
for i := 0 to N_MAX - 1 do begin
StringGrid2.Cells[i, FIRST_ROW] := IntToStr(z[i]);
end;
end;
*Пошаговая сортировка. Заполнить одномерный целочисленный массив с помощью таблицы StringGrid1. Щелкая по кнопке Button1, вносят исходный массив в первую строку таблицы StringGrid2. Требуется при каждом щелчке по кнопке Button2 выводить в следующую свободную строку таблицы StringGrid2 очередной шаг, или итерацию, сортировки массива по возрастанию. На каждом шаге выводить на форму номер минимального элемента в неотсортированной части массива, его значение и номер шага.
Пример интерфейса
Домашнее задание
Сортировка методом "пузырька" 2. В программе к задаче "Сортировка методом "пузырька" вычислить суммы строк двумерного массива и записать их соответственно в FixedRow, а затем расположить строки в порядке возрастания суммы.
Требования к выполнению. Исходный массив следует заполнить целыми случайными числами и вывести в StringGrid1, а отсортированный массив - в StringGrid2.