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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.11.2014, 23:02   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
незнаю как сделать
Так вот тебе сначала нужно придумать алгоритм расчета частот значений. А уже потом все остальное.
Мне к примеру на ночь глядя в голову ничего не приходит кроме создания динмассива или списка. Что-то типа.
Код:
unit Unit1;

{$mode objfpc}{$H+}

interface

uses  contnrs,
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids;

type

  { TForm1 }
  TElem=class
    Val,cnt:integer;
  end;

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
      aRect: TRect; aState: TGridDrawState);
  private
    l:TObjectList;
    Function Find(n:integer):Boolean;
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.FormCreate(Sender: TObject);
var k,i,j:integer;
begin
 l:=TObjectList.create(free); //Список элементов
 //Заполним грид
 with StringGrid1 do
  for i:=0 to RowCount-1 begin
    for j:=0 to ColCount-1 begin
     Cells[j,i]:=IntToStr(Random(5));
    end;
  end;

//Заполним список элементов их количествами
with StringGrid1 do
 for i:=0 to RowCount-1 begin
   for j:=0 to ColCount-1 begin
    k:=StrToInt(Cells[j,i]);
    if not Find(k) then with TElem(l[l.Add(TElem.Create)]) do begin
      cnt:=0; Val:=k;
    end;
   end;
 end;

//Тут пройти по l в поисках самого максимума
//И записать его индекс или значение в некую переменку
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  l.Free;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; aCol, aRow: Integer;
  aRect: TRect; aState: TGridDrawState);
begin
 //Которую потом тут сверять.
end;

function TForm1.Find(n: integer): Boolean;
var i:integer;
begin
 //Тут ищем элемент. Если находим - увеличиваем его кол-во
 Result:=false;
 for i:=0 to l.Count-1 do
  if TElem(l[i]).Val=n then begin inc(TElem(l[i]).cnt); result:=true; exit; end;
end;

end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2014, 23:40   #12
alman12
Форумчанин
 
Регистрация: 30.12.2013
Сообщений: 466
По умолчанию

ошибку выдает везде
l:TObjectList;
alman12 вне форума Ответить с цитированием
Старый 15.11.2014, 23:47   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Потому что нужен модуль contnrs )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.11.2014, 23:59   #14
alman12
Форумчанин
 
Регистрация: 30.12.2013
Сообщений: 466
По умолчанию

как выделить значения ?
alman12 вне форума Ответить с цитированием
Старый 16.11.2014, 09:10   #15
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Для начала пройдись циклом по списку и найди максимальное значение среди количеств. Если брать мой пример то:
Код:
for i:=0 to l.Count-1 do if l[imax].cnt<l[i].cnt then imax:=i;
Это даст тебе самое частое значение: l[imax].Val;
Вот в событии отрисовки его и сверяй с теем что в ячейке грида.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.11.2014, 22:01   #16
alman12
Форумчанин
 
Регистрация: 30.12.2013
Сообщений: 466
По умолчанию

for i:=0 to l.Count-1 do if l[imax].cnt<l[i].cnt then imax:=i;
StringGrid1.SetFocus;

как сделать ?

l:=TObjectList.create(free)

ошибка

очен много ошибок выдает
Код:
var k,i,j:integer;
begin
 l:=TObjectList.create(free); //Список элементов
 //Заполним грид
 with StringGrid1 do
  for i:=0 to RowCount-1 begin
    for j:=0 to ColCount-1 begin
     Cells[j,i]:=IntToStr(Random(5));
    end;
  end;
ощибку выдает

Последний раз редактировалось Stilet; 17.11.2014 в 08:17.
alman12 вне форума Ответить с цитированием
Старый 17.11.2014, 14:19   #17
alman12
Форумчанин
 
Регистрация: 30.12.2013
Сообщений: 466
Печаль

помогите !
alman12 вне форума Ответить с цитированием
Старый 17.11.2014, 14:54   #18
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
как сделать ?

l:=TObjectList.create(free)
Тупо в справке посмотеть параметры метода Create класса TObjectList
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 17.11.2014, 15:01   #19
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А что в Делфи еще не прикрутили? Ну извиняюсь, в Лазарусе эта плюха уже есть ))
И кстати я там ошибся ))) Надо было написать True, а я с чего-то free влепил
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.11.2014, 15:04   #20
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Есть и в делфи, даже два конструктора, один из них с булевским параметром
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос повторяющихся значений Artem_85 Microsoft Office Excel 6 07.11.2012 13:49
удаление из таблицы повторяющихся значений CodeNOT PHP 2 28.03.2011 12:01
Удаление повторяющихся значений в строке aimk0 Помощь студентам 7 11.10.2010 16:58
Подсчет повторяющихся значений поля JSilver БД в Delphi 9 04.03.2009 10:34
Поиск повторяющихся значений Flangini Microsoft Office Excel 23 22.02.2008 15:57