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

Вниз

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

 
неугомонный   (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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.53 MB
Время: 0.041 c
15-1191493613
Jeer
2007-10-04 14:26
2007.11.04
С праздником !


1-1187360648
andreoman
2007-08-17 18:24
2007.11.04
уничтожение формы при ее закрытии


15-1190864226
azamatufa
2007-09-27 07:37
2007.11.04
Про работу форума


2-1192430713
Kolan
2007-10-15 10:45
2007.11.04
Корректна ли запись PAnsiChar := @string ?


2-1192082670
Jimmy
2007-10-11 10:04
2007.11.04
Размер оперативной памяти





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский