|
#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. |