|
Вопрос # 4 897/ вопрос открыт / |
|
Здравствуйте!
Можете подсказать как лучше реализовать.
У меня есть программа чтото типа гсч(генератор случайных чисел)
Есть 2 поля для ввода данных самый слева туда вводить одни данные, и справа туда другие. При нажатии на кнопку(специальную) должно получится такое. В другую Memo должно добавится
(случайный тип данных из столбца1 '-' Случайный тип данных из столбца 2)
и так должно всех раскидать, причём ещё нужно сделать проверку что кол-ство строк в 1 столбце равно кол-ву строк во 2
 |
Вопрос задал: Адмирал (статус: Посетитель)
Вопрос отправлен: 8 января 2011, 17:16
Состояние вопроса: открыт, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 16; последнее сообщение — 10 января 2011, 18:39; участников в обсуждении: 3.
|
DNK (статус: Студент), 8 января 2011, 17:39 [#1]:
Цитата:
Есть 2 поля для ввода данных самый слева туда вводить одни данные, и справа туда другие. Твоя моя не понимай.
"Digital Networked Knight"
|
|
Адмирал (статус: Посетитель), 8 января 2011, 17:54 [#2]:
блин ну слева есть Edit1 справа Edit2
|
|
mirt.steelwater (статус: Посетитель), 8 января 2011, 18:25 [#3]:
как можно вычитать "случайные типы данных"? а если они разные? это из строки вычесть действительное? - нужно делать свое приведение типов и свои операторы вычитания.
или же вы ошиблись и имели в виду "случайные данные одного типа".
если я верно понимаю, то TEdit для хранения набора данных, т.е. в качестве S-BOX лучше не использовать.
разместите рядом 2 TListBox - в них при инициализации помещаете в цикле по паре значений в каждой итерации - тогда и проверка не нужна. или данные не случайного характера? тогда сделайте так: 2 TEdit, под каждым из них - свой TListBox, где-то кнопка "добавить" - при нажатии будет дополнятся каждый листбокс соответствующим значением из эдита. для извлечения случайной пары нужно просто получить случайный индекс 0..count-1 , где count - кол-во элементов в каждом из s-box-ов
Ⓐ свобода сопротивление солидарность
|
|
Адмирал (статус: Посетитель), 8 января 2011, 18:56 [#4]:
mirt.steelwater:
у меня так и есть вот шаблон программы
button1 Edit1 Button2 Edit2 Memo3
Memo1 Memo2
В мемо1 хванятся одни данные(строка)
во 2мемо также
их нужно рандомно раскидать в 3мемо
|
|
Адмирал (статус: Посетитель), 8 января 2011, 18:56 [#5]:
блин пробелы не считает
|
|
mirt.steelwater (статус: Посетитель), 8 января 2011, 19:20 [#6]:
+----------+----------+
| Edit1 | Edit2 |
+----------+----------+
| ListBox1 | ListBox2 |
+----------+----------+
| btAdd |
+---------------------+
| btCalc |
+---------------------+
| edResult |
+---------------------+
procedure TfmMain.btAddClick (Sender: TObject);
begin
ListBox1.Items.Add ( Edit1.Text );
Edit1.Text := '0';
ListBox2.Items.Add ( Edit2.Text );
Edit2.Text := '0';
end;
procedure TfmMain.btCalcClick (Sender: TObject);
var
I : Integer;
begin
I := random ( ListBox1.Count -1 );
edResult.Text := IntToStr ( StrToInt (ListBox1.Items [I]) - StrToInt (ListBox2.Items [I]) );
end;
код примитивен, нет проверок и т.п., но идея должна быть ясна
Ⓐ свобода сопротивление солидарность
|
|
Адмирал (статус: Посетитель), 8 января 2011, 19:29 [#7]:
ладно, будем разбираться, у меня такой вопрос, как в Memo (в коде) указать количество строк, ну для того чтобы random(memo1.количество строк -1) что вместо кол-ства строк?
|
|
mirt.steelwater (статус: Посетитель), 8 января 2011, 22:12 [#8]:
не рекомендую использовать TMemo
вообще правильно хранить данные в спец. списке, своего класса, на крайний случай в массиве, но не в компонентах в строковом виде - они нужны только для отображения. но если не передумал, то ответ на твой вопрос: Memo1.Lines.Count-1
Ⓐ свобода сопротивление солидарность
|
|
Адмирал (статус: Посетитель), 9 января 2011, 07:46 [#9]:
mirt.steelwater: спасибо, с этим разобрался, теперь есть ли такой тип переменной, в которую можно просто заносить числа не скалдывать ничего, а просто чтобы они там все через , были и можно было сделать проверку на одно из чисел?
|
|
Адмирал (статус: Посетитель), 9 января 2011, 14:58 [#10]:
Ну вот смотрите, есть ли такой тип переменных, в который можно занести число, не заменить число, а добавить число, например
I:=32
а дальше например цикл
for A:=1to Memo1.Lines.Count
а вот сюда зановить в переменную каждое из значений А от 1 до конца
Add I to A
чтобы в переменной было чтото типо такого
I:= 1,2,3,4,5,6,7,8,...
|
|
mirt.steelwater (статус: Посетитель), 9 января 2011, 15:57 [#11]:
формализируй вопрос
ничего не понял
зачем тебе в переменной цикла хранить через запятую числа? или это другая переменная? вообще есть такая весчЪ как массив. var my_int_array: array of Integer;
ты можешь указать его длину SetLength (my_int_array,count); count - здесь кол-во элементов массива. ты можешь использовать и связанный список на основе TList, но для поставленной задачи он не понадобится. советую еще раз внимательно почитать учебники, посмотреть примеры чего-то похожего.
Ⓐ свобода сопротивление солидарность
|
|
Адмирал (статус: Посетитель), 9 января 2011, 16:01 [#12]:
ладно по другому сформулирую, у меня есть переменная типа ЧИСЛО
Каждую секунду, ей присваивается случайное значение от 1до10, как сделать чтобы эти числа не повторялись
|
|
mirt.steelwater (статус: Посетитель), 9 января 2011, 16:56 [#13]:
ок. во-первых давай специфицируем задачу.
"переменная типа ЧИСЛО" - о каком именно числе идет речь? задача имеет лишь частные решения в пределах начальных условий, т.е. нужно указать тип числа, указать функцию сравнения чисел данного типа (определить что такое a = b, а затем возможно a < b & a > b ).
дальше попытаемся проанализировать твой алгоритм:
"каждую секунду, ей присваивается случайное значение от 1до10"
условие "как сделать чтобы эти числа не повторялись" будет выполняться лишь в первых 10 итерациях. на 11 итерации мы перебрали все элементы конечного множества и достигли коллизии.
если мы с этим всем согласны, то только тогда можно написать нечто вроде:
type
TInt10 = 1..10;
TInt10Box = array [0..9] of TInt10;
TPseudoInt10Box = array [0..9] of Integer;
const
BoxInt10 : TInt10Box = (1,2,3,4,5,6,7,8,9,10);
var
Form1: TForm1;
implementation
{$R *.dfm}
function RandomInt10 : TInt10;
begin
Result := BoxInt10 [ random (10) ];
end;
function InArray (const anArray: TPseudoInt10Box; const aValue: TInt10) : Boolean;
var
I : Integer;
begin
Result := FALSE;
for I := 0 to 9 do
begin
Result := Result or (anArray [I] = aValue);
if Result then
Exit;
end;
end;
var
box : TPseudoInt10Box = (0,0,0,0,0,0,0,0,0,0);
I : Integer = 0;
procedure TForm1.Timer1Timer(Sender: TObject);
var
r : TInt10;
begin
randomize;
repeat
r := RandomInt10;
until ( not ( InArray (box,r) ) or (I >= 9) );
if ( I < 9 ) then
begin
box [I] := r;
Memo1.Lines.Add ( IntToStr (box [I]) );
Inc (I);
end;
end;
для улучшения случайности рекомендую вручную распределить числа в BoxInt10 как можно более случайно.
Ⓐ свобода сопротивление солидарность
|
|
Адмирал (статус: Посетитель), 9 января 2011, 22:21 [#14]:
внимательней читать надо, я написал что числа от 1 до числа СЛУЧАЙНЫЕ тоесть в переменную можно так 1,4,10,3,
а в вашем коде, я если честно мало что понял
|
|
mirt.steelwater (статус: Посетитель), 10 января 2011, 11:21 [#15]:
товарисчЪ, если тебе не понятен такой простой код, причем непонятен полностью, а не какие-то моменты, то тебе еще рано задавать такие вопросы - читай учебники.
Ⓐ свобода сопротивление солидарность
|
|
Адмирал (статус: Посетитель), 10 января 2011, 18:39 [#16]:
ну так ответь на предыдущий пост, про случайные числа, чтобы не повторялись они, и я буду разбирать. Пожалуста
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|