Вопрос по Delphi
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Вопрос по Delphi - 2008-06-13 17:27:36.416666
|
|
|
~Zavoorchik~
Сообщений: 3
Оценки: 0
Присоединился: 2008-06-05 20:32:08.073333
|
Имеются 16 компонентов Button. Как сделать так, чтобы свойство Caption каждой кнопки было равно числу от 1 до 16? порядок следования чисел должен быть произвольным, и только чтобы числа не повторялись… Заранее спасибо ;)
|
|
|
RE: Вопрос по Delphi - 2008-06-13 18:00:57.166666
|
|
|
vvviperrr
Сообщений: 301
Оценки: 0
Присоединился: 2007-03-20 21:33:16.790000
|
ну динамически кнопки на форме создавать, массив хендлов будет, и в цикле установить им caption
|
|
|
RE: Вопрос по Delphi - 2008-06-13 18:11:28.703333
|
|
|
~Zavoorchik~
Сообщений: 3
Оценки: 0
Присоединился: 2008-06-05 20:32:08.073333
|
хотел уточнить: числа в Caption должны следовать не по порядку, а случайным образом (если это конечно возможно)
|
|
|
RE: Вопрос по Delphi - 2008-06-13 18:25:13.246666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ну это от тебя зависит, что им присваивать.
|
|
|
RE: Вопрос по Delphi - 2008-06-16 03:42:37.223333
|
|
|
Xaction
Сообщений: 6
Оценки: 0
Присоединился: 2008-06-15 03:12:02.053333
|
Юзай циклы и рандомы…
|
|
|
RE: Вопрос по Delphi - 2008-06-16 04:04:45.873333
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: Xaction Юзай циклы и рандомы… Я посмотрю как ты рандомом будешь делать так, чтобы названия на кнопках не повторялись.
|
|
|
RE: Вопрос по Delphi - 2008-06-16 16:03:51.030000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
А что там делать-то? Список забиваешь нужными значениями. Рандомом выбираешь любое - потом его удаляешь и т.д., пока список не станет пустым.
|
|
|
RE: Вопрос по Delphi - 2008-06-16 16:23:24.646666
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
Ну "юзай циклы и рандомы", судя во всему, означают тупо выбор на угад числа из массива и в лучшем случае проверка, нет ли такого среди уже выбранных. Пусть автор меня поправит, если это не так.
|
|
|
RE: Вопрос по Delphi - 2008-06-16 16:27:56.436666
|
|
|
Sunzer
Сообщений: 253
Оценки: 31190
Присоединился: 2007-06-15 19:23:32.436666
|
Генерируем число кидаем его в массив используемых названий , присваиваем кнопочке имя сгенирированное
|
|
|
RE: Вопрос по Delphi - 2008-06-16 19:12:26.880000
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
И чё дальше? Генерируем новое число и проверяем, есть ли такое? Все названия уже есть - это числа от 1 до 16, что ещё генерировать? Вопрос в том, как это перемешать, чтобы не повторялось. Ответ на этот вопрос уже дал _Saz_. Можно ещё список заменить динамическим масивом - будет медленнее, но с меньшей памятью. Всё это банальные алгоритмы, я не понимаю, откуда берётся столько людей с непонятными идеями.
|
|
|
RE: Вопрос по Delphi - 2008-06-16 21:02:34.103333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Оттуда, откуда и желающие влупить 16 кнопок на одну форму. Никакого понятия о юзабилити…
|
|
|
RE: Вопрос по Delphi - 2008-06-17 18:10:33.110000
|
|
|
~Zavoorchik~
Сообщений: 3
Оценки: 0
Присоединился: 2008-06-05 20:32:08.073333
|
я все-таки составил процедуру для заполнения массива случайными неповторяющимися числами от 1 до 16. спасибо всем за советы… procedure CreateRandArray(); var i, j : integer; n : integer; f : integer; begin for i := 1 to 16 do // цикл для заполнения массива numbs[1..16], где будут храниться полученные значения begin repeat f := 0; // вспомогательная переменная f n := Random(16) + 1; // генерируем случайное значение for j := 1 to 16 do // цикл для проверки значений массива… if numbs[j] <> n then // если ячейка массива не равна сгенерированному числу… f := f + 1; // тогда увеличим значение вспомогательной переменной until f = 16; // цикл до тех пор, пока ни одно значение массива не равно сгенерированному чеслу numbs := n; // если все нормально, присвоим индексу массива уникальное значение end; end; переменная f увеличивается в течение цикла, если сгенерированное число не совпадает с проверяемым в массиве… если f = 16, то ни одно значение не повторяется, следовательно можно добавить n в массив… возможно, не вполне удобно, но… я пока только начинающий программист:D
|
|
|
RE: Вопрос по Delphi - 2008-06-17 22:44:13.573333
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
Мда, индийцы отдыхают… Процедура не скомпилируется, алгоритм - полная чушь, работать не будет. Даже если заставишь работать, то это будет ужасно неэффективно. Тебе сверху написали нормальный алгоритм, тебя чем-то не устраивает или ты чего то не понимаешь в нём? Лучше спроси, чем пиши такую чушь.
|
|
|
RE: Вопрос по Delphi - 2008-06-18 16:57:10.393333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Паскаля не помню вообще, но что-то типа этого:
procedure CreateRandomizedArray( var a:array of integer; count:integer );
var
ta:array[1..count] of integer;
i, n, j, left:integer;
begin
randomize;
for i := 1 to count do
ta[i] := i;
left := count;
for n := 1 to count do
begin
i := random( left ) + 1;
a[n] := ta[i];
for j := i to left - 1 do
ta[j] := ta[j + 1];
dec(left);
end;
end;
Типа того… Не очень быстро, но зато эффективно. А твой алгоритм - бред полный ;), может он и каким-то чудом работает, но циклы вида repeat until random(m)=n; с логической точки зрения неправильный, т.к. выполнения такого условия можно оооочень долго ждать.
|
|
|
RE: Вопрос по Delphi - 2008-06-18 17:02:03.340000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
P.S. индусы и правда отдыхают…
|
|
|
RE: Вопрос по Delphi - 2008-06-18 17:23:23.460000
|
|
|
Absurd
Сообщений: 335
Оценки: 0
Присоединился: 2007-08-24 13:14:11.566666
|
quote:
ORIGINAL: kreol И чё дальше? Генерируем новое число и проверяем, есть ли такое? А не проще ли создать циклом упорядоченный массив с числами 1-Х, а потом пройтись по нему другим циклом и на каждой итерации менять местами элемент под счетчиком цикла с рандомным элементом от 1 до X?
|
|
|
RE: Вопрос по Delphi - 2008-06-18 18:06:44.123333
|
|
|
kreol
Сообщений: 823
Оценки: 0
Присоединился: 2007-03-08 03:13:06.876666
|
quote:
ORIGINAL: Absurd А не проще ли создать циклом упорядоченный массив с числами 1-Х, а потом пройтись по нему другим циклом и на каждой итерации менять местами элемент под счетчиком цикла с рандомным элементом от 1 до X? Как вариант. В общем-то подойдёт любой алгоритм перемешивания массива, хоть хеш-таблицы =)
|
|
|
RE: Вопрос по Delphi - 2008-06-18 18:09:42.660000
|
|
|
Yoshka
Сообщений: 19
Оценки: 0
Присоединился: 2008-03-31 17:30:47.400000
|
Если я тебя правильно понял то тебе что-то типа этого нужно
|
|
|
RE: Вопрос по Delphi - 2008-06-18 18:14:39.496666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: Absurd А не проще ли создать циклом упорядоченный массив с числами 1-Х, а потом пройтись по нему другим циклом и на каждой итерации менять местами элемент под счетчиком цикла с рандомным элементом от 1 до X? проще ;)
|
|
|
RE: Вопрос по Delphi - 2009-03-10 08:50:45.406666
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
Вот набросал код для требуемой задачи, помоему самый простой и надёжный вариант:
Var
x: array [1..16] of integer;
i, n, temp:integer;
begin
for i:=1 to 16 do begin
x[i]:=i;
end;
randomize;
for i:=1 to 16 do begin
n:=random(16)+1;
temp=x[i];
x[i]:=x[n];
x[n]:=temp;
end;
|
|
|
RE: Вопрос по Delphi - 2009-03-10 10:39:01.973333
|
|
|
NightmareZz
Сообщений: 1087
Оценки: 0
Присоединился: 2006-10-15 11:16:16.833333
|
Хакеры дружною толпою пишут "пятнашки". Ржунимагу.
|
|
|
RE: Вопрос по Delphi - 2009-03-10 11:28:56.970000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
quote:
ORIGINAL: jeka5555 Вот набросал код для требуемой задачи, помоему самый простой и надёжный вариант: … Ерунду ты тут написал. Погугли на тему "сортировка массива на паскале".
|
|
|
RE: Вопрос по Delphi - 2009-03-10 15:18:27.840000
|
|
|
Login_hochu
Сообщений: 1471
Оценки: 0
Присоединился: 2007-07-15 14:19:23.423333
|
quote:
ORIGINAL: NightmareZz Хакеры дружною толпою пишут "пятнашки". Ржунимагу. Кстати да, пока читал, вспомнил про пятнашки Найтмареза, где то они были выложенны. А он оказывается уже сам вспомнил.
|
|
|
RE: Вопрос по Delphi - 2009-03-12 07:54:59.233333
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
quote:
ORIGINAL: _SaZ_ quote:
ORIGINAL: jeka5555 Вот набросал код для требуемой задачи, помоему самый простой и надёжный вариант: … Ерунду ты тут написал. Погугли на тему "сортировка массива на паскале". Почему ерунду:? не принимаю подобные заявления без объяснений. Код прекрасно работает, сам использовал его для своей задачки: тест из 16 вопросов, где вопросы при каждом запуске перемешивались в случайном порядке как раз при помощи этой процедурки.
|
|
|
RE: Вопрос по Delphi - 2009-03-12 07:58:23.683333
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
quote:
ORIGINAL: _SaZ_ quote:
ORIGINAL: Absurd А не проще ли создать циклом упорядоченный массив с числами 1-Х, а потом пройтись по нему другим циклом и на каждой итерации менять местами элемент под счетчиком цикла с рандомным элементом от 1 до X? проще ;) Вы, батенька, своим словам противоречите. ты сам писал, что этом вариант проще. Только в моём случае я создавал не динамический массив, а статический, так как количество вопросов в моём тесте заранее известно. На каждом шаге я просто менял местами элемент массива с другим случайно выбранным.
|
|
|
RE: Вопрос по Delphi - 2009-03-12 10:59:30.303333
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ты мне скажи, какова вероятность того, что рандом вернёт два одинаковых значения? А если больше? Я понимаю, что это очень грамотное и 100%-но рабочее решение полагаться на "авось".
|
|
|
RE: Вопрос по Delphi - 2009-03-13 08:16:05.130000
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
Что-то я вообще не понимаю логику твоих мыслей, или скорее всего ты не понимаешь код. Что из того если рандом будет ворачивать два или более одинаковых значения? В этом случае у нас просто элементы поменяются местами обратно. Завтра пришлю программку, может поймёшь.
|
|
|
RE: Вопрос по Delphi - 2009-03-14 20:52:00.503333
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
Как и обещал программа: http://www.raduga.uuuq.com/files/array_rand.zip Можешь скачать и убидиться кто был не прав. Вот код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Label1: TLabel;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mas:array[1..16] of integer;
i,a,temp:integer;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:='';
for i:=1 to 16 do begin
mas[i]:=i;
end;
for i:=1 to 16 do begin
label1.Caption:=label1.Caption+' '+IntToStr(mas[i]);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption:='';
randomize;
for i:=1 to 16 do begin
a:=random(16)+1;
temp:=mas[i];
mas[i]:=mas[a];
mas[a]:=temp;
end;
for i:=1 to 16 do begin
label1.Caption:=label1.Caption+' '+IntToStr(mas[i]);
end;
end;
end
|
|
|
RE: Вопрос по Delphi - 2009-03-17 13:12:09.220000
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
_SaZ_, смотрел прогу? убедился что ты был неправ?
|
|
|
RE: Вопрос по Delphi - 2009-03-17 13:33:04.876666
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Ты мегахацкер, такую супер сложную прогу написал. Очень жаль, что у тебя так и не хватило мозгов понять, что я имел в виду.
|
|
|
RE: Вопрос по Delphi - 2009-03-17 14:01:34.340000
|
|
|
SmanxX1
Сообщений: 208
Оценки: 0
Присоединился: 2007-07-31 14:33:56.650000
|
quote:
Имеются 16 компонентов Button. Как сделать так, чтобы свойство Caption каждой кнопки было равно числу от 1 до 16? Если кнопки уже на форме, то все элементарно! Можно сделать так:
var
i,btn_num:integer;
...
btn_num:=1;
for i:=0 to (ComponentCount-1) do
if Components[i].ClassType=TButton then
begin
(Components[i] as TButton).Caption:=IntToStr(btn_num);
inc(btn_num);
end;
В результате все кнопочки получат название от 1го, до _КоличествоКнопокНаФорме_.
|
|
|
RE: Вопрос по Delphi - 2009-03-17 16:06:18.953333
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
quote:
ORIGINAL: SmanxX1 quote:
Имеются 16 компонентов Button. Как сделать так, чтобы свойство Caption каждой кнопки было равно числу от 1 до 16? Если кнопки уже на форме, то все элементарно! Можно сделать так:
var
i,btn_num:integer;
...
btn_num:=1;
for i:=0 to (ComponentCount-1) do
if Components[i].ClassType=TButton then
begin
(Components[i] as TButton).Caption:=IntToStr(btn_num);
inc(btn_num);
end;
В результате все кнопочки получат название от 1го, до _КоличествоКнопокНаФорме_. Да, толко в этом случае все кнопочки будут иметь название строго по порядку 1,2,3,4,5… и т.д.
|
|
|
RE: Вопрос по Delphi - 2009-03-17 16:09:27.903333
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
quote:
ORIGINAL: _SaZ_ Ты мегахацкер, такую супер сложную прогу написал. Очень жаль, что у тебя так и не хватило мозгов понять, что я имел в виду. Я и не старался написать супер-мега прогу, и не считаю что чем сложнее код тем ты круче, думаю как раз наобарот. А если я что-то не догнал, так ты объясни, пожалуйста.
|
|
|
RE: Вопрос по Delphi - 2009-03-17 16:36:04.440000
|
|
|
_SaZ_
Сообщений: 4329
Оценки: 398
Присоединился: 2008-01-30 02:18:05.553333
|
Уговорил - я был не прав. Затупил =\
|
|
|
RE: Вопрос по Delphi - 2009-03-17 16:45:47.170000
|
|
|
jeka5555
Сообщений: 18
Оценки: 0
Присоединился: 2009-03-10 08:43:28.223333
|
quote:
ORIGINAL: _SaZ_ Уговорил - я был не прав. Затупил =\ Бывает! главное то что ты в этом признался. [sm=az.gif] Мир!
|
|
|
|
|