![]() |
|
|
|
|
#1
|
|||
|
|||
|
помогите плиз, вроде написал , а не работает. где ошибся? чего не хватает?
Каждая запись списка содержит пол, имя, возраст, рост, вес, а также требования к партнеру: наименьший и наибольший возраст, наименьший и наибольший вес, наименьший и наибольший рост. Объединить эти списки в список пар с учетом требований к партнерам без повторений. ниже код кнопки, которая обрабатывает данное событие : Код:
procedure TForm1.BitBtn1Click(Sender: TObject); var i,j,k:integer; begin j:=0; i:=0; k:=2; for i:=1 to 4 do for j:=5 to 10 do if (stringgrid2.Cells[i,k]>=stringgrid1.Cells[i,j]) and (stringgrid2.Cells[i,k]<=stringgrid1.Cells[i,j+1]) then k:=k+1; j:=j+2; memo1.Lines.add(StringGrid1.Cells[0, i]+StringGrid2.Cells[0, i]); i:=i+1 ; //else // i=i+1; end; end. Последний раз редактировалось Admin, 05.07.2015 в 18:11. |
|
#2
|
|||
|
|||
|
Код:
procedure TForm1.BitBtn1Click(Sender: TObject); var i,j,k:integer; begin j:=0; i:=0; k:=2; for i:=1 to 4 do for j:=5 to 10 do if (stringgrid2.Cells[i,k]>=stringgrid1.Cells[i,j]) and (stringgrid2.Cells[i,k]<=stringgrid1.Cells[i,j+1]) then BEGIN k:=k+1; j:=j+2; memo1.Lines.add(StringGrid1.Cells[0, i]+StringGrid2.Cells[0, i]); i:=i+1 ; //END else BEGIN // i=i+1; END; end; end. |
|
#3
|
|||
|
|||
|
[Error] Unit1.pas(80): Assignment to FOR-Loop variable 'j', вот ругается если добавляю begin end.
|
|
#4
|
||||
|
||||
|
Ну ругается то не на begin, а на то что вы внутри цикла пытаетесь его счетчиком управлять. В данном случае нельзя трогать i,j. За их изменение циклы отвечают.
|
|
#5
|
|||
|
|||
|
да я это понимаю, переделал вот так:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j,k:integer;
begin
j:=0; i:=0; k:=2;
for i:=1 to 4 do
for j:=5 to 10 do begin
if (stringgrid2.Cells[i,k]>=stringgrid1.Cells[i,j]) and
(stringgrid2.Cells[i,k]<=stringgrid1.Cells[i,j+1])
then begin k:=k+1; end; end;
memo1.Lines.add(StringGrid1.Cells[0, i]+StringGrid2.Cells[0, i]);
end;
end.Последний раз редактировалось lmikle, 05.07.2015 в 21:41. |
|
#6
|
||||
|
||||
|
И еще один существенный момент. StringGrid работает с данными типа строка, а ваше сравнение предполагает работу с числом. Сравнение строк могут дать совсем не тот результат, что вы ожидаете.
Например: 11 > 2 = True , но '11' > '2' = False |
|
#7
|
|||
|
|||
|
так??? подскажите как верно?
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var i,j,k:integer;
begin
j:=0; i:=1; k:=2;
//for i:=1 to 4 do
for j:=5 to 10 do begin
if (strtoint(stringgrid2.Cells[i,k])>=strtoint(stringgrid1.Cells[i,j])) and
(strtoint(stringgrid2.Cells[i,k])<=strtoint(stringgrid1.Cells[i,j+1]))
then begin k:=k+1; end; end;
memo1.Lines.add(StringGrid1.Cells[0, i]+StringGrid2.Cells[0, i]);
end;
end.lmikle: пользуемся тегами для оформления кода, иначе последуют санкции. Последний раз редактировалось lmikle, 05.07.2015 в 21:42. |