{$R *.DFM}
Type
Mas=array[1..1] integer; // масив цілочисельних значень
pMas=array[1..1] ^mas; // масив покажчиків
var // оголошення глобальних змінних
pA:^pMas; // покажчик на масив покажчиків
m,n,max,min:integer;
procedureTForm1.FormCreate(Sender: TObject);
Begin
m:=6; // початкове значення m
n:=8; // початкове значення n
SpinEdit1.Text:='6';
SpinEdit2.Text:='8';
StringGrid1.RowCount:=m; // кількість рядків
StringGrid1.ColCount:=n; // кількість стовпців
end;
procedure TForm1.SpinEdit1Change(Sender: TObject);
Begin
m:=StrToInt(SpinEdit1.Text); // m привласнюється вміст поля редактора
StringGrid1.RowCount:=m;
end;
procedure TForm1.SpinEdit2Change(Sender: TObject);
Begin
n:=StrToInt(SpinEdit2.Text); // n привласнюється вміст поля редактора
StringGrid1.ColCount:=n;
end;
procedure TForm1.Button1Click(Sender: TObject);
label 1;
Var
i,j,k,l,r:integer;
Begin
Randomize; // ініціалізація датчика випадкових чисел
GetMem(pA,4*m); // виділення пам'яті для масиву з m покажчиків
fori :=1 to m do
begin // формування i-й рядка масиву
{ Виділення пам'яті для n елементів i-й рядка}
GetMem(pA^[i],SizeOf(integer)*n);
pA^[1]^[1]:=Random(1000); // випадкове ціле число занести в масив
forj:=1 to n do
begin // формування j-го елементу рядка
1: r:=Random(1000); // генерація випадкового числа
forдо:=1 to i do
forl:=1 to j do
ifr=pA^[k]^[l] then// якщо таке число вже є в масиві тоді...
goto 1;
pA^[i]^[j]:=r; // випадкове число занести в масив
end;
end;
fori:=1 to m do // елементи масиву занести в осередки
forj:=1 to n do// компоненту StringGrid1
StringGrid1.Cells[j-1,i-1]:=IntToStr(pA^[i]^[j]);
{ Пошук min і max значень серед елементів масиву}
max:=pA^[1]^[1];
min:=max;
fori:=1 to m do
forj:=1 to n do
ifpA^[i]^[j]<min then
min:=pA^[i]^[j]
Else
ifpA^[i]^[j]>max then
max:=pA^[i]^[j];
Label7.Caption:=IntToStr(min); // висновок min значення
Label9.Caption:=IntToStr(max); // висновок max значення
fori:=1 to m do
{ Звільняє пам'яті, займаної n елементами i-й рядка}
FreeMem(pA^[i],SizeOf(integer)*n);
{ Звільнення пам'яті, займаної масивом з m покажчиків}
FreeMem(pA,4*m);
end;
procedure TForm1.StringGrid1DrawCell(Sender: TObject; Col, Row: Integer;
Rect: TRect; State: TGridDrawState);
Begin
withStringGrid1.Canvas do
ifStringGrid1.Cells[Col,Row]=IntToStr(min) then // якщо елемент осередку
begin // рівний min тоді...
Brush.Color:=clGreen; // встановити колір зелений
FrameRect(Rect); // виділити межі осередку заданим кольором
End
Else
ifStringGrid1.Cells[Col,Row]=IntToStr(max) then // якщо елемент осередку
begin // рівний max тоді...
Brush.Color:=clRed; // встановити колір кисті червоний
FrameRect(Rect); // виділити межі осередку заданим кольором
End
end;
End.