CMP - форум PRO игроков казино

Отзывы, советы экспертов и лучшие стратегии - для успешной игры в казино!

Excel - анализ спинов на рулетке казино

  • Mira
  • Mira аватар Автор темы
  • expert
  • expert
  • Сообщений: 725

Re: Excel - анализ спинов на рулетке казино

4 года 3 мес. назад - 4 года 3 мес. назад
#7
ПОИСК НОМЕРА В ГЕНЕРАЦИИ (ДИАПАЗОНЕ СПИНОВ)
А теперь нужно написать функцию поиска по строкам всех вхождений по заданному значению.  

Public Function  findAllPos(z as Range, n as Long) as Variant

которая пройдет по всему диапазону номеров в столбике A и для указанного номера соберет №№ спинов, на которых этот номер выпал.

На выходе будет массив произвольной длинны.

Желательно явно не указывать диапазон со спинами, пусть макрос сам определит где его начало и конец в указанной колонке A:A. В дальнейшем аргументом может быть не только вся колонка, а любой диапазон вертикальный или горизонтальный
Желательно обработать ошибку, если номера нет совсем.

Какие будут варианты решения? Готовую функцию alt2005 не использовать.
{\__/}
( • - •) Позволь пожелать
/つ ✿ Тебе Удачи!

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • LUCKY-13
  • LUCKY-13 аватар
  • admin
  • admin
  • Сообщений: 1568

Re: Excel - анализ спинов на рулетке казино

4 года 3 мес. назад
#8
'К листам будем обращаться через переменные
Dim Sheet1_WS, Sheet2_WS As Worksheet
'Переменная для прохождения срок на листе (в массиве)
Dim i As Long
'Массив, в котором будут храниться наши данные
Dim R_data As Variant
'Переменные последней строки и колонки
Dim FinalRow, FinalColumn As Long
'Можно инициализировать лист не по названию, а по порядковому номеру
'Set Sheet1_WS = Application.ThisWorkbook.Worksheet("Sheet1")
Set Sheet1_WS = Application.ThisWorkbook.Sheets(1)
Set Sheet2_WS = Application.ThisWorkbook.Sheets(2)
'Поиск последней не пустой строки в первой колонке
'Нужно, что бы данные не были отфильтрованы, иначе последняя строка будет последней строкой в фильтре
'Также в последней строке, в первой колонке, не должно быть пустой ячейки. Конечно, если в этой строке вообще есть данные. Иначе последней строкой будет последняя не пустая ячейка.
FinalRow = Sheet1_WS.Cells(Rows.Count, 1).End(xlUp).Row '=10 000
'Поиск последней не пустой колонки в первой строке
FinalColumn = Sheet1_WS.Cells(1, Columns.Count).End(xlToLeft).Column '=50
'Присваиваем массиву диапазон данных на Листе 1
R_data = Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn))
For i = 2 To FinalRow
    'Выполняем нужные нам операции с данными.
    'Проверяем, что бы не было деления на ноль.
    'Предполагается, что в колонке 2 и 3 стоят числовые данные
    'Иначе потребуется обработка ошибок
    If R_data(i, 3) <> 0 Then
        R_data(i, FinalColumn) = R_data(i, 2) / R_data(i, 3)
    End If
Next i
'Копируем данные из массива обратно на Лист1
'Перед этим очищаем данные на листе (если есть форматирование или формулы, то лучше Sheet1_WS.Cells.ClearContents)
Sheet1_WS.Cells.Delete
Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn)) = R_data
'Копируем данные на Лист2, копируем первые 10 колонок.
Sheet2_WS.Range(Sheet2_WS.Cells(1, 1), Sheet2_WS.Cells(FinalRow, 10)) = R_data
'Закрываем книгу и сохраняем её
Workbooks(Application.ThisWorkbook.Name).Close SaveChanges:=True

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • alt2005
  • alt2005 аватар
  • expert
  • expert
  • Сообщений: 503

Re: Excel - анализ спинов на рулетке казино

4 года 3 мес. назад - 4 года 3 мес. назад
#9
Наcколько я понял, LUCKY13 использует процедуру типа SUB, а не функцию типа FUNCTION. Отличия в том, что процедура работает побыстрее (как я думаю), но ее нельзя вызвать как функцию ячейки типа =getResult(....)
Функцию же можно вызвать так же,  как и стандартную функцию EXCEL. Но она не может изменять другие ячейки, кроме той, их которой вызвана (значения функции возвращаются в ячейку вызова автоматически). И такую функцию можно копировать, но работает это медленно. 
Конструкции вида 
Dim Sheet1_WS, Sheet2_WS As Worksheet
Dim R_data As Variant
Set Sheet1_WS = Application.ThisWorkbook.Sheets(1)
R_data = Sheet1_WS.Range(Sheet1_WS.Cells(1, 1), Sheet1_WS.Cells(FinalRow, FinalColumn))
For i = 2 To FinalRow
    If R_data(i, 3) <> 0 Then
....
я никогда не использовал, но попробовал только что в том файле. Время работы не изменилось.

А вот что можно сделать для ускорения - нужно загрузить данные с листа в память, типа массива. Но глобальных массивов в VBA нет, поэтому нужно создать классы для каждого нужного столбца, и массивы объявить внутри этих классов. А потом создать инстанции (экземпляры) нужных классов, один раз заполнить их, и далее просто вытаскивать значения из массивов при помощи метода, например getValue(n) где n - номер элемента в массиве (проще всего это может быть номер строки).
Вот код для классов

1. Класс clsSheet для столбца
Option Explicit
Dim mas(arraySize) As Long
Public Function setValues(sheet As String, column As Long)
 Dim i As Long
 Dim value As Variant
 '
 For i = 1 To arraySize
   On Error GoTo erro
   value = Worksheets(sheet).Cells(i, column)
   If IsNumeric(value) Then
    mas(i) = value
   End If
erro:
 Next i
End Function
'
Public Function getValue(row As Long) As Long
 getValue = mas(row)
End Function


Класс clsMas для хранения объектов clsSheet: 
Option Explicit
Dim classes(10) As clsSheet

Public Function setClass(classID As Long, sheet As String, Optional column = 0)
 Dim cNew As clsSheet
 Dim col As Long
 '
 If column = 0 Then
  col = classID
 Else
  col = column
 End If
 Set cNew = New clsSheet
 Call cNew.setValues(sheet, col)
 Set classes(classID) = cNew
End Function
'
Public Function getClass(classID As Long) As clsSheet
 Set getClass = classes(classID)
End Function


Ну и как эту хрень использовать


 Set cMas = New clsMas - создание контейнера классов
 Call cMas.setClass(1, "SS1") - создание экземпляра класса для столбца 1, SS1 - название листа (sheet)

В функции  getResult есть оператор
Set clasZ = cMas.getClass(1)
он нужен для создания 1-го столбца, где живут номера.

А вот тут вместо чтения с листа (оно закомментировано), читаем значения номера из класса. 
'   za = Worksheets(z.Worksheet.Name).Cells(i, 1)
   za = clasZ.getValue(i)

Использование классов ускоряет расчеты примерно в 2 раза (на моем компе) по сравнению с перебором значений на листе. Но нужно в начале работы создать объект класса и заполнить его значениями с листа (процедура ausfullen). Причем если в столбец загнать другие данные, то опять нужно вызывать процедуру "ausfullen"

Вложения:

Спасибо сказали: DLK

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • WoodForest
  • WoodForest аватар
  • VIP
  • VIP
  • Сообщений: 2712

Re: Excel - анализ спинов на рулетке казино

4 года 3 мес. назад
#10
Вот вы заморочились, обычному игроку это сложно и непонятно, причем нет никаких гарантий того, что объявленная формула будет считать именно так, как это написано в описании Excel, я уже неоднократно приводил примеры несовпадения реальных вычислений с описанием того, как именно такие вычисления происходят, особенно в тех случаях когда надо считать большие массивы... Уверен, что для большинства майнеров, готовых на приобретение дополнительных знаний для того, чтобы использовать понятный протокол статистики своих действий, нужен простой способ, изложенный в методическом руководстве, который понятен любому школьнику с 5-6 класса. Даже я большую часть специально разработанных мной! формул на основе функций не держу в голове и не помню, поскольку, можно прочитать синтаксис и сразу понять чего откуда берется для вычислений. Поймите простую истину - программист (разработчик) не может быть профессиональным майнером, и наоборот профи не может быть программистом Одновременно! 
"Человек ноября" к\ф, где гл. герой профи киллер ( актер Пирс Броснан), говорит другому такому же коллеге, которого когда-то стажировал, простую истину - "ты можешь быть или профи киллером или хорошим человеком, но нельзя быть и тем и другим одновременно" (Палач не может быть одновременно доктором - если уже совсем откровенно).
Народ ждет от нас простое и понятное методическое руководство с готовым набором рабочих формул с проверенным синтаксисом, прочитав которое он сможет открыть любой excel начиная с 2010, построить таблицы и успешно майнить! Т.е. все что он готов изучить - это методическое руководство типа - excel своими руками (сделай сам и получи прибыль)... И только единицы возможно смогут захотеть и заморочиться в глубоком изучении excel и VBA, чтобы модернизировать под свои! интересы уже готовый продукт.
Спасибо сказали: Jokk Ma

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • DLK
  • DLK аватар
  • moder
  • moder
  • Сообщений: 2467

Re: Excel - анализ спинов на рулетке казино

4 года 3 мес. назад
#11
Эта тема как раз для тех, кто хочет позаморачиваться.
Трехэтажные формулы Excel требуют еще гору дополнительных колонок для хранения промежуточных результатов. На уровне макросов все решается проще и быстрее с поиском и переборами. Когда говорим про имитацию стратегии с условиями, выборами, какими-то правилами, то сделать это только формулами очень громоздко и часто нереально.
Если вы в казино ставите на красное, а вам упорно не везёт — попробуйте на красное положить!
Спасибо сказали: WoodForest

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

  • WoodForest
  • WoodForest аватар
  • VIP
  • VIP
  • Сообщений: 2712

Re: Excel - анализ спинов на рулетке казино

4 года 3 мес. назад
#12
На счет проще и быстрее, есть вопросы. Может для мощных компьютеров - да, но для обычных ноутов среднего класса, excel требует много ресурсов и свободного пространства на жестком диске, под виндой это вообще нереально долго...

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

 

E pluribus unum

 

Sup: admin@casino-mining.com

Copyright © 2011-2024 ESPT GO LIMITED Reg. : HE 370907

Vasili Michailidi, 9, 3026, Limassol, Cyprus, phone: +35796363497

 

Excellent Teamwork