Автор Тема: помогите, срочно! delphi  (Прочитано 4225 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн kissahell

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
помогите, срочно! delphi
« : 15 Января 2011, 18:12:35 »
Записать в новый массив отрицательные элементы, расположенные выше побочной диагонали матрицы, и определить их сумму

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.

Оффлайн kissahell

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: помогите, срочно! delphi
« Ответ #1 : 15 Января 2011, 18:40:52 »
упс... уже все =) нашла ошибку =)