Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1174218327
Nic (ro)
2007-03-18 14:45
2007.04.08
Непонятная ошибка


6-1161682892
Tonich
2006-10-24 13:41
2007.04.08
TNMSMTP


11-1152777666
oleg_l_k
2006-07-13 12:01
2007.04.08
Backup для БД на FireBird 1.0 (KOLIBServ)


15-1173670161
Slider007
2007-03-12 06:29
2007.04.08
С днем рождения ! 12 марта


2-1174229342
Access
2007-03-18 17:49
2007.04.08
"Овободить" БД - ADO





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский