Форум: "Начинающим";
Текущий архив: 2007.04.08;
Скачать: [xml.tar.bz2];
Внизцикл + 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;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.039 c