Задачка для программистов!!!


гильдия Мудрецы (Мастер)[4916] гильдия Алхимики (Элита)[76031] Jumper Информация
Назад к темам раздела.
2008-07-02 12:26:04 гильдия Мудрецы (Мастер)[4916] гильдия Алхимики (Элита)[76031] Jumper Информация
Помогите сообразить где я ошибся!
Ввиде среды использован VBA + Excel
Суть задачки: Необходимо каждый раз сгенирировать случайное число от 1 до 4 и записать в диапозон ячеек (так же от 1 до 4) так, чтобы значения в ячейках не повторялись..

То есть результатом должно получится что-то вроде
(A1)=3
(A2)=1
(A3)=2
(A4)=4
или
(A1)=1
(A2)=3
(A3)=2
(A4)=4
и тд....

Мой код:

Sub randme()
Randomize

For i = 1 To 4
Range("A" & i) = ""
Next i

'=================
For i = 1 To 4
a = CInt((3 * Rnd) + 1)

If a <> Range("A" & i) Then
Range("A" & i) = a

Else
Do While a <> Range("A" & i - 1)
a = CInt((3 * Rnd) + 1)
Loop
Range("A" & i) = a
End If
Next i

End Sub
 
2008-07-02 13:25:16 гильдия Мудрецы (Мастер)[4916] гильдия Алхимики (Элита)[76031] Jumper Информация
Jumper писал(а):
If a <> Range("A" & i) Then
Range("A" & i) = a


В этом участке кода, сделал одну из ошибок.. Условие будет всегда соблюдатся, потому что индекс i меняется...
Далее код не отрабатывает... исправляю...
=( мозг на гране кипения...
 
2008-07-02 15:03:50 гильдия Мудрецы (Мастер)[4916] гильдия Алхимики (Элита)[76031] Jumper Информация
До сих пор не понял как сделать проверка из диапозона... то есть рандом чистла с исключением тех что были...
У кого-нибудь есть навык?
Сойдет любая среда (C, Delphi, VB, Perl, PHP ... ) главное алгоритм..
 
2008-07-04 18:43:51 гильдия Столичные Шахтеры (Мастер)[2736] гильдия Бойцы (Адепт)[2204] Still_Alive Информация
doit = 1;
for (i=0; i<4 || doit; if (!doit) i++) // вот тут вот неуверен, но мысль ясна
{
a[i] = random(j);
doit = 0;
for (k=0; k<=i; k++) if (a[i] == a[k]) doit = 1;
}