В каких строках допущены ошибки??

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

Ответить
Александра Нехорошев
Сообщения: 2
Зарегистрирован: 20 июн 2013, 15:45

При помощи датчика случайных чисел получить прямоугольную матрицу A, имеющую три столбца и N строк (N – целое случайное число в диапазоне от 9 до 20). Первые два столбца заполнить натуральными случайными числами в диапазоне от 30 до 400. В третий столбец записать наибольший общий делитель двух чисел, стоящих в первом и втором столбцах. Полученную матрицу вывести в окно отладки.



Sub массив()
Sheets("Лист1").Select
Sheets("Лист1").Range("a1:Q100").Clear
Dim a() As Byte, i As Byte, j As Byte, n As Byte, m As Byte
n = InputBox("Введите количество строк"): m = InputBox("Введите количество столбцов")
ReDim a(n, m)
Randomize Timer
For i = 1 To n
For j = 1 To m
a(i, j) = Rnd * 9 + 6
Next j: Next i
For i = 1 To n
For j = 1 To m
Cells(i + 1, j + 1) = a(i, j)
If a(i, j) Mod 5 = 0 Then Cells(i + 1, j + 1).Interior.ColorIndex = 33
Next j: Next i
End Sub
Дмит
Сообщения: 145
Зарегистрирован: 27 ноя 2004, 22:23
Контактная информация:

Ваш код малость от другой задачи. У меня получилось так:

Код: Выделить всё

Sub массив()
 Dim A() As Integer, i As Byte, j As Byte, m As Byte
  Randomize Timer
  m = Rnd * 12 + 9
 ReDim A(3, m)
 For j = 1 To m
 For i = 1 To 2
    A(i, j) = Rnd * 371 + 30
 Next i
    A(3, j) = NOD(A(1, j), A(2, j))
    Debug.Print A(1, j), A(2, j), A(3, j)
 Next j
 Sheets("Лист1").Range("A1:C1").Clear
End Sub
Function NOD(x As Integer, y As Integer) As Integer
    Sheets("Лист1").Range("A1") = x
    Sheets("Лист1").Range("B1") = y
    Sheets("Лист1").Range("C1").FormulaR1C1 = "=НОД(RC[-2],RC[-1])"
    NOD = Sheets("Лист1").Range("C1").Value
End Function
Дмит
Сообщения: 145
Зарегистрирован: 27 ноя 2004, 22:23
Контактная информация:

Или проще:

Код: Выделить всё

Sub Массив()
 Dim A() As Integer, j As Byte, m As Byte
  Randomize Timer
  m = Rnd * 12 + 9
 ReDim A(3, m)
 For j = 1 To m
    A(1, j) = Rnd * 371 + 30
    A(2, j) = Rnd * 371 + 30
    A(3, j) = gcd(A(1, j), A(2, j))
 Next j
 For j = 1 To m
    Debug.Print A(1, j), A(2, j), A(3, j)
 Next j
End Sub
в первом случае подключен "пакет анализа".
во втором "ANALYSIS TOOLPAK - VBA" и в Tools->References установите флажок на atpvbaen.xls
Ответить