2011-2012 учебный год
К сегодняшнему занятию Вами изучены следующие элементы управления
Edit
Label
Button
RadioButton
CheckBox
SpinEdit (на вкладке Misc)
FloatSpinEdit (на вкладке Misc)
ListBox (на вкладке Standard)
Memo (на вкладке Standard)
GroupRadioButton (на вкладке Standard)
ShowMessage, MessageBox
StringGrid (на вкладке Additional)
DrawGrid (на вкладке Additional)
Image (на вкладке Additional)
Shape (на вкладке Additional)
TTabControl (на вкладке Common Controls)
Об отметках
Основные упражнения не отмечены никакими специальными знаками, их выполнения достаточно для удовлетворительной оценки. Дополнительные упражнения отмечены "звездочками", их выполнение необходимо для получения повышенной оценки.
"5" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной и двумя "звездочками".
"4" - в отчете выполнены все основные упражнения, дополнительно выполнены упражнения с одной "звездочкой".
"3" - в отчете выполнены все основные упражнения.
Упражнения
Комбинации. По заданным объемам генеральной совокупности n и выборки m определить количество возможных перестановок Pn, размещений Amn и сочетаний Сmn.
Требования к выполнению. Для вычисления факториала использовать подпрограмму в виде функции.
Пример интерфейса
Пример программы
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
//...
private
{ private declarations }
public
{ public declarations }
end;
// Объявление функции.
function iter_f(a_n : Byte) : Integer;
var
Form1: TForm1;
implementation
function 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;
procedure TForm1.Button1Click(Sender: TObject);
var
n : Byte;
p : Integer;
begin
n := SpinEdit1.Value;
p := iter_f(n);
Label6.Caption := #10#13 + IntToStr(p);
end;
procedure TForm1.Button2Click(Sender: TObject);
const
W = 10;
D = 0;
var
n, m : Byte;
a : double;
begin
n := SpinEdit1.Value;
m := SpinEdit2.Value;
a := iter_f(n)/iter_f(n - m);
Label7.Caption := #10#13 + FloatToStrF(a, ffFixed, W, D);
end;
procedure TForm1.Button3Click(Sender: TObject);
const
W = 10;
D = 0;
var
n, m : Byte;
c : double;
begin
n := SpinEdit1.Value;
m := SpinEdit2.Value;
c := iter_f(n)/iter_f(n - m)/iter_f(m);
Label8.Caption := #10#13 + FloatToStrF(c, ffFixed, W, D);
end;
Перестановки. Задать порядок расположения элементов в перестановке с помощью трех компонентов TSpinEdit.
Требования к выполнению. Для вывода различных вариантов перестановок использовать компонент TStringGrid.
Пример программы
// Глобальные константы.
const
N_MAX = 100;
REVERSI_WAS = 'Такая последовательность была: ';
ID_COL = 0;
FIRST_COL = 1;
// Глобальные переменные.
var
n : Byte;
s : set of Byte;
procedure TForm1.Button1Click(Sender: TObject);
var
a, b, c, num : Byte;
begin
a := SpinEdit1.Value;
b := SpinEdit2.Value;
c := SpinEdit3.Value;
num := 100*a + 10*b + c;
if (num in s) then begin
ShowMessage(REVERSI_WAS + IntToStr(num));
end
else begin
s := s + [num];
if n < N_MAX then Inc(n);
StringGrid1.RowCount := n;
StringGrid1.Cells[ID_COL, n - 1] := IntToStr(n);
StringGrid1.Cells[FIRST_COL, n - 1] := IntToStr(a)+IntToStr(b)+IntToStr(c);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
StringGrid1.Clean;
n := 0;
s := [];
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
n := 0;
s := [];
end;
Трио. Выполнить перестановки троек компонентов TShape одной формы и разного цвета.
Требования к выполнению. Объявить массив компонентов TShape, которые создавать в программе динамически при нажатии на кнопку.
Пример интерфейса
Настройка компонентов:
В Инспекторе объектов
для компонента ListBox1 свойство
MultiSelect = True
Пример программы
// Глобальные константы.
const
SHAPE_COLOR : array [0..2] of tColor = (clBlue, clGreen, clRed);
SHAPE_W = 20;
SHAPE_H = 20;
SHAPE_L = 100;
SHAPE_T = 10;
NEW_REVERSI = 'Новая перестановка!';
NOT_REVERSI = 'Это не перестановка!';
DUPLICATE = 'Повтор перестановки!';
A_MAX = 2;
B_MAX = 2;
C_MAX = 2;
N_MAX = 50;
// Глобальные переменные.
var
s : array [1..N_MAX] of TShape;
n, cnt : Byte;
sb : set of Byte;
a, b, c, num : Byte;
procedure TForm1.Button1Click(Sender: TObject);
var
str : string;
i : byte;
st1 : set of Byte;
unique : Boolean;
begin
st1 := [];
num := 100*a + 10*b + c;
str := IntToStr(a)+' '+IntToStr(b)+' '+IntToStr(c)+' == '+IntToStr(num);
ListBox1.Items.Add(str);
unique := TRUE;
if not(a in st1) then st1 := st1 + [a]
else unique := FALSE;
if not(b in st1) then st1 := st1 + [b]
else unique := FALSE;
if not(c in st1) then st1 := st1 + [c]
else unique := FALSE;
if not(unique) then Label4.Caption := NOT_REVERSI;
if num in sb then Label4.Caption := DUPLICATE;
if unique and not(num in sb) then begin
Label4.Caption := NEW_REVERSI;
ListBox1.Selected[cnt] := True;
sb := sb + [num];
for i := 0 to 2 do begin
Inc(n);
Label2.Caption := IntToStr(n) + ' ' + IntToStr(cnt);
s[n] := TShape.Create(self);
s[n].Parent := Form1;
if i = 0 then s[n].Brush.Color := SHAPE_COLOR[a];
if i = 1 then s[n].Brush.Color := SHAPE_COLOR[b];
if i = 2 then s[n].Brush.Color := SHAPE_COLOR[c];
s[n].Visible := True;
s[n].Shape := stCircle;
s[n].Width := SHAPE_W;
s[n].Height := SHAPE_H;
s[n].Left := SHAPE_L + ((n - 1) mod 3 + 1)*SHAPE_W;
s[n].Top := SHAPE_T + ((n - 1) div 3)*SHAPE_H;
end;// for
end;// if
// Следующий вариант.
Inc(c);
if c > C_MAX then begin
c := 0;
Inc(b);
if b > B_MAX then begin
b := 0;
Inc(a);
if a > A_MAX then begin
a := 0;
b := 0;
c := 0;
end;
end;
end;
Inc(cnt);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
a := 0;
b := 0;
c := 0;
n := 0;
cnt := 0;
sb := [];
end;
Домашнее задание
*Домашние перестановки. В задаче "Перестановки" проиллюстрировать различные варианты перестановок с помощью нужного количества троек компонентов Shape, имеющих три разные формы.
Требования к выполнению. Использовать компоненты TShape.
**Домашний квартет. Выполнить задачу "Трио" для 4-х элементов.
Требования к выполнению. Использовать компоненты TShape.