Другие языки программирования и технологии

как сделать массив из случайных чисел от 1 до 15 (размерность массива 4х4) что бы они не повторялись в VBA????

Могу написать только для qbasic
cls
randomize time
dim a(4,4)
For x=1 to 4
For y=1 to 4
a(x,y)=int(rnd*14+1)
next y
next x
МТ
Максим Титков
1 297
Лучший ответ
Нечто вроде этого:

Sub RandArray()
Dim m As Integer ' количество строк матрицы
Dim n As Integer ' количество столбцов матрицы

Dim i As Integer ' номер строки
Dim j As Integer ' номер столбца

Dim k As Integer ' номер строки
Dim l As Integer ' номер столбца

Dim r As Integer ' случайное число

Dim f As Boolean ' признак (флаг) нахождения числа

Dim mc As Integer ' количество необходимых чисел

Dim c As Integer ' счётчик количества полученных чисел

m = 4 ' задаём количество строк матрицы
n = 4 ' задаём количество столбцов матрицы

mc = 15 ' задаём количество необходимых чисел

ReDim a(m, n) As Integer ' матрица

For i = 1 To m ' в цикле, начиная с первой строки матрицы и заканчивая строкой с номером m
For j = 1 To n ' в цикле, начиная с первого столбца матрицы и заканчивая столбцом с номером n
Do ' цикл с постусловием
r = Int(Rnd * 15 + 1) ' получаем случайное число от 1 до 15

f = False ' сбрасываем признак нахождения числа в массиве

For k = 1 To m ' в цикле, начиная с первой строки матрицы и заканчивая строкой с номером m
For l = 1 To n ' в цикле, начиная с первой строки матрицы и заканчивая строкой с номером n
If a(k, l) = r Then ' если встречаем в матрице это число, то
f = True ' выставляем признак нахождения числа в Истину

Exit For ' завершаем цикл для l
End If

DoEvents ' позволяем системе отреагировать на другие события
Next

If f Then
Exit For ' если выставлен флажок нахождения числа, то завершаем цикл для k
End If

DoEvents ' позволяем системе отреагировать на другие события
Next
Loop While f ' пока находим это число в массиве

a(i, j) = r ' число в массиве не было найдено, поэтому присваиваем его очередному элементу массива a

с = с + 1 ' и увеличиваем счётчик количества полученных случайных чисел

Debug.Print a(i, j), ' печатаем очередной элемент массива и символ табуляции (формируем строку матрицы)

If с = mc Then ' если получено необходимое количество чисел, то
Exit For ' завершаем цикл для j
End If

DoEvents ' позволяем системе отреагировать на другие события
Next

Debug.Print ' переход к новой строке матрицы, результат выводится в Immediate Window (Ctrl+G)

If с = mc Then ' если получено необходимое количество чисел, то
Exit For ' завершаем цикл для i
End If

DoEvents ' позволяем системе отреагировать на другие события
Next

Debug.Print ' а это для красоты (чтобы отделить результаты предыдущего запуска программы)
End Sub
1) Заполняем массив по порядку
2) Берем 2 любых числа из массива и меняем их местами
3) Повторяем шаг №2 сто раз, или 1000

CLS
DIM m(4, 4)

//Заполняем массив по порядку
k = 1
FOR i = 1 TO 4
FOR j = 1 TO 4
m(i, j) = k
k = k + 1
NEXT j
NEXT i

//Перемешиваем
FOR k = 1 TO 100
i = INT(RND * 4) + 1
j = INT(RND * 4) + 1
a = INT(RND * 4) + 1
b = INT(RND * 4) + 1
SWAP m(i, j), m(a, b)
NEXT k

//Выводим на экран
FOR i = 1 TO 4
FOR j = 1 TO 4
PRINT m(i, j),
NEXT j
PRINT
NEXT i
sub a()
dim a(4,4)
For i=1 to 4
For j=1 to 4
a(i,j)=integer (random 14+1)
randomize
next i
next j
end sub
:))

4х4 = 16, 1..15 = 15, 15<16 и как же ты его заполнишь, так чтоб не повторялись?
adgjmptw68
adgjmptw68
239

Похожие вопросы