|
|
#1
|
|||
|
|||
Заполнение Грида
Доброго времени суток. При заполнении StringGrid-а я столкнулся с одной проблемой. Дан грид, с заполненными ячейками "молочного" цвета. Мне необходимо заполнить зеленые ячейки, начиная с правого верхнего угла по следующему принципу: Сравнивается сумма значений в двух ячейках сверху(зеленой и молочной) и справа(тоже зеленой и молочной), и минимальная сумма записывается в ячейку. Например, член матрицы
S[3,5]:=min((S[1,5]+H[2,5]),(S[3,7]+V[3,6])), где S-зеленые ячейки, а V,H-молочные( по горизонтали и вертикали соотв-но). А первая строка и последний столбец заполняется суммой предыдущей зеленой ячейки и молочной. Цикл я написал, но почему то заполняется только 2я строка. Помогите разобраться, пожалуйста. И еще вопрос, у меня сначала заполняется первая строка и последний столбец(зеленые ячейки), а потом остальные зеленые ячейки по нажатию отдельной кнопки. Объединить эти процедуры пытался, но не удалось. Возможно ли это? Вот код: Код:
procedure TForm1.Button4Click(Sender: TObject); var c,r:integer; begin c:=StringGrid1.ColCount-3; For r:=2 to StringGrid1.RowCount-1 do while (c>=1) do begin if (odd(r)=false) then begin S[r,c]:=min((strtoint(StringGrid1.Cells[c,r-2])+strtoint(StringGrid1.Cells[c,r-1])),(strtoint(StringGrid1.Cells[c+2,r])+strtoint(StringGrid1.Cells[c+1,r]))); StringGrid1.Cells[c,r]:=inttostr(S[r,c]); c:=c-2; end; end; end; |
#2
|
||||
|
||||
Цитата:
Код:
var c, r: Integer; begin for r := 2 to StringGrid1.RowCount - 1 do begin c := StringGrid1.ColCount - 3; while c >= 1 do begin ..... end; end; end; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
'Zanuda' (08.04.2014)
|
#3
|
|||
|
|||
Логично. Спасибо. Но теперь программа зависает... Буду дальше разбираться.
|
#4
|
||||
|
||||
Цитата:
Код:
var c, r: Integer; begin for r := 2 to StringGrid1.RowCount - 1 do begin c := StringGrid1.ColCount - 3; while c >= 1 do begin if not Odd(r) then begin ..... end; Dec(c, 2); end; end; end; |
#5
|
|||
|
|||
С заполнением ячеек разобрался.
А по поводу двух последовательных вычислений.. На одной кнопки это сделать нельзя, т.к. вторые расчеты зависят от первых. Я правильно понял? У меня лично не получилось.. Думаю сделать так, две кнопки наложить друг на друга, вторую сделать невидимой, пока не нажать первую, после чего первая становится инвизной. Бред конечно, немного, но умнее ничего придумать пока не могу. |
#6
|
||||
|
||||
Цитата:
|
#7
|
|||
|
|||
Можно в конце процедуры "первых расчетов" вызвать процедуру "вторых расчетов". Как то так )))
|