2014-11-18 5 views
-3

мое назначение, как заполнить StringGrid в Дельфах между двумя заданными числами

Заполните заданные матрицы «stringgrids»/M1 и M2 со случайными числами, взятых из [от, до], где от и до следует читать из заданных полей Edit.

Я боюсь генерировать случайные числа между значениями, заданными пользователем. Вот что у меня есть:

procedure FillGridRandom(var S:TStringGrid); 
var 
    i ,j :integer; //local variables 
    A,B:array of array of integer; 
    val1,val2 :integer; 
begin 
    val1 := StrToInt(Form1.Edit1.Text); 
    val2 := StrToInt(Form1.Edit2.Text); 
    setlength(A,10,10); 
    setlength(B,10,8); 
    for i := 0 to s.colcount do begin 
    for j := 0 to s.rowcount do begin 
     A[i][j]:= random; 
    end; 
    end; 
end; 

ответ

2

Как сгенерировать случайное число между значениями заданных пользователем?

Функция Random имеет две перегрузки. Вариант без параметров возвращает реальные значения между 0 и 1. Другой вариант принимает целочисленный параметр N и возвращает целые числа i такие, что 0 <= i < N. Таким образом, вы можете использовать некоторую арифметику для создания значений в диапазоне a до b.

function RandInRange(const a, b: Integer): Integer; 
begin 
    Result := a + Random(b-a+1); 
end; 

Это возвращает целые числа, удовлетворяющие ia <= i <= b и которые равномерно распределены. Ну, распределение только так хорошо, как базовый PRNG, используемый Random.

Обратите внимание, что я не пытался проверить или обеспечить соблюдение этого правила a <= b.

В качестве альтернативы, как указано в комментариях, вы можете использовать RandomRange от блока Maths. Хотя следует опасаться, что он имеет другое соглашение и возвращает значения в диапазоне a <= i < b.


Глядя на остальной части вашего кода, вы не должны использовать параметр var, чтобы передать ссылку строку сетки. Вы не собираетесь менять ссылку. Вы можете вызывать методы в строковой сетке или свойства доступа, но вы не собираетесь изменять ссылку.

И что касается этой сетки строк, вы ничего с ней не делаете. Вы заполняете массив, который вы сразу бросаете. Вам нужно будет назначить элементы сетки строк. Массивы бессмысленны и могут быть удалены.

+0

может ypu изменить его в коде, который я опубликовал –

+2

Ну, я мог бы это сделать. Я мог бы просто выполнить ваше задание для вас. Но тогда в этом бы смысл? Что бы вы узнали из этого? Я уже сделал больше, чем мог бы сделать. –

+2

Почему эти операции FP, в то время как RandomRange (integer, integer) существует? –

 Смежные вопросы

  • Нет связанных вопросов^_^