Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];

Вниз

проблема с алгоритмом   Найти похожие ветки 

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.041 c
11-1169207916
kichrot
2007-01-19 14:58
2007.09.09
Вывод окна по комбинации клавишь по-верх активного раб. стола ТС.


15-1187008950
Галинка
2007-08-13 16:42
2007.09.09
Visual C# Express Edition .net 2008 пробовал кто?


2-1187530868
DelphiKettle
2007-08-19 17:41
2007.09.09
Открыть с помощью...


2-1186460092
bagos
2007-08-07 08:14
2007.09.09
teechart


15-1186563478
vitv
2007-08-08 12:57
2007.09.09
NForce4+GF7300Gt-глюк





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский