![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
цикл + stringgrid
bagos © (2007-03-16 08:16:00)народ прошу помощи т.к. сам уже запутался :(
след код, рандомно выбирает столбец одного стринггрида и заполняет во втором стринггреде,и иногда совпадают столбцы и получается 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;
bagos (2007-03-18 13:41:00) [1]RASkov (18.03.07 13:30) [29]
ага,сам не нарадуюсь что получилось
Anatoly Podgoretsky (2007-03-18 13:35:00) [2]> bagos (18.03.2007 11:48:17) [17]
> что здесь не так?
На что жалуемся?
RASkov (2007-03-18 13:30:00) [3]> [28] bagos (18.03.07 13:24)
Ух... неужели всё? .... получилось :')
bagos (2007-03-18 13:24:00) [4]не могу вырозить всю полноту благодаоности за помощь, этого мало но все же
Большое спасибо,есть люди на земле
RASkov (2007-03-18 13:11:00) [5]
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 12:40:00) [6]млин еще и с рус.яз проблемы:) вводитЬ
bagos (2007-03-18 12:40:00) [7]смотри
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
RASkov (2007-03-18 12:25:00) [8]> [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:21:00) [9]нет не затрагиваю,но каждый раз колонок разное кол-во получается, и если мне надо 3 колонки рандомные получить,получается то 2 то 3 то 4;)
RASkov (2007-03-18 12:18:00) [10]> [21] bagos (18.03.07 12:13)
В моем коде не учитываются FixedCols... Ну исправь как тебе надо.... я проверил у себя - во втором ни разу небыло больше чем в первом.
Ты не затрагиваешь фиксированные колонки?
bagos (2007-03-18 12:13:00) [11]по поводу твоего кода,не пойму,то он работает правильно,то нет,бывает что создает больше чем нужно столбцев с данными в гриде 2
RASkov (2007-03-18 12:06:00) [12]> [19] RASkov (18.03.07 12:04)
> > что здесь не так?
>
>
> > g:=mas[k];
> > mas[k]:=mas[j];
> > mas[j]:=g;
>
> А ты объясни, что у тебя здесь колдуется?
...точнее не только там, а весь код не понятно что....
RASkov (2007-03-18 12:04:00) [13]> что здесь не так?
> g:=mas[k];
> mas[k]:=mas[j];
> mas[j]:=g;
А ты объясни, что у тебя здесь колдуется?
RASkov (2007-03-18 11:53:00) [14]
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;
bagos (2007-03-18 11:48:00) [15]создаю динам.массив
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:10:00) [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 10:10:00) [17]это разовая операция
Германн (2007-03-18 03:43:00) [18]
> bagos (18.03.07 02:27) [12]
>
> да вроде пояснил,попробую еще раз.
> На форме два грида.
> В первый грид заносятся данные путем некоторых преобразований
> и вычислений (к примеру получилось 5 столбцев и 6 строк
> с данными). После выбирается случайное число столбцев (например
> 3). И 3 не повторяющихся столбца выбираются случайным образом
> из 5 и переносятся во второй грид.
> вот.
>
Это не задача. Это твои "измышления" о задаче. Ради этого не хочется даже...
RASkov (2007-03-18 03:30:00) [19]> Еще вопрос,нельзя ли гриду разрешить колонок больше чем 256?
Можно.
В моем примере используется переменная S: set of Byte; поэтому и написал, что бы было < 256...
> В первый грид заносятся данные путем некоторых преобразований
> и вычислений (к примеру получилось 5 столбцев и 6 строк
> с данными). После выбирается случайное число столбцев (например
> 3). И 3 не повторяющихся столбца выбираются случайным образом
> из 5 и переносятся во второй грид.
А дальше что? Опять случайно выбирается кол-во столбцов и так далее пока не будут выбраны(добавлены во второй грид) все столбцы из первого?
Или это разовая операция(т.е. сколько выпало случайно столбцов - столько и добавлено во второй) и на этом все?
bagos (2007-03-18 02:27:00) [20]да вроде пояснил,попробую еще раз.
На форме два грида.
В первый грид заносятся данные путем некоторых преобразований и вычислений (к примеру получилось 5 столбцев и 6 строк с данными). После выбирается случайное число столбцев (например 3). И 3 не повторяющихся столбца выбираются случайным образом из 5 и переносятся во второй грид.
вот.