Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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.5 MB
Время: 0.022 c
15-1186466219
gn
2007-08-07 09:56
2007.09.09
Продвижение сайта.


2-1186691643
Ruffian
2007-08-10 00:34
2007.09.09
Прослушивание порта..


15-1186999718
SCL
2007-08-13 14:08
2007.09.09
Cоздание игр


4-1174241356
Sendick
2007-03-18 21:09
2007.09.09
USB-Flash


4-1174273508
Grademax
2007-03-19 06:05
2007.09.09
Как сделать, чтобы у exe-файла правильно отображались иконки...