Текущий архив: 2007.09.09;
Скачать: CL | DM;
Вниз
проблема с алгоритмом Найти похожие ветки
← →
new_imat (2007-08-17 00:34) [0]всем привет! помогите разобраться,а то запутался в своем же коде.
смысл такой, в одном гриде в строчку числа: 1 2 3 4 7 8 9
во второй грид я должен записать числа, которые зависят от порядка в гриде1.
начинаем звписывать во второй грид начиная со 100
при имеющихся в гриде1: 1 2 3 4 7 8 9
в гриде2 должно получиться: 100 99 98 97 97 97 96 95
так как в гриде1 пропущены числа 5 и 6, то пишем в гриде2 предыдущее число, после 7 идет 8 - значит уже на одну меньше в грид2
вот код, но что голова уже опухла:var
i:Integer;
xz,t,df:Integer;
xzz:Integer;
begin
t := 0;
xz := 50;
df := 0;
for i:=0 to StringGrid2.ColCount do
begin
if StringGrid1.Rows[0].Strings[i] <> "" then
if t = 1 then
begin
xzz := xzz - 1;
end else begin
xzz := StrToInt(StringGrid1.Rows[0].Strings[df])-t;
Inc(df);
end;
if i+1 = xzz then
begin
Dec(XZ);
StringGrid2.Rows[0].Strings[i] := IntToStr(XZ);
t:=0;
end else
begin
t:=1;
StringGrid2.Rows[0].Strings[i] := IntToStr(XZ);
end;
end;
← →
new_imat (2007-08-17 00:43) [1]xz := 100;
← →
Zeqfreed © (2007-08-17 00:51) [2]Сначала необходимо четко формализовать алгоритм. Опиши зависимость нижней последовательности от верхней. Только не так, как в [0] :)
← →
new_imat (2007-08-17 01:09) [3]перечитал и вправду поршиво отписал :)
попробую иначе:
в обоих гридах rowcount = 1;
в гриде1 имеются числа: 1 2 3 4 7 8 9 10
берем число 1, оно первое так что смело пишем в грид2 число 100,
берем число 2, записывем в грид2 число 99
берем число 3, записывем в грид2 число 98
берем число 4, записывем в грид2 число 97
берем число 7, значит нету числа 5 и 6.
в грид2 записываем 97(для 5), потом еще раз 97(для 6)
затем идет число 8, все нормально т.к. после 7 идет 8 :) записываем в грид число 96
берем число 9, записывем в грид2 число 95
берем число 10, записывем в грид2 число 94
и т.д. по идее такие пропущенные числа как 5 и 6 будт встречаться довольно часто.
в итоге порлучаем в гриде2 :
100 99 98 97 97 97 96 95 94
если бы в гриде были числа
1 2 3 4 7 8 10
то
в гриде2 были бы след. числа:
100 99 98 97 97 97 96 96 95
вроде так должно быть яснее
← →
Gydvin © (2007-08-17 11:20) [4]1. Максимальное число в греде2 100?
2. Запись в первом гриде всегда начинается с 1?
3. Числа в первом гриде всегда прогресируют и в прямой последовательности?
← →
Gydvin © (2007-08-17 11:22) [5]4. Встречаются ли в первом гриде дубли?
← →
new_imat (2007-08-17 11:52) [6]1. да сто
2. да с 1
3. не понял вопроса
4. нет не встречаются
← →
Gydvin © (2007-08-17 14:49) [7]
> Числа в первом гриде всегда прогресируют
Тоесть идут так 1,2,3,4,5 и т.д, а не например так 5,4,3,2,1.
> в прямой последовательности
идут так 1,2,3,5 а не например так 1,3,2,4,5
← →
new_imat (2007-08-17 15:31) [8]типо того
я сначала заполнял грид
for i:=0 to stringgrid1.colcount -1 do begin
stgringgrid1.rows[0].strings[i]:=inttostr(i+1);
end;
1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
потом очищал рэндомно несколько ячеек, врезультате получалось:
(например)
1,2,3,4,7,8,9,10,14,15
удалились числа 5,6,11,12,13
в гриде 2 должно получиться
100,99,98,97,97,97,96,95,94,93,93,93,93,92,91
← →
new_imat (2007-08-17 15:31) [9]мой код почти работает, надо довести до ума, чет не получатся
← →
Gydvin © (2007-08-17 15:58) [10]Держи
procedure TForm1.Button1Click(Sender: TObject);
var
x, a, b, c, d: integer;
t,t1:bool;
label ik;
begin
a := StringGrid1.ColCount - 1;
while StringGrid1.Cells[a, 1] = "" do
begin
dec(a);
if a < 1 then
begin
showmessage("Савсем пустой строк!");
exit;
end;
end;
c := strtoint(StringGrid1.Cells[a, 1]);
StringGrid2.ColCount := c + 1;
a := 0;
b := 100;
x := 0;
d := 0;
t:=false;
t1:=false;
while x < StringGrid1.ColCount - 1 do
begin
inc(x);
if StringGrid1.Cells[x, 1] <> "" then
begin
inc(d);
inc(a);
c := strtoint(StringGrid1.Cells[x, 1]);
if a < c then
while a < c do
begin
if t then StringGrid2.Cells[d, 1] := inttostr(b+1)else
StringGrid2.Cells[d, 1] := inttostr(b);
inc(a);
inc(d);
if not(t1) then t1:=true;
end;
if (not(t))and(t1) then dec(b);
StringGrid2.Cells[d, 1] := inttostr(b);
dec(b);
if not(t)then t:=true;
end;
end;
end;
← →
Gydvin © (2007-08-17 16:01) [11]
var
x, a, b, c, d: integer;
t,t1:bool;
label ik;
Только это убери
← →
new_imat (2007-08-17 17:47) [12]очень спасибо, то что надо, буду разбираться.
Есть хорошие люди на земле. Мож и я когда помогу :)
Страницы: 1 вся ветка
Текущий архив: 2007.09.09;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.039 c