IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Последовательность, Ввод чисел
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 28

Репутация: -  0  +


Дано n действительных чисел.
Как наиболее удобно реализовать ввод чисел последовательности, если вводить не из файла?
С помощью какой компоненты и как?

Спасибочки!


--------------------
С уважением,
Таука.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Можно использовать TMemo или TEdit, в который пользователь должен вводить числа, разделенные запятыми, пробелами/табуляцией или т. п. IMHO, это будет достаточно удобно для пользователя и просто в реализации.


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Вот пример ввода с помощью TMemo, для случая, когда числа должны разделяться пробельными символами (пробелы, табуляция, переводы строк):

Код
procedure TForm1.Button1Click(Sender: TObject);
var
 Data: array[0..999] of Integer;
 s: String;
 i, p: Integer;
begin
 i := 0;
 p := 1;
 repeat
   if i >= 1000 then
     begin
       Application.MessageBox('Количество элементов не должно превышать 1000',
         'Ошибка', MB_OK or MB_ICONERROR);
       Exit;
     end;
   while (p <= Length(Memo1.Text)) and (Memo1.Text[p] <= ' ') do Inc(p);
   s := '';
   while (p <= Length(Memo1.Text)) and (Memo1.Text[p] > ' ') do
     begin
       s := s + Memo1.Text[p];
       Inc(p);
     end;
   if s = '' then Break;
   try
     Data[i] := StrToInt(s);
   except
     Application.MessageBox('Ожидается целое', 'Ошибка',
       MB_OK or MB_ICONERROR);
     Memo1.SelStart := p - Length(s) - 1;
     Memo1.SelLength := Length(s);
     Memo1.SetFocus;
     Exit;
   end;
   Inc(i);
 until p >= Length(Memo1.Text);

 { Сделать что-нибудь полезное с Data (i - кол-во элементов) }
 
end;


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Пардон, невнимательно читал - реализовал все для целых. Для действительных будет аналогично, только 'Data: array[0..999] of Double', 'Data[i] = StrToFloat(s)' и 'Ожидается действительное число' :p2:


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Млжно несколько иначе. В насале программы на форму динамически кидается n Edit'ов, адреса которых хранятся в массиве. Потом, когда понадобится можно из них считать значения. Этот метод проще хотя бы тем, что не надо разбивать хранимое в TMemo на строки и т. д. А ещё проверку корректности чисел можно вставить в обработчик OnKeyDown например...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


Правда тогда неудобно будет копировать/вставлять все данные или их часть с помошью буфера обмена (например, вспомним ввод регистрационных номеров: как мешают несколько полей ввода вставить в один заход кусок текста из 'serial.txt' smile.gif)

Кстати, проверка корректности ввода по 'OnKeyDown' может сильно сковывать действия пользователя. IMHO, лучше проверять все данные при нажатии кнопки, переходе на другую вкладку, форму или т. п. и автоматически делать активным TEdit, в котором (первое) неправильное значение. А можно каким-либо образом помечать все некорректно заполненные поля. Да, и не забыть о TabOrder ;)

Еще подумал о TStringGrid...


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






А ещё в каком из дельфей есть что-то типа ValueEdit или как его там... Короче растабаный на 2 части ListBox с возможностью ввода.

Вариантов короче много. Включай фантазию и вперёд smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Четыре квадратика
****

Группа: Пользователи
Сообщений: 579
Пол: Мужской

Репутация: -  4  +


StringGrid еще можно...
Или один Edit и кнопка "Добавить" smile.gif Для наглядности добавленное число можно пихать в ListBox


--------------------
Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гость






Тогда уж и кнопку "Удалить" всунуть надо. На всякий...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


N337
****

Группа: Пользователи
Сообщений: 737
Пол: Мужской

Репутация: -  26  +


В случае кнопочной стратегии "Добавить/удалить" не мешало бы еще завести TLabel с количеством введённых элементов. И обязательно дублировать функции кнопок клавиатурой. Например, добавлять по нажатию "Enter", а удалять - по "Delete". Интерфейсы, в которых клавиатурный ввод в обязательном порядке сопровождается манипуляциями мышкой обычно утомляет более-менее опытного пользователя...smile.gif


--------------------
The idiots are winning.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.04.2024 3:23
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name