Записать в новый массив отрицательные элементы, расположенные выше побочной диагонали матрицы, и определить их сумму
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Math, ExtCtrls, Buttons, XPMan;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Edit1: TEdit;
StringGrid2: TStringGrid;
Button1: TButton;
Memo1: TMemo;
Label2: TLabel;
Label3: TLabel;
Label1: TLabel;
Panel1: TPanel;
BitBtn2: TBitBtn;
BitBtn3: TBitBtn;
BitBtn4: TBitBtn;
XPManifest1: TXPManifest;
BitBtn1: TBitBtn;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure Edit1Clear(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Type
TMas1 = Array[1..1] Of Extended;
PMas1=^TMas1;
TMas2 = Array[1..1] Of PMas1;
PMas2=^TMas2;
var
Form1: TForm1;
B:PMas1;
A:PMas2;
n:byte;
e:integer;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
var
i,j:byte;
begin
Form1.Caption:='Задание 5';
Label1.caption:='Записать в новый массив отрицательные элементы,';
Label2.caption:='расположенные выше побочной диагонали матрицы,';
Label3.caption:='и определить их сумму.';
Memo1.Clear;
Memo1.Text:='Вариант-3. ';
n:=6;
e:=0;
Edit1.Text:=intToStr(n);
Stringgrid1.Colcount:=7;
Stringgrid1.RowCount:=7;
Stringgrid2.Colcount:=7;
Stringgrid2.RowCount:=2;
Stringgrid1.Cells[0,0]:=' A ';
for j:=2 to n do
for i:=1 to j-1 do
inc(e);
For i:=1 To n Do
begin
Stringgrid1.Cells[i,0]:=' i = '+Inttostr(i);
Stringgrid1.Cells[0,i]:=' j = '+Inttostr(i);
end;
Stringgrid2.colcount:=e;
for i:=0 to e do
Stringgrid2.Cells[i,0]:=' i = '+Inttostr(i+1);
Memo1.Lines.Add('************************************************************************');
Memo1.Lines.Add(' Число элементов выше побочной диагонали матрицы = '+IntToStr(e));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:byte;
begin
for i:=1 to n do
for j:=1 to n do
stringGrid1.Cells[i,j]:='';
try
n:=Strtoint(Edit1.Text);
e:=0;
for j:=2 to n do
for i:=1 to j-1 do
inc(e);
if (n<=23) and (n>=3) then
begin
Panel1.Color:=clGradientInactiveCaption;
Stringgrid1.Colcount:=n+1;
Stringgrid1.RowCount:=n+1;
For i:=0 To n+1 Do
begin
Stringgrid1.Cells[i+1,0]:=' i = '+Inttostr(i+1);
Stringgrid1.Cells[0,i+1]:=' j = '+Inttostr(i+1);
end;
Stringgrid2.colcount:=e;
for i:=0 to e do
begin
StringGrid2.Cells[i,0]:=' i = '+Inttostr(i+1);
StringGrid2.Cells[i,1]:='';
end;
Memo1.Lines.Add(' Число элементов выше побочной диагонали матрицы = '+IntToStr(e));
end
else begin
Edit1.Text:='';
Edit1.Text:='Значение 3-23';
Panel1.Color:=clred;
Edit1.OnClick:=Edit1Clear;
end;
except
On EConvertError Do
begin
ShowMessage('В ячейке отсутствует значение, либо число введено не правильно. Значение 3-23');
Edit1.Text:='Значение 3-23';
Edit1.OnClick:=Edit1Clear;
Exit;
end;
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
If Not (Key In ['0'..'9',#8]) Then Key:=#0;
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
If Not (Key In ['0'..'9',#8,',','-']) Then Key:=#0;
end;
procedure TForm1.Edit1Clear(Sender: TObject);
begin
Edit1.text:='';
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
var
i,j:byte;
begin
for j:=1 to n do
for i:=1 to n do
stringGrid1.Cells[i,j]:=inttostr(random(39)-10);
end;
procedure TForm1.BitBtn3Click(Sender: TObject);
var
x:extended;
ib,i,j:byte;
begin
Try
GetMem(A,4*n);
GetMem(B,e*sizeof(extended));
for i := 1 to n do
GetMem(a,N*sizeof(extended));
ib:=0;
x:=0;
for i:=1 to n do
for j:=1 to n do
A[i,j]:=StrToFloat(StringGrid1.Cells[i,j]);
for i:=0 to n-3 do
for j:=1 to n-i+1 do
begin
if A[i,j]<0 then // в этом месте загвоздка.....
begin
inc(ib);
B[ib]:=StrToFloat(StringGrid1.Cells[i,j]);
StringGrid2.Cells[ib-1,1]:=FloattoStr(B[ib]);
x:=x+B[ib];
end;
end;
Memo1.Lines.Add(' Всего отрицательных элементов = '+FloatToStrF(ib,ffFixed,3,0));
Memo1.Lines.Add(' Сумма. отрицательных элементов = '+FloatToStrF(x,ffFixed,28,0));
Memo1.Lines.Add('*******************************************************');
Except
On ERangeError Do
Begin
ShowMessage('Выход за пределы массива. Уменьшите размер массива.');
Exit;
End;
On EConvertError Do
Begin
ShowMessage('В ячейке отсутствует значение, либо число введено не правильно');
Exit;
End;
Else Begin
ShowMessage('Возникла неизвестная исключительная ситуация!');
Exit;
End;
End;
for i:=1 to n do
FreeMem(a,N*sizeof(extended));
FreeMem(A,4*n);
FreeMem(B,e*sizeof(extended));
end;
procedure TForm1.BitBtn4Click(Sender: TObject);
var
i,j:byte;
begin
memo1.Clear;
memo1.Text:='Вариант-3. .';
Panel1.Color:=clGradientInactiveCaption;
n:=6;
Edit1.Text:=intToStr(n);
Stringgrid1.Colcount:=7;
Stringgrid1.RowCount:=7;
Stringgrid2.Colcount:=7;
Stringgrid2.RowCount:=2;
Stringgrid1.Cells[0,0]:=' A ';
e:=0;
for j:=2 to n do
for i:=1 to j-1 do
inc(e);
for i:=1 to n do
for j:=1 to n do
stringGrid1.Cells[i,j]:='';
For i:=1 To n Do
begin
Stringgrid1.Cells[i,0]:=' i = '+Inttostr(i);
Stringgrid1.Cells[0,i]:=' j = '+Inttostr(i);
end;
Stringgrid2.colcount:=e;
for i:=0 to e do
begin
Stringgrid2.Cells[i,0]:=' i = '+Inttostr(i+1);
stringGrid2.Cells[i,1]:='';
end;
Memo1.Lines.Add('*********************************************************');
Memo1.Lines.Add(' Количество элементов выше побочной диагонали матрицы = '+IntToStr(e));
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
form1.Close;
end;
end.