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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 2 931

Раздел: Delphi » Прочее
/ вопрос решён /

Здравствуйте!
Как можно сделать так, что бы при появлении формы в Edit1 появлялось произвольное число, в каком-то диапазоне, например от 0.00 до 1.00? Спасибо!

Хитманчан Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Хитманчан (статус: Посетитель)
Вопрос отправлен: 21 июня 2009, 09:28
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Ученый

Здравствуйте, Хитманчан! в креэйте пишем:

begin 
Randomize; 
Edit1.text:=floattostr(Random(1));
end;

Ответ отправил: Ученый (статус: 8-ой класс)
Время отправки: 21 июня 2009, 09:38
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: min@y™

В конструторе или OnCreate или OnShow формы напиши

Edit1.Text:= FormatFloat('0.00', Random);
Для того, чтобы при разных запусках программы последовательности случайных значений не повторялись, открой файл проекта (.dpr) и перед Application.Initilize вставь Randomize().

Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 21 июня 2009, 09:43
Оценка за ответ: 5


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

Всего сообщений: 15; последнее сообщение — 21 июня 2009, 10:38; участников в обсуждении: 3.
min@y™

min@y™ (статус: Доктор наук), 21 июня 2009, 09:46 [#1]:

Цитата (Ученый):

Random(1)

Я ФШОКЕ!
Сам-то понял, что написал?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Хитманчан

Хитманчан (статус: Посетитель), 21 июня 2009, 09:48 [#2]:

Ученый, min@y™, спасибо! Но оно целые значения выдает... А мне надо с десятыми и стотыми получать... И не от нуля, в принципе, а где-то от 2-х до 5-ти... Можно как-то так сделать? Что бы вадавало не 2.00, 3.00, 4.00 и 5.00 - а там сякие 2.34 и т. д.? Спасибо)
Ученый

Ученый (статус: 8-ой класс), 21 июня 2009, 09:49 [#3]:

min@y™ я знаю что единицу можно и не указывать, написал для наглядности , вдруг человеку нужно будет изменить диапозон)
Хитманчан если вам надо вывести число именно в формате скажем 0.00, 1.00 то воспользуейтесь ответом min@y™, но только не забудьте добавить Randomize иначе это будет "севдо случайность"
Ученый

Ученый (статус: 8-ой класс), 21 июня 2009, 09:57 [#4]:

Хитманчан чтобы вывести в диапозоне от 2 до 5, надо писать так: Random(3)+2
min@y™

min@y™ (статус: Доктор наук), 21 июня 2009, 10:00 [#5]:

Цитата (Ученый):

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

Это 2 разные функции. Исходники их ты в модуле System.pas не найдёшь, но условно их можно представить так:
function Random(): Extended; overload; // 0 <= X < 1 вещественные
function Random(const Range: Integer): Integer; overload; // 0...(Range - 1) целые
Random(1) всегда будет возвращать 0.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Ученый

Ученый (статус: 8-ой класс), 21 июня 2009, 10:12 [#6]:

min@y™ вы правы....единица не нужна...
Хитманчан

Хитманчан (статус: Посетитель), 21 июня 2009, 10:18 [#7]:

min@y™, Ученый, еще раз большое спасибо - но я так и не понял, как рандомом десятые и сотые части числа гинерировать... Он только целую меняет - а вещественную .00 оставляет... а как сделать, что бы и ее менял? Спаисбо.
min@y™

min@y™ (статус: Доктор наук), 21 июня 2009, 10:22 [#8]:

Цитата (Хитманчан):


но я так и не понял, как рандомом десятые и сотые части числа гинерировать... Он только целую меняет - а вещественную .00 оставляет... а как сделать, что бы и ее менял?

Не знаю, у меня генерит вещественные числа. Вывали сюда свой код, посмотрим.

Бонус: написал тебе функцию, генерящую вещественные числа в диапазоне AFrom...ATo (AFrom < ATo).
function MyRandom(const AFrom, ATo: Extended): Extended;
begin
  Result:= (ATo - AFrom) * Random + AFrom;
end;
 
procedure TForm1.FormCreate(Sender: TObject);
begin
  Edit1.Text:= FormatFloat('0.00', MyRandom(2.0, 5.0));
end;
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Хитманчан

Хитманчан (статус: Посетитель), 21 июня 2009, 10:26 [#9]:

min@y™, большое спасибо, толкьо почему-то она у меня только 2.00 выдает(...
min@y™

min@y™ (статус: Доктор наук), 21 июня 2009, 10:28 [#10]:

Выложи код. Чудес не бывает. Хочу посмотреть.
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
min@y™

min@y™ (статус: Доктор наук), 21 июня 2009, 10:29 [#11]:

А ты в DPR-файл Randomize() прописал?
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!
Хитманчан

Хитманчан (статус: Посетитель), 21 июня 2009, 10:30 [#12]:

Да просто на форму всунул Edit1 и пробую коды, как Вы пишите)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function MyRandom(const AFrom, ATo: Extended): Extended;
begin
Result:= (ATo - AFrom) * Random + AFrom;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text:= FormatFloat('0.00', MyRandom(2.0, 5.0));
end;

end.
Хитманчан

Хитманчан (статус: Посетитель), 21 июня 2009, 10:31 [#13]:

>А ты в DPR-файл Randomize() прописал?

нет... точно! Сейчасс пропишу) Спасибо!
Хитманчан

Хитманчан (статус: Посетитель), 21 июня 2009, 10:32 [#14]:

Все работает! Большое спасибо)
min@y™

min@y™ (статус: Доктор наук), 21 июня 2009, 10:38 [#15]:

Цитата (Хитманчан):


Все работает! Большое спасибо

"Спасибо" - это слишком много! Достаточно ПИВА. :)
Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп!

31 января 2011, 19:36: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

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

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