Войти

Показать полную графическую версию : [решено] Формирование массива с листа. Исправить код


Julian
18-11-2012, 10:19
На рабочем листе есть строка С(5,1,1,7,1,21,1). Надо написать функцию создающую квадратную матрицу G(i,j) по правилу:
G(i,j )= |c(i)-5c(j)| если i<=j+1
G(i,j) = c(i-j)+4sin(c(i))-7c(j) если i>j+1

Код функции, приведенной ниже, всем элементам G(i,j) присваивает значение 4. Помогите найти ошибку, пожалуйста.

Function g(c As Variant) As Double

Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim R() As Double
n = c.Columns.Count
ReDim R(n, n)

For i = 1 To n
For j = 1 To n
If i <= (j + 1) Then
R(i, j) = Abs(c(i) - 5 * c(j))
Else
R(i, j) = c(i - j) + 4 * Sin(c(i)) - 7 * c(j)
End If

Next j
Next i
g = R(n, n)
End Function

lxa85
18-11-2012, 11:56
Julian, лист пустой. Прикрепите другой документ, правильный.

Julian
19-11-2012, 09:02
lxa85 , спасибо.
Уже не надо, исправил код.

Drongo
19-11-2012, 15:49
Решение для потомков будет озвучено?

Julian
20-11-2012, 02:48
Если конечно потомки пожелают

Drongo
20-11-2012, 14:21
Вообще-то это правила хорошего тона, нашёл решение - поделись с другими. Согласитесь, неприятно ввест запрос в поисковую систему и найдя аналогичную тему с вопросом, тут же прочитать: спасибо я нашёл сам решение. Не стесняйтесь, здесь все свои. ;)

Julian
22-11-2012, 14:49
Уважаемый Drongo, правила это не законы. Я не собираюсь с кем-то делится, если меня даже никто не попросил об этом. Тем более что эту тему я создал для того чтобы помогли мне.
По поводу спасибо я нашел сам решение. Не вижу ничего неприятного. Повторюсь тему создал для того чтобы помогли мне. Я отписался что нашел, потому что не мог удалить эту тему, чтобы люди которые хотят помочь не тратили время зря. Да и тот кому надо как говорится найдет решение.
Вообще-то в правила хорошего тона не входит навязывать своё мнение!

Sub Procedure_1()
Dim i As Integer
Dim j As Integer
Dim n As Integer
Dim c() As Double
Dim R() As Double
Dim Rv As Excel.Range
Dim Cv As Excel.Range
Set Rv = Range("C5:I11")
Set Cv = Range("C1:I1")
n = Cv.Columns.Count
ReDim R(1 To n, 1 To n)
ReDim c(1 To n)

For i = 1 To n Step 1
c(i) = Cv.Cells(1, i).Value
Next i

For i = 1 To n Step 1
For j = 1 To n Step 1
If i <= (j + 1) Then
R(i, j) = Abs(c(i) - 5 * c(j))
ElseIf i > (j + 1) Then
R(i, j) = c(i - j) + 4 * Sin(c(i)) - 7 * c(j)
End If
Next j
Next i

For i = 1 To n
For j = 1 To n
Rv.Cells(i, j).Value = R(i, j)
Next j
Next i

End Sub

Drongo
22-11-2012, 18:18
Благодарю.




© OSzone.net 2001-2012