Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

цикл + stringgrid


Страницы:   1 2

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 и переносятся во второй грид.
вот.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо