Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2009, 21:48   #1
Andreyka
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 18
По умолчанию заполнение таблицы

Как сделать так чтобы StringGrid была заполнена случайными, но неповторяющимися числами от 0 до 24, таблаца 5х5?
Andreyka вне форума Ответить с цитированием
Старый 07.02.2009, 21:53   #2
Djem1991
Форумчанин
 
Аватар для Djem1991
 
Регистрация: 05.01.2009
Сообщений: 130
По умолчанию

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

Заполнение стринггрида - элементарно.
а вот неповторяющиеся числа это тоже элементарная задачка) вбей в поиск, не побрезгуй)
В жизни нет reset'а, а жаль...
Djem1991 вне форума Ответить с цитированием
Старый 07.02.2009, 21:54   #3
Andreyka
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 18
По умолчанию

Случайными чилами я заполняю но как сделать чтоб они неповторялись?
Andreyka вне форума Ответить с цитированием
Старый 07.02.2009, 21:56   #4
Djem1991
Форумчанин
 
Аватар для Djem1991
 
Регистрация: 05.01.2009
Сообщений: 130
По умолчанию

дак при генерации числа поставь условие, если такого числа нет в массиве,то оно туда добавляется,если есть,то прорисходит сново генирация.
В жизни нет reset'а, а жаль...
Djem1991 вне форума Ответить с цитированием
Старый 07.02.2009, 22:01   #5
Andreyka
Пользователь
 
Регистрация: 11.01.2009
Сообщений: 18
По умолчанию

var x,y: byte;
begin
with StringGrid1 do
for y := 0 to RowCount - 1 do
for x := 0 to ColCount - 1 do
Cells[x,y]:= IntToStr(random(24));

И как в это сделать?
Andreyka вне форума Ответить с цитированием
Старый 07.02.2009, 22:07   #6
Djem1991
Форумчанин
 
Аватар для Djem1991
 
Регистрация: 05.01.2009
Сообщений: 130
По умолчанию

Код:
var
  i: integer;
  bm: array of boolean; //массив флагов для отслеживания было уже число
  или нет
begin
  SetLength(bm, length(inputMass));
  for i := 0 to length(inputMass) - 1 do
  begin
    inputMass[i] := Unic(bm, range) + 1; //для последовательности 1,2, ... , N
    //inputMass[i]:=Unic(bm,range);//для последовательности 0,1, ... , N
  end;
end;

function Unic(var flag: array of boolean; range: integer): integer;
begin
  {данная функция возвращает одно случайное число}
  result := random(range);
  while flag[result] do
    result := random(range); //ищем какого числа еще нет
  flag[result] := true; //это чтобы не было повторений
end;
var
  i: integer;
  bm: array of boolean; //массив флагов для отслеживания было уже число
  или нет
begin
  SetLength(bm, length(inputMass));
  for i := 0 to length(inputMass) - 1 do
  begin
    inputMass[i] := Unic(bm, range) + 1; //для последовательности 1,2, ... , N
    //inputMass[i]:=Unic(bm,range);//для последовательности 0,1, ... , N
  end;
end;

function Unic(var flag: array of boolean; range: integer): integer;
begin
  {данная функция возвращает одно случайное число}
  result := random(range);
  while flag[result] do
    result := random(range); //ищем какого числа еще нет
  flag[result] := true; //это чтобы не было повторений
end;
попробуй чуток подумать)

можно и проще) но зачем нам это))))))))))
В жизни нет reset'а, а жаль...
Djem1991 вне форума Ответить с цитированием
Старый 07.02.2009, 22:18   #7
Djem1991
Форумчанин
 
Аватар для Djem1991
 
Регистрация: 05.01.2009
Сообщений: 130
По умолчанию

Код:
procedure TForm1.FillArray(var A: arr; n: integer);
var
  i: integer;
  s: string;
  q: byte;
begin
  randomize;
  s := '';
  for i := 1 to n do
  begin
    q := random(i);
    insert(chr(i), s, q);
  end;
  for i := 1 to n do
  begin
    A[i] := ord(s[i]);
  end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
begin
  FillArray(b,5);
  For i:=1 to 4 do Memo1.Lines.Add(IntToStr(b[i]));
end;
уж как мог упростил)))))

Нашёл покороче...
Код:
var
  I, S, R: Integer;
begin
  for I := 0 to High(A) do
    A[I] := I;
  for i := High(A) downto 0 do
  begin
    R := Random(I);
    S := A[R];
    A[R] := A[I];
    A[I] := S;
  end;
end;
В жизни нет reset'а, а жаль...

Последний раз редактировалось Djem1991; 07.02.2009 в 22:25.
Djem1991 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заполнение одной таблицы данными из другой melok_s Microsoft Office Excel 7 20.11.2008 03:56
убрать вложенные таблицы из таблицы в режиме просмотра 2007 Baxxter Microsoft Office Access 2 17.11.2008 21:28
Заполнение таблицы и поиск имени Gwynbleidd Общие вопросы C/C++ 0 12.10.2008 16:43
Не получается заполнение TreeView из таблицы бд Paul Hindenburg БД в Delphi 3 10.03.2008 18:25