Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit LevonKurs;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, Grids, Buttons, Menus;
- type
- TForm1 = class(TForm)
- StringGrid1: TStringGrid;
- Edit1: TEdit;
- Button1: TButton;
- Button2: TButton;
- StringGrid2: TStringGrid;
- Button3: TButton;
- BitBtn1: TBitBtn;
- Label1: TLabel;
- MainMenu1: TMainMenu;
- N1: TMenuItem;
- N2: TMenuItem;
- N3: TMenuItem;
- N4: TMenuItem;
- procedure Button1Click(Sender: TObject);
- procedure Button2Click(Sender: TObject);
- procedure Button3Click(Sender: TObject);
- procedure StringGrid1DrawCell(Sender: TObject;
- ACol, ARow: Integer; Rect: TRect;
- State: TGridDrawState);
- procedure StringGrid2DrawCell(Sender: TObject;
- ACol, ARow: Integer; Rect: TRect;
- State: TGridDrawState);
- procedure N3Click(Sender: TObject);
- procedure N2Click(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- type Tmatr=array [1..50] of array [1..50] of real;
- var
- Form1: TForm1;
- n,c:integer;
- matr:Tmatr;
- MaxCol, MaxRow : integer;
- implementation
- uses Unit2;
- {$R *.dfm}
- function findmax(var Matr: TMatr; var row, col: integer): real;
- var i: integer; max: real;
- begin
- max := Matr[1,1]; row := 1; col := 1;
- for i := 1 to n do
- begin
- //на главной диагонали
- if Matr[i, i] > max then
- begin
- max := Matr[i, i];
- row := i;
- col := i
- end;
- //на побочной диагонали
- if Matr[i, n-i+1] > max then
- begin
- max := Matr[i, n-i+1];
- row := i;
- col := n-i+1
- end;
- end;
- findmax := max;
- end;
- //создание и вывод матрицы на экран
- procedure TForm1.Button1Click(Sender: TObject);
- var i,j:integer;
- begin
- randomize;
- repeat
- val(Edit1.Text,n,c);
- if c<>0 then
- begin
- showmessage('Введите начальные данные!'); //Выводит сообщение если введено что-то по мими чис
- Edit1.Clear;
- Edit1.SetFocus;
- exit;
- end;
- if StrToInt(Edit1.Text) > 50 then //n не должно быть больше 50
- begin
- ShowMessage('Error!:Введите значения в диапозоне от 1 до 50');
- edit1.text:='';
- edit1.Setfocus;
- exit;
- end;
- n:=strtoint(edit1.text);
- if not odd(n) then //n должно быть нечетным
- begin
- showmessage('Введено неверное значение. Проверьте введенные данные!');
- edit1.text:=''; //Выводит текст если n четная
- edit1.Setfocus;
- exit;
- end;
- until odd(n);
- for i:=1 to n do
- for j:=1 to n do
- Matr[i,j]:=random*198-99;
- findmax(matr,MaxRow,MaxCol);
- for i:= 1 to n do
- for j:=1 to n do
- StringGrid1.Cells[j-1+1,i-1+1]:=FloatToStrF(matr[i,j],ffFixed,5,4);
- for i:=1 to n do begin
- StringGrid1.cells[0,0]:='Массив №1';
- StringGrid1.cells[0,i]:=''+inttostr(i);
- StringGrid1.cells[i,0]:=''+inttostr(i);
- StringGrid1.colCount:=n+1;
- StringGrid1.RowCount:=n+1;
- end;
- end;
- //обмен элементов и вывод результата на экран
- procedure TForm1.Button2Click(Sender: TObject);
- var buf:real;
- i,j,row,col:integer;
- begin
- if not odd(n) then //n должно быть нечетным
- begin
- showmessage('Введено неверное значение. Проверьте введенные данные!');
- edit1.text:=''; //Выводит текст если n четная
- edit1.Setfocus;
- exit;
- end;
- buf := matr[n div 2 + 1, n div 2 + 1];
- matr[n div 2 + 1, n div 2 + 1] := findmax(matr,row,col);
- matr[row, col] := buf;
- for i:= 1 to n do
- for j:=1 to n do
- StringGrid2.Cells[j-1+1,i-1+1]:=FloatToStrF(matr[i,j],ffFixed,5,4);
- for i:=1 to n do begin
- StringGrid2.cells[0,0]:='Массив №2';
- StringGrid2.cells[0,i]:=''+inttostr(i);
- StringGrid2.cells[i,0]:=''+inttostr(i);
- StringGrid2.colCount:=n+1;
- StringGrid2.RowCount:=n+1;
- end;
- end;
- //Окрашивание макс. зн. в первой матрице
- procedure TForm1.StringGrid1DrawCell(Sender: TObject;
- ACol, ARow: Integer; Rect: TRect;
- State: TGridDrawState);
- begin
- if (MaxCol =0) or (MaxRow=0) then Exit;
- if ((ACol= MaxCol)and(ARow= MaxRow)) then
- begin
- StringGrid1.Canvas.Brush.Color:=clRed;
- StringGrid1.Canvas.FillRect(Rect);
- StringGrid1.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid1.Cells[Acol,Arow]);
- end;
- end;
- //Окрашивание центра второй матрицы
- procedure TForm1.StringGrid2DrawCell(Sender: TObject;
- ACol, ARow: Integer; Rect: TRect;
- State: TGridDrawState);
- begin
- if (MaxCol =0) or (MaxRow=0) then Exit;
- if ((ACol= n div 2+1)and(ARow= n div 2+1)) then
- begin
- StringGrid2.Canvas.Brush.Color:=clRed;
- StringGrid2.Canvas.FillRect(Rect);
- StringGrid2.Canvas.TextOut(Rect.Left,Rect.Top,StringGrid2.Cells[Acol,Arow]);
- end;
- end;
- //Очистка данных
- procedure TForm1.Button3Click(Sender: TObject);
- var i: integer;
- begin
- Edit1.clear;
- with StringGrid1 do
- for i:=0 to ColCount-1 do
- Cols[i].Clear;
- with StringGrid2 do
- for i:=0 to ColCount-1 do
- Cols[i].Clear;
- end;
- procedure TForm1.N3Click(Sender: TObject);
- begin
- Close;
- end;
- procedure TForm1.N2Click(Sender: TObject);
- begin
- Form2.Show;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement