asd / корзина / лекции по TP / Lecture_Pascal / лекция_14_11_2014 / Матрицы_MainMenu
.docМатрицы MainMenu- главное меню формы Галерея компонентов вкладка Standard/MainMenu
После установки компонента на форму необходимо создать пункты меню. Для этого можно выбрать один из следующих способов:
-
дважды щелкнуть на компоненте левой клавишей мыши;
Рисунок 1
-
щелкнуть на компоненте правой клавишей мыши и в контекстном меню выбрать пункт Menu Designer;
Рисунок 2
-
щелкнуть в правой половине строки свойства Items в окне инспектора объектов.
Откроется окно конструктора меню. Для каждого пункта меню и подменю перейдите в окно ИО и свойстве
Caption введите название пункта меню и подменю, после чего нажмите Enter или щелкните по пункту меню на форме.
Рисунок 3
Рисунок 4
Для пунктов меню и подменю, предполагающих какие либо действия (ввод/вывод, вычисления и т. д.), т.е. обработку событий, в окне ИО на вкладке Events (события) дважды щелкните в правой части события OnClick. В программе автоматически создается процедура для вставки фрагмента программы обработки события (например, формирование матрицы).
Вставка электронной таблицы Галерея компонентов вкладка ActivX/F1Book
//запись в F1book1
F1book1.TextRC[1,3]:='Исходная матрица'; //Заголовок
for i:=1 to 8 do
for j:=1 to 8 do
F1book1.NumberRC[i+1,j]:=a[i,j]; //печать матрицы в электронной таблице
//запись в F1book1
F1book1.TextRC[10,3]:='Обмен 3 и 6 столбцов'; //Заголовок
for i:=1 to 8 do
for j:=1 to 8 do
F1book1.NumberRC[i+10,j]:=a[i,j];
F1book1.TextRC[19,3]:='Обмен 2 и 5 строк'; //Заголовок
for i:=1 to 8 do
for j:=1 to 8 do
F1book1.NumberRC[i+19,j]:=a[i,j];
Label4.caption:=format('%7.2f',[sr]); - вывод вещественного числа в формате 7.2f на метку;
--------------------------------------------------------------------------------------------------------------
label6.caption:=format('%5d',[l]); - вывод целого числа в формате 5D на метку;
-------------------------------------------------------------------------------------------------------------
//Формирование вектора и вывод его на метку Label10
procedure TForm1.N10Click(Sender: TObject);
var s:string ;
begin
for i:=1 to 8 do
begin
b[i]:=Trunc(a[i,i]);
s:=s+Floattostr(b[i])+#9; // Преобразование элементов вектора в строковый тип
// и запись в буферную строку S; +#9 табуляция
end;
label10.caption:=s; // Вывод вектора на метку 10 в форме
s:=s+#13; // Перевод строки
end;
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, AxCtrls, OleCtrls, VCF1, Menus, Buttons;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
F1Book1: TF1Book;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
BitBtn1: TBitBtn;
N9: TMenuItem;
N10: TMenuItem;
N11: TMenuItem;
Label9: TLabel;
Label10: TLabel;
procedure N1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N10Click(Sender: TObject);
procedure N11Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type matr=array[1..8,1..8]of real;
var
Form1: TForm1;
a:matr; b:array[1..8] of real;
l,k,i,j:integer;
sl,sr,buf:real;
f:textfile;
implementation
{$R *.dfm}
Function Sred(d:matr;n:integer):real; // среднее значение матрицы
var s:real;
begin
s:=0;
for i:=1 to n do
for j:=1 to n do
s:=s+d[i,j];
sred:=s/(n*n);
end;
Function Sled(d:matr;n:integer):real; // след матрицы
var s:real;
begin
s:=0;
for i:=1 to n do
s:=s+d[i,i];
sled:=s;
end;
Function ChSred(d:matr;n:integer;srm:real):integer; // среднее значение матрицы
var t:integer;
begin
t:=0;
for i:=1 to n do
for j:=1 to n do
if d[i,j]<srm then t:=t+1;
ChSred:=t;
end;
procedure Stm(var d:matr; n:integer); // процедура обмена столбцов матрицы
begin
for i:=1 to n do
begin
buf:=d[i,3];
d[i,3]:=d[i,6];
d[i,6]:=buf;
end;
end;
procedure Strm(var d:matr; n:integer); // процедура обмена сттрок матрицы
begin
for j:=1 to n do
begin
buf:=d[2,j];
d[2,j]:=d[5,j];
d[5,j]:=buf;
end;
end;
procedure Fm(var d:matr; n:integer); // процедура Формирования матрицы
begin
for i:=1 to n do
for j:=1 to n do
if j>3 then d[i,j]:=sqr(cos(arctan(pi/(i+j))))+i else d[i,j]:=sqr(i-j)/(3+exp(2/5*ln(i+j)))-i;
end;
procedure Zm(d:matr; n:integer; name:string); //запись матрицы в файл
begin
AssignFile(f,'peзультаты.txt');
append(f);
writeln(f,name);
for i:=1 to n do
begin
for j:=1 to n do
write(f,d[i,j]:8:3);
writeln(f);
end;
writeln(f);
closeFile(f);
end;
procedure TForm1.N1Click(Sender: TObject);
//Формирование матрицы
begin
Fm(a,8);
AssignFile(f,'peзультаты.txt');
Rewrite(f);
closeFile(f);
//запись исходной матрицы в файл
Zm(a,8,'Исходная матрица');
//запись в F1book1
F1book1.TextRC[1,3]:='Исходная матрица'; //Заголовок
for i:=1 to 8 do
for j:=1 to 8 do
F1book1.NumberRC[i+1,j]:=a[i,j]; //печать матрицы в электронной таблице
end;
procedure TForm1.N4Click(Sender: TObject);
//поиск среднего значения матрицы
begin
sr:=sred(a,8);
Label4.caption:=format('%7.2f',[sr]);
end;
procedure TForm1.N5Click(Sender: TObject);
// число элементов < среднего
begin
l:=ChSred(a,8,sr);
label6.caption:=format('%5d',[l]);
end;
procedure TForm1.N6Click(Sender: TObject);
//след матрицы
begin
sl:=Sled(a,8);
Label8.caption:=format('%7.2f',[sl]);
end;
procedure TForm1.N7Click(Sender: TObject);
// обмен столбцов
begin
// обмен столбцов (3<->6)
Stm(a,8);
//запись матрицы после обмена столбцов в файл
Zm(a,8,'матрица после обмена столбцов');
//запись в F1book1
F1book1.TextRC[10,3]:='Обмен 3 и 6 столбцов'; //Заголовок
for i:=1 to 8 do
for j:=1 to 8 do
F1book1.NumberRC[i+10,j]:=a[i,j];
end;
procedure TForm1.N8Click(Sender: TObject);
begin
// обмен строк (2<->5)
Strm(a,8);
//запись матрицы после обмена столбцов в файл
Zm(a,8,'матрица после обмена строк');
//запись в F1book1
F1book1.TextRC[19,3]:='Обмен 2 и 5 строк'; //Заголовок
for i:=1 to 8 do
for j:=1 to 8 do
F1book1.NumberRC[i+19,j]:=a[i,j];
end;
//Формирование вектора и вывод его на метку Label10
procedure TForm1.N10Click(Sender: TObject);
var s:string ;
begin
for i:=1 to 8 do
begin
b[i]:=Trunc(a[i,i]);
s:=s+Floattostr(b[i])+#9; // Преобразование элементов вектора в строковый тип
// и запись в буферную строку S; +#9 табуляция
end;
label10.caption:=s; // Вывод вектора на метку 10 в форме
s:=s+#13; // Перевод строки
end;
procedure TForm1.N11Click(Sender: TObject);
begin
Assignfile(f,'Вектор.txt');
Rewrite(f);
writeln(f,'Отсортированный вектор');
for i:=1 to 8 do
for j:=1 to 8-i do
if b[j]>b[j+1] then
begin
buf:=b[j+1];
b[j+1]:=b[j];
b[j]:=buf;
end;
for i:=1 to 8 do
write(f,b[i]:5:1,' ');
writeln(f);
CloseFile(f);
end;
end.