purebasic.info

PureBasic forum
Текущее время: Пн сен 16, 2019 1:31 am

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: Пн ноя 23, 2015 5:59 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1766
Откуда: Алматы
Благодарил (а): 17 раз.
Поблагодарили: 49 раз.
Пункты репутации: 5
насколько листиконгаджет надежная штука? сейчас массив выводится в него и по номеру в гаджете можно понять какую именно ячейку массива пользователь тыркнул. ну и производить какие-то операции...

сейчас же понадобилась сортировка и введение дополнительных строчек с информацией вне массива. я думаю теперь ориентироваться по тому какая это именно ячейка по первому столбику в листиконгаджета с номером, а не по номеру позиции в гаджете. насколько такой метод будет надежен? (как оказалось радость по работе моего шедевра преждевременна и нужны просто филигранные допиливания :) вот поэтому и нужны будут эти дополнительные строчки с промежуточными итогами и сортировка)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн ноя 23, 2015 6:13 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1766
Откуда: Алматы
Благодарил (а): 17 раз.
Поблагодарили: 49 раз.
Пункты репутации: 5
ага... губу раскатал... сложные массивы не сортирует. кхм...

или сортирует. я пользоваться не умею... как заставить сортировать то?
R300Reestr(1)\posinreestr()\matem[2]\cur$
в пустых скобках собственно должен быть номер ячейки, которую надо сортировать. но сортировать по параметру cur$

Код:
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
 
   Structure optionsII
     cur$
     true$
     flag$
   EndStructure
 
   Structure R300ArrayStructure  
     num$                  
     statuspost$        
     priznak$            
     matem.optionsII[8]
     vidpi$
     obpi$
     edizm$  
   EndStructure
 
   Structure R300ArrayStr  
     god.i
     kvartal.i
     fnover$
     Array posinreestr.R300ArrayStructure(0)  
   EndStructure
 
   Global Dim R300Reestr.R300ArrayStr(1)
 
SortStructuredArray(R300Reestr(r)\posinreestr(), #PB_Sort_Ascending, OffsetOf(R300ArrayStructure\matem[2]\optionsII\cur$), #PB_String)


не понятно кароче как это писать...


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн ноя 23, 2015 7:06 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11515
Благодарил (а): 4 раз.
Поблагодарили: 470 раз.
Попробуй так.
Код:
1
SortStructuredArray(R300Reestr(r)\posinreestr(), #PB_Sort_Ascending, OffsetOf(R300ArrayStructure\matem)+(SizeOf(optionsII)*2), #PB_String)


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пн ноя 23, 2015 7:58 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1766
Откуда: Алматы
Благодарил (а): 17 раз.
Поблагодарили: 49 раз.
Пункты репутации: 5
вроде работает... но как он знает что надо сортировать именно по \cur$? ведь в той последней структуре optionsII три параметра может быть.

а вобще я так понимаю надо все переделывать. сделать два разных главных массива, а саму структуру этих массивов попроще - больше параметров, но чтоб короче структура.


Вернуться наверх
 Профиль  
 
СообщениеДобавлено: Пт июн 15, 2018 4:18 pm 
Не в сети
профессор

Зарегистрирован: Пт фев 20, 2009 12:57 pm
Сообщений: 1766
Откуда: Алматы
Благодарил (а): 17 раз.
Поблагодарили: 49 раз.
Пункты репутации: 5
возвращаясь к теме массивов - пытаюсь сделать оптимизатор графики. изображение состоит из кубиков - тайлов - 8х8 пикселов. 4 битное изображение, то есть 32 байта. начинаю прогон изображения и сравниваю эти кубики путем comparememory. в итоге файл с графикой сжимается путем удаления повторяющихся фрагментов. (еще вопрос насколько корректно, ну до этого я еще не дошел. так-же недошел до случая, когда такой кубик может быть отзеркален по горизонтали или вертикали или обоих)

потом к этому файлу графики прилагается файл матрицы - где указан размер изображения, скажем 4х4 = 16 кубиков. и указаны номера этих кубиков из файла изображения. если в несжатом состоянии содержимое этого файла матрицы 1, 2, 3, 4,... и скажем 2 и 3 были одинаковые. после всех моих горе оптимизаций станет 1, 2, 2, 4. и вот тут мы доходим до собственно вопроса:
как массив 1, 2, 2, 4 сделать 1, 2, 2, 3? то есть чтоб без пропусков значений. ведь после оптимизации кубиков в файле графики останется всего 3 штуки, а в матрице требуется четвертый кубик.


***


хотя кажется родил. теперь надо продумать зеркала. если сейчас данные идут типа так:
1 2 3 4 5 6 7 8
9 10 11 12 13 14 15 16
это в ячейке массива, то я думаю надо еще создавать 3 указателя в этой же ячейке. в них довносить эти отзеркаленные варианты:
8 7 6 5 4 3 2 1
16 15...
а после запускать comparememory 4 раза, вместо 1 как раньше. через or.

теперь надо подумать как эту память отзеркалить...


***

какую-то дичь я с этим зеркалированием памяти сотворил :)

Код:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
Procedure.a MHHValueMirror(inp.a)
 
  ret.a
  tmp.a
 
  tmp = inp << 4
  ret = inp >> 4 + tmp
 
  ProcedureReturn ret
 
EndProcedure
 
Procedure MHHMemoryMirror(source.l, destin.l, mirx.a, miry.a)
 
  tmp.a
  x.a
  y.a
 
 
  If mirx
    ; горизонтальное зеркалирование
    If miry = 0
      ;{ только горизонтальное      
      i = 0      
      For y = 1 To 8
        For x = 1 To 4
          ; чтение из ресурсов
          tmp = PeekA(source+i)
 
          ; переворачивание значения
          tmp = MHHValueMirror(tmp)
 
          ; расчет места вставки
          PokeA(destin + ((y * 4) - x), tmp)
         
          i + 1
        Next
      Next
      ;}
    Else
      ; оба зеркалирования вместе
      i = 0
     
      For y = 1 To 8
        For x = 1 To 4
          ; чтение из ресурсов
          tmp = PeekA(source+i)
 
          ; переворачивание значения
          tmp = MHHValueMirror(tmp)
 
          ; расчет места вставки
          PokeA(destin + 31 - i, tmp)
         
          i + 1
        Next
      Next
     
    EndIf
  Else
    ;{ только вертикальное    
    i = 0      
    For y = 1 To 8
      For x = 1 To 4
        ; чтение из ресурсов
        tmp = PeekA(source+i)
       
        ; расчет места вставки
        PokeA(destin + 31 - (y * 4) + x, tmp)
         
        i + 1
      Next
    Next
    ;}
  EndIf
 
EndProcedure
 
source = AllocateMemory(32)
PokeA(source, $12)
PokeA(source+1, $34)
PokeA(source+2, $56)
PokeA(source+3, $78)
PokeA(source+4, $90)
PokeA(source+5, $12)
PokeA(source+6, $34)
PokeA(source+7, $56)
 
destin = AllocateMemory(32)
Debug "чтение"
tmp$ = ""
For i = 0 To 3
  tmp$ + Hex(PeekA(source+i))
Next
Debug tmp$
tmp$ = ""
For i = 4 To 7
  tmp$ + Hex(PeekA(source+i))
Next
Debug tmp$
 
Debug ""
Debug "переворот"
MHHMemoryMirror(source, destin, 1, 1)
 
Debug ""
Debug "чтение"
tmp$ = ""
For i = 0 To 3
  tmp$ + Hex(PeekA(destin+i))
Next
Debug tmp$
tmp$ = ""
For i = 4 To 7
  tmp$ + Hex(PeekA(destin+i))
Next
Debug tmp$
tmp$ = ""
For i = 8 To 11
  tmp$ + Hex(PeekA(destin+i))
Next
Debug tmp$
tmp$ = ""
For i = 12 To 15
  tmp$ + Hex(PeekA(destin+i))
Next
Debug tmp$
tmp$ = ""
For i = 16 To 19
  tmp$ + Hex(PeekA(destin+i))
Next
Debug tmp$
tmp$ = ""
For i = 20 To 23
  tmp$ + Hex(PeekA(destin+i))
Next
Debug tmp$
tmp$ = ""
For i = 24 To 27
  tmp$ + Hex(PeekA(destin+i))
Next
Debug tmp$
tmp$ = ""
For i = 28 To 31
  tmp$ + Hex(PeekA(destin+i))
Next
Debug tmp$
Debug "должно быть"
Debug "65432109"
Debug "87654321"



но вроде работает. надо понять как бы так схитрить, чтоб поменьше этим "шедевром" пользоваться.


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 35 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Bing [Bot] и гости: 12


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB