Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скользящий массив / 16 сообщений из 16, страница 1 из 1
23.07.2009, 14:44
    #36105623
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Имеется два больших массива
Код: plaintext
1.
dim X( 100000 )
dim Y( 100000 )
Эти массивы напрямую не используются, а используются через малые
Код: plaintext
1.
dim x1( 2000 )
dim y1( 2000 )
Часть информации копируется в малые массивы,
Код: plaintext
1.
2.
3.
4.
i1= 121 
for i= 0  to  2000 
x1(i)=X(i+i1)
y1(i)=Y(i+i1)
Next 
и они, в свою очередь передаются объекту
Код: plaintext
1.
obj1.x=x1
obj1.y=y1
Т.е. малые массивы представляют собой как-бы скользящее окно которое передвигается вдоль большого и массива и предает данные в объект.
Хотелось-бы обойтись без копирования и напрямую передавать данные в объект из большого массива ( объект неизменяем ).
С указателями все это решалось бы просто. Здесь даже не знаю, возможно ли.
...
Рейтинг: 0 / 0
23.07.2009, 14:51
    #36105643
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Я бы попробовал-бы сделать класс, который эмулировал-бы твоё скользящее окно. Перед передачей устанавливаются границы
окна и передавать объект окна, а обработку переделать с учетом того, что это объект окна, а не массив, потом границы
сдвигаются и процесс повторяется. Может быть даже обошлось-бы без дополнительных массивов.


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.07.2009, 15:26
    #36105759
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Игорь Горбонос
Я бы попробовал-бы сделать класс, который эмулировал-бы твоё скользящее окно. Перед передачей устанавливаются границы
окна и передавать объект окна, а обработку переделать с учетом того, что это объект окна, а не массив, потом границы
сдвигаются и процесс повторяется. Может быть даже обошлось-бы без дополнительных массивов.
Спасибо. Такой эмулирующий класс сделать несложно. Будет что-то вида Class.x(i) и Class.y(i)
Скользячка хорошая. Задаешь положение и ширину окна и все типа имеешь.
Но вот этот объект, кот obj1 , сам определяет размер переданного массива, т.е. способов указать размер не существует. Воспримет ли он такую конструкцию?
Код: plaintext
obj1.x=Class.x
К сожалению, попробовать это далеко не 5 мин. :(
...
Рейтинг: 0 / 0
23.07.2009, 15:57
    #36105862
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
> Автор: YUBA
> Но вот этот объект, кот obj1, сам определяет размер переданного массива, т.е. способов указать размер не
> существует. Воспримет ли он такую конструкцию?
>
> obj1.x=Class.xК сожалению, попробовать это далеко не 5 мин. :(

я имел в виду переделать именно обработку внутри obj1. Что-бы он не сам определял размер, а получал из класса окна. и я
имел в виду что x в obj1 это должна быть переменная типа окна. И этот фрагмент будет выглядеть так:
Код: plaintext
1.
Set obj1.x = clsWindow
а внутри obj1 нужно скорректировать работу с x как с объектом


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.07.2009, 18:29
    #36106391
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Игорь Горбонос
> Автор: YUBA
> Но вот этот объект, кот obj1, сам определяет размер переданного массива, т.е. способов указать размер не
> существует. Воспримет ли он такую конструкцию?
>
> obj1.x=Class.xК сожалению, попробовать это далеко не 5 мин. :(

я имел в виду переделать именно обработку внутри obj1. Что-бы он не сам определял размер, а получал из класса окна. и я
имел в виду что x в obj1 это должна быть переменная типа окна. И этот фрагмент будет выглядеть так:
Код: plaintext
1.
Set obj1.x = clsWindow
а внутри obj1 нужно скорректировать работу с x как с объектом
Невозможно. obj1 - неизменяем, это DLL. Что внутри никому неизвестно, кроме авторов. Сразу, скажу, что используется нештатно, т.е. взят из другой программы. Но работает и устраивает.
...
Рейтинг: 0 / 0
23.07.2009, 18:34
    #36106407
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Игорь Горбонос, Естественно, все коды не настоящие, только иллюстрация к проблеме.
...
Рейтинг: 0 / 0
23.07.2009, 19:01
    #36106455
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
YUBA,

Используйте вместо массивов словари и сделайте свойство вашего класса типа словарь. Тогда через Let, Set сразу все и передадите вашему объекту.

Успехов
...
Рейтинг: 0 / 0
23.07.2009, 19:09
    #36106465
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
> Автор: VladConn

Не Влад, это не получится, т.к. obj1 - это сторонний СОМ-объест, к внутренностям которого он не имеет доступа

2 YUBA
А вот воспользоватся советом
Влада
и попробовать копировать нужные участки массива можно попробовать


Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
23.07.2009, 19:46
    #36106507
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Игорь Горбонос
> Автор: VladConn
Не Влад, это не получится, т.к. obj1 - это сторонний СОМ-объест, к внутренностям которого он не имеет доступа
2 YUBA
А вот воспользоватся советом
Влада
и попробовать копировать нужные участки массива можно попробовать
Он и так копируется, в цикле, а хотелось бы ссылкой, типа (код неправильный)
Код: plaintext
1.
2.
3.
4.
5.
6.
dim X( 100000 )
dim Y( 100000 )
dim x1( 2000 )
dim y1( 2000 )
x1=Y( 123 )
y1=Y( 123 )
Примерно так это бы решилось с указателями.
Дурь конечно, и так все дышит.
...
Рейтинг: 0 / 0
23.07.2009, 20:28
    #36106559
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
YUBA,
конечно, баловство всё это, но можно создать структуру SAFEARRAY и заполнить её так, чтобы она имела свои границы массива и указывала на данные (с произвольного места) существующего массива. В таком духе.
...
Рейтинг: 0 / 0
23.07.2009, 21:29
    #36106607
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
БенедиктYUBA,
конечно, баловство всё это, .... Безусловно. :) Но если проблемы с массивами решить, то с листов Екселя можно убрать большую часть информации. Иначе уже получается такой винегрет из массивов, скрытых листов, БД и пр. удовольствия и бесконечного копирования туда и обратно.
Там, в Екселе, и так все медленно, но пользовательский интерфейс уж оч хорош, отказаться невозможно. :)
...
Рейтинг: 0 / 0
24.07.2009, 04:10
    #36106835
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Ты поставь задачу, возможно это можно решить не таким образом?
...
Рейтинг: 0 / 0
24.07.2009, 04:42
    #36106837
SashaM
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Ты поставь задачу, возможно это можно решить не таким образом?
...
Рейтинг: 0 / 0
24.07.2009, 12:42
    #36107500
Бенедикт
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Наверняка можно решить и другими способами, но чтобы довести способ с формированием SAFEARRAY до чего-то, что можно пощупать руками:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
'Описания см. по ссылке выше
Private Sub CreateWindowArray( _
   SourceArray() As Double, WindowArray() As Double, saWindow As SAFEARRAY1VT, _
   ByVal WindowPos As Long, ByVal WindowLBound As Long, _
   ByVal WindowLength As Long)
 Dim ppsaWindow As Long
 
 saWindow.vtType = VarType(SourceArray(LBound(SourceArray)))
 With saWindow.sa
    .cDims =  1 
    .fFeatures = FADF_HAVEVARTYPE Or FADF_FIXEDSIZE
    .cbElements = LenB(SourceArray(LBound(SourceArray)))
    '.cLocks = 1
    .pvData = VarPtr(SourceArray(WindowPos))
    With .rgsabound( 0 )
       .lLbound = WindowLBound
       .cElements = WindowLength
    End With
 End With
    
 ppsaWindow = ArrPtr(WindowArray())
 CopyMemory ByVal ppsaWindow, VarPtr(saWindow.sa), LenB(ppsaWindow)
End Sub

Private Sub ClearWindowArray(WindowArray() As Double)
 Dim ppsaWindow As Long
 ppsaWindow = ArrPtr(WindowArray())
 CopyMemory ByVal ppsaWindow,  0 &, LenB(ppsaWindow)
End Sub

Private Sub MoveWindowArray( _
   SourceArray() As Double, saWindow As SAFEARRAY1VT, _
   ByVal WindowPos As Long)
 saWindow.sa.pvData = VarPtr(SourceArray(WindowPos))
End Sub

Private Sub Test2()
 Dim X( 100 ) As Double
 Dim Y( 100 ) As Double
 Dim x1() As Double
 Dim y1() As Double
 Dim i As Long
 Dim sax1 As SAFEARRAY1VT
 Dim say1 As SAFEARRAY1VT
 
 'Заполнение больших массивов
 For i = LBound(X) To UBound(X)
    X(i) = i
 Next i
 For i = LBound(Y) To UBound(Y)
    Y(i) =  1  + i /  1000 
 Next i
 
 'Наложение "окон"
 CreateWindowArray X(), x1(), sax1,  40 ,  0 ,  21 
 CreateWindowArray Y(), y1(), say1,  32 ,  1 ,  10 
 
 'Использование "окон"
 For i = LBound(x1) To UBound(x1)
    Debug.Print i, x1(i)
 Next i
 For i = LBound(y1) To UBound(y1)
    Debug.Print i, Format$(y1(i), "0.000")
 Next i
 
 'Перемещение имеющегося "окна"
 MoveWindowArray X(), sax1,  13 
 
 'Использование перемещённого "окна"
 For i = LBound(x1) To UBound(x1)
    Debug.Print i, x1(i)
 Next i
 
 'Уничтожение "окон"
 ClearWindowArray x1()
 ClearWindowArray y1()
End Sub

Private Sub Command2_Click()
 Test2
End Sub
...
Рейтинг: 0 / 0
24.07.2009, 21:54
    #36108897
YUBA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
Бенедикт, Спасибо, в пон-к буду разбираться. Нет, наверно до среды, в воскресенье на дачу.
...
Рейтинг: 0 / 0
30.07.2009, 19:48
    #36118980
Сергеевич
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Скользящий массив
почитай "сущность массивов в VB" Гергерт эту статью видел на сайтах VBNet.ru,vbstreets.ru удачи в статье он ковыряется с указателями и в примере решает похожую задачку и еще раз удачи
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скользящий массив / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]