Помогите plz создать ( наверное на ваш взгяд очень простую) прогу:
Даны три двумерных массива произвольной размерности (A1,A2, A3). Hужно
сформировать третий C() по формуле:
C (i, j) = ( sin(A1(i,j)) + cos(A2(i,j)) )/sqr( ( A3(i,j) )^2 +1) Также дана
форма - 3 textbox'a :
Text1 - задается количество строк,
Text2 -задается количество столбцов,
Text3 - вывод C(),
ну и еще Command и 2 labels.
PS В коде нужно создать процедуру ввода массивов (vvod) и выполнить печать
массива в виде функции
Далее кидаю код, в котором IMHO что-то не так :(
Dim A1() As Single, A2() As Single, A3() As Single, C() As Single, _
n As Integer, m As Integer, i As Integer, j As Integer
____________________________________________________________________
Public Sub vvod(A() As Single, n As Integer, m As Integer)
n = CInt(Text1.Text)
m = CInt(Text2.Text)
ReDim A(1 To n, 1 To m) As Single
For i = 1 To n
For j = 1 To m
A(i, j) = InputBox("A(" + CStr(i) + "," + CStr(j) + ")=")
Next j
Next i
End Sub
Function func As Single
ReDim C(1 To m, 1 To n) As Single
For i = 1 To m
For j = 1 To n
func = ( Sin(A1(i,j)) + Cos(A2(i,j)) ) / Sqr((A3(i,j)) ^ 2 + 1)
Next j
Next i
Text3.Text = CStr(func) + vbCrLf
End Function
Private Sub Command1_Click()
Call vvod(A1, n, m)
Call vvod(A2, n, m)
Call vvod(A3, n, m)
Call func
End Sub
С уважением, Andrew.
... Чтоб ты свопился на однy дискетy...
Во вторник, 21 февраля 2006, Andrey Rapakov wrote to All:
AR> For i = 1 To n
AR> For j = 1 To m
AR> A(i, j) = InputBox("A(" + CStr(i) + "," + CStr(j) + ")=")
AR> Next j
AR> Next i
Hе вдаваясь в подробности, у тебя тут происходит "зацикливание", так я понимаю?
Вероятно, тебе надо при достижении какого-то значения останавливать цикл, иначе
будет постоянно выдаваться запрос на ввод данных. Может и неправильно, но, как
вариант, остановить ты сможешь добавив примерно следующее:
Do While i = n
Do While j = m
A(i, j) = InputBox("A(" + CStr(i) + "," + CStr(j) + ")=")
'вот тут обработка события останова цикла, но я не очень уверен, что это
подойдёт
if i = n and j = m then exit sub
Loop
Loop
Andrei Andreyanau
И был pазговоp _21 февpаля 2006_ по вpемени в _00:34_, *Andrey Rapakov* к *All*
о "Массивы"
AR> A(i, j) = InputBox("A(" + CStr(i) + "," + CStr(j) + ")=")
Скажи по cекpетy, y тебя эта cтpока отдельно pаботает?
Ухожy не пpощаясь, Alexandr.
Чеpти что! ... и сбокy Батник.
... Сокpытие зла питает и оживляет его. (Веpгилий)
Во вторник, 21 февраля 2006, Andrey Rapakov wrote to All:
AR> A(i, j) = InputBox("A(" + CStr(i) + "," + CStr(j) + ")=")
эта функция работает у меня с тем куском кода, что ты дал + то, что я предложил
и даже ещё что-то считает.
Andrei Andreyanau
AA> Hе вдаваясь в подробности, у тебя тут происходит "зацикливание", так
AA> я
AA> понимаю?
Hет, как раз "зацикливания" не происходит, просто прога почему-то считает не
все массивы (я вводил произвольные числа) : (
AA> Вероятно, тебе надо при достижении какого-то значения
AA> останавливать цикл, иначе будет постоянно выдаваться запрос на ввод
AA> данных. Может и неправильно, но, как вариант, остановить ты сможешь
AA> добавив примерно следующее:
AA> Do While i = n
AA> Do While j = m
AA> A(i, j) = InputBox("A(" + CStr(i) + "," + CStr(j) + ")=")
AA> 'вот тут обработка события останова цикла, но я не очень уверен, что
AA> это подойдёт if i = n and j = m then exit sub Loop Loop
Дело в том, что нужно использовать цикл For / Next.
ЗЫ Сорри, за плохое знание алгебры, можно ли делить матрицы друг на друга ( в
этой проге ведь эти массивы и есть матрицы)?
С уважением, Andrew.
... Windows: новый ypовень интеpактивной эpотики.
В четверг, 23 февраля 2006, Andrey Rapakov wrote to Andrei Andreyanau:
AR> ЗЫ Сорри, за плохое знание алгебры, можно ли делить матрицы друг на
AR> друга
AR> ( в этой проге ведь эти массивы и есть матрицы)?
Я уже не помню. Давно это было. Вроде бы нет. Можно только умножать, вычитать и
складывать, а деление вроде бы тоже реализуется через умножение, т.е. одну
матрицу необходимо умножить на дробь, в чилителе которой стоит единица, а в
знаменателе матрица, на которую надо поделить первую матрицу, или же (что тоже
самое, что и предыдущее), если предположить, что матрица 1 это А, а матрица 2
это Б, и тебе надо разделить матрицу А на матрицу Б, то операция будет
выглядеть так: А*Б^-1.
Andrei Andreyanau