Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ИПР 1 Вар.12

.pas
Скачиваний:
5
Добавлен:
01.04.2014
Размер:
4 Кб
Скачать
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure EditKeyPress(Sender: TObject; var Key: char);
    procedure StringGridKeyPress(Sender: TObject; var Key: char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  Nmax = 10;
  Mmax = 10;

type
  Mas1 = array[1..Nmax,1..Mmax] of real;
  Mas2 = array[1..Nmax] of real;
var
  Form1: TForm1;
  A: Mas1;
  Max,Min: Mas2;
  N,M,i,j,MaxInd,MinInd,k: byte;

implementation
{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
  N:=3;  // Число столбцов в массиве
  M:=3;  // Число строк в массиве
  Edit1.Text:=FloatToStr(N);
  Edit2.Text:=FloatToStr(M);
  StringGrid1.ColCount:= N+1;  // Задание числа столбцов в таблице
  StringGrid1.RowCount:= M+1;  // Задание числа строк в таблице
  for j:=1 to M do  //Заполнение левого столбца
    StringGrid1.Cells[0,j]:='j='+IntToStr(j);
  for i:=1 to N do  // Заполнение вехней строки
    StringGrid1.Cells[i,0]:='i='+IntToStr(i);
end;

procedure TForm1.Button1Click(Sender: TObject);  // Изменить размер таблицы
begin
  N:=StrToInt(Edit1.Text);
  M:=StrToInt(Edit2.Text);
  StringGrid1.ColCount:= N+1;  // Задание числа столбцов в таблице
  StringGrid1.RowCount:= M+1;  // Задание числа строк в таблице
  for j:=1 to M do  // Заполнение левого столбца
    StringGrid1.Cells[0,j]:='j='+IntToStr(j);
  for i:=1 to N do  // Заполнение вехней строки
    StringGrid1.Cells[i,0]:='i='+IntToStr(i);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  MaxStr,MinStr: string;
  MaxEl,MinEl: real;
begin
  try
  for j:=1 to M do  // Заполнение массива А элементами матрицы StringGrid1
    for i:=1 to N do
      A[i,j] := StrToFloat(StringGrid1.Cells[i,j]);
  except
    on ERangeError do begin ShowMessage('Выход за пределы массива. Уменьшите размер массива'); Exit; end;
    on EConvertError do begin ShowMessage('В ячейке отсутствует значение, либо число введено не правильно'); Exit; end;
    else begin ShowMessage('Возникла неизвестная исключительная ситуация!'); Exit; end;
  end;

  MaxEl:=A[1,1]; MaxInd:=1;
  MinEl:=A[1,1]; MinInd:=1;

  for j:=1 to M do  // Поиск строки с максимальным и минимальным элементоми
    for i:=1 to N do
      begin
        if A[i,j] >= MaxEl then begin MaxInd:=j; for k:=1 to N do Max[k]:=A[k,j]; end;
        if A[i,j] <= MinEl then begin MinInd:=j; for k:=1 to N do Min[k]:=A[k,j]; end;
      end;
  for i:=1 to N do begin A[i,MinInd]:=Max[i]; A[i,MaxInd]:=Min[i]; end;

  for j:=1 to M do  // Заполнение матрицы StringGrid1 элементами массива А
    for i:=1 to N do
      StringGrid1.Cells[i,j]:=FloatToStr(A[i,j]);

  for i:=1 to N do
    begin
      MaxStr:=MaxStr+'['+FloatToStr(Max[i])+']';
      MinStr:=MinStr+'['+FloatToStr(Min[i])+']';
    end;
  Label3.Caption:='Строка с максимальным элементом №'+IntToStr(MaxInd)+': '+MaxStr+#13+
                  'Строка с минимальным элементом №'+IntToStr(MinInd)+': '+MinStr;
end;

procedure TForm1.EditKeyPress(Sender: TObject; var Key: char);
begin
  case Key of
    #8,'0'..'9':    ;  //Разрешенные знаки для ввода
  else key := chr(0);  //Запрещение других знаков
  end;
end;

procedure TForm1.StringGridKeyPress(Sender: TObject; var Key: char);
begin
  case Key of
    #8,'0'..'9',',':;  //Разрешенные знаки для ввода
    #13: if StringGrid1.Col < StringGrid1.ColCount-1  // Переход в следующую ячейку по нажатию <Enter>
         then StringGrid1.Col := StringGrid1.Col +1
         else if StringGrid1.Row < StringGrid1.RowCount-1
              then begin StringGrid1.Row := StringGrid1.Row + 1; StringGrid1.Col := 1; end;
  else key := chr(0);
  end;
end;

end.