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

Вниз

цикл + stringgrid   Найти похожие ветки 

 
bagos   (2007-03-16 08:16) [0]

народ прошу помощи т.к. сам уже запутался :(
след код, рандомно выбирает столбец одного стринггрида и заполняет во втором стринггреде,и иногда совпадают столбцы и получается 2 одинаковых столбца в стрингреде2,как я понимаю надо сделать сравнивание,но у меня чет оно не получ.Помогите плиз
var
k,j,i,g:integer;
begin
randomize;
for i:=1 to 3 do
begin
 k:=random(5);
...Здесь как я понимаю должно быть сравнение
 g:=strtoint(listbox5.Items.Strings[k]);
 for j:=1 to 5 do
 stringgrid2.Cells[i,j]:=stringgrid1.Cells[g,j];
 end;
end;


 
Savek   (2007-03-16 09:22) [1]

Заведи массив и храни там номера отработанных столбцов


 
bagos   (2007-03-16 09:27) [2]

скажем в другом случаея я не знаю сколько точно будет столбцев и строк


 
Elen ©   (2007-03-16 09:57) [3]


> скажем в другом случаея я не знаю сколько точно будет столбцев
> и строк

Заведи дин. массив.


 
bagos   (2007-03-17 12:27) [4]

помогите с решением проблемы


 
bagos   (2007-03-17 16:53) [5]

help с динам массивами тож трабл


 
bagos   (2007-03-17 19:23) [6]

for i:=1 to 3 do
begin
 k:=random(5);
 if k=gg then inc(k);
 g:=strtoint(listbox5.Items.Strings[k]);
 for j:=1 to 5 do
 stringgrid2.Cells[i,j]:=stringgrid1.Cells[g,j];
 gg:=k;
end; опять не то


 
RASkov   (2007-03-17 20:21) [7]

> [6] bagos   (17.03.07 19:23)

Ты поточнее можешь изложить, что нужно...
Я понял, что тебе нужно во втором гриде иметь теже значения столбцов, что и в первом - только эти столбцы разместить в случайном порядке(отличном от 1 грида). Так? И для чего ListBox?


 
RASkov   (2007-03-17 20:46) [8]

Если я верно понял, то может это:
var S: set of Byte; C, K: Integer;
begin
 S:=[];
 for C := 0 to StringGrid1.ColCount-1 do begin
  repeat
   K:=Random(StringGrid1.ColCount);
  until not (K in S);
  Include(S, K);
  StringGrid2.Cols[C].Assign(StringGrid1.Cols[K]);
 end;
end;

Колонок в гриде1 должно быть менее 256...


 
bagos   (2007-03-18 02:05) [9]

не совсем то,мне нужно чтобы столбцы из одного грида перенеслись в другой в случайном порядке,но количество переносимых столбцев можно было указать. Например в гриде 5 столбцев,и я случайным образом выбрал 3 из них и переместил во второй,и надо чтобы эти столбцы не повторялись


 
bagos   (2007-03-18 02:14) [10]

вот код делает нужное,но с ним тоже проблема:

var
k,xz,j,i,g:integer;
i1,j1:integer;
begin
randomize;
j:=1;
for i:=1 to 10 do
begin
k:=random(strtoint(group_label.caption)+1);
g:=mas[k];
mas[k]:=mas[j];
mas[j]:=g;
j:=k;
end;
for i:=1 to strtoint(new_group.Caption) do
begin
for j:=1 to strtoint(m_label.Caption) do
 stringgrid2.Cells[i,j]:=stringgrid1.Cells[mas[i],j];
end;

проблема наверно кроется здесь:
mas:array [1..10] of integer = (1,2,3,4,5,6,7,8,9,10);
т.е. при выполнении некоторые столбцы пустуют,а если задать скажем
mas:array [1..20] of integer = (1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20);
то все норм,но опять же массив может состоять и из 1000 и т.д.
Еще вопрос,нельзя ли гриду разрешить колонок больше чем 256?


 
Германн ©   (2007-03-18 02:17) [11]


> bagos   (18.03.07 02:05) [9]
>
> не совсем то,мне нужно

Не. Иногда "солдафонские" методы - рулёз!
Как нам говаривал препод по "Начальной военной подготовке" -
1. Уяснить задачу.
2. Оценить обстановку.
3. Принять решение.
4. Отдать команду.
P.S. Ты хоть "поясни свою задачу", блин! :)


 
bagos   (2007-03-18 02:27) [12]

да вроде пояснил,попробую еще раз.
На форме два грида.
В первый грид заносятся данные путем некоторых преобразований и вычислений (к примеру получилось 5 столбцев и 6 строк с данными). После выбирается случайное число столбцев (например 3). И 3 не повторяющихся столбца выбираются случайным образом из 5 и переносятся во второй грид.
вот.


 
RASkov   (2007-03-18 03:30) [13]

> Еще вопрос,нельзя ли гриду разрешить колонок больше чем 256?

Можно.
В моем примере используется переменная S: set of Byte; поэтому и написал, что бы было < 256...

> В первый грид заносятся данные путем некоторых преобразований
> и вычислений (к примеру получилось 5 столбцев и 6 строк
> с данными). После выбирается случайное число столбцев (например
> 3). И 3 не повторяющихся столбца выбираются случайным образом
> из 5 и переносятся во второй грид.

А дальше что? Опять случайно выбирается кол-во столбцов и так далее пока не будут выбраны(добавлены во второй грид) все столбцы из первого?
Или это разовая операция(т.е. сколько выпало случайно столбцов - столько и добавлено во второй) и на этом все?


 
Германн ©   (2007-03-18 03:43) [14]


> bagos   (18.03.07 02:27) [12]
>
> да вроде пояснил,попробую еще раз.
> На форме два грида.
> В первый грид заносятся данные путем некоторых преобразований
> и вычислений (к примеру получилось 5 столбцев и 6 строк
> с данными). После выбирается случайное число столбцев (например
> 3). И 3 не повторяющихся столбца выбираются случайным образом
> из 5 и переносятся во второй грид.
> вот.
>

Это не задача. Это твои "измышления" о задаче. Ради этого не хочется даже...


 
bagos   (2007-03-18 10:10) [15]

это разовая операция


 
RASkov   (2007-03-18 11:10) [16]

var S: set of Byte; C, K, J: Integer;
begin
S:=[];
J:=1+Random(StringGrid1.ColCount);
StringGrid2.ColCount:=J;
for C := 0 to J-1 do begin
 repeat
  K:=Random(StringGrid1.ColCount);
 until not (K in S);
 Include(S, K);
 StringGrid2.Cols[C].Assign(StringGrid1.Cols[K]);
end;
end;

Если нужно более 256 колонок делай массив, инициализируюй вначале все элементы, например, значением -1.
Далее при переборе, выставляй элементу массива с индексом [номер добавляемого столбца] значение, например 1.
Т.е. в массиве будут храниться добавленные номера столбцов....


 
bagos   (2007-03-18 11:48) [17]

создаю динам.массив
mas:array of integer;
SetLength(mas,stringgrid1.colcount-1) ;
randomize;
j:=1;
for i:=1 to 10 do
begin
k:=random(strtoint(group_label.caption)+1);
g:=mas[k];
mas[k]:=mas[j];
mas[j]:=g;
end;
for i:=1 to strtoint(new_group.Caption) do
begin
for j:=1 to strtoint(m_label.Caption) do
 stringgrid2.Cells[i,j]:=stringgrid1.Cells[mas[i],j];
end;
что здесь не так?


 
RASkov   (2007-03-18 11:53) [18]

var S: array of Integer; C, K, J: Integer;
begin
SetLength(S, StringGrid1.ColCount);
for C:=0 to Length(S)-1 do S[C]:=-1;
J:=1+Random(StringGrid1.ColCount);
StringGrid2.ColCount:=J;
for C := 0 to J-1 do begin
 repeat
  K:=Random(StringGrid1.ColCount);
 until S[K]=-1;
 S[K]:=1;
 StringGrid2.Cols[C].Assign(StringGrid1.Cols[K]);
end;
end;


 
RASkov   (2007-03-18 12:04) [19]

> что здесь не так?


> g:=mas[k];
> mas[k]:=mas[j];
> mas[j]:=g;

А ты объясни, что у тебя здесь колдуется?


 
RASkov   (2007-03-18 12:06) [20]

> [19] RASkov   (18.03.07 12:04)
> > что здесь не так?
>
>
> > g:=mas[k];
> > mas[k]:=mas[j];
> > mas[j]:=g;
>
> А ты объясни, что у тебя здесь колдуется?

...точнее не только там, а весь код не понятно что....


 
bagos   (2007-03-18 12:13) [21]

по поводу твоего кода,не пойму,то он работает правильно,то нет,бывает что создает больше чем нужно столбцев с данными в гриде 2


 
RASkov   (2007-03-18 12:18) [22]

> [21] bagos   (18.03.07 12:13)

В моем коде не учитываются FixedCols... Ну исправь как тебе надо.... я проверил у себя - во втором ни разу небыло больше чем в первом.
Ты не затрагиваешь фиксированные колонки?


 
bagos   (2007-03-18 12:21) [23]

нет не затрагиваю,но каждый раз колонок разное кол-во получается, и если мне надо 3 колонки рандомные получить,получается то 2 то 3 то 4;)


 
RASkov   (2007-03-18 12:25) [24]

> [23] bagos   (18.03.07 12:21)

procedure TForm1.Button1Click(Sender: TObject);
var S: array of Integer; C, K, J: Integer;
begin
SetLength(S, StringGrid1.ColCount);
for C:=0 to Length(S)-1 do S[C]:=-1;
J:=StringGrid1.FixedCols+Random(StringGrid1.ColCount-StringGrid1.FixedCols)+1;
StringGrid2.ColCount:=J;
for C := 1 to J-1 do begin
 repeat
  K:=StringGrid1.FixedCols+Random(StringGrid1.ColCount-StringGrid1.FixedCols);
 until S[K]=-1;
 S[K]:=1;
 StringGrid2.Cols[C].Assign(StringGrid1.Cols[K]);
end;
end;


> но каждый раз колонок разное кол-во получается, и если мне
> надо 3 колонки рандомные получить,получается то 2 то 3 то
> 4;)

Ну так как выпадет J - столько и будет... или ты что-то опять темнишь....


 
bagos   (2007-03-18 12:40) [25]

смотри
1)пользователь вводить в edit1 кол-во столбцев для грида1 (например 5)
2)в edit2 вводить кол-во строк для грида1 (например 6)
3)далее грид1 заполняется числами(по формуле,это сделанно)
4)потом в edit4 вводит кол-во стобцев которые надо рандомно перенсти в грид2 (например 3)
5)и должно получиться что в гриде2 например 1,4,5 столбец или 2,3,5,но не должно быть повторных столбцев типа 1,1,5 или 2,4,4


 
bagos   (2007-03-18 12:40) [26]

млин еще и с рус.яз проблемы:) вводитЬ


 
RASkov   (2007-03-18 13:11) [27]

var S: array of Integer; C, R, J, K: Integer;
begin
 Randomize;
 StringGrid1.ColCount:=1+StrToIntDef(Edit1.Text, 5);
 StringGrid1.RowCount:=1+StrToIntDef(Edit2.Text, 6);
 J:=1+StrToIntDef(Edit3.Text, 3);
 if J>StringGrid1.ColCount then Exit;
 for C := 1 to StringGrid1.ColCount-1 do
  for R := 1 to StringGrid1.RowCount-1 do StringGrid1.Cells[C, R]:=IntToStr(Random(10000));
 SetLength(S, StringGrid1.ColCount);
 for C:=0 to Length(S)-1 do S[C]:=-1;
 StringGrid2.ColCount:=J;
 StringGrid2.RowCount:=StringGrid1.RowCount;
 for C := 1 to J-1 do begin
  repeat
   K:=1+Random(StringGrid1.ColCount-1);
  until S[K]=-1;
  S[K]:=1;
  for J := 1 to StringGrid2.RowCount-1 do StringGrid2.Cells[C, J]:=StringGrid1.Cells[K, J];
 end;
end;

Это если фиксированных столбцов и рядов по одному....


 
bagos   (2007-03-18 13:24) [28]

не могу вырозить всю полноту благодаоности за помощь, этого мало но все же
Большое спасибо,есть люди на земле


 
RASkov   (2007-03-18 13:30) [29]

> [28] bagos   (18.03.07 13:24)

Ух... неужели всё? .... получилось :")


 
Anatoly Podgoretsky ©   (2007-03-18 13:35) [30]

> bagos  (18.03.2007 11:48:17)  [17]

> что здесь не так?

На что жалуемся?


 
bagos   (2007-03-18 13:41) [31]

RASkov   (18.03.07 13:30) [29]
ага,сам не нарадуюсь что получилось



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

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

Наверх




Память: 0.54 MB
Время: 0.03 c
15-1173676057
ryslan56
2007-03-12 08:07
2007.04.08
Делфи и Сссоздание сайтов


3-1169220082
Death
2007-01-19 18:21
2007.04.08
Проблема с использованием TDBLookupComboBox


6-1161677126
Grassus
2006-10-24 12:05
2007.04.08
Определить список процессов


15-1173701197
Styx_
2007-03-12 15:06
2007.04.08
Преобразование RTF или DOC в PDF


4-1164258379
plotn
2006-11-23 08:06
2007.04.08
Проблемы по работе с COM-портом