Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

проблема с алгоритмом


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;


Наверх

Титульная страница Поиск, карта сайта Написать письмо