Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.12.2010, 19:50   #1
Mir@cle
Новичок
Джуниор
 
Регистрация: 13.12.2010
Сообщений: 1
По умолчанию Задача StringGrid, требуется закрасить ячейку по координатам

Помогите плиз.....


Задача такая:

Надо спомощью нормального распеделения, заполнить таблицу случайными числами, потом построить рисунок в котором чем число меньше, тем светлее(это я сделала), а вот потом надо рассчитать координаты максимума и закрасить его в таблице(вот тут проблемы). Координаты нахожу, иначе не смогла бы построить рисунок, а вот закрасить в StreanGreat не получается=((

Помогите пожалуйста!!!!!!!!!!!!!!!


Вот код проги:

procedure TForm1.Button1Click(Sender: TObject);
var
i,j,n,m,xmax,ymax:Integer;
rx,ry,min,max,d:extended;
x,e:array [0..100,0..100] of real;
begin
тут тож косяк(надо проверить, чтобы в Edit вводились только целые)
try
begin
m:= StrToInt(edit1.Text);
n:= StrToInt(Edit2.Text);
end
except on eException do ShowMessage('ввведите натуральные числа')
end;
if (m=1) and (n=1) then //проверка дробных, положительный и не едениц
begin
ShowMessage('Нельзя водить две единицы');
exit; end;
if (m<0) or (n<0) then
begin
ShowMessage('только натуральные числа');
exit;
end;
stringGrid1.ColCount:=m;
StringGrid1.RowCount:=n;
rx:=StrToFloat(edit3.Text);
ry:=StrToFloat(Edit4.Text); //проверка коф. корреляции
if ((rx<0) or (rx>1)) or ((ry<0) or (ry>1)) then
begin
ShowMessage('коэффициенты корреляции должны быть от 0 до 1');
exit;
end;
for i:=0 to m do
for j:=0 to n do // заполнение таблицы
x[i,j]:=gause(0,1);
e:=x;
for i:=1 to m do //фильтрация по х
for j:=0 to n do
e[i,j]:=rx*e[i-1,j]+sqrt(1-rx*rx)*x[i,j];
x:=e;
for i:=1 to m do //фильтрация по у
for j:=1 to n do
x[i,j]:=ry*x[i,j-1]+sqrt(1-ry*ry)*e[i,j];
min:=x[1,1];
max:=min;
for i:=1 to m do //заполнение массива
for j:=1 to n do
begin
StringGrid1.Cells[i-1,j-1]:=FloatToStr(x[i,j]); //выявление максимума и минимума
if x[i,j]>max then begin xmax:=i; ymax:=j;max:=x[i,j];end;
if x[i,j]<min then min:=x[i,j];
end;
(тут начинаются чудеса=) есть два варианта...но где-то косяк=() with StringGrid1.canvas do
{if StringGrid1.Cells[i,j]=FloatToStr(max) then
begin
Font.Color:=clRed;
StringGrid1.Canvas.Brush.Color:=clY ellow;
FillRect(Rect);
end;}
{if (xmax=i) and (ymax=j) then
with StringGrid1.Canvas do
begin
Brush.Color:=clBlue;
//Font.Size:=Font.Size+2;
//Font.Color:=clYellow;
TextOut(Rect.Left+2,Rect.Top+2,Stri ngGrid1.Cells[xmax,ymax]);
end;}
p.Width:=m*7+(m+1)*2; //формирование размеров рисунка
p.Height:=n*7+(n+1)*2;
d:=max-min;
p.Canvas.Brush.Color:=clFuchsia; // цвет заливки
p.Canvas.FillRect(p.ClientRect);
for i:=1 to m do // формирование рисунка
for j:=1 to n do
begin
p.Canvas.Brush.Color:=RGB(trunc((x[i,j]-min)*255/d),trunc((x[i,j]-min)*255/d),trunc((x[i,j]-min)*255/d));
p.Canvas.FillRect(Rect(2+9*(i-1),2+9*(j-1),9+9*(i-1),9+9*(j-1)));
end;
end;


Посоветуйте, кто что может....
Mir@cle вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переход в следующую ячейку в StringGrid artemavd Общие вопросы Delphi 3 25.12.2010 23:20
Закрасить ячейки в строках StringGrid в потоках fredwriter Общие вопросы Delphi 12 17.11.2010 19:06
CheckBox в ячейку StringGrid mutabor Общие вопросы Delphi 0 23.08.2010 10:54
требуется вывести прямоугольник и строку по координатам из файла zmaxon Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 15.01.2010 09:59
Задача Паскаль. Поиск квадранта по координатам. Maks_X Помощь студентам 6 14.10.2009 00:35