![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
проблема с алгоритмом
new_imat © (2007-08-17 00:34:00)всем привет! помогите разобраться,а то запутался в своем же коде.
смысл такой, в одном гриде в строчку числа: 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 17:47:00) [1]очень спасибо, то что надо, буду разбираться.
Есть хорошие люди на земле. Мож и я когда помогу :)
Gydvin (2007-08-17 16:01:00) [2]
var
x, a, b, c, d: integer;
t,t1:bool;
label ik;
Только это убери
Gydvin (2007-08-17 15:58:00) [3]Держи
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;
new_imat (2007-08-17 15:31:00) [4]типо того
я сначала заполнял грид
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:00) [5]мой код почти работает, надо довести до ума, чет не получатся
Gydvin (2007-08-17 14:49:00) [6]
> Числа в первом гриде всегда прогресируют
Тоесть идут так 1,2,3,4,5 и т.д, а не например так 5,4,3,2,1.
> в прямой последовательности
идут так 1,2,3,5 а не например так 1,3,2,4,5
new_imat (2007-08-17 11:52:00) [7]1. да сто
2. да с 1
3. не понял вопроса
4. нет не встречаются
Gydvin (2007-08-17 11:22:00) [8]4. Встречаются ли в первом гриде дубли?
Gydvin (2007-08-17 11:20:00) [9]1. Максимальное число в греде2 100?
2. Запись в первом гриде всегда начинается с 1?
3. Числа в первом гриде всегда прогресируют и в прямой последовательности?
new_imat (2007-08-17 01:09:00) [10]перечитал и вправду поршиво отписал :)
попробую иначе:
в обоих гридах 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
вроде так должно быть яснее
Zeqfreed (2007-08-17 00:51:00) [11]Сначала необходимо четко формализовать алгоритм. Опиши зависимость нижней последовательности от верхней. Только не так, как в [0] :)
new_imat (2007-08-17 00:43:00) [12]xz := 100;