Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 4 897

/ вопрос открыт /

Здравствуйте!
Можете подсказать как лучше реализовать.
У меня есть программа чтото типа гсч(генератор случайных чисел)
Есть 2 поля для ввода данных самый слева туда вводить одни данные, и справа туда другие. При нажатии на кнопку(специальную) должно получится такое. В другую Memo должно добавится
(случайный тип данных из столбца1 '-' Случайный тип данных из столбца 2)
и так должно всех раскидать, причём ещё нужно сделать проверку что кол-ство строк в 1 столбце равно кол-ву строк во 2

Адмирал Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Адмирал (статус: Посетитель)
Вопрос отправлен: 8 января 2011, 17:16
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 16; последнее сообщение — 10 января 2011, 18:39; участников в обсуждении: 3.
DNK

DNK (статус: Студент), 8 января 2011, 17:39 [#1]:

Цитата:

Есть 2 поля для ввода данных самый слева туда вводить одни данные, и справа туда другие.
Твоя моя не понимай.
"Digital Networked Knight"
Адмирал

Адмирал (статус: Посетитель), 8 января 2011, 17:54 [#2]:

блин ну слева есть Edit1 справа Edit2
mirt.steelwater

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

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

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

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

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

mirt.steelwater (статус: Посетитель), 10 января 2011, 11:21 [#15]:

товарисчЪ, если тебе не понятен такой простой код, причем непонятен полностью, а не какие-то моменты, то тебе еще рано задавать такие вопросы - читай учебники.
Ⓐ свобода сопротивление солидарность
Адмирал

Адмирал (статус: Посетитель), 10 января 2011, 18:39 [#16]:

ну так ответь на предыдущий пост, про случайные числа, чтобы не повторялись они, и я буду разбирать. Пожалуста

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:53
Выполнено за 0.03 сек.