Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.11.04;
Скачать: CL | DM;

Вниз

Маленькая помощь в скромной задачке :)   Найти похожие ветки 

 
неугомонный   (2007-10-11 00:18) [0]

Мастера прошу помоч в написании кода. Задачка такая на форме 2 стринггрида. stringgrid2 содержит немного измененные данные из stringgrid1 поэтому colcount у них одинаковый.
оба грида rowcount = 1.

Покажу на примере чего мне надо добиться.
Допустим в stringgrid1.colcount := 5;
и содержит числа 32,31,1,32,31

числа 32 и 31 повторились поэтому в stringgrid2 должны записаться данные в таком виде:
32,31,1,$32,$31

а если было множество такое
32,31,1,32,5
то в результате в stringgrid2 получилось вот что:
32,31,1,#32,5  -- так потому что 5 - новое(его нет во множестве)

вот еще пару примерчиков:
5,31,19,31 -> 5,31,19,$31
31,19,31,27 -> 31,19,#31,27
37,37,27,28,29,27,21 -> 37,#37,27,28,29,#27,21
37,37,27,28,29,27,21,29 -> 37,#37,27,28,29,#27,21,$29


 
Leonid Troyanovsky ©   (2007-10-11 09:40) [1]


> неугомонный   (11.10.07 00:18)  

> оба грида rowcount = 1.

И почему не один грид с двумя строками?


> 31,19,31,27 -> 31,19,#31,27

Здесь 4 столбца

> 37,37,27,28,29,27,21 -> 37,#37,27,28,29,#27,21

Здесь 7 столбцов

Чего-то мутное объяснение.

Что такое множество, что значит "новое"
и чем # отличается от $

Объясняйся проще, на кастрюльках.

--
Regards, LVT.


 
evvcom ©   (2007-10-11 09:51) [2]


> прошу помоч в написании кода

сам-то хоть чего-нибудь написал? или тебе весь код надо? Тогда деньги вперед.


 
Leonid Troyanovsky ©   (2007-10-11 10:07) [3]


> evvcom ©   (11.10.07 09:51) [2]

>  Тогда деньги вперед.

Деньги вперед задачи? :)
А вдруг, она не очень скромная?

--
Regards, LVT.


 
ASoft   (2007-10-11 10:11) [4]


> неугомонный   (11.10.07 00:18)

закономерности не улавливаю.. зачем плодить colcount, когда можно обойтись строками (ячейками), хотя, мож, задача принципиально так поставлена..
И наконец, # и $, здесь автор, возможно, опечатался...


> evvcom ©   (11.10.07 09:51) [2]
>

Нет автора, нет проблем:-)


 
Leonid Troyanovsky ©   (2007-10-11 10:20) [5]


> ASoft   (11.10.07 10:11) [4]

> И наконец, # и $, здесь автор, возможно, опечатался...

.. Подскользнулась и упала на вилку.
И так двенадцать раз подряд.

--
Regards, LVT.


 
Anatoly Podgoretsky ©   (2007-10-11 10:31) [6]


> # и $, здесь автор, возможно, опечатался...

Ничего не опечатался, первое в рублях, а второе в долларах.


 
неугомонный   (2007-10-11 10:35) [7]

всем доброе утро!
начнем по порядку.
> И почему не один грид с двумя строками?
можно и один,суть не меняется.

кол-во столбцев зависит от кол-ва чисел во множестве.
здесь вроде все понятно. (т.е. даю множество из 4 чисел,значит и столбцев будет четыре). Множество это и есть последовтельность чисел которые я задаю (например 31,19,31,27),а новое множество это после анализа (31,19,#31,27)

> И наконец, # и $, здесь автор, возможно, опечатался...

нет не опечатался такая задумка

попробую еще раз объяснить: возьмем множество 31,19,31,27 - видим что в нем один повтор - 31, все создаем новое множество(ставим # потому что 27 последнее не повторялось) и получается 31,19,#31,27.

возьмем еще множество 37,37,27,28,29,27,21 ... хм...
повторились числа 37,27, но так как 21 - последняя не является повтором то 32 и 27 присоединяют #, получается 37,#37,27,28,29,#27,21.

Возьмем посложней множество:37,37,27,28,29,27,21,29, так млин тут такая ситуация, 37,27,29 - повторы. Но! последнее число (29) - повтор, значит
новое множество принимает вид: 37,#37,27,28,29,#27,21,$29.
Если бы после 29 было например число - 5 (оно является новым во множестве и не будет повтором) то множество имело бы вид:
37,#37,27,28,29,#27,21,#29,5.

А если бы после 29 стояло число 28 то оно бы являлось повтором во множестве. Вид был бы такой 37,#37,27,28,29,#27,21,$29,$28.
Опять же новое число(не повторяющееся во множестве) изменила бы $ на # -- 37,#37,27,28,29,#27,21,#29,#28,14


 
ЮЮ ©   (2007-10-11 10:43) [8]

Ну и где решение автора?
Или он Delphi совершенно не владеет?


 
Ping   (2007-10-11 10:50) [9]

Вот что я думаю по этому поводу: ты или гений, или идиот.
Если тем, что собираешься реализовать, будешь пользоваться только ты, то, скорее - первое.
Если же ты собираешься впаривать это другим - то, видимо, второе; хотя, не исключено, что ты гений в квадрате...

P.S. Когда и если ты получишь Нобелевскую премию - не забудь поделиться. :-)

P.P.S. Хотя, обработка чисел в строках, да еще и именование тобою индексного массива "множеством", склоняет меня ко второму выводу.

P.P.P.S. Сформулируй задачу корректно. Правильно поставленный вопрос - уже половина ответа. Для начала - не "как я хочу это сделать", а "что мне надо". "Как я делаю" - уже понятно, но непонятно зачем.


 
Leonid Troyanovsky ©   (2007-10-11 10:51) [10]


> неугомонный   (11.10.07 10:35) [7]

> здесь вроде все понятно.

Хорошо, как мы поняли, где ставить нужные пометки
тебе понятно.

Ну, а в чем затруднения?

--
Regards, LVT.


 
Max_   (2007-10-11 10:58) [11]

школьное задание?


 
Dennis I. Komarov ©   (2007-10-11 11:12) [12]

> Ну, а в чем затруднения?

Ну на лекции не ходим же.

> [11] Max_   (11.10.07 10:58)

Скорее зачет или лаба.


 
evvcom ©   (2007-10-11 11:19) [13]


> А вдруг, она не очень скромная?

Может быть, но мой телепатор после капремонта вроде уловил, чего ему надо. Нескромного не обнаружено :)

> Anatoly Podgoretsky ©   (11.10.07 10:31) [6]
> > # и $, здесь автор, возможно, опечатался...
> Ничего не опечатался, первое в рублях, а второе в долларах.

А... это гонорар за решение частей задачи? :)
2неугомонный: так где ответ на [2]?
Жаль, что мы так и не услышали начальника транспортного цеха (с) :-)


 
koha   (2007-10-11 12:37) [14]

Мне просто делать нех...й было нечего решил мозги размять ушло 15 мин. вместе с включением компа.

procedure TForm1.BitBtn1Click(Sender: TObject);
Var c,d,e: integer;
   fp: boolean; //флаг повтора
begin
 //при условии что стринг грады одинаковы в кол элементов,
 for c:=1 to StGrid2.RowCount -1 do begin
   fp:=false;
   for d:=0 to StGrid2.ColCount -1 do begin
     if StGrid2.Cells[d,c] = "" then Continue; //пустые клетки пропускаем
     for e:=0 to StGrid2.ColCount -1 do begin
       if d = e then continue;
       if StGrid2.Cells[d,c] = StGrid1.Cells[e,c] then begin
         if fp then StGrid2.Cells[d,c]:="#"+StGrid1.Cells[d,c]
         else StGrid2.Cells[d,c]:="$"+StGrid1.Cells[d,c];
         fp:=true;
       end;
     end;
   end;
 end;
end;


 
ЮЮ ©   (2007-10-11 12:45) [15]

> if StGrid2.Cells[d,c] = StGrid1.Cells[e,c] then begin
>         if fp then StGrid2.Cells[d,c]:="#"+StGrid1.Cells[d,
> c]
>         else StGrid2.Cells[d,c]:="$"+StGrid1.Cells[d,c];
>
>         fp:=true;
>       end;


Насколько я понял, у поторяющихся значений в принципе возможно три "состояния" - первый раз встретился, повторился, повиориля и к тому же последний
1,1,1,1 -> 1,#1,#1,$1


 
koha   (2007-10-11 12:46) [16]

>
>
> [14] koha   (11.10.07 12:37)
> Мне просто делать нех...й было нечего решил мозги размять
> ушло 15 мин. вместе с включением компа.


- сорри пример с касяком......


 
evvcom ©   (2007-10-11 12:49) [17]


> сорри пример с касяком......

Да, ничего. Зато уже есть чего помусолить :)


 
Dennis I. Komarov ©   (2007-10-11 12:54) [18]

P.S.
Таких множеств быть не может:
Имхо
1. {A, A} = {A}
2. {A, B} = {B, A}

Вроде так.

У тебя не множество, а вектор получается.


 
evvcom ©   (2007-10-11 13:06) [19]


> не множество, а вектор получается

скорее направленная ломаная :)


 
koha   (2007-10-11 13:08) [20]

- счас перекушу чего-нибудь, поуженаю и продолжу.....


 
evvcom ©   (2007-10-11 16:17) [21]


> поуженаю

Что ты сделаешь? Это от слова "жена"? :)


 
ASoft   (2007-10-11 17:17) [22]


> evvcom ©   (11.10.07 16:17) [21]

это у него "ужин" плавно перешел в "жену"))
...я б за это время уже лопнул -))


 
Ping   (2007-10-11 17:24) [23]

это у него "ужин" плавно перешел в "жену"))

Ужин... плавно... перешел... в жену...
Кхм... простите, это как?

:-)


 
ASoft   (2007-10-11 17:37) [24]

ну вот, так и знал...
соррисоррисорри)))оффтоп


 
неугомонный   (2007-10-11 19:44) [25]

собственна прошу прощенья за то что потревожил и спасибо за ответы.
вот что получилось у меня,криво но работает:
var
 i,j,q:integer;
 s:string;
 gg,povtor:boolean;
begin
gg:=false;
povtor := false;

S := stringgrid1.Rows[0].Strings[Stringgrid1.ColCount-1];
 If s <> "" then
 begin
   for j:=0 to stringgrid1.ColCount-2 do
   begin
     if stringgrid1.Rows[0].Strings[j] = S then
       gg := true;
   end;
 end;

 If gg = false then
 begin
   for i:=0 to stringgrid1.colcount - 1 do
   begin
     S := Stringgrid1.Rows[0].Strings[i];
     for j:=i+1 to stringgrid1.ColCount - 2 do
     begin
       if stringgrid1.Rows[0].Strings[j] = S then
         stringgrid1.Rows[0].Strings[j] := "#"+S;
     end;
   end;
 end else
 begin
   StringGrid1.Rows[0].Strings[StringGrid1.ColCount-1] :="$"+StringGrid1.Rows[0].Strings[StringGrid1.ColCount-1];
   For i:=StringGrid1.ColCount - 2 downto 0 do
   begin
     povtor := False;
     S := StringGrid1.Rows[0].Strings[i];
     For j:=0 to i-1 do
     begin
       If StringGrid1.Rows[0].Strings[j] = S then
         povtor := True;
     end;
     IF povtor = False then
     begin
       For j:=0 to i do
       begin
         S := Stringgrid1.Rows[0].Strings[j];
         for q:=j+1 to i do
         begin
           if stringgrid1.Rows[0].Strings[q] = S then
             stringgrid1.Rows[0].Strings[q] := "#"+S;
         end;
       end;
       Break;
     end else
     begin
       StringGrid1.Rows[0].Strings[I] := "$"+S;
     end;

   end;
 end;


 
неугомонный   (2007-10-11 21:04) [26]

все таки пришлось немного доработать:
var
 i,j,q:integer;
 s,s1:string;
 gg,povtor:boolean;
begin
gg:=false;
povtor := false;

S := grid_simvol.Rows[0].Strings[grid_simvol.ColCount-1];
 If s <> "" then
 begin
   for j:=0 to grid_simvol.ColCount-2 do
   begin
     if grid_simvol.Rows[0].Strings[j] = S then
       gg := true;
   end;
 end;

 If gg = false then
 begin
   for i:=0 to grid_simvol.colcount - 1 do
   begin
     S := grid_simvol.Rows[0].Strings[i];
     If S <> "" then
     begin
       s1 := Copy(grid_simvol.Rows[0].Strings[i],0,1);
       if s1 <> "#" then
       begin
         for j:=i+1 to grid_simvol.ColCount - 2 do
         begin
           if grid_simvol.Rows[0].Strings[j] = S then
             grid_simvol.Rows[0].Strings[j] := "#"+S;
          end;
       end;
     end;
   end;
 end else
 begin
   grid_simvol.Rows[0].Strings[grid_simvol.ColCount-1] :="$"+grid_simvol.Rows[0].Strings[grid_simvol.ColCount-1];
   For i:=grid_simvol.ColCount - 2 downto 0 do
   begin
     povtor := False;
     S := grid_simvol.Rows[0].Strings[i];
     For j:=0 to i-1 do
     begin
       If grid_simvol.Rows[0].Strings[j] = S then
         povtor := True;
     end;
     IF povtor = False then
     begin
       For j:=0 to i do
       begin
         S := grid_simvol.Rows[0].Strings[j];
         if S <> "" then
         begin
           s1 := Copy(grid_simvol.Rows[0].Strings[i],0,1);
           if s1 <> "#" then
           begin
             for q:=j+1 to i do
             begin
               if grid_simvol.Rows[0].Strings[q] = S then
               begin
                 if Copy(grid_simvol.Rows[0].Strings[q],0,1) <> "#" then
                 grid_simvol.Rows[0].Strings[q] := "#"+S;
               end;
             end;
           end;
         end;
       end;
       Break;
     end else
     begin
       grid_simvol.Rows[0].Strings[I] := "$"+S;
     end;
   end;
 end;


 
ЮЮ ©   (2007-10-12 03:21) [27]

col: integer;
 cellValue: string;
 idx: integer;
begin
 sl := TStrigList.Create;
 sl.Sorted := true; // в этом списке храним оригинальнве значения ячеек
 try
   for col := 0 to grid_simvol.colcount - 1 do begin
     cellValue := Trim(grid_simvol.Cell[col, 0]);  
     if cellValue = "" then continie;
     if cellValue[0] in ["$", "#"] then
       cellValue := Copy(cellValue, 2, Lenth(cellValue) - 1); //убираем артефакты
     idx := sl.IndexOf(cellValue);
     if idx = - 1 then begin
       // значение встретилось впервые
       grid_simvol.Cell[col, 0] := cellValue;
       sl.Add(cellValue);
     end
     else begin
       if col = grid_simvol.colcount - 1 then
         // последнне число ряда
         grid_simvol.Cell[col, 0] := "$" + cellValue
       else
         grid_simvol.Cell[col, 0] := "#" + cellValue
     end;      
   end;
 finally
   sl.Free;
 end;

P.S. Писал не в Delphi, возможны ляпы.
P.P.S. Перед запуском алгоритма было бы неплохо "сжать" строку - удалить пустые ячейки



Страницы: 1 вся ветка

Текущий архив: 2007.11.04;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.019 c
2-1192005087
kyn66
2007-10-10 12:31
2007.11.04
Полуошибка ???


15-1191397694
Реактор
2007-10-03 11:48
2007.11.04
Сохранение инфы с почтового сервера.


2-1192379027
Инжинер
2007-10-14 20:23
2007.11.04
Работа с USB


2-1192433468
Кирей
2007-10-15 11:31
2007.11.04
как выбрать самый новый файл по маске


2-1192168137
r.o.o.t
2007-10-12 09:48
2007.11.04
Обработка ошибок в потоке