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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2009, 21:00   #1
MaksimSeriy
 
Регистрация: 31.03.2009
Сообщений: 8
Вопрос StringGrid(поиск среднестатистического элемента)

Среднестатистическим назовем элемент массива, если для него модуль разности его значения и среднего арифметического элементов массива достигает минимума. В заданном массиве Х(n, m) найти номера (индексы) среднестатистического элемента.
Ниже я привел код своей процедуры, данные нужно вводить в StringGrid_In, а рез-т должен отображаться в StingGrid_Out
Помогите разобраться как найти индекс среднестатистического элемента в двухмерном массиве

procedure TForm1.BitBtn_OkClick(Sender: TObject);
var n, m, i, j, fix_n, fix_m: integer;
sa, sum: real;
kmin:real;
a: array of array of real;
begin

n:=StringGrid_In.ColCount;
m:=StringGrid_In.RowCount;
fix_n:=StringGrid_In.FixedCols;
fix_m:=StringGrid_In.FixedRows;
SetLength(a,n-fix_n);
for i:=0 to n-fix_n-1 do
SetLength(a[i],m-fix_m);

for i:= fix_n to n-1 do
for j:= fix_m to m-1 do
a[i-fix_n,j-fix_m]:= StrToFloat(StringGrid_In.Cells[i,j]);
sum:=0; //
for i:=1 to n-1 do
for j:=1 to m-1 do
sum:=sum+a[i-fix_n,j-fix_m]; //сумма всех элементов массива
sa:=(sum)/((n-fix_n)*(m-fix_m)); //среднее арифметическое
kmin:=i;
for i:=2 to n-1 do
for j:=2 to m-1 do
if abs(a[i-fix_n,j-fix_m]) < abs(kmin - sa) then //неудачная попытка
kmin:=i-fix_n;


n:=StringGrid_Out.ColCount;
m:=StringGrid_Out.RowCount;
fix_n:=StringGrid_Out.FixedCols;
fix_m:=StringGrid_Out.FixedRows;
//вывод результата в StringGrid_Out
for i:= fix_n to n-1 do
for j:= fix_m to m-1 do
StringGrid_Out.Cells[i,j]:= FloatToStr(kmin);
end;


end.

Последний раз редактировалось MaksimSeriy; 08.04.2009 в 22:31.
MaksimSeriy вне форума Ответить с цитированием
Старый 08.04.2009, 23:53   #2
Niarb
Пользователь
 
Регистрация: 23.02.2009
Сообщений: 38
По умолчанию

...думаю из примера будет всё ясно, но
в данном примере очень важно чтоб количество строк и столбцов совпадало в обоих СтрингГридах, и FixedCols=1 и FixedRows=1


...
sg1: TStringGrid;
sg2: TStringGrid;
...
Код:
function MStrToFloat(s: string): real;
var d: string;
begin
   // избавляет от зависимости разделителя дробной части
   d:=DecimalSeparator;
   if d=',' then begin
      while Pos('.',s)>0 do
         s[Pos('.',s)]:=',';
   end;
   if d='.' then begin
      while Pos(',',s)>0 do
         s[Pos(',',s)]:='.';
   end;
   try
      Result:=StrToFloatDef(s,0);
   except
   on exception do
      Result:=0;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var i, j: integer;
    sa: real; // среднеарифметическое
    sum: real; // сумма всех элементов
    kmin: real; // среднестатистическое
    a: real; // для вычислений
begin
   sum:=0;
   kmin:=0;
   for i:=1 to sg1.ColCount-1 do
      for j:=1 to sg1.RowCount-1 do begin
         sum:=sum+MStrToFloat(sg1.Cells[i,j]);
         kmin:=kmin+abs(MStrToFloat(sg1.Cells[i,j]));  // макисмум для kmin
      end;
   sa:=sum/((sg1.ColCount-1)*(sg1.RowCount-1));
   for i:=1 to sg1.ColCount-1 do
      for j:=1 to sg1.RowCount-1 do begin
         a:=abs(mStrToFloat(sg1.Cells[i,j])-sa);
         if kmin>a then
            kmin:=a;
      end;
   // выводим соответствующие элементы начального массива
   for i:=1 to sg1.ColCount-1 do
      for j:=1 to sg1.RowCount-1 do begin
         a:=abs(mStrToFloat(sg1.Cells[i,j])-sa);
         if a=kmin then begin
            sg2.Cells[i,j]:=sg1.Cells[i,j];
         end;
      end;
end;
Чем меньше вы знаете, тем больше я ценен как специалист...
Niarb вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С++ Двухмерные массивы rus_rock_no_dead Помощь студентам 4 23.05.2010 23:21
Двухмерные массивы(StringGrid) MaksimSeriy Общие вопросы Delphi 3 06.04.2009 01:27
про двухмерные массивы alexov Общие вопросы C/C++ 7 07.12.2008 21:03
Двухмерные массивы (С++) Nattka Помощь студентам 2 04.12.2008 21:15
Двухмерные массивы - ошибка fudzy79 Помощь студентам 21 06.02.2008 22:50