Форум: "Начинающим";
Текущий архив: 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