Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   [решено] Формирование массива с листа. Исправить код (http://forum.oszone.net/showthread.php?t=247152)

Julian 18-11-2012 10:19 2027602

Формирование массива с листа. Исправить код
 
На рабочем листе есть строка С(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 2027629

Julian, лист пустой. Прикрепите другой документ, правильный.

Julian 19-11-2012 09:02 2028067

lxa85 , спасибо.
Уже не надо, исправил код.

Drongo 19-11-2012 15:49 2028280

Решение для потомков будет озвучено?

Julian 20-11-2012 02:48 2028691

Если конечно потомки пожелают

Drongo 20-11-2012 14:21 2028914

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

Julian 22-11-2012 14:49 2030333

Уважаемый 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 2030547

Благодарю.


Время: 17:35.

Время: 17:35.
© OSzone.net 2001-