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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2013, 16:33   #1
Abay19941308
Пользователь
 
Регистрация: 29.10.2012
Сообщений: 64
По умолчанию Вопрсо по stringgrid

Имеется stringgrid с рандомными значениями
Н-р:
2 2 6 8 0 1
4 4 6 0 7 1
0 1 7 0 5 6
1 0 2 0 8 9
2 1 3 5 4 0
0 1 0 1 0 8

Необходимо среди нулей найти максимальную степень.
Степень вычисляется так:
Для каждого нулевого элемента матрицы Gij рассчитаем коэффициент Gi,j, который равен сумме наименьшего элемента i строки (исключая элемент Сi,j=0) и наименьшего элемента j столбца. Из всех коэффициентов Gi,j выберем такой, который является максимальным Gk,l=max{Gi,j}. В гамильтонов контур вносится соответствующая дуга (k,l).
Тоесть из матрицы выше:
I:=1; J:=5; =0 =>
В первой строке i минимальный элемент (не считая сам элемент [1,5]) равен 1
В пятом столбце j минимальный элемент (не считая сам элемент [1,5]) равняется 0
В итоге: 1+0=1
И так далее до конца пока не будут проверены все нули.
Из всех нулей выбрать тот у которого в итоге сумма минимальных элементов по строкам и столбцам будет самой большой.
Ответ вывести в edit.

По коду:
Не знаю как перейти на нужную строку и столбец stringgrid,
не трогая саму ячейку с нулем.

Код:
Код:
Min2:= StrToint(stringgrid3.Cells[1,2]);
  for i:=1 to stringgrid3.rowcount-1 do begin
    min2:=10000000;
    max:=0;
  for j:=1 to stringgrid3.Colcount-1 do begin

  if StringGrid3.Cells[i,j] = '' then Continue
  else
  if
  StringGrid3.Cells[i,j] = '0' then
  k2:=StrToIntDef(StringGrid3.Cells [stringgrid3.colcount-1,i],0);
  if k2<min2 then  min2:=k2;

  if (min2>max) then max:=min2;

 end;
 edit5.text:=IntToStr(min2);
 end;
Пожалуйста помогите!!!

Последний раз редактировалось Stilet; 27.10.2013 в 17:20.
Abay19941308 вне форума Ответить с цитированием
Старый 27.10.2013, 17:22   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
не трогая саму ячейку с нулем.
Вот эту фразу я не понял.
Цитата:
как перейти на нужную строку и столбец stringgrid,
Код:
with StringGrid do begin
 Row:=Строка;
 Column:=Столбец
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2013, 19:24   #3
Abay19941308
Пользователь
 
Регистрация: 29.10.2012
Сообщений: 64
По умолчанию

(не трогая саму ячейку с нулем. )
При нахождении минимального он не должен ее считать пропустить .


with StringGrid do begin
Row:=Строка;
Column:=Столбец
end;
Я незнаю точно где нах-ся эта ячейка с нулем так как значения заполняются
рандомно.
Мне нужно найти эту ячейку с нулем
StringGrid3.Cells[i,j] = '0' then (примерно так, правильно или нет я незнаю )

потом найти строку и столбец на пересечении которых эта ячейка с нулем нах-ся.
Найти сначала по строке и потом столбцу самое минимальное значение(не включая в поиск саму ячейку с нулем).
Сложить их. Итак с каждым нулем в stringgrid.
Далее из всех сложенных значений найти максимальное и записать в edit

Как видно на картинке ноль нах-ся на пересечении A1 и A3
по строке будет минимальный A5-A1
по столбцу A3-A4
складываем их получается 0+0=0

следующий ноль
A1 и A5
по строке будет минимальный А1-А3
по столбцу А2-А5
складываем их получается 0+0=0

и т.д
Потом среди них всех найти максимальное
Изображения
Тип файла: png Снимок.PNG (3.4 Кб, 102 просмотров)

Последний раз редактировалось Abay19941308; 27.10.2013 в 19:30.
Abay19941308 вне форума Ответить с цитированием
Старый 27.10.2013, 19:47   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
правильно или нет я незнаю
Ну правильно в общем то.
Код:
 if
  StringGrid3.Cells[i,j] = '0' then Это ячейка с нулем.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 27.10.2013, 20:00   #5
Abay19941308
Пользователь
 
Регистрация: 29.10.2012
Сообщений: 64
По умолчанию

Ну так как выбрать именно ту строку и столбец который мне нужен?
Abay19941308 вне форума Ответить с цитированием
Старый 27.10.2013, 20:49   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
With StringGrif do begin
 for i:=0 to RowCount-1 do begin
  for j:=0 to ColCount-1 do begin
    if Cells[i,j]='0' then begin
Если нуль то находим минимум в строке
     minR:=maxint;
      for q:=0 to ColCount-1 do 
       if (q<>j)and(StrToInt(Cells[i,q])<minR) then minR:=StrToInt(Cells[i,q]);
Потом в колонке
     minC:=maxint;
      for q:=0 to RowCount-1 do 
       if (q<>i)and(StrToInt(Cells[q,j])<minC) then minC:=StrToInt(Cells[q,j]);

    end;
  end;
 end;
end;
Я правильно понял?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 28.10.2013, 16:50   #7
Abay19941308
Пользователь
 
Регистрация: 29.10.2012
Сообщений: 64
По умолчанию

Да все правильно большое спасибо!!!
Abay19941308 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid torredo@inbox.ru Компоненты Delphi 1 17.10.2011 01:22
stringgrid lblondy Компоненты Delphi 1 07.06.2011 23:39
stringgrid+колесо мыши=>stringgrid.onclick aalleexxaa Общие вопросы Delphi 5 16.02.2011 16:58
StringGrid zmey31313 Помощь студентам 1 28.03.2010 15:18
StringGrid StartMis Общие вопросы Delphi 5 21.11.2008 15:11