Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Массивы

1 view
Skip to first unread message

Andrey Rapakov

unread,
Feb 20, 2006, 4:34:34 PM2/20/06
to
Привет,All!

Помогите 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...

Andrei Andreyanau

unread,
Feb 21, 2006, 3:23:09 AM2/21/06
to
Привет Andrey,

Во вторник, 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

Andrei Andreyanau

unread,
Feb 21, 2006, 3:14:13 AM2/21/06
to
---

Alexandr Galitskij

unread,
Feb 22, 2006, 2:16:52 AM2/22/06
to
Здоpовица Вам, Andrey!

И был 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гилий)

Andrei Andreyanau

unread,
Feb 22, 2006, 2:42:14 AM2/22/06
to
Привет Andrey,

Во вторник, 21 февраля 2006, Andrey Rapakov wrote to All:

AR> A(i, j) = InputBox("A(" + CStr(i) + "," + CStr(j) + ")=")

эта функция работает у меня с тем куском кода, что ты дал + то, что я предложил
и даже ещё что-то считает.


Andrei Andreyanau

Andrey Rapakov

unread,
Feb 22, 2006, 4:00:06 PM2/22/06
to
21 Февраля 2006 11:23, _Andrei Andreyanau_ писал /Andrey Rapakov/:
Привет,Andrei!

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отики.

Andrei Andreyanau

unread,
Feb 23, 2006, 2:37:43 AM2/23/06
to
Привет Andrey,

В четверг, 23 февраля 2006, Andrey Rapakov wrote to Andrei Andreyanau:

AR> ЗЫ Сорри, за плохое знание алгебры, можно ли делить матрицы друг на
AR> друга
AR> ( в этой проге ведь эти массивы и есть матрицы)?

Я уже не помню. Давно это было. Вроде бы нет. Можно только умножать, вычитать и
складывать, а деление вроде бы тоже реализуется через умножение, т.е. одну
матрицу необходимо умножить на дробь, в чилителе которой стоит единица, а в
знаменателе матрица, на которую надо поделить первую матрицу, или же (что тоже
самое, что и предыдущее), если предположить, что матрица 1 это А, а матрица 2
это Б, и тебе надо разделить матрицу А на матрицу Б, то операция будет
выглядеть так: А*Б^-1.

Andrei Andreyanau

0 new messages